Auto merge of #81451 - nikic:llvm-12, r=nagisa
Upgrade to LLVM 12 This implements the necessary adjustments to make rustc work with LLVM 12. I didn't encounter any major issues so far. r? `@cuviper`
This commit is contained in:
commit
409920873c
57 changed files with 402 additions and 101 deletions
|
@ -430,7 +430,13 @@ impl<'tcx> FnAbiLlvmExt<'tcx> for FnAbi<'tcx, Ty<'tcx>> {
|
|||
PassMode::Indirect { ref attrs, extra_attrs: _, on_stack } => {
|
||||
assert!(!on_stack);
|
||||
let i = apply(attrs);
|
||||
llvm::Attribute::StructRet.apply_llfn(llvm::AttributePlace::Argument(i), llfn);
|
||||
unsafe {
|
||||
llvm::LLVMRustAddStructRetAttr(
|
||||
llfn,
|
||||
llvm::AttributePlace::Argument(i).as_uint(),
|
||||
self.ret.layout.llvm_type(cx),
|
||||
);
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
@ -486,8 +492,13 @@ impl<'tcx> FnAbiLlvmExt<'tcx> for FnAbi<'tcx, Ty<'tcx>> {
|
|||
PassMode::Indirect { ref attrs, extra_attrs: _, on_stack } => {
|
||||
assert!(!on_stack);
|
||||
let i = apply(attrs);
|
||||
llvm::Attribute::StructRet
|
||||
.apply_callsite(llvm::AttributePlace::Argument(i), callsite);
|
||||
unsafe {
|
||||
llvm::LLVMRustAddStructRetCallSiteAttr(
|
||||
callsite,
|
||||
llvm::AttributePlace::Argument(i).as_uint(),
|
||||
self.ret.layout.llvm_type(bx),
|
||||
);
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
|
|
@ -304,6 +304,7 @@ impl AsmBuilderMethods<'tcx> for Builder<'a, 'll, 'tcx> {
|
|||
} else if options.contains(InlineAsmOptions::READONLY) {
|
||||
llvm::Attribute::ReadOnly.apply_callsite(llvm::AttributePlace::Function, result);
|
||||
}
|
||||
llvm::Attribute::WillReturn.apply_callsite(llvm::AttributePlace::Function, result);
|
||||
} else if options.contains(InlineAsmOptions::NOMEM) {
|
||||
llvm::Attribute::InaccessibleMemOnly
|
||||
.apply_callsite(llvm::AttributePlace::Function, result);
|
||||
|
|
|
@ -104,6 +104,10 @@ fn strip_x86_address_spaces(data_layout: String) -> String {
|
|||
data_layout.replace("-p270:32:32-p271:32:32-p272:64:64-", "-")
|
||||
}
|
||||
|
||||
fn strip_powerpc64_vectors(data_layout: String) -> String {
|
||||
data_layout.replace("-v256:256:256-v512:512:512", "")
|
||||
}
|
||||
|
||||
pub unsafe fn create_module(
|
||||
tcx: TyCtxt<'_>,
|
||||
llcx: &'ll llvm::Context,
|
||||
|
@ -119,6 +123,9 @@ pub unsafe fn create_module(
|
|||
{
|
||||
target_data_layout = strip_x86_address_spaces(target_data_layout);
|
||||
}
|
||||
if llvm_util::get_version() < (12, 0, 0) && sess.target.arch == "powerpc64" {
|
||||
target_data_layout = strip_powerpc64_vectors(target_data_layout);
|
||||
}
|
||||
|
||||
// Ensure the data-layout values hardcoded remain the defaults.
|
||||
if sess.target.is_builtin {
|
||||
|
|
|
@ -162,7 +162,7 @@ pub(crate) fn write_filenames_section_to_buffer<'a>(
|
|||
pub(crate) fn write_mapping_to_buffer(
|
||||
virtual_file_mapping: Vec<u32>,
|
||||
expressions: Vec<CounterExpression>,
|
||||
mut mapping_regions: Vec<CounterMappingRegion>,
|
||||
mapping_regions: Vec<CounterMappingRegion>,
|
||||
buffer: &RustString,
|
||||
) {
|
||||
unsafe {
|
||||
|
@ -171,7 +171,7 @@ pub(crate) fn write_mapping_to_buffer(
|
|||
virtual_file_mapping.len() as c_uint,
|
||||
expressions.as_ptr(),
|
||||
expressions.len() as c_uint,
|
||||
mapping_regions.as_mut_ptr(),
|
||||
mapping_regions.as_ptr(),
|
||||
mapping_regions.len() as c_uint,
|
||||
buffer,
|
||||
);
|
||||
|
|
|
@ -132,6 +132,7 @@ pub enum Attribute {
|
|||
ReadNone = 26,
|
||||
InaccessibleMemOnly = 27,
|
||||
SanitizeHWAddress = 28,
|
||||
WillReturn = 29,
|
||||
}
|
||||
|
||||
/// LLVMIntPredicate
|
||||
|
@ -239,6 +240,7 @@ pub enum TypeKind {
|
|||
Token = 16,
|
||||
ScalableVector = 17,
|
||||
BFloat = 18,
|
||||
X86_AMX = 19,
|
||||
}
|
||||
|
||||
impl TypeKind {
|
||||
|
@ -263,6 +265,7 @@ impl TypeKind {
|
|||
TypeKind::Token => rustc_codegen_ssa::common::TypeKind::Token,
|
||||
TypeKind::ScalableVector => rustc_codegen_ssa::common::TypeKind::ScalableVector,
|
||||
TypeKind::BFloat => rustc_codegen_ssa::common::TypeKind::BFloat,
|
||||
TypeKind::X86_AMX => rustc_codegen_ssa::common::TypeKind::X86_AMX,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -674,9 +677,7 @@ pub mod coverageinfo {
|
|||
/// array", encoded separately), and source location (start and end positions of the represented
|
||||
/// code region).
|
||||
///
|
||||
/// Aligns with [llvm::coverage::CounterMappingRegion](https://github.com/rust-lang/llvm-project/blob/rustc/11.0-2020-10-12/llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h#L224-L227)
|
||||
/// Important: The Rust struct layout (order and types of fields) must match its C++
|
||||
/// counterpart.
|
||||
/// Matches LLVMRustCounterMappingRegion.
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
#[repr(C)]
|
||||
pub struct CounterMappingRegion {
|
||||
|
@ -1073,6 +1074,7 @@ extern "C" {
|
|||
pub fn LLVMRustAddDereferenceableAttr(Fn: &Value, index: c_uint, bytes: u64);
|
||||
pub fn LLVMRustAddDereferenceableOrNullAttr(Fn: &Value, index: c_uint, bytes: u64);
|
||||
pub fn LLVMRustAddByValAttr(Fn: &Value, index: c_uint, ty: &Type);
|
||||
pub fn LLVMRustAddStructRetAttr(Fn: &Value, index: c_uint, ty: &Type);
|
||||
pub fn LLVMRustAddFunctionAttribute(Fn: &Value, index: c_uint, attr: Attribute);
|
||||
pub fn LLVMRustAddFunctionAttrStringValue(
|
||||
Fn: &Value,
|
||||
|
@ -1108,6 +1110,7 @@ extern "C" {
|
|||
pub fn LLVMRustAddDereferenceableCallSiteAttr(Instr: &Value, index: c_uint, bytes: u64);
|
||||
pub fn LLVMRustAddDereferenceableOrNullCallSiteAttr(Instr: &Value, index: c_uint, bytes: u64);
|
||||
pub fn LLVMRustAddByValCallSiteAttr(Instr: &Value, index: c_uint, ty: &Type);
|
||||
pub fn LLVMRustAddStructRetCallSiteAttr(Instr: &Value, index: c_uint, ty: &Type);
|
||||
|
||||
// Operations on load/store instructions (only)
|
||||
pub fn LLVMSetVolatile(MemoryAccessInst: &Value, volatile: Bool);
|
||||
|
@ -1792,7 +1795,7 @@ extern "C" {
|
|||
NumVirtualFileMappingIDs: c_uint,
|
||||
Expressions: *const coverage_map::CounterExpression,
|
||||
NumExpressions: c_uint,
|
||||
MappingRegions: *mut coverageinfo::CounterMappingRegion,
|
||||
MappingRegions: *const coverageinfo::CounterMappingRegion,
|
||||
NumMappingRegions: c_uint,
|
||||
BufferOut: &RustString,
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue