mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-04 10:04:33 +00:00
Loop invariant code motion now depends on the LoopPreheader pass. Dead code
has not yet been removed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3945 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c178d9459a
commit
eb53ae4f2d
@ -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.
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user