summaryrefslogtreecommitdiff
path: root/lib/Transforms/Scalar/MemCpyOptimizer.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2011-01-09 19:26:10 +0000
committerChris Lattner <sabre@nondot.org>2011-01-09 19:26:10 +0000
commitf42685004c997a4a4728cbcd9e6be1ee1d6b418f (patch)
tree86870d977d6fa9c6bc6cd1cf7beb909d493d58a4 /lib/Transforms/Scalar/MemCpyOptimizer.cpp
parent2cfa5b4934856942c2aaa6e41b67eb367d183fe6 (diff)
downloadllvm-f42685004c997a4a4728cbcd9e6be1ee1d6b418f.tar.gz
llvm-f42685004c997a4a4728cbcd9e6be1ee1d6b418f.tar.bz2
llvm-f42685004c997a4a4728cbcd9e6be1ee1d6b418f.tar.xz
fix a few old bugs (found by inspection) where we would zap instructions
without informing memdep. This could cause nondeterminstic weirdness based on where instructions happen to get allocated, and will hopefully breath some life into some broken testers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123124 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/MemCpyOptimizer.cpp')
-rw-r--r--lib/Transforms/Scalar/MemCpyOptimizer.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/Transforms/Scalar/MemCpyOptimizer.cpp b/lib/Transforms/Scalar/MemCpyOptimizer.cpp
index 102eab65f2..0d3c5c7bdc 100644
--- a/lib/Transforms/Scalar/MemCpyOptimizer.cpp
+++ b/lib/Transforms/Scalar/MemCpyOptimizer.cpp
@@ -385,7 +385,8 @@ Instruction *MemCpyOpt::tryMergingIntoMemset(Instruction *StartInst,
// Check to see if this store is to a constant offset from the start ptr.
int64_t Offset;
- if (!IsPointerOffset(StartPtr, NextStore->getPointerOperand(), Offset, *TD))
+ if (!IsPointerOffset(StartPtr, NextStore->getPointerOperand(),
+ Offset, *TD))
break;
Ranges.addStore(Offset, NextStore);
@@ -490,6 +491,7 @@ bool MemCpyOpt::processStore(StoreInst *SI, BasicBlock::iterator &BBI) {
if (changed) {
MD->removeInstruction(SI);
SI->eraseFromParent();
+ MD->removeInstruction(LI);
LI->eraseFromParent();
++NumMemCpyInstr;
return true;
@@ -786,6 +788,7 @@ bool MemCpyOpt::processMemCpy(MemCpyInst *M) {
if (CallInst *C = dyn_cast<CallInst>(DepInfo.getInst())) {
if (performCallSlotOptzn(M, M->getDest(), M->getSource(),
CopySize->getZExtValue(), C)) {
+ MD->removeInstruction(M);
M->eraseFromParent();
return true;
}