diff options
Diffstat (limited to 'llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp index b1a2ed39f24..c750ece41b4 100644 --- a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp +++ b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp @@ -673,19 +673,23 @@ bool MemCpyOpt::performCallSlotOptzn(Instruction *cpy, if (isa<BitCastInst>(U) || isa<AddrSpaceCastInst>(U)) { for (User *UU : U->users()) srcUseList.push_back(UU); - } else if (GetElementPtrInst *G = dyn_cast<GetElementPtrInst>(U)) { - if (G->hasAllZeroIndices()) - for (User *UU : U->users()) - srcUseList.push_back(UU); - else + continue; + } + if (GetElementPtrInst *G = dyn_cast<GetElementPtrInst>(U)) { + if (!G->hasAllZeroIndices()) return false; - } else if (const IntrinsicInst *IT = dyn_cast<IntrinsicInst>(U)) { - if (IT->getIntrinsicID() != Intrinsic::lifetime_start && - IT->getIntrinsicID() != Intrinsic::lifetime_end) + + for (User *UU : U->users()) + srcUseList.push_back(UU); + continue; + } + if (const IntrinsicInst *IT = dyn_cast<IntrinsicInst>(U)) + if (IT->getIntrinsicID() == Intrinsic::lifetime_start || + IT->getIntrinsicID() == Intrinsic::lifetime_end) continue; - } else if (U != C && U != cpy) { + + if (U != C && U != cpy) return false; - } } // Check that src isn't captured by the called function since the |

