As Chris suggested, handle the situation if ShAmt larger than BitWidth,
authorZhou Sheng <zhousheng00@gmail.com>
Fri, 6 Jun 2008 08:32:05 +0000 (08:32 +0000)
committerZhou Sheng <zhousheng00@gmail.com>
Fri, 6 Jun 2008 08:32:05 +0000 (08:32 +0000)
otherwise, opt might crash.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52041 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index 05e12692f4c129d33e49878b3f9e77e539c6ada7..67c40fe21c9fae77bc07808c60755e256fac26bc 100644 (file)
@@ -1236,7 +1236,7 @@ bool InstCombiner::SimplifyDemandedBits(Value *V, APInt DemandedMask,
         
       // If the input sign bit is known to be zero, or if none of the top bits
       // are demanded, turn this into an unsigned shift right.
-      if (BitWidth == ShiftAmt || RHSKnownZero[BitWidth-ShiftAmt-1] || 
+      if (BitWidth <= ShiftAmt || RHSKnownZero[BitWidth-ShiftAmt-1] || 
           (HighBits & ~DemandedMask) == HighBits) {
         // Perform the logical shift right.
         Value *NewVal = BinaryOperator::CreateLShr(