[llvm-commits] [llvm] r48356 - /llvm/trunk/lib/Target/X86/README.txt
Evan Cheng
evan.cheng at apple.com
Fri Mar 14 10:15:26 PDT 2008
This seems like a target independent dag combiner xform?
Evan
On Mar 13, 2008, at 11:00 PM, Chris Lattner wrote:
>
>
> +These two functions perform identical operations:
> +
> +define i32 @test(i32 %f12) {
> + %tmp7.25 = lshr i32 %f12, 16
> + %tmp7.26 = trunc i32 %tmp7.25 to i8
> + %tmp78.2 = sext i8 %tmp7.26 to i32
> + ret i32 %tmp78.2
> +}
> +
> +define i32 @test2(i32 %f12) {
> + %f11 = shl i32 %f12, 8
> + %tmp7.25 = ashr i32 %f11, 24
> + ret i32 %tmp7.25
> +}
> +
> +but the first compiles into significantly better code on x86-32:
> +
> +_test:
> + movsbl 6(%esp), %eax
> + ret
> +_test2:
> + movl 4(%esp), %eax
> + shll $8, %eax
> + sarl $24, %eax
> + ret
> +
> +and on x86-64:
> +
> +_test:
> + shrl $16, %edi
> + movsbl %dil, %eax
> + ret
> +_test2:
> + shll $8, %edi
> + movl %edi, %eax
> + sarl $24, %eax
> + ret
> +
> +I would like instcombine to canonicalize the first into the second
> (since it is
> +shorter and doesn't involve type width changes) but the x86 backend
> needs to do
> +the right thing with the later sequence first.
> +
> +//
> =
> =
> =
> ---------------------------------------------------------------------
> ===//
>
>
> _______________________________________________
> 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