Don't access pointer element type for nontemporal store
Simply shift the bitcast from the store to the load, so that we can use the destination type. I'm not sure the bitcast is really necessary, but keeping it for now.
This commit is contained in:
parent
208173f8e9
commit
2ce1addeba
1 changed files with 4 additions and 5 deletions
|
@ -291,11 +291,10 @@ impl<'a, 'tcx, V: CodegenObject> OperandValue<V> {
|
||||||
OperandValue::Ref(r, None, source_align) => {
|
OperandValue::Ref(r, None, source_align) => {
|
||||||
if flags.contains(MemFlags::NONTEMPORAL) {
|
if flags.contains(MemFlags::NONTEMPORAL) {
|
||||||
// HACK(nox): This is inefficient but there is no nontemporal memcpy.
|
// HACK(nox): This is inefficient but there is no nontemporal memcpy.
|
||||||
// FIXME: Don't access pointer element type.
|
let ty = bx.backend_type(dest.layout);
|
||||||
let ty = bx.element_type(bx.val_ty(r));
|
let ptr = bx.pointercast(r, bx.type_ptr_to(ty));
|
||||||
let val = bx.load(ty, r, source_align);
|
let val = bx.load(ty, ptr, source_align);
|
||||||
let ptr = bx.pointercast(dest.llval, bx.type_ptr_to(ty));
|
bx.store_with_flags(val, dest.llval, dest.align, flags);
|
||||||
bx.store_with_flags(val, ptr, dest.align, flags);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
base::memcpy_ty(bx, dest.llval, dest.align, r, source_align, dest.layout, flags)
|
base::memcpy_ty(bx, dest.llval, dest.align, r, source_align, dest.layout, flags)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue