Fix for PR185 & IndVarsSimplify/2003-12-15-Crash.llx
authorChris Lattner <sabre@nondot.org>
Mon, 15 Dec 2003 17:34:02 +0000 (17:34 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 15 Dec 2003 17:34:02 +0000 (17:34 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10473 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/IndVarSimplify.cpp

index ed5aca372ab0469aab9d44a109732b2998b38780..763854ee0b111b3b2cdafddefcf6077f2e3d47c3 100644 (file)
@@ -26,6 +26,7 @@
 #include "Support/Debug.h"
 #include "Support/Statistic.h"
 #include "Support/STLExtras.h"
+#include <algorithm>
 using namespace llvm;
 
 namespace {
@@ -206,6 +207,14 @@ static bool TransformLoop(LoopInfo *Loops, Loop *Loop) {
           PHIOps.insert(PHIOps.end(), MaybeDead->op_begin(),
                         MaybeDead->op_end());
           MaybeDead->getParent()->getInstList().erase(MaybeDead);
+          
+          // Erase any duplicates entries in the PHIOps list.
+          std::vector<Value*>::iterator It =
+            std::find(PHIOps.begin(), PHIOps.end(), MaybeDead);
+          while (It != PHIOps.end()) {
+            PHIOps.erase(It);
+            It = std::find(PHIOps.begin(), PHIOps.end(), MaybeDead);
+          }
 
           // Erasing the instruction could invalidate the AfterPHI iterator!
           AfterPHIIt = Header->begin();