diff options
| author | Fiona Glaser <escha@apple.com> | 2017-03-14 22:37:38 +0000 | 
|---|---|---|
| committer | Fiona Glaser <escha@apple.com> | 2017-03-14 22:37:38 +0000 | 
| commit | a9bd572b6ff780749b55cdbc6d47b868f8f15750 (patch) | |
| tree | 2d2a093648efc32d2298ee1c74778a0ce66084f0 /llvm/lib/Transforms | |
| parent | 8baba08b64d24deef73b2b479e4031d834ba2202 (diff) | |
| download | bcm5719-llvm-a9bd572b6ff780749b55cdbc6d47b868f8f15750.tar.gz bcm5719-llvm-a9bd572b6ff780749b55cdbc6d47b868f8f15750.zip | |
MemCpyOptimizer: don't create new addrspace casts
This isn't safe on all targets, and since we don't have a way
to know it's safe, avoid doing it for now.
llvm-svn: 297788
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp | 11 | 
1 files changed, 11 insertions, 0 deletions
| diff --git a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp index c5e69cd0f99..f161d6710ab 100644 --- a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp +++ b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp @@ -932,6 +932,17 @@ bool MemCpyOptPass::performCallSlotOptzn(Instruction *cpy, Value *cpyDest,    if (MR != MRI_NoModRef)      return false; +  // We can't create address space casts here because we don't know if they're +  // safe for the target. +  if (cpySrc->getType()->getPointerAddressSpace() != +      cpyDest->getType()->getPointerAddressSpace()) +    return false; +  for (unsigned i = 0; i < CS.arg_size(); ++i) +    if (CS.getArgument(i)->stripPointerCasts() == cpySrc && +        cpySrc->getType()->getPointerAddressSpace() != +        CS.getArgument(i)->getType()->getPointerAddressSpace()) +      return false; +    // All the checks have passed, so do the transformation.    bool changedArgument = false;    for (unsigned i = 0; i < CS.arg_size(); ++i) | 

