insert some sequence points and preincrement an iterator to avoid
authorChris Lattner <sabre@nondot.org>
Wed, 17 Dec 2008 05:42:08 +0000 (05:42 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 17 Dec 2008 05:42:08 +0000 (05:42 +0000)
iterator invalidation problems.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61124 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/GlobalOpt.cpp

index f39a0dc63794ff9855871113a4cb06a81271575a..55fd267395ae2e4c728eae32a8a176e1ac53183f 100644 (file)
@@ -1205,10 +1205,10 @@ static void RewriteHeapSROALoadUser(Instruction *LoadUser,
   
   // If this is the first time we've seen this PHI, recursively process all
   // users.
-  for (Value::use_iterator UI = PN->use_begin(), E = PN->use_end(); UI != E;
-       ++UI)
-    RewriteHeapSROALoadUser(cast<Instruction>(*UI), InsertedScalarizedValues,
-                            PHIsToRewrite);
+  for (Value::use_iterator UI = PN->use_begin(), E = PN->use_end(); UI != E; ) {
+    Instruction *User = cast<Instruction>(*UI++);
+    RewriteHeapSROALoadUser(User, InsertedScalarizedValues, PHIsToRewrite);
+  }
 }
 
 /// RewriteUsesOfLoadForHeapSRoA - We are performing Heap SRoA on a global.  Ptr
@@ -1219,9 +1219,10 @@ static void RewriteUsesOfLoadForHeapSRoA(LoadInst *Load,
                DenseMap<Value*, std::vector<Value*> > &InsertedScalarizedValues,
                    std::vector<std::pair<PHINode*, unsigned> > &PHIsToRewrite) {
   for (Value::use_iterator UI = Load->use_begin(), E = Load->use_end();
-       UI != E; )
-    RewriteHeapSROALoadUser(cast<Instruction>(*UI++), InsertedScalarizedValues,
-                            PHIsToRewrite);
+       UI != E; ) {
+    Instruction *User = cast<Instruction>(*UI++);
+    RewriteHeapSROALoadUser(User, InsertedScalarizedValues, PHIsToRewrite);
+  }
   
   if (Load->use_empty()) {
     Load->eraseFromParent();