[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