diff options
| author | Rui Ueyama <ruiu@google.com> | 2014-08-06 19:30:38 +0000 |
|---|---|---|
| committer | Rui Ueyama <ruiu@google.com> | 2014-08-06 19:30:38 +0000 |
| commit | c487f7728e10eae5eadd8bb32a5ec5c1828a138f (patch) | |
| tree | 69fac32a2bcd5243b89056fa87d42bd269f559c0 /llvm/lib/Transforms | |
| parent | b5217507c7b6cb1e72109313e0980c55bddc534b (diff) | |
| download | bcm5719-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.cpp | 50 |
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; + } } } |

