diff options
author | Max Kazantsev <max.kazantsev@azul.com> | 2018-11-01 09:42:50 +0000 |
---|---|---|
committer | Max Kazantsev <max.kazantsev@azul.com> | 2018-11-01 09:42:50 +0000 |
commit | 46955b58eefc245f862aed31cdec23c1546bd412 (patch) | |
tree | e5a48c9fa3952307fa08e03ea160512638b458ab /llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp | |
parent | 3608decaa5285e5e2d60fade30b57b82d82c2fff (diff) | |
download | bcm5719-llvm-46955b58eefc245f862aed31cdec23c1546bd412.tar.gz bcm5719-llvm-46955b58eefc245f862aed31cdec23c1546bd412.zip |
[NFC] Reorganize code to prepare it for more transforms
llvm-svn: 345820
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp index ed37fc8825d..6cac3787311 100644 --- a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp +++ b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp @@ -41,8 +41,8 @@ using namespace llvm; #define DEBUG_TYPE "loop-simplifycfg" -static bool simplifyLoopCFG(Loop &L, DominatorTree &DT, LoopInfo &LI, - ScalarEvolution &SE, MemorySSAUpdater *MSSAU) { +static bool mergeBlocksIntoPredecessors(Loop &L, DominatorTree &DT, + LoopInfo &LI, MemorySSAUpdater *MSSAU) { bool Changed = false; DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Eager); // Copy blocks into a temporary array to avoid iterator invalidation issues @@ -63,14 +63,25 @@ static bool simplifyLoopCFG(Loop &L, DominatorTree &DT, LoopInfo &LI, // Merge Succ into Pred and delete it. MergeBlockIntoPredecessor(Succ, &DTU, &LI, MSSAU); - SE.forgetTopmostLoop(&L); - Changed = true; } return Changed; } +static bool simplifyLoopCFG(Loop &L, DominatorTree &DT, LoopInfo &LI, + ScalarEvolution &SE, MemorySSAUpdater *MSSAU) { + bool Changed = false; + + // Eliminate unconditional branches by merging blocks into their predecessors. + Changed |= mergeBlocksIntoPredecessors(L, DT, LI, MSSAU); + + if (Changed) + SE.forgetTopmostLoop(&L); + + return Changed; +} + PreservedAnalyses LoopSimplifyCFGPass::run(Loop &L, LoopAnalysisManager &AM, LoopStandardAnalysisResults &AR, LPMUpdater &) { |