[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