[llvm-commits] [llvm] r120028 - in /llvm/trunk: lib/Target/README.txt lib/Transforms/InstCombine/InstCombineShifts.cpp test/Transforms/InstCombine/shift.ll

Frits van Bommel fvbommel at gmail.com
Tue Nov 23 11:58:57 PST 2010


On Tue, Nov 23, 2010 at 7:52 PM, Benjamin Kramer
<benny.kra at googlemail.com> wrote:
>  Missed instcombine transformation:
> -define i32 @a(i32 %x) nounwind readnone {
> -entry:
> -  %rem = srem i32 %x, 32
> -  %shl = shl i32 1, %rem
> -  ret i32 %shl
> -}
> -
> -The srem can be transformed to an and because if x is negative, the shift is
> -undefined.  Here's a more general case that occurs on 64-bit targets:
>
>   %382 = srem i32 %tmp14.i, 64                    ; [#uses=1]
>   %383 = zext i32 %382 to i64                     ; [#uses=1]
>   %384 = shl i64 %381, %383                       ; [#uses=1]
>   %385 = icmp slt i32 %tmp14.i, 64                ; [#uses=1]
>
> -Testcase derived from 403.gcc.
> +The srem can be transformed to an and because if x is negative, the shift is
> +undefined.  Testcase derived from 403.gcc.

Also, this code sample doesn't have a value named '%x', so you might
want to update that text.




More information about the llvm-commits mailing list