[llvm-commits] [llvm] r82378 - in /llvm/trunk: lib/VMCore/ConstantFold.cpp test/Transforms/ConstProp/2009-09-19-ConstFold-i1-ConstExpr.ll

Nick Lewycky nicholas at mxc.ca
Sat Sep 19 23:24:51 PDT 2009


Author: nicholas
Date: Sun Sep 20 01:24:51 2009
New Revision: 82378

URL: http://llvm.org/viewvc/llvm-project?rev=82378&view=rev
Log:
Teach the constant folder how to not a cmpinst.

Modified:
    llvm/trunk/lib/VMCore/ConstantFold.cpp
    llvm/trunk/test/Transforms/ConstProp/2009-09-19-ConstFold-i1-ConstExpr.ll

Modified: llvm/trunk/lib/VMCore/ConstantFold.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/ConstantFold.cpp?rev=82378&r1=82377&r2=82378&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/ConstantFold.cpp (original)
+++ llvm/trunk/lib/VMCore/ConstantFold.cpp Sun Sep 20 01:24:51 2009
@@ -704,6 +704,20 @@
       break;
     case Instruction::Xor:
       if (CI2->equalsInt(0)) return C1;    // X ^ 0 == X
+
+      if (ConstantExpr *CE1 = dyn_cast<ConstantExpr>(C1)) {
+        switch (CE1->getOpcode()) {
+        default: break;
+        case Instruction::ICmp:
+        case Instruction::FCmp:
+          // icmp pred ^ true -> icmp !pred
+          assert(CI2->equalsInt(1));
+	  CmpInst::Predicate pred = (CmpInst::Predicate)CE1->getPredicate();
+          pred = CmpInst::getInversePredicate(pred);
+          return ConstantExpr::getCompare(pred, CE1->getOperand(0),
+                                          CE1->getOperand(1));
+        }
+      }
       break;
     case Instruction::AShr:
       // ashr (zext C to Ty), C2 -> lshr (zext C, CSA), C2

Modified: llvm/trunk/test/Transforms/ConstProp/2009-09-19-ConstFold-i1-ConstExpr.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ConstProp/2009-09-19-ConstFold-i1-ConstExpr.ll?rev=82378&r1=82377&r2=82378&view=diff

==============================================================================
--- llvm/trunk/test/Transforms/ConstProp/2009-09-19-ConstFold-i1-ConstExpr.ll (original)
+++ llvm/trunk/test/Transforms/ConstProp/2009-09-19-ConstFold-i1-ConstExpr.ll Sun Sep 20 01:24:51 2009
@@ -28,3 +28,9 @@
 ; CHECK-NOT: bitcast
 ; CHECK: icmp
 
+global i1 icmp eq (i1 icmp ult (i8* @X, i8* @Y), i1 false)
+; CHECK-NOT: false
+; CHECK: icmp
+global i1 icmp eq (i1 icmp ult (i8* @X, i8* @Y), i1 true)
+; CHECK-NOT: true
+; CHECK: icmp





More information about the llvm-commits mailing list