[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