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

Zhou Sheng zhousheng00 at gmail.com
Sat Mar 24 22:01:46 PDT 2007



Changes in directory llvm/lib/Transforms/Scalar:

InstructionCombining.cpp updated: 1.686 -> 1.687
---
Log message:

1. Avoid unnecessary APInt construction if possible.
2. Use isStrictlyPositive() instead of isPositive() in two places where 
   they need APInt value > 0 not only >=0.


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

 InstructionCombining.cpp |   12 +++++-------
 1 files changed, 5 insertions(+), 7 deletions(-)


Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.686 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.687
--- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.686	Sat Mar 24 23:26:16 2007
+++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp	Sun Mar 25 00:01:29 2007
@@ -2443,10 +2443,9 @@
   // Check to see if this is an unsigned division with an exact power of 2,
   // if so, convert to a right shift.
   if (ConstantInt *C = dyn_cast<ConstantInt>(Op1)) {
-    APInt Val(C->getValue());
-    if (Val != 0 && Val.isPowerOf2())    // Don't break X / 0
+    if (!C->isZero() && C->getValue().isPowerOf2())  // Don't break X / 0
       return BinaryOperator::createLShr(Op0, 
-               ConstantInt::get(Op0->getType(), Val.logBase2()));
+               ConstantInt::get(Op0->getType(), C->getValue().logBase2()));
   }
 
   // X udiv (C1 << N), where C1 is "1<<C2"  -->  X >> (N+C2)
@@ -2673,8 +2672,7 @@
     // Turn A % (C << N), where C is 2^k, into A & ((C << N)-1)  
     if (RHSI->getOpcode() == Instruction::Shl &&
         isa<ConstantInt>(RHSI->getOperand(0))) {
-      APInt C1(cast<ConstantInt>(RHSI->getOperand(0))->getValue());
-      if (C1.isPowerOf2()) {
+      if (cast<ConstantInt>(RHSI->getOperand(0))->getValue().isPowerOf2()) {
         Constant *N1 = ConstantInt::getAllOnesValue(I.getType());
         Value *Add = InsertNewInstBefore(BinaryOperator::createAdd(RHSI, N1,
                                                                    "tmp"), I);
@@ -2711,7 +2709,7 @@
   
   if (Value *RHSNeg = dyn_castNegVal(Op1))
     if (!isa<ConstantInt>(RHSNeg) || 
-        cast<ConstantInt>(RHSNeg)->getValue().isPositive()) {
+        cast<ConstantInt>(RHSNeg)->getValue().isStrictlyPositive()) {
       // X % -Y -> X % Y
       AddUsesToWorkList(I);
       I.setOperand(1, RHSNeg);
@@ -7466,7 +7464,7 @@
       (ParamTy->isInteger() && ActTy->isInteger() &&
        ParamTy->getPrimitiveSizeInBits() >= ActTy->getPrimitiveSizeInBits()) ||
       (c && ParamTy->getPrimitiveSizeInBits() >= ActTy->getPrimitiveSizeInBits()
-       && c->getValue().isPositive());
+       && c->getValue().isStrictlyPositive());
     if (Callee->isDeclaration() && !isConvertible) return false;
   }
 






More information about the llvm-commits mailing list