Skip to content

Commit

Permalink
Fix PR26051: Memcpy optimization should introduce a call to memcpy be…
Browse files Browse the repository at this point in the history
…fore the store destination position

This is a conservative fix, I expect Amaury to relax this.
Follow-up for r256923

From: Mehdi Amini <[email protected]>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@256999 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
joker-eph committed Jan 6, 2016
1 parent 3442ec9 commit 7fee368
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
6 changes: 4 additions & 2 deletions lib/Transforms/Scalar/MemCpyOptimizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
// 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);
if (AA.getModRefInfo(&*I, StoreLoc) != MRI_NoModRef) {
if (&*I == SI->getOperand(1) ||
AA.getModRefInfo(&*I, StoreLoc) != MRI_NoModRef) {
P = nullptr;
break;
}
Expand Down
14 changes: 14 additions & 0 deletions test/Transforms/MemCpyOpt/fca2memcpy.ll
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,17 @@ define void @copyalias(%S* %src, %S* %dst) {
store %S %2, %S* %dst
ret void
}


; The GEP is present after the aliasing store, preventing to move the memcpy before
; (without further analysis/transformation)
define void @copyaliaswithproducerinbetween(%S* %src, %S* %dst) {
; CHECK-LABEL: copyalias
; CHECK-NEXT: [[LOAD:%[a-z0-9\.]+]] = load %S, %S* %src
; CHECK-NOT: call
%1 = load %S, %S* %src
store %S undef, %S* %dst
%dst2 = getelementptr %S , %S* %dst, i64 1
store %S %1, %S* %dst2
ret void
}

0 comments on commit 7fee368

Please sign in to comment.