diff options
-rw-r--r-- | lib/Transforms/Scalar/DeadStoreElimination.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/Transforms/Scalar/DeadStoreElimination.cpp b/lib/Transforms/Scalar/DeadStoreElimination.cpp index e5c557c349..b19077f1fc 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<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; } |