Fix crash in LSR due to attempt to remove original induction variable. However,
authorJeff Cohen <jeffc@jolt-lang.org>
Mon, 28 Feb 2005 00:08:56 +0000 (00:08 +0000)
committerJeff Cohen <jeffc@jolt-lang.org>
Mon, 28 Feb 2005 00:08:56 +0000 (00:08 +0000)
for reasons explained in the comments, I also deactivated this code as it needs
more thought.

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

lib/Transforms/Scalar/LoopStrengthReduce.cpp

index 19381b9e8eafb7c91b6d6905427f4151a702f79a..6494490167f3d96ac41133c14310dea47e950565 100644 (file)
@@ -78,9 +78,14 @@ DeleteTriviallyDeadInstructions(std::set<Instruction*> &Insts) {
     Instruction *I = *Insts.begin();
     Insts.erase(Insts.begin());
     if (isInstructionTriviallyDead(I)) {
-      for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
-        if (Instruction *U = dyn_cast<Instruction>(I->getOperand(i)))
-          Insts.insert(U);
+      for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
+        // Note: the PHI nodes had dropAllReferences() called on it, so its
+        // operands will all be NULL.
+        Value *V = I->getOperand(i);
+        if (V)
+          if (Instruction *U = dyn_cast<Instruction>(V))
+            Insts.insert(U);
+      }
       I->getParent()->getInstList().erase(I);
       Changed = true;
     }
@@ -237,6 +242,11 @@ void LoopStrengthReduce::runOnLoop(Loop *L) {
     // 4. the add is used by the cann indvar
     // If all four cases above are true, then we can remove both the add and
     // the cann indvar.
+#if 0
+    // FIXME: it's not clear this code is correct.  An induction variable with
+    // but one use, an increment, implies an infinite loop.  Not illegal, but
+    // of questionable utility.  It also does not update the loop info with the
+    // new induction variable.
     if (PN->hasOneUse()) {
       BinaryOperator *BO = dyn_cast<BinaryOperator>(*(PN->use_begin()));
       if (BO && BO->getOpcode() == Instruction::Add)
@@ -250,5 +260,6 @@ void LoopStrengthReduce::runOnLoop(Loop *L) {
           }
         }
     }
+#endif
   }
 }