summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorTim Shen <timshen91@gmail.com>2016-08-25 19:27:26 +0000
committerTim Shen <timshen91@gmail.com>2016-08-25 19:27:26 +0000
commita3dbead2d66a1b0b563f9648a8301394cf9246ce (patch)
treeac7a8d64b75bd2b86be9a1d7512fc7114aadae98 /llvm/lib
parent3a46def40c2c679c087918cfec00e6120b93da50 (diff)
downloadbcm5719-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.cpp4
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());
OpenPOWER on IntegriCloud