diff options
| author | Dan Gohman <dan433584@gmail.com> | 2017-11-30 22:10:53 +0000 |
|---|---|---|
| committer | Dan Gohman <dan433584@gmail.com> | 2017-11-30 22:10:53 +0000 |
| commit | 59e4c0b9381e9402d4987a5e5e5dec8424fbc4c6 (patch) | |
| tree | 43584c78a2af8282b29cf8d065c5a90a638b7350 /llvm/lib/Analysis | |
| parent | 9d939c8f19854b94c99c37365d6c567deb4acc95 (diff) | |
| download | bcm5719-llvm-59e4c0b9381e9402d4987a5e5e5dec8424fbc4c6.tar.gz bcm5719-llvm-59e4c0b9381e9402d4987a5e5e5dec8424fbc4c6.zip | |
[memcpyopt] Teach memcpyopt to optimize across basic blocks
This teaches memcpyopt to make a non-local memdep query when a local query
indicates that the dependency is non-local. This notably allows it to
eliminate many more llvm.memcpy calls in common Rust code, often by 20-30%.
Fixes PR28958.
Differential Revision: https://reviews.llvm.org/D38374
llvm-svn: 319482
Diffstat (limited to 'llvm/lib/Analysis')
| -rw-r--r-- | llvm/lib/Analysis/MemoryDependenceAnalysis.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp b/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp index ba90f1cf2fb..d41b6be75f2 100644 --- a/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp +++ b/llvm/lib/Analysis/MemoryDependenceAnalysis.cpp @@ -919,6 +919,14 @@ void MemoryDependenceResults::getNonLocalPointerDependency( Instruction *QueryInst, SmallVectorImpl<NonLocalDepResult> &Result) { const MemoryLocation Loc = MemoryLocation::get(QueryInst); bool isLoad = isa<LoadInst>(QueryInst); + return getNonLocalPointerDependencyFrom(QueryInst, Loc, isLoad, Result); +} + +void MemoryDependenceResults::getNonLocalPointerDependencyFrom( + Instruction *QueryInst, + const MemoryLocation &Loc, + bool isLoad, + SmallVectorImpl<NonLocalDepResult> &Result) { BasicBlock *FromBB = QueryInst->getParent(); assert(FromBB); |

