diff options
Diffstat (limited to 'llvm/lib/Transforms/IPO')
| -rw-r--r-- | llvm/lib/Transforms/IPO/IPConstantPropagation.cpp | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/IPO/IPConstantPropagation.cpp b/llvm/lib/Transforms/IPO/IPConstantPropagation.cpp index 99ad8445b15..65d507798b7 100644 --- a/llvm/lib/Transforms/IPO/IPConstantPropagation.cpp +++ b/llvm/lib/Transforms/IPO/IPConstantPropagation.cpp @@ -180,9 +180,12 @@ bool IPCP::PropagateConstantReturn(Function &F) {    if (ReplacedAllUsers && F.hasInternalLinkage() && !isa<UndefValue>(RetVal)) {      Value *RV = UndefValue::get(RetVal->getType());      for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB) -      if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) -        RI->setOperand(0, RV); -    MadeChange = true; +      if (ReturnInst *RI = dyn_cast<ReturnInst>(BB->getTerminator())) { +        if (RI->getOperand(0) != RV) { +          RI->setOperand(0, RV); +          MadeChange = true; +        } +      }    }    if (MadeChange) ++NumReturnValProped;  | 

