Handle logical shift right (at least I hope so :) )
[llvm/msp430.git] / test / CodeGen / PowerPC / rlwinm2.ll
blob06ceaa2a9cdc3c11b82aadd5a6bcf9c3163f79c1
1 ; All of these ands and shifts should be folded into rlw[i]nm instructions
2 ; RUN: llvm-as < %s | llc -march=ppc32 -o %t -f
3 ; RUN: not grep and %t
4 ; RUN: not grep srawi %t 
5 ; RUN: not grep srwi %t 
6 ; RUN: not grep slwi %t 
7 ; RUN: grep rlwnm %t | count 1
8 ; RUN: grep rlwinm %t | count 1
10 define i32 @test1(i32 %X, i32 %Y) {
11 entry:
12         %tmp = trunc i32 %Y to i8               ; <i8> [#uses=2]
13         %tmp1 = shl i32 %X, %Y          ; <i32> [#uses=1]
14         %tmp2 = sub i32 32, %Y          ; <i8> [#uses=1]
15         %tmp3 = lshr i32 %X, %tmp2              ; <i32> [#uses=1]
16         %tmp4 = or i32 %tmp1, %tmp3             ; <i32> [#uses=1]
17         %tmp6 = and i32 %tmp4, 127              ; <i32> [#uses=1]
18         ret i32 %tmp6
21 define i32 @test2(i32 %X) {
22 entry:
23         %tmp1 = lshr i32 %X, 27         ; <i32> [#uses=1]
24         %tmp2 = shl i32 %X, 5           ; <i32> [#uses=1]
25         %tmp2.masked = and i32 %tmp2, 96                ; <i32> [#uses=1]
26         %tmp5 = or i32 %tmp1, %tmp2.masked              ; <i32> [#uses=1]
27         ret i32 %tmp5