[llvm-commits] [patch] - Bugfix for TargetLowering::SimplifySetCC
Evan Cheng
evan.cheng at apple.com
Thu Jul 29 22:52:41 PDT 2010
Sorry I completely missed this patch. I agree there is a bug here but I don't know this code well enough to determine if this is the right fix. Eli, you wrote the optimization. Do you mind take a look at this?
Evan
On May 20, 2010, at 6:17 AM, Evzen Muller wrote:
> Hi all,
>
> When I compile this code (clang generates something similar for bitfield
> access):
>
> target datalayout = "e-p:32:32-f64:32:32-i64:32:32-n32"
> target triple = "arm-none-eabi"
>
> define i32 @extend2bit_v2(i32 %val) {
> entry:
> %0 = trunc i32 %val to i2 ; <i2> [#uses=1]
> %1 = sext i2 %0 to i32 ; <i32> [#uses=1]
> %2 = icmp eq i32 %1, 3 ; <i1> [#uses=1]
> %3 = zext i1 %2 to i32 ; <i32> [#uses=1]
> ret i32 %3
> }
>
> ARM codegen produces:
> @ BB#0: @ %entry
> and r1, r0, #3
> mov r0, #0
> cmp r1, #3
> moveq r0, #1
> bx lr
>
> This is not correct, because when %val == 3 this will return 1, but expected
> result is 0 because i2 constant (3) should be sign-extended before icmp.
>
> There is an optimization in TargetLowering::SimplifySetCC (around line 1790)
> which works fine if C1 has more or less active bits than ExtSrcTyBits, but I
> think that if C1.getActiveBits() == ExtSrcTyBits we should do normal
> truncate/sign-extend.
>
> Attached patch should fix this problem.
>
> Thanks
> Evzen
>
> <simplify_setcc_bugfix.patch>_______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list