Support LLVM 12 in rustc
This commit is contained in:
parent
7c3a914b5d
commit
55f345f325
18 changed files with 226 additions and 77 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),
|
||||
);
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -239,6 +239,7 @@ pub enum TypeKind {
|
|||
Token = 16,
|
||||
ScalableVector = 17,
|
||||
BFloat = 18,
|
||||
X86_AMX = 19,
|
||||
}
|
||||
|
||||
impl TypeKind {
|
||||
|
@ -263,6 +264,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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1073,6 +1075,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 +1111,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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue