diff options
author | Dan Gohman <gohman@apple.com> | 2009-07-14 01:37:59 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2009-07-14 01:37:59 +0000 |
commit | 0df6e09d43d6d733555a10d22572ddb0006e7d23 (patch) | |
tree | 4f3d6d05529e7ec08a8a52ce1174bda6cad1f98a /lib/Transforms/Utils/LoopSimplify.cpp | |
parent | 6084326c3c39e65f1ce42099296571334d653c88 (diff) |
Update LoopSimplify and LoopUnswitch to use the new makeLoopInvariant
function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75584 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils/LoopSimplify.cpp')
-rw-r--r-- | lib/Transforms/Utils/LoopSimplify.cpp | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/lib/Transforms/Utils/LoopSimplify.cpp b/lib/Transforms/Utils/LoopSimplify.cpp index e80ef02e83..cfdfcb0f73 100644 --- a/lib/Transforms/Utils/LoopSimplify.cpp +++ b/lib/Transforms/Utils/LoopSimplify.cpp @@ -91,7 +91,7 @@ namespace { private: bool ProcessLoop(Loop *L); BasicBlock *RewriteLoopExitBlock(Loop *L, BasicBlock *Exit); - void InsertPreheaderForLoop(Loop *L); + BasicBlock *InsertPreheaderForLoop(Loop *L); Loop *SeparateNestedLoop(Loop *L); void InsertUniqueBackedgeBlock(Loop *L); void PlaceSplitBlockCarefully(BasicBlock *NewBB, @@ -193,8 +193,9 @@ ReprocessLoop: "Header isn't first block in loop?"); // Does the loop already have a preheader? If so, don't insert one. - if (L->getLoopPreheader() == 0) { - InsertPreheaderForLoop(L); + BasicBlock *Preheader = L->getLoopPreheader(); + if (!Preheader) { + Preheader = InsertPreheaderForLoop(L); NumInserted++; Changed = true; } @@ -287,19 +288,11 @@ ReprocessLoop: Instruction *Inst = I++; if (Inst == CI) continue; - if (Inst->isTrapping()) { + if (!L->makeLoopInvariant(Inst, Preheader->getTerminator())) { AllInvariant = false; + Changed = true; break; } - for (unsigned j = 0, f = Inst->getNumOperands(); j != f; ++j) - if (!L->isLoopInvariant(Inst->getOperand(j))) { - AllInvariant = false; - break; - } - if (!AllInvariant) - break; - // Hoist. - Inst->moveBefore(L->getLoopPreheader()->getTerminator()); } if (!AllInvariant) continue; @@ -340,7 +333,7 @@ ReprocessLoop: /// preheader, this method is called to insert one. This method has two phases: /// preheader insertion and analysis updating. /// -void LoopSimplify::InsertPreheaderForLoop(Loop *L) { +BasicBlock *LoopSimplify::InsertPreheaderForLoop(Loop *L) { BasicBlock *Header = L->getHeader(); // Compute the set of predecessors of the loop that are not in the loop. @@ -367,6 +360,8 @@ void LoopSimplify::InsertPreheaderForLoop(Loop *L) { // Make sure that NewBB is put someplace intelligent, which doesn't mess up // code layout too horribly. PlaceSplitBlockCarefully(NewBB, OutsideBlocks, L); + + return NewBB; } /// RewriteLoopExitBlock - Ensure that the loop preheader dominates all exit |