Simplify isHighOnes().
authorZhou Sheng <zhousheng00@gmail.com>
Tue, 20 Mar 2007 12:49:06 +0000 (12:49 +0000)
committerZhou Sheng <zhousheng00@gmail.com>
Tue, 20 Mar 2007 12:49:06 +0000 (12:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35211 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index 287a0077ec6c35f1981d71532c766c614b36ea53..891868b98a6de869c61443dfc53a21d66a7a90b0 100644 (file)
@@ -3491,15 +3491,7 @@ 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) {
-  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 &= APInt::getAllOnesValue(CI->getType()->getBitWidth());
-
-  APInt U(V+1);  // If it is low ones, this should be a power of two.
-  return (U!=0) && (V!=0) && (U & V) == 0;
+  return (~CI->getValue() + 1).isPowerOf2();
 }
 
 /// getICmpCode - Encode a icmp predicate into a three bit mask.  These bits