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

Nick Lewycky nicholas at mxc.ca
Wed Sep 20 16:02:40 PDT 2006



Changes in directory llvm/lib/Transforms/Scalar:

PredicateSimplifier.cpp updated: 1.12 -> 1.13
---
Log message:

Once we're down to "setcc type constant1, constant2", at least come up
with the right answer.


---
Diffs of the changes:  (+14 -18)

 PredicateSimplifier.cpp |   32 ++++++++++++++------------------
 1 files changed, 14 insertions(+), 18 deletions(-)


Index: llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp
diff -u llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:1.12 llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:1.13
--- llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp:1.12	Wed Sep 20 12:04:01 2006
+++ llvm/lib/Transforms/Scalar/PredicateSimplifier.cpp	Wed Sep 20 18:02:24 2006
@@ -524,6 +524,9 @@
                                     const PropertySet &KP) {
   // Attempt to resolve the SetCondInst to a boolean.
 
+  static ConstantBool *True  = ConstantBool::True,
+                      *False = ConstantBool::False;
+
   Value *SCI0 = resolve(SCI->getOperand(0), KP),
         *SCI1 = resolve(SCI->getOperand(1), KP);
 
@@ -536,10 +539,8 @@
 
     if (NE != KP.Properties.end()) {
       switch (SCI->getOpcode()) {
-        case Instruction::SetEQ:
-          return ConstantBool::False;
-        case Instruction::SetNE:
-          return ConstantBool::True;
+        case Instruction::SetEQ: return False;
+        case Instruction::SetNE: return True;
         case Instruction::SetLE:
         case Instruction::SetGE:
         case Instruction::SetLT:
@@ -553,25 +554,20 @@
     return SCI;
   }
 
+  uint64_t I1 = CI1->getRawValue(), I2 = CI2->getRawValue();
   switch(SCI->getOpcode()) {
-    case Instruction::SetLE:
-    case Instruction::SetGE:
-    case Instruction::SetEQ:
-      if (CI1->getRawValue() == CI2->getRawValue())
-        return ConstantBool::True;
-      else
-        return ConstantBool::False;
-    case Instruction::SetLT:
-    case Instruction::SetGT:
-    case Instruction::SetNE:
-      if (CI1->getRawValue() == CI2->getRawValue())
-        return ConstantBool::False;
-      else
-        return ConstantBool::True;
+    case Instruction::SetLE: if (I1 <= I2) return True; else return False;
+    case Instruction::SetGE: if (I1 >= I2) return True; else return False;
+    case Instruction::SetEQ: if (I1 == I2) return True; else return False;
+    case Instruction::SetLT: if (I1 <  I2) return True; else return False;
+    case Instruction::SetGT: if (I1 >  I2) return True; else return False;
+    case Instruction::SetNE: if (I1 != I2) return True; else return False;
     default:
       assert(0 && "Unknown opcode in SetContInst.");
       break;
   }
+
+  return SCI;
 }
 
 Value *PredicateSimplifier::resolve(BinaryOperator *BO,






More information about the llvm-commits mailing list