aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2007-04-23 22:42:03 +0000
committerDevang Patel <dpatel@apple.com>2007-04-23 22:42:03 +0000
commit2a5fa189972c1ecc29f3682a732d15f94b9498f1 (patch)
tree2d5e970c2df45ca5d631ae652c1efdd9d38bc855 /lib
parent9690809ddd09bc40d306e9b1e4f03b183c505504 (diff)
downloadexternal_llvm-2a5fa189972c1ecc29f3682a732d15f94b9498f1.zip
external_llvm-2a5fa189972c1ecc29f3682a732d15f94b9498f1.tar.gz
external_llvm-2a5fa189972c1ecc29f3682a732d15f94b9498f1.tar.bz2
Fix
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070423/048333.html git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36380 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Transforms/Scalar/LoopStrengthReduce.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/lib/Transforms/Scalar/LoopStrengthReduce.cpp
index 38cfd91..6bece9c 100644
--- a/lib/Transforms/Scalar/LoopStrengthReduce.cpp
+++ b/lib/Transforms/Scalar/LoopStrengthReduce.cpp
@@ -416,12 +416,16 @@ bool LoopStrengthReduce::AddUsersIfInteresting(Instruction *I, Loop *L,
if (!getSCEVStartAndStride(ISE, L, Start, Stride))
return false; // Non-reducible symbolic expression, bail out.
- for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); UI != E;) {
- Instruction *User = cast<Instruction>(*UI);
+ std::vector<Instruction *> IUsers;
+ // Collect all I uses now because IVUseShouldUsePostIncValue may
+ // invalidate use_iterator.
+ for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); UI != E; ++UI)
+ IUsers.push_back(cast<Instruction>(*UI));
- // Increment iterator now because IVUseShouldUsePostIncValue may remove
- // User from the list of I users.
- ++UI;
+ for (unsigned iused_index = 0, iused_size = IUsers.size();
+ iused_index != iused_size; ++iused_index) {
+
+ Instruction *User = IUsers[iused_index];
// Do not infinitely recurse on PHI nodes.
if (isa<PHINode>(User) && Processed.count(User))