diff --git a/lib/Transforms/Scalar/DeadStoreElimination.cpp b/lib/Transforms/Scalar/DeadStoreElimination.cpp index e5c557c349f..b19077f1fcc 100644 --- a/lib/Transforms/Scalar/DeadStoreElimination.cpp +++ b/lib/Transforms/Scalar/DeadStoreElimination.cpp @@ -271,7 +271,8 @@ bool DSE::handleEndBlock(BasicBlock& BB, // See through pointer-to-pointer bitcasts TranslatePointerBitCasts(pointerOperand); - if (deadPointers.count(pointerOperand)){ + if (isa(pointerOperand) && + deadPointers.count(cast(pointerOperand))) { // Remove it! MD.removeInstruction(S); @@ -345,7 +346,8 @@ bool DSE::handleEndBlock(BasicBlock& BB, for (std::vector::iterator I = dead.begin(), E = dead.end(); I != E; ++I) - deadPointers.erase(*I); + if (AllocaInst *AI = dyn_cast(*I)) + deadPointers.erase(AI); continue; } @@ -427,7 +429,8 @@ bool DSE::RemoveUndeadPointers(Value* killPointer, for (std::vector::iterator I = undead.begin(), E = undead.end(); I != E; ++I) - deadPointers.erase(*I); + if (AllocaInst *AI = dyn_cast(*I)) + deadPointers.erase(AI); return MadeChange; }