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:
Dan Gohman 2008-10-02 15:04:30 +00:00
parent 5bbee4b40a
commit d790a5ceee
2 changed files with 18 additions and 1 deletions

View File

@ -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;
}

View 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
}