[llvm-commits] [llvm] r145432 - /llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp

Stepan Dyatkovskiy stpworld at narod.ru
Tue Nov 29 12:34:39 PST 2011


Author: dyatkovskiy
Date: Tue Nov 29 14:34:39 2011
New Revision: 145432

URL: http://llvm.org/viewvc/llvm-project?rev=145432&view=rev
Log:
Potential bug in RewriteLoopBodyWithConditionConstant: use iterator should not be changed inside the uses enumeration loop.

Modified:
    llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp?rev=145432&r1=145431&r2=145432&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp Tue Nov 29 14:34:39 2011
@@ -907,9 +907,13 @@
       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;
   }





More information about the llvm-commits mailing list