diff options
author | Tim Shen <timshen91@gmail.com> | 2016-08-25 19:27:26 +0000 |
---|---|---|
committer | Tim Shen <timshen91@gmail.com> | 2016-08-25 19:27:26 +0000 |
commit | a3dbead2d66a1b0b563f9648a8301394cf9246ce (patch) | |
tree | ac7a8d64b75bd2b86be9a1d7512fc7114aadae98 /llvm/lib | |
parent | 3a46def40c2c679c087918cfec00e6120b93da50 (diff) | |
download | bcm5719-llvm-a3dbead2d66a1b0b563f9648a8301394cf9246ce.tar.gz bcm5719-llvm-a3dbead2d66a1b0b563f9648a8301394cf9246ce.zip |
[MemCpy] Check for alias in performMemCpyToMemSetOptzn, instead of the identity of two operands
Summary:
This fixes pr29105. The reason is that lifetime marks creates new
aliasing pointers the original ones, but before this patch aliases
were not checked in performMemCpyToMemSetOptzn.
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D23846
llvm-svn: 279769
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp index e77a8936bb7..27c37cd5289 100644 --- a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp +++ b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp @@ -1108,8 +1108,10 @@ bool MemCpyOptPass::processMemSetMemCpyDependence(MemCpyInst *MemCpy, /// The \p MemCpy must have a Constant length. bool MemCpyOptPass::performMemCpyToMemSetOptzn(MemCpyInst *MemCpy, MemSetInst *MemSet) { + AliasAnalysis &AA = LookupAliasAnalysis(); + // This only makes sense on memcpy(..., memset(...), ...). - if (MemSet->getRawDest() != MemCpy->getRawSource()) + if (!AA.isMustAlias(MemSet->getRawDest(), MemCpy->getRawSource())) return false; ConstantInt *CopySize = cast<ConstantInt>(MemCpy->getLength()); |