diff options
author | Justin Bogner <mail@justinbogner.com> | 2016-04-22 19:54:04 +0000 |
---|---|---|
committer | Justin Bogner <mail@justinbogner.com> | 2016-04-22 19:54:04 +0000 |
commit | 82077c4ab0b05980492f14b9cf31f6a4af35da34 (patch) | |
tree | dba93f685437af7bf619c0d21510d81a890203f7 /llvm/lib/Transforms/Scalar/Sink.cpp | |
parent | d29a24e4fdb55fd64b34c41875147181e830ac42 (diff) | |
download | bcm5719-llvm-82077c4ab0b05980492f14b9cf31f6a4af35da34.tar.gz bcm5719-llvm-82077c4ab0b05980492f14b9cf31f6a4af35da34.zip |
PM: Reorder the functions used for SinkingPass. NFC
This will make the port to the new PM easier to follow.
llvm-svn: 267198
Diffstat (limited to 'llvm/lib/Transforms/Scalar/Sink.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/Sink.cpp | 120 |
1 files changed, 60 insertions, 60 deletions
diff --git a/llvm/lib/Transforms/Scalar/Sink.cpp b/llvm/lib/Transforms/Scalar/Sink.cpp index eb09f584dc6..e5860328d04 100644 --- a/llvm/lib/Transforms/Scalar/Sink.cpp +++ b/llvm/lib/Transforms/Scalar/Sink.cpp @@ -96,66 +96,6 @@ bool Sinking::AllUsesDominatedByBlock(Instruction *Inst, return true; } -bool Sinking::runOnFunction(Function &F) { - DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); - LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo(); - AA = &getAnalysis<AAResultsWrapperPass>().getAAResults(); - - bool MadeChange, EverMadeChange = false; - - do { - MadeChange = false; - DEBUG(dbgs() << "Sinking iteration " << NumSinkIter << "\n"); - // Process all basic blocks. - for (Function::iterator I = F.begin(), E = F.end(); - I != E; ++I) - MadeChange |= ProcessBlock(*I); - EverMadeChange |= MadeChange; - NumSinkIter++; - } while (MadeChange); - - return EverMadeChange; -} - -bool Sinking::ProcessBlock(BasicBlock &BB) { - // Can't sink anything out of a block that has less than two successors. - if (BB.getTerminator()->getNumSuccessors() <= 1) return false; - - // Don't bother sinking code out of unreachable blocks. In addition to being - // unprofitable, it can also lead to infinite looping, because in an - // unreachable loop there may be nowhere to stop. - if (!DT->isReachableFromEntry(&BB)) return false; - - bool MadeChange = false; - - // Walk the basic block bottom-up. Remember if we saw a store. - BasicBlock::iterator I = BB.end(); - --I; - bool ProcessedBegin = false; - SmallPtrSet<Instruction *, 8> Stores; - do { - Instruction *Inst = &*I; // The instruction to sink. - - // Predecrement I (if it's not begin) so that it isn't invalidated by - // sinking. - ProcessedBegin = I == BB.begin(); - if (!ProcessedBegin) - --I; - - if (isa<DbgInfoIntrinsic>(Inst)) - continue; - - if (SinkInstruction(Inst, Stores)) { - ++NumSunk; - MadeChange = true; - } - - // If we just processed the first instruction in the block, we're done. - } while (!ProcessedBegin); - - return MadeChange; -} - static bool isSafeToMove(Instruction *Inst, AliasAnalysis *AA, SmallPtrSetImpl<Instruction *> &Stores) { @@ -290,3 +230,63 @@ bool Sinking::SinkInstruction(Instruction *Inst, Inst->moveBefore(&*SuccToSinkTo->getFirstInsertionPt()); return true; } + +bool Sinking::ProcessBlock(BasicBlock &BB) { + // Can't sink anything out of a block that has less than two successors. + if (BB.getTerminator()->getNumSuccessors() <= 1) return false; + + // Don't bother sinking code out of unreachable blocks. In addition to being + // unprofitable, it can also lead to infinite looping, because in an + // unreachable loop there may be nowhere to stop. + if (!DT->isReachableFromEntry(&BB)) return false; + + bool MadeChange = false; + + // Walk the basic block bottom-up. Remember if we saw a store. + BasicBlock::iterator I = BB.end(); + --I; + bool ProcessedBegin = false; + SmallPtrSet<Instruction *, 8> Stores; + do { + Instruction *Inst = &*I; // The instruction to sink. + + // Predecrement I (if it's not begin) so that it isn't invalidated by + // sinking. + ProcessedBegin = I == BB.begin(); + if (!ProcessedBegin) + --I; + + if (isa<DbgInfoIntrinsic>(Inst)) + continue; + + if (SinkInstruction(Inst, Stores)) { + ++NumSunk; + MadeChange = true; + } + + // If we just processed the first instruction in the block, we're done. + } while (!ProcessedBegin); + + return MadeChange; +} + +bool Sinking::runOnFunction(Function &F) { + DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); + LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo(); + AA = &getAnalysis<AAResultsWrapperPass>().getAAResults(); + + bool MadeChange, EverMadeChange = false; + + do { + MadeChange = false; + DEBUG(dbgs() << "Sinking iteration " << NumSinkIter << "\n"); + // Process all basic blocks. + for (Function::iterator I = F.begin(), E = F.end(); + I != E; ++I) + MadeChange |= ProcessBlock(*I); + EverMadeChange |= MadeChange; + NumSinkIter++; + } while (MadeChange); + + return EverMadeChange; +} |