Skip to content

Commit ea04023

Browse files
committed
Speculative change to volitile_load
1 parent dee3a44 commit ea04023

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

crates/rustc_codegen_nvvm/src/builder.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -440,11 +440,19 @@ impl<'ll, 'tcx, 'a> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
440440

441441
fn volatile_load(&mut self, ty: &'ll Type, ptr: &'ll Value) -> &'ll Value {
442442
trace!("Volatile load `{:?}`", ptr);
443-
let ptr = self.pointercast(ptr, self.cx.type_ptr_to(ty));
443+
let original_ptr_llty = self.cx.val_ty(ptr_to_load_from);
444+
let required_ptr_llty_for_load = self.cx.type_ptr_to(ty_to_load);
445+
446+
let final_ptr_for_llvm_load = if original_ptr_llty == required_ptr_llty_for_load {
447+
ptr_to_load_from
448+
} else {
449+
self.bitcast(ptr_to_load_from, required_ptr_llty_for_load)
450+
};
451+
444452
unsafe {
445-
let load = llvm::LLVMBuildLoad(self.llbuilder, ptr, UNNAMED);
446-
llvm::LLVMSetVolatile(load, llvm::True);
447-
load
453+
let load_instr = llvm::LLVMBuildLoad(self.llbuilder, final_ptr_for_llvm_load, UNNAMED);
454+
llvm::LLVMSetVolatile(load_instr, llvm::True);
455+
load_instr
448456
}
449457
}
450458

0 commit comments

Comments
 (0)