summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorStepan Dyatkovskiy <stpworld@narod.ru>2011-11-29 20:34:39 +0000
committerStepan Dyatkovskiy <stpworld@narod.ru>2011-11-29 20:34:39 +0000
commit31798ef3c0bb04791ad0e68b60bdb89ec8599379 (patch)
treed65aa5717ef9ef0fc4a160b8f975da0f3db23bd1 /llvm/lib/Transforms
parente2ed5fb636bc4735694e917408f4bbf9fd34af71 (diff)
downloadbcm5719-llvm-31798ef3c0bb04791ad0e68b60bdb89ec8599379.tar.gz
bcm5719-llvm-31798ef3c0bb04791ad0e68b60bdb89ec8599379.zip
Potential bug in RewriteLoopBodyWithConditionConstant: use iterator should not be changed inside the uses enumeration loop.
llvm-svn: 145432
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Scalar/LoopUnswitch.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp b/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
index 458949c8444..ab70dd5e420 100644
--- a/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp
@@ -907,9 +907,13 @@ void LoopUnswitch::RewriteLoopBodyWithConditionConstant(Loop *L, Value *LIC,
Instruction *U = dyn_cast<Instruction>(*UI);
if (!U || !L->contains(U))
continue;
- U->replaceUsesOfWith(LIC, Replacement);
Worklist.push_back(U);
}
+
+ for (std::vector<Instruction*>::iterator UI = Worklist.begin();
+ UI != Worklist.end(); ++UI)
+ (*UI)->replaceUsesOfWith(LIC, Replacement);
+
SimplifyCode(Worklist, L);
return;
}
OpenPOWER on IntegriCloud