[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:45:35 PDT 2009
Nick Lewycky wrote:
> 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
I committed the wrong test for the transform, it should have read:
global i1 xor (i1 icmp ult (i8* @X, i8* @Y), i1 false)
; CHECK-NOT: false
; CHECK: icmp
global i1 xor (i1 icmp ult (i8* @X, i8* @Y), i1 true)
; CHECK-NOT: true
; CHECK: icmp
I will be added the transform I'm testing very shortly, so I'll simply
add the previous test in next commit.
Sorry!
Nick
More information about the llvm-commits
mailing list