Fix a nasty dangling pointer issue. The ScalarEvolution pass would keep a
authorChris Lattner <sabre@nondot.org>
Wed, 3 Aug 2005 21:36:09 +0000 (21:36 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 3 Aug 2005 21:36:09 +0000 (21:36 +0000)
map from instruction* to SCEVHandles.  When we delete instructions, we have
to tell it about it.  We would run into nasty cases where new instructions
were reallocated at old instruction addresses and get the old map values.
Bad bad bad :(

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

lib/Transforms/Scalar/LoopStrengthReduce.cpp

index 33714a2ad203678447fb498f4b9ea1502f3613a5..7b1168e0b4899ed257d7b1229390891fad941116 100644 (file)
@@ -149,7 +149,8 @@ DeleteTriviallyDeadInstructions(std::set<Instruction*> &Insts) {
       for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
         if (Instruction *U = dyn_cast<Instruction>(I->getOperand(i)))
           Insts.insert(U);
-      I->getParent()->getInstList().erase(I);
+      SE->deleteInstructionFromRecords(I);
+      I->eraseFromParent();
       Changed = true;
     }
   }
@@ -661,6 +662,7 @@ void LoopStrengthReduce::runOnLoop(Loop *L) {
             DeadInsts.insert(BO);
             // Break the cycle, then delete the PHI.
             PN->replaceAllUsesWith(UndefValue::get(PN->getType()));
+            SE->deleteInstructionFromRecords(PN);
             PN->eraseFromParent();
           }
         }