Skip to content

Commit 95582e6

Browse files
committed
codegen: memmove/memset cannot be non-temporal
1 parent 8c7c151 commit 95582e6

File tree

2 files changed

+5
-9
lines changed

2 files changed

+5
-9
lines changed

Diff for: compiler/rustc_codegen_gcc/src/builder.rs

+4-9
Original file line numberDiff line numberDiff line change
@@ -1301,19 +1301,13 @@ impl<'a, 'gcc, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'gcc, 'tcx> {
13011301
fn memmove(
13021302
&mut self,
13031303
dst: RValue<'gcc>,
1304-
dst_align: Align,
1304+
_dst_align: Align,
13051305
src: RValue<'gcc>,
1306-
src_align: Align,
1306+
_src_align: Align,
13071307
size: RValue<'gcc>,
13081308
flags: MemFlags,
13091309
) {
1310-
if flags.contains(MemFlags::NONTEMPORAL) {
1311-
// HACK(nox): This is inefficient but there is no nontemporal memmove.
1312-
let val = self.load(src.get_type().get_pointee().expect("get_pointee"), src, src_align);
1313-
let ptr = self.pointercast(dst, self.type_ptr_to(self.val_ty(val)));
1314-
self.store_with_flags(val, ptr, dst_align, flags);
1315-
return;
1316-
}
1310+
assert!(!flags.contains(MemFlags::NONTEMPORAL), "non-temporal memmove not supported");
13171311
let size = self.intcast(size, self.type_size_t(), false);
13181312
let _is_volatile = flags.contains(MemFlags::VOLATILE);
13191313
let dst = self.pointercast(dst, self.type_i8p());
@@ -1335,6 +1329,7 @@ impl<'a, 'gcc, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'gcc, 'tcx> {
13351329
_align: Align,
13361330
flags: MemFlags,
13371331
) {
1332+
assert!(!flags.contains(MemFlags::NONTEMPORAL), "non-temporal memset not supported");
13381333
let _is_volatile = flags.contains(MemFlags::VOLATILE);
13391334
let ptr = self.pointercast(ptr, self.type_i8p());
13401335
let memset = self.context.get_builtin_function("memset");

Diff for: compiler/rustc_codegen_llvm/src/builder.rs

+1
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,7 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
976976
align: Align,
977977
flags: MemFlags,
978978
) {
979+
assert!(!flags.contains(MemFlags::NONTEMPORAL), "non-temporal memset not supported");
979980
let is_volatile = flags.contains(MemFlags::VOLATILE);
980981
unsafe {
981982
llvm::LLVMRustBuildMemSet(

0 commit comments

Comments
 (0)