Auto merge of #109862 - klensy:llvm-dd, r=nikic
llvm: replace some deprecated functions, add fixmes Replace some deprecated llvm functions, add FIXME's (for simpler future work), replace some rust custom functions with llvm ones.
This commit is contained in:
commit
dd2b19539e
9 changed files with 65 additions and 136 deletions
|
@ -381,7 +381,7 @@ impl<'tcx> AsmMethods<'tcx> for CodegenCx<'_, 'tcx> {
|
|||
}
|
||||
|
||||
unsafe {
|
||||
llvm::LLVMRustAppendModuleInlineAsm(
|
||||
llvm::LLVMAppendModuleInlineAsm(
|
||||
self.llmod,
|
||||
template_str.as_ptr().cast(),
|
||||
template_str.len(),
|
||||
|
|
|
@ -904,9 +904,9 @@ unsafe fn embed_bitcode(
|
|||
// We need custom section flags, so emit module-level inline assembly.
|
||||
let section_flags = if cgcx.is_pe_coff { "n" } else { "e" };
|
||||
let asm = create_section_with_flags_asm(".llvmbc", section_flags, bitcode);
|
||||
llvm::LLVMRustAppendModuleInlineAsm(llmod, asm.as_ptr().cast(), asm.len());
|
||||
llvm::LLVMAppendModuleInlineAsm(llmod, asm.as_ptr().cast(), asm.len());
|
||||
let asm = create_section_with_flags_asm(".llvmcmd", section_flags, cmdline.as_bytes());
|
||||
llvm::LLVMRustAppendModuleInlineAsm(llmod, asm.as_ptr().cast(), asm.len());
|
||||
llvm::LLVMAppendModuleInlineAsm(llmod, asm.as_ptr().cast(), asm.len());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ use crate::abi::FnAbiLlvmExt;
|
|||
use crate::attributes;
|
||||
use crate::common::Funclet;
|
||||
use crate::context::CodegenCx;
|
||||
use crate::llvm::{self, AtomicOrdering, AtomicRmwBinOp, BasicBlock};
|
||||
use crate::llvm::{self, AtomicOrdering, AtomicRmwBinOp, BasicBlock, False, True};
|
||||
use crate::type_::Type;
|
||||
use crate::type_of::LayoutLlvmExt;
|
||||
use crate::value::Value;
|
||||
|
@ -841,7 +841,15 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||
}
|
||||
|
||||
fn intcast(&mut self, val: &'ll Value, dest_ty: &'ll Type, is_signed: bool) -> &'ll Value {
|
||||
unsafe { llvm::LLVMRustBuildIntCast(self.llbuilder, val, dest_ty, is_signed) }
|
||||
unsafe {
|
||||
llvm::LLVMBuildIntCast2(
|
||||
self.llbuilder,
|
||||
val,
|
||||
dest_ty,
|
||||
if is_signed { True } else { False },
|
||||
UNNAMED,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fn pointercast(&mut self, val: &'ll Value, dest_ty: &'ll Type) -> &'ll Value {
|
||||
|
@ -1001,11 +1009,11 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||
fn cleanup_pad(&mut self, parent: Option<&'ll Value>, args: &[&'ll Value]) -> Funclet<'ll> {
|
||||
let name = cstr!("cleanuppad");
|
||||
let ret = unsafe {
|
||||
llvm::LLVMRustBuildCleanupPad(
|
||||
llvm::LLVMBuildCleanupPad(
|
||||
self.llbuilder,
|
||||
parent,
|
||||
args.len() as c_uint,
|
||||
args.as_ptr(),
|
||||
args.len() as c_uint,
|
||||
name.as_ptr(),
|
||||
)
|
||||
};
|
||||
|
@ -1014,7 +1022,7 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||
|
||||
fn cleanup_ret(&mut self, funclet: &Funclet<'ll>, unwind: Option<&'ll BasicBlock>) {
|
||||
unsafe {
|
||||
llvm::LLVMRustBuildCleanupRet(self.llbuilder, funclet.cleanuppad(), unwind)
|
||||
llvm::LLVMBuildCleanupRet(self.llbuilder, funclet.cleanuppad(), unwind)
|
||||
.expect("LLVM does not have support for cleanupret");
|
||||
}
|
||||
}
|
||||
|
@ -1022,11 +1030,11 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||
fn catch_pad(&mut self, parent: &'ll Value, args: &[&'ll Value]) -> Funclet<'ll> {
|
||||
let name = cstr!("catchpad");
|
||||
let ret = unsafe {
|
||||
llvm::LLVMRustBuildCatchPad(
|
||||
llvm::LLVMBuildCatchPad(
|
||||
self.llbuilder,
|
||||
parent,
|
||||
args.len() as c_uint,
|
||||
args.as_ptr(),
|
||||
args.len() as c_uint,
|
||||
name.as_ptr(),
|
||||
)
|
||||
};
|
||||
|
@ -1041,7 +1049,7 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||
) -> &'ll Value {
|
||||
let name = cstr!("catchswitch");
|
||||
let ret = unsafe {
|
||||
llvm::LLVMRustBuildCatchSwitch(
|
||||
llvm::LLVMBuildCatchSwitch(
|
||||
self.llbuilder,
|
||||
parent,
|
||||
unwind,
|
||||
|
@ -1052,7 +1060,7 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||
let ret = ret.expect("LLVM does not have support for catchswitch");
|
||||
for handler in handlers {
|
||||
unsafe {
|
||||
llvm::LLVMRustAddHandler(ret, handler);
|
||||
llvm::LLVMAddHandler(ret, handler);
|
||||
}
|
||||
}
|
||||
ret
|
||||
|
@ -1376,8 +1384,7 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
|
|||
}
|
||||
|
||||
pub fn catch_ret(&mut self, funclet: &Funclet<'ll>, unwind: &'ll BasicBlock) -> &'ll Value {
|
||||
let ret =
|
||||
unsafe { llvm::LLVMRustBuildCatchRet(self.llbuilder, funclet.cleanuppad(), unwind) };
|
||||
let ret = unsafe { llvm::LLVMBuildCatchRet(self.llbuilder, funclet.cleanuppad(), unwind) };
|
||||
ret.expect("LLVM does not have support for catchret")
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@ use crate::type_::Type;
|
|||
use crate::type_of::LayoutLlvmExt;
|
||||
use crate::value::Value;
|
||||
use cstr::cstr;
|
||||
use libc::c_uint;
|
||||
use rustc_codegen_ssa::traits::*;
|
||||
use rustc_hir::def_id::DefId;
|
||||
use rustc_middle::middle::codegen_fn_attrs::{CodegenFnAttrFlags, CodegenFnAttrs};
|
||||
|
@ -486,10 +485,10 @@ impl<'ll> StaticMethods for CodegenCx<'ll, '_> {
|
|||
// go into custom sections of the wasm executable.
|
||||
if self.tcx.sess.target.is_like_wasm {
|
||||
if let Some(section) = attrs.link_section {
|
||||
let section = llvm::LLVMMDStringInContext(
|
||||
let section = llvm::LLVMMDStringInContext2(
|
||||
self.llcx,
|
||||
section.as_str().as_ptr().cast(),
|
||||
section.as_str().len() as c_uint,
|
||||
section.as_str().len(),
|
||||
);
|
||||
assert!(alloc.provenance().ptrs().is_empty());
|
||||
|
||||
|
@ -498,17 +497,15 @@ impl<'ll> StaticMethods for CodegenCx<'ll, '_> {
|
|||
// as part of the interpreter execution).
|
||||
let bytes =
|
||||
alloc.inspect_with_uninit_and_ptr_outside_interpreter(0..alloc.len());
|
||||
let alloc = llvm::LLVMMDStringInContext(
|
||||
self.llcx,
|
||||
bytes.as_ptr().cast(),
|
||||
bytes.len() as c_uint,
|
||||
);
|
||||
let alloc =
|
||||
llvm::LLVMMDStringInContext2(self.llcx, bytes.as_ptr().cast(), bytes.len());
|
||||
let data = [section, alloc];
|
||||
let meta = llvm::LLVMMDNodeInContext(self.llcx, data.as_ptr(), 2);
|
||||
let meta = llvm::LLVMMDNodeInContext2(self.llcx, data.as_ptr(), data.len());
|
||||
let val = llvm::LLVMMetadataAsValue(self.llcx, meta);
|
||||
llvm::LLVMAddNamedMetadataOperand(
|
||||
self.llmod,
|
||||
"wasm.custom_sections\0".as_ptr().cast(),
|
||||
meta,
|
||||
val,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -864,8 +864,6 @@ pub fn build_compile_unit_di_node<'ll, 'tcx>(
|
|||
);
|
||||
|
||||
if tcx.sess.opts.unstable_opts.profile {
|
||||
let cu_desc_metadata =
|
||||
llvm::LLVMRustMetadataAsValue(debug_context.llcontext, unit_metadata);
|
||||
let default_gcda_path = &output_filenames.with_extension("gcda");
|
||||
let gcda_path =
|
||||
tcx.sess.opts.unstable_opts.profile_emit.as_ref().unwrap_or(default_gcda_path);
|
||||
|
@ -873,20 +871,17 @@ pub fn build_compile_unit_di_node<'ll, 'tcx>(
|
|||
let gcov_cu_info = [
|
||||
path_to_mdstring(debug_context.llcontext, &output_filenames.with_extension("gcno")),
|
||||
path_to_mdstring(debug_context.llcontext, gcda_path),
|
||||
cu_desc_metadata,
|
||||
unit_metadata,
|
||||
];
|
||||
let gcov_metadata = llvm::LLVMMDNodeInContext(
|
||||
let gcov_metadata = llvm::LLVMMDNodeInContext2(
|
||||
debug_context.llcontext,
|
||||
gcov_cu_info.as_ptr(),
|
||||
gcov_cu_info.len() as c_uint,
|
||||
gcov_cu_info.len(),
|
||||
);
|
||||
let val = llvm::LLVMMetadataAsValue(debug_context.llcontext, gcov_metadata);
|
||||
|
||||
let llvm_gcov_ident = cstr!("llvm.gcov");
|
||||
llvm::LLVMAddNamedMetadataOperand(
|
||||
debug_context.llmod,
|
||||
llvm_gcov_ident.as_ptr(),
|
||||
gcov_metadata,
|
||||
);
|
||||
llvm::LLVMAddNamedMetadataOperand(debug_context.llmod, llvm_gcov_ident.as_ptr(), val);
|
||||
}
|
||||
|
||||
// Insert `llvm.ident` metadata on the wasm targets since that will
|
||||
|
@ -907,15 +902,9 @@ pub fn build_compile_unit_di_node<'ll, 'tcx>(
|
|||
return unit_metadata;
|
||||
};
|
||||
|
||||
fn path_to_mdstring<'ll>(llcx: &'ll llvm::Context, path: &Path) -> &'ll Value {
|
||||
fn path_to_mdstring<'ll>(llcx: &'ll llvm::Context, path: &Path) -> &'ll llvm::Metadata {
|
||||
let path_str = path_to_c_string(path);
|
||||
unsafe {
|
||||
llvm::LLVMMDStringInContext(
|
||||
llcx,
|
||||
path_str.as_ptr(),
|
||||
path_str.as_bytes().len() as c_uint,
|
||||
)
|
||||
}
|
||||
unsafe { llvm::LLVMMDStringInContext2(llcx, path_str.as_ptr(), path_str.as_bytes().len()) }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -209,8 +209,7 @@ impl<'ll> DebugInfoBuilderMethods for Builder<'_, 'll, '_> {
|
|||
|
||||
fn set_dbg_loc(&mut self, dbg_loc: &'ll DILocation) {
|
||||
unsafe {
|
||||
let dbg_loc_as_llval = llvm::LLVMRustMetadataAsValue(self.cx().llcx, dbg_loc);
|
||||
llvm::LLVMSetCurrentDebugLocation(self.llbuilder, dbg_loc_as_llval);
|
||||
llvm::LLVMSetCurrentDebugLocation2(self.llbuilder, dbg_loc);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1018,7 +1018,7 @@ extern "C" {
|
|||
pub fn LLVMSetDataLayout(M: &Module, Triple: *const c_char);
|
||||
|
||||
/// See Module::setModuleInlineAsm.
|
||||
pub fn LLVMRustAppendModuleInlineAsm(M: &Module, Asm: *const c_char, AsmLen: size_t);
|
||||
pub fn LLVMAppendModuleInlineAsm(M: &Module, Asm: *const c_char, Len: size_t);
|
||||
|
||||
/// See llvm::LLVMTypeKind::getTypeID.
|
||||
pub fn LLVMRustGetTypeKind(Ty: &Type) -> TypeKind;
|
||||
|
@ -1065,7 +1065,7 @@ extern "C" {
|
|||
|
||||
// Operations on other types
|
||||
pub fn LLVMVoidTypeInContext(C: &Context) -> &Type;
|
||||
pub fn LLVMRustMetadataTypeInContext(C: &Context) -> &Type;
|
||||
pub fn LLVMMetadataTypeInContext(C: &Context) -> &Type;
|
||||
|
||||
// Operations on all values
|
||||
pub fn LLVMTypeOf(Val: &Value) -> &Type;
|
||||
|
@ -1084,7 +1084,12 @@ extern "C" {
|
|||
pub fn LLVMGetPoison(Ty: &Type) -> &Value;
|
||||
|
||||
// Operations on metadata
|
||||
// FIXME: deprecated, replace with LLVMMDStringInContext2
|
||||
pub fn LLVMMDStringInContext(C: &Context, Str: *const c_char, SLen: c_uint) -> &Value;
|
||||
|
||||
pub fn LLVMMDStringInContext2(C: &Context, Str: *const c_char, SLen: size_t) -> &Metadata;
|
||||
|
||||
// FIXME: deprecated, replace with LLVMMDNodeInContext2
|
||||
pub fn LLVMMDNodeInContext<'a>(
|
||||
C: &'a Context,
|
||||
Vals: *const &'a Value,
|
||||
|
@ -1123,6 +1128,8 @@ extern "C" {
|
|||
Packed: Bool,
|
||||
) -> &'a Value;
|
||||
|
||||
// FIXME: replace with LLVMConstArray2 when bumped minimal version to llvm-17
|
||||
// https://github.com/llvm/llvm-project/commit/35276f16e5a2cae0dfb49c0fbf874d4d2f177acc
|
||||
pub fn LLVMConstArray<'a>(
|
||||
ElementTy: &'a Type,
|
||||
ConstantVals: *const &'a Value,
|
||||
|
@ -1262,7 +1269,7 @@ extern "C" {
|
|||
pub fn LLVMDisposeBuilder<'a>(Builder: &'a mut Builder<'a>);
|
||||
|
||||
// Metadata
|
||||
pub fn LLVMSetCurrentDebugLocation<'a>(Builder: &Builder<'a>, L: &'a Value);
|
||||
pub fn LLVMSetCurrentDebugLocation2<'a>(Builder: &Builder<'a>, Loc: &'a Metadata);
|
||||
|
||||
// Terminators
|
||||
pub fn LLVMBuildRetVoid<'a>(B: &Builder<'a>) -> &'a Value;
|
||||
|
@ -1302,38 +1309,38 @@ extern "C" {
|
|||
pub fn LLVMBuildResume<'a>(B: &Builder<'a>, Exn: &'a Value) -> &'a Value;
|
||||
pub fn LLVMBuildUnreachable<'a>(B: &Builder<'a>) -> &'a Value;
|
||||
|
||||
pub fn LLVMRustBuildCleanupPad<'a>(
|
||||
pub fn LLVMBuildCleanupPad<'a>(
|
||||
B: &Builder<'a>,
|
||||
ParentPad: Option<&'a Value>,
|
||||
ArgCnt: c_uint,
|
||||
Args: *const &'a Value,
|
||||
NumArgs: c_uint,
|
||||
Name: *const c_char,
|
||||
) -> Option<&'a Value>;
|
||||
pub fn LLVMRustBuildCleanupRet<'a>(
|
||||
pub fn LLVMBuildCleanupRet<'a>(
|
||||
B: &Builder<'a>,
|
||||
CleanupPad: &'a Value,
|
||||
UnwindBB: Option<&'a BasicBlock>,
|
||||
BB: Option<&'a BasicBlock>,
|
||||
) -> Option<&'a Value>;
|
||||
pub fn LLVMRustBuildCatchPad<'a>(
|
||||
pub fn LLVMBuildCatchPad<'a>(
|
||||
B: &Builder<'a>,
|
||||
ParentPad: &'a Value,
|
||||
ArgCnt: c_uint,
|
||||
Args: *const &'a Value,
|
||||
NumArgs: c_uint,
|
||||
Name: *const c_char,
|
||||
) -> Option<&'a Value>;
|
||||
pub fn LLVMRustBuildCatchRet<'a>(
|
||||
pub fn LLVMBuildCatchRet<'a>(
|
||||
B: &Builder<'a>,
|
||||
Pad: &'a Value,
|
||||
CatchPad: &'a Value,
|
||||
BB: &'a BasicBlock,
|
||||
) -> Option<&'a Value>;
|
||||
pub fn LLVMRustBuildCatchSwitch<'a>(
|
||||
pub fn LLVMBuildCatchSwitch<'a>(
|
||||
Builder: &Builder<'a>,
|
||||
ParentPad: Option<&'a Value>,
|
||||
BB: Option<&'a BasicBlock>,
|
||||
UnwindBB: Option<&'a BasicBlock>,
|
||||
NumHandlers: c_uint,
|
||||
Name: *const c_char,
|
||||
) -> Option<&'a Value>;
|
||||
pub fn LLVMRustAddHandler<'a>(CatchSwitch: &'a Value, Handler: &'a BasicBlock);
|
||||
pub fn LLVMAddHandler<'a>(CatchSwitch: &'a Value, Dest: &'a BasicBlock);
|
||||
pub fn LLVMSetPersonalityFn<'a>(Func: &'a Value, Pers: &'a Value);
|
||||
|
||||
// Add a case to the switch instruction
|
||||
|
@ -1627,11 +1634,12 @@ extern "C" {
|
|||
DestTy: &'a Type,
|
||||
Name: *const c_char,
|
||||
) -> &'a Value;
|
||||
pub fn LLVMRustBuildIntCast<'a>(
|
||||
pub fn LLVMBuildIntCast2<'a>(
|
||||
B: &Builder<'a>,
|
||||
Val: &'a Value,
|
||||
DestTy: &'a Type,
|
||||
IsSigned: bool,
|
||||
IsSigned: Bool,
|
||||
Name: *const c_char,
|
||||
) -> &'a Value;
|
||||
|
||||
// Comparisons
|
||||
|
@ -1920,7 +1928,7 @@ extern "C" {
|
|||
);
|
||||
pub fn LLVMRustHasModuleFlag(M: &Module, name: *const c_char, len: size_t) -> bool;
|
||||
|
||||
pub fn LLVMRustMetadataAsValue<'a>(C: &'a Context, MD: &'a Metadata) -> &'a Value;
|
||||
pub fn LLVMMetadataAsValue<'a>(C: &'a Context, MD: &'a Metadata) -> &'a Value;
|
||||
|
||||
pub fn LLVMRustDIBuilderCreate(M: &Module) -> &mut DIBuilder<'_>;
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ impl<'ll> CodegenCx<'ll, '_> {
|
|||
}
|
||||
|
||||
pub(crate) fn type_metadata(&self) -> &'ll Type {
|
||||
unsafe { llvm::LLVMRustMetadataTypeInContext(self.llcx) }
|
||||
unsafe { llvm::LLVMMetadataTypeInContext(self.llcx) }
|
||||
}
|
||||
|
||||
///x Creates an integer type with the given number of bits, e.g., i24
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue