[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