projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix PR26051: Memcpy optimization should introduce a call to memcpy before the store...
[oota-llvm.git]
/
lib
/
Transforms
/
Scalar
/
MemCpyOptimizer.cpp
diff --git
a/lib/Transforms/Scalar/MemCpyOptimizer.cpp
b/lib/Transforms/Scalar/MemCpyOptimizer.cpp
index 5711a775df8d04bd5c6fb169c1d24e803716b1d2..6b43b0f7a2ad8641a6654e97b891bab6f1ef5b94 100644
(file)
--- a/
lib/Transforms/Scalar/MemCpyOptimizer.cpp
+++ b/
lib/Transforms/Scalar/MemCpyOptimizer.cpp
@@
-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;
}