aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Transforms/Scalar/DeadStoreElimination.cpp9
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;
}