diff options
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/Scalar/LICM.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/Transforms/Scalar/LICM.cpp b/lib/Transforms/Scalar/LICM.cpp index 7bae9fd18a..f67fa6c649 100644 --- a/lib/Transforms/Scalar/LICM.cpp +++ b/lib/Transforms/Scalar/LICM.cpp @@ -42,6 +42,7 @@ namespace { // This transformation requires natural loop information... virtual void getAnalysisUsage(AnalysisUsage &AU) const { AU.preservesCFG(); + AU.addRequiredID(LoopPreheadersID); AU.addRequired<LoopInfo>(); AU.addRequired<AliasAnalysis>(); } @@ -104,11 +105,7 @@ namespace { } void visitShiftInst(ShiftInst &I) { visitBinaryOperator((Instruction&)I); } - void visitLoadInst(LoadInst &LI) { - if (isLoopInvariant(LI.getOperand(0)) && - !pointerInvalidatedByLoop(LI.getOperand(0))) - hoist(LI); - } + void visitLoadInst(LoadInst &LI); void visitGetElementPtrInst(GetElementPtrInst &GEPI) { Instruction &I = (Instruction&)GEPI; @@ -276,6 +273,14 @@ void LICM::hoist(Instruction &Inst) { Changed = true; } + +void LICM::visitLoadInst(LoadInst &LI) { + if (isLoopInvariant(LI.getOperand(0)) && + !pointerInvalidatedByLoop(LI.getOperand(0))) + hoist(LI); + +} + // pointerInvalidatedByLoop - Return true if the body of this loop may store // into the memory location pointed to by V. // |