OSDN Git Service

Implement isMinValuePlusOne using facilities of APInt instead of uint64_t
authorReid Spencer <rspencer@reidspencer.com>
Mon, 19 Mar 2007 21:08:07 +0000 (21:08 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Mon, 19 Mar 2007 21:08:07 +0000 (21:08 +0000)
Patch by Zhou Sheng.

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

lib/Transforms/Scalar/InstructionCombining.cpp

index dbe694f..e520773 100644 (file)
@@ -3463,12 +3463,11 @@ static bool isMaxValueMinusOne(const ConstantInt *C, bool isSigned) {
 static bool isMinValuePlusOne(const ConstantInt *C, bool isSigned) {
   if (isSigned) {
     // Calculate 1111111111000000000000
-    unsigned TypeBits = C->getType()->getPrimitiveSizeInBits();
-    int64_t Val = -1;                    // All ones
-    Val <<= TypeBits-1;                  // Shift over to the right spot
-    return C->getSExtValue() == Val+1;
+    uint32_t TypeBits = C->getType()->getPrimitiveSizeInBits();
+    APInt Val(APInt::getSignedMinValue(TypeBits));
+    return C->getValue() == Val+1;
   }
-  return C->getZExtValue() == 1; // unsigned
+  return C->getValue() == 1; // unsigned
 }
 
 // isOneBitSet - Return true if there is exactly one bit set in the specified