diff options
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
| -rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 580fe112fcd7..623814c038a7 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -7914,9 +7914,10 @@ const SCEV *ScalarEvolution::createSCEV(Value *V) { // expression. We already checked that ShlAmt < BitWidth, so // the multiplier, 1 << (ShlAmt - AShrAmt), fits into TruncTy as // ShlAmt - AShrAmt < Amt. - uint64_t ShlAmt = ShlAmtCI->getZExtValue(); - if (ShlAmtCI->getValue().ult(BitWidth) && ShlAmt >= AShrAmt) { - APInt Mul = APInt::getOneBitSet(BitWidth - AShrAmt, ShlAmt - AShrAmt); + const APInt &ShlAmt = ShlAmtCI->getValue(); + if (ShlAmt.ult(BitWidth) && ShlAmt.uge(AShrAmt)) { + APInt Mul = APInt::getOneBitSet(BitWidth - AShrAmt, + ShlAmtCI->getZExtValue() - AShrAmt); const SCEV *CompositeExpr = getMulExpr(AddTruncateExpr, getConstant(Mul)); if (L->getOpcode() != Instruction::Shl) |
