aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Transforms/Utils
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2004-07-15 08:20:22 +0000
committerChris Lattner <sabre@nondot.org>2004-07-15 08:20:22 +0000
commitfed22aac4337c589841c443be70fe05559693f6a (patch)
treefd3f4ece0eeb00ee144c0804f08aa9fefb35dfc2 /lib/Transforms/Utils
parent5e8775425063e7067dde18e893977bb9cef0558e (diff)
downloadexternal_llvm-fed22aac4337c589841c443be70fe05559693f6a.zip
external_llvm-fed22aac4337c589841c443be70fe05559693f6a.tar.gz
external_llvm-fed22aac4337c589841c443be70fe05559693f6a.tar.bz2
Fix PR404 try #2
This version takes about 1s longer than the previous one (down to 2.35s), but on the positive side, it actually works :) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14856 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Utils')
-rw-r--r--lib/Transforms/Utils/LoopSimplify.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/Transforms/Utils/LoopSimplify.cpp b/lib/Transforms/Utils/LoopSimplify.cpp
index b275208..ada858e 100644
--- a/lib/Transforms/Utils/LoopSimplify.cpp
+++ b/lib/Transforms/Utils/LoopSimplify.cpp
@@ -43,6 +43,7 @@
#include "llvm/Support/CFG.h"
#include "llvm/Transforms/Utils/Local.h"
#include "Support/SetOperations.h"
+#include "Support/SetVector.h"
#include "Support/Statistic.h"
#include "Support/DepthFirstIterator.h"
using namespace llvm;
@@ -153,21 +154,20 @@ bool LoopSimplify::ProcessLoop(Loop *L) {
// predecessors from outside of the loop, split the edge now.
std::vector<BasicBlock*> ExitBlocks;
L->getExitBlocks(ExitBlocks);
- for (unsigned i = 0, e = ExitBlocks.size(); i != e; ++i) {
- BasicBlock *ExitBlock = ExitBlocks[i];
+
+ SetVector<BasicBlock*> ExitBlockSet(ExitBlocks.begin(), ExitBlocks.end());
+ for (SetVector<BasicBlock*>::iterator I = ExitBlockSet.begin(),
+ E = ExitBlockSet.end(); I != E; ++I) {
+ BasicBlock *ExitBlock = *I;
for (pred_iterator PI = pred_begin(ExitBlock), PE = pred_end(ExitBlock);
PI != PE; ++PI)
if (!L->contains(*PI)) {
- BasicBlock *NewBB = RewriteLoopExitBlock(L, ExitBlock);
- for (unsigned j = i; j != ExitBlocks.size(); ++j)
- if (ExitBlocks[j] == ExitBlock)
- ExitBlocks[j] = NewBB;
-
+ RewriteLoopExitBlock(L, ExitBlock);
NumInserted++;
Changed = true;
break;
}
- }
+ }
// If the header has more than two predecessors at this point (from the
// preheader and from multiple backedges), we must adjust the loop.