APIntify the isHighOnes utility function.
authorReid Spencer <rspencer@reidspencer.com>
Mon, 19 Mar 2007 21:29:50 +0000 (21:29 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Mon, 19 Mar 2007 21:29:50 +0000 (21:29 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35190 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index 1d44f6b9840a4a4c73cac024cad5894cb652f5fa..c87a351e63bc03ab110c2d32d2e58644032e6445 100644 (file)
@@ -3491,14 +3491,15 @@ static bool isLowOnes(const ConstantInt *CI) {
 // isHighOnes - Return true if the constant is of the form 1+0+.
 // This is the same as lowones(~X).
 static bool isHighOnes(const ConstantInt *CI) {
-  uint64_t V = ~CI->getZExtValue();
-  if (~V == 0) return false;  // 0's does not match "1+"
+  if (CI->getValue() == 0) return false;  // 0's does not match "1+"
+
+  APInt V(~CI->getValue());
 
   // There won't be bits set in parts that the type doesn't contain.
-  V &= ConstantInt::getAllOnesValue(CI->getType())->getZExtValue();
+  V &= APInt::getAllOnesValue(CI->getType()->getBitWidth());
 
-  uint64_t U = V+1;  // If it is low ones, this should be a power of two.
-  return U && V && (U & V) == 0;
+  APInt U(V+1);  // If it is low ones, this should be a power of two.
+  return (U!=0) && (V!=0) && (U & V) == 0;
 }
 
 /// getICmpCode - Encode a icmp predicate into a three bit mask.  These bits