From ad5367f8ed3b0ec3eedf240fc6c8f7523a4fb046 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Tue, 29 Apr 2008 21:51:00 +0000 Subject: Revert r50441. The original code was correct. Add some more comments so that I don't make the same mistake in the future. llvm-svn: 50446 --- llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'llvm/lib/Transforms') diff --git a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp index 9a39c8fd29e..d6e5f3964bb 100644 --- a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp +++ b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp @@ -668,18 +668,24 @@ bool MemCpyOpt::processMemCpy(MemCpyInst* M) { CallInst* C = CallInst::Create(MemCpyFun, args.begin(), args.end(), "", M); + + // If C and M don't interfere, then this is a valid transformation. If they + // did, this would mean that the two sources overlap, which would be bad. if (MD.getDependency(C) == MDep) { MD.dropInstruction(M); M->eraseFromParent(); + + NumMemCpyInstr++; + return true; } + // Otherwise, there was no point in doing this, so we remove the call we + // inserted and act like nothing happened. MD.removeInstruction(C); C->eraseFromParent(); - NumMemCpyInstr++; - - return true; + return false; } // MemCpyOpt::runOnFunction - This is the main transformation entry point for a -- cgit v1.2.3