summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2014-08-06 19:30:38 +0000
committerRui Ueyama <ruiu@google.com>2014-08-06 19:30:38 +0000
commitc487f7728e10eae5eadd8bb32a5ec5c1828a138f (patch)
tree69fac32a2bcd5243b89056fa87d42bd269f559c0 /llvm/lib/Transforms
parentb5217507c7b6cb1e72109313e0980c55bddc534b (diff)
downloadbcm5719-llvm-c487f7728e10eae5eadd8bb32a5ec5c1828a138f.tar.gz
bcm5719-llvm-c487f7728e10eae5eadd8bb32a5ec5c1828a138f.zip
Revert "r214897 - Remove dead zero store to calloc initialized memory"
It broke msan. llvm-svn: 214989
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp50
1 files changed, 15 insertions, 35 deletions
diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
index b8cd38bd6fc..3af8ee7546f 100644
--- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp
@@ -514,49 +514,29 @@ bool DSE::runOnBasicBlock(BasicBlock &BB) {
if (!InstDep.isDef() && !InstDep.isClobber())
continue;
- // Check for cases where the store is redundant.
+ // If we're storing the same value back to a pointer that we just
+ // loaded from, then the store can be removed.
if (StoreInst *SI = dyn_cast<StoreInst>(Inst)) {
- bool DeleteStore = false;
- // If we're storing the same value back to a pointer that we just
- // loaded from, then the store can be removed.
if (LoadInst *DepLoad = dyn_cast<LoadInst>(InstDep.getInst())) {
if (SI->getPointerOperand() == DepLoad->getPointerOperand() &&
SI->getOperand(0) == DepLoad && isRemovable(SI)) {
DEBUG(dbgs() << "DSE: Remove Store Of Load from same pointer:\n "
<< "LOAD: " << *DepLoad << "\n STORE: " << *SI << '\n');
- DeleteStore = true;
- }
- }
- // If we find a store to memory which was defined by calloc
- // we can remove the store if the value being stored is a
- // constant zero (since calloc initialized the memory to
- // that same value) or the store is undefined (if out of
- // bounds).
- if (isCallocLikeFn(InstDep.getInst(), TLI) && isRemovable(SI)) {
- Value *V = SI->getValueOperand();
- if (isa<Constant>(V) && cast<Constant>(V)->isNullValue()) {
- DEBUG(dbgs() << "DSE: Remove Store Of Zero to Calloc:\n "
- << "CALLOC: " << *InstDep.getInst() << "\n"
- << "STORE: " << *SI << '\n');
- DeleteStore = true;
- }
- }
+ // DeleteDeadInstruction can delete the current instruction. Save BBI
+ // in case we need it.
+ WeakVH NextInst(BBI);
- if (DeleteStore) {
- // DeleteDeadInstruction can delete the current instruction. Save BBI
- // in case we need it.
- WeakVH NextInst(BBI);
-
- DeleteDeadInstruction(SI, *MD, TLI);
-
- if (!NextInst) // Next instruction deleted.
- BBI = BB.begin();
- else if (BBI != BB.begin()) // Revisit this instruction if possible.
- --BBI;
- ++NumFastStores;
- MadeChange = true;
- continue;
+ DeleteDeadInstruction(SI, *MD, TLI);
+
+ if (!NextInst) // Next instruction deleted.
+ BBI = BB.begin();
+ else if (BBI != BB.begin()) // Revisit this instruction if possible.
+ --BBI;
+ ++NumFastStores;
+ MadeChange = true;
+ continue;
+ }
}
}
OpenPOWER on IntegriCloud