diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp | 11 | 
1 files changed, 6 insertions, 5 deletions
| diff --git a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp index 4210f0d9b79..76fab1cd281 100644 --- a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp +++ b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp @@ -515,11 +515,12 @@ bool MemCpyOpt::processStore(StoreInst *SI, BasicBlock::iterator &BBI) {  bool MemCpyOpt::processMemSet(MemSetInst *MSI, BasicBlock::iterator &BBI) {    // See if there is another memset or store neighboring this memset which    // allows us to widen out the memset to do a single larger store. -  if (Instruction *I = tryMergingIntoMemset(MSI, MSI->getDest(), -                                            MSI->getValue())) { -    BBI = I;  // Don't invalidate iterator. -    return true; -  } +  if (isa<ConstantInt>(MSI->getLength()) && !MSI->isVolatile()) +    if (Instruction *I = tryMergingIntoMemset(MSI, MSI->getDest(), +                                              MSI->getValue())) { +      BBI = I;  // Don't invalidate iterator. +      return true; +    }    return false;  } | 

