Use IRBuilder to create memset
To avoid creating memsets with outdated signature. For some reason SROA chokes on this when using NewPM.
This commit is contained in:
parent
cd5441faf4
commit
03a73fa2cf
4 changed files with 27 additions and 10 deletions
|
@ -781,13 +781,18 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||
align: Align,
|
||||
flags: MemFlags,
|
||||
) {
|
||||
let ptr_width = &self.sess().target.target.target_pointer_width;
|
||||
let intrinsic_key = format!("llvm.memset.p0i8.i{}", ptr_width);
|
||||
let llintrinsicfn = self.get_intrinsic(&intrinsic_key);
|
||||
let is_volatile = flags.contains(MemFlags::VOLATILE);
|
||||
let ptr = self.pointercast(ptr, self.type_i8p());
|
||||
let align = self.const_u32(align.bytes() as u32);
|
||||
let volatile = self.const_bool(flags.contains(MemFlags::VOLATILE));
|
||||
self.call(llintrinsicfn, &[ptr, fill_byte, size, align, volatile], None);
|
||||
unsafe {
|
||||
llvm::LLVMRustBuildMemSet(
|
||||
self.llbuilder,
|
||||
ptr,
|
||||
align.bytes() as c_uint,
|
||||
fill_byte,
|
||||
size,
|
||||
is_volatile,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn select(
|
||||
|
|
|
@ -562,10 +562,6 @@ impl CodegenCx<'b, 'tcx> {
|
|||
t_v8f64: t_f64, 8;
|
||||
}
|
||||
|
||||
ifn!("llvm.memset.p0i8.i16", fn(i8p, t_i8, t_i16, t_i32, i1) -> void);
|
||||
ifn!("llvm.memset.p0i8.i32", fn(i8p, t_i8, t_i32, t_i32, i1) -> void);
|
||||
ifn!("llvm.memset.p0i8.i64", fn(i8p, t_i8, t_i64, t_i32, i1) -> void);
|
||||
|
||||
ifn!("llvm.trap", fn() -> void);
|
||||
ifn!("llvm.debugtrap", fn() -> void);
|
||||
ifn!("llvm.frameaddress", fn(t_i32) -> i8p);
|
||||
|
|
|
@ -1315,6 +1315,14 @@ extern "C" {
|
|||
Size: &'a Value,
|
||||
IsVolatile: bool,
|
||||
) -> &'a Value;
|
||||
pub fn LLVMRustBuildMemSet(
|
||||
B: &Builder<'a>,
|
||||
Dst: &'a Value,
|
||||
DstAlign: c_uint,
|
||||
Val: &'a Value,
|
||||
Size: &'a Value,
|
||||
IsVolatile: bool,
|
||||
) -> &'a Value;
|
||||
pub fn LLVMBuildSelect(
|
||||
B: &Builder<'a>,
|
||||
If: &'a Value,
|
||||
|
|
|
@ -1296,6 +1296,14 @@ extern "C" LLVMValueRef LLVMRustBuildMemMove(LLVMBuilderRef B,
|
|||
#endif
|
||||
}
|
||||
|
||||
extern "C" LLVMValueRef LLVMRustBuildMemSet(LLVMBuilderRef B,
|
||||
LLVMValueRef Dst, unsigned DstAlign,
|
||||
LLVMValueRef Val,
|
||||
LLVMValueRef Size, bool IsVolatile) {
|
||||
return wrap(unwrap(B)->CreateMemSet(
|
||||
unwrap(Dst), unwrap(Val), unwrap(Size), DstAlign, IsVolatile));
|
||||
}
|
||||
|
||||
extern "C" LLVMValueRef
|
||||
LLVMRustBuildInvoke(LLVMBuilderRef B, LLVMValueRef Fn, LLVMValueRef *Args,
|
||||
unsigned NumArgs, LLVMBasicBlockRef Then,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue