don't put erase or query for non-allocainst pointers in an set of allocainsts*'s
authorChris Lattner <sabre@nondot.org>
Tue, 6 Nov 2007 22:07:22 +0000 (22:07 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 6 Nov 2007 22:07:22 +0000 (22:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43779 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/DeadStoreElimination.cpp

index e5c557c349ff80427dcde790412aedbef6a7ac6c..b19077f1fcc91fdf7f54d6b0abfe620c589baaf1 100644 (file)
@@ -271,7 +271,8 @@ bool DSE::handleEndBlock(BasicBlock& BB,
         // See through pointer-to-pointer bitcasts
         TranslatePointerBitCasts(pointerOperand);
       
-        if (deadPointers.count(pointerOperand)){
+        if (isa<AllocaInst>(pointerOperand) && 
+            deadPointers.count(cast<AllocaInst>(pointerOperand))) {
           // Remove it!
           MD.removeInstruction(S);
         
@@ -345,7 +346,8 @@ bool DSE::handleEndBlock(BasicBlock& BB,
 
       for (std::vector<Instruction*>::iterator I = dead.begin(), E = dead.end();
            I != E; ++I)
-        deadPointers.erase(*I);
+        if (AllocaInst *AI = dyn_cast<AllocaInst>(*I))
+          deadPointers.erase(AI);
       
       continue;
     }
@@ -427,7 +429,8 @@ bool DSE::RemoveUndeadPointers(Value* killPointer,
 
   for (std::vector<Instruction*>::iterator I = undead.begin(), E = undead.end();
        I != E; ++I)
-    deadPointers.erase(*I);
+    if (AllocaInst *AI = dyn_cast<AllocaInst>(*I))
+      deadPointers.erase(AI);
   
   return MadeChange;
 }