mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
Fix a think-o in isSafeToMove. This fixes it from thinking that
volatile memory references are safe to move. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56948 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5bbee4b40a
commit
d790a5ceee
@ -707,7 +707,7 @@ bool MachineInstr::isSafeToMove(const TargetInstrInfo *TII, bool &SawStore) {
|
||||
if (TID->mayLoad() && !TII->isInvariantLoad(this))
|
||||
// Otherwise, this is a real load. If there is a store between the load and
|
||||
// end of block, or if the laod is volatile, we can't move it.
|
||||
return SawStore || hasVolatileMemoryRef();
|
||||
return !SawStore && !hasVolatileMemoryRef();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
17
test/CodeGen/X86/volatile.ll
Normal file
17
test/CodeGen/X86/volatile.ll
Normal file
@ -0,0 +1,17 @@
|
||||
; RUN: llvm-as < %s | llc -march=x86 -mattr=sse2 | grep movsd | count 5
|
||||
; RUN: llvm-as < %s | llc -march=x86 -mattr=sse2 -fast | grep movsd | count 5
|
||||
|
||||
@x = external global double
|
||||
|
||||
define void @foo() nounwind {
|
||||
%a = volatile load double* @x
|
||||
volatile store double 0.0, double* @x
|
||||
volatile store double 0.0, double* @x
|
||||
%b = volatile load double* @x
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @bar() nounwind {
|
||||
%c = volatile load double* @x
|
||||
ret void
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user