diff options
| -rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 2dab2f367de..465807ecacb 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -3836,9 +3836,12 @@ HowManyLessThans(const SCEV *LHS, const SCEV *RHS,                       : getUMaxExpr(RHS, Start);      // Determine the maximum constant end value. -    SCEVHandle MaxEnd = isa<SCEVConstant>(End) ? End : -      getConstant(isSigned ? APInt::getSignedMaxValue(BitWidth) : -                             APInt::getMaxValue(BitWidth)); +    SCEVHandle MaxEnd = +      isa<SCEVConstant>(End) ? End : +      getConstant(isSigned ? APInt::getSignedMaxValue(BitWidth) +                               .ashr(GetMinSignBits(End) - 1) : +                             APInt::getMaxValue(BitWidth) +                               .lshr(GetMinLeadingZeros(End)));      // Finally, we subtract these two values and divide, rounding up, to get      // the number of times the backedge is executed.  | 

