Fix PR26051: Memcpy optimization should introduce a call to memcpy before the store...
[oota-llvm.git] / lib / Transforms / Scalar / MemCpyOptimizer.cpp
index 5711a775df8d04bd5c6fb169c1d24e803716b1d2..6b43b0f7a2ad8641a6654e97b891bab6f1ef5b94 100644 (file)
@@ -529,11 +529,13 @@ bool MemCpyOpt::processStore(StoreInst *SI, BasicBlock::iterator &BBI) {
 
           // We found an instruction that may write to the loaded memory.
           // We can try to promote at this position instead of the store
 
           // We found an instruction that may write to the loaded memory.
           // We can try to promote at this position instead of the store
-          // position if nothing alias the store memory after this.
+          // position if nothing alias the store memory after this and the store
+          // destination is not in the range.
           P = &*I;
           for (; I != E; ++I) {
             MemoryLocation StoreLoc = MemoryLocation::get(SI);
           P = &*I;
           for (; I != E; ++I) {
             MemoryLocation StoreLoc = MemoryLocation::get(SI);
-            if (AA.getModRefInfo(&*I, StoreLoc) != MRI_NoModRef) {
+            if (&*I == SI->getOperand(1) ||
+                AA.getModRefInfo(&*I, StoreLoc) != MRI_NoModRef) {
               P = nullptr;
               break;
             }
               P = nullptr;
               break;
             }