[llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp

Reid Spencer reid at x10sys.com
Mon Mar 19 14:30:07 PDT 2007



Changes in directory llvm/lib/Transforms/Scalar:

InstructionCombining.cpp updated: 1.667 -> 1.668
---
Log message:

APIntify the isHighOnes utility function.


---
Diffs of the changes:  (+6 -5)

 InstructionCombining.cpp |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)


Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.667 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.668
--- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.667	Mon Mar 19 16:10:28 2007
+++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp	Mon Mar 19 16:29:50 2007
@@ -3491,14 +3491,15 @@
 // 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






More information about the llvm-commits mailing list