diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/IndVarSimplify.cpp | 3 | 
1 files changed, 3 insertions, 0 deletions
| diff --git a/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp b/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp index b1cde4177bf..1dd84b1816b 100644 --- a/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp +++ b/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp @@ -739,6 +739,7 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {          // See if we can figure out sext(i+constant) doesn't wrap, so we can          // use a larger add.  This is common in subscripting.          if (UInst && UInst->getOpcode()==Instruction::Add && +            !UInst->use_empty() &&              allUsesAreSameTyped(Instruction::SExt, UInst) &&              isa<ConstantInt>(UInst->getOperand(1)) &&              NoSignedWrap && LimitVal) { @@ -771,6 +772,7 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {          // Try for sext(i | constant).  This is safe as long as the          // high bit of the constant is not set.          if (UInst && UInst->getOpcode()==Instruction::Or && +            !UInst->use_empty() &&              allUsesAreSameTyped(Instruction::SExt, UInst) && NoSignedWrap &&              isa<ConstantInt>(UInst->getOperand(1))) {            ConstantInt* RHS = dyn_cast<ConstantInt>(UInst->getOperand(1)); @@ -841,6 +843,7 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {            ConstantInt* AddRHS = dyn_cast<ConstantInt>(UInst->getOperand(1));            Instruction *UInst2 = dyn_cast<Instruction>(UInst->use_begin());            if (UInst2 && UInst2->getOpcode() == Instruction::And && +              !UInst2->use_empty() &&                allUsesAreSameTyped(Instruction::ZExt, UInst2) &&                isa<ConstantInt>(UInst2->getOperand(1))) {              ZExtInst* oldZext = dyn_cast<ZExtInst>(UInst2->use_begin()); | 

