Handle logical shift right (at least I hope so :) )
[llvm/msp430.git] / test / CodeGen / PowerPC / rlwimi.ll
blob5e310bb6a6ef6f10d08e770b51a1326f7992499b
1 ; All of these ands and shifts should be folded into rlwimi's
2 ; RUN: llvm-as < %s | llc -march=ppc32 | not grep and
3 ; RUN: llvm-as < %s | llc -march=ppc32 | grep rlwimi | count 8
5 define i32 @test1(i32 %x, i32 %y) {
6 entry:
7         %tmp.3 = shl i32 %x, 16         ; <i32> [#uses=1]
8         %tmp.7 = and i32 %y, 65535              ; <i32> [#uses=1]
9         %tmp.9 = or i32 %tmp.7, %tmp.3          ; <i32> [#uses=1]
10         ret i32 %tmp.9
13 define i32 @test2(i32 %x, i32 %y) {
14 entry:
15         %tmp.7 = and i32 %x, 65535              ; <i32> [#uses=1]
16         %tmp.3 = shl i32 %y, 16         ; <i32> [#uses=1]
17         %tmp.9 = or i32 %tmp.7, %tmp.3          ; <i32> [#uses=1]
18         ret i32 %tmp.9
21 define i32 @test3(i32 %x, i32 %y) {
22 entry:
23         %tmp.3 = lshr i32 %x, 16                ; <i32> [#uses=1]
24         %tmp.6 = and i32 %y, -65536             ; <i32> [#uses=1]
25         %tmp.7 = or i32 %tmp.6, %tmp.3          ; <i32> [#uses=1]
26         ret i32 %tmp.7
29 define i32 @test4(i32 %x, i32 %y) {
30 entry:
31         %tmp.6 = and i32 %x, -65536             ; <i32> [#uses=1]
32         %tmp.3 = lshr i32 %y, 16                ; <i32> [#uses=1]
33         %tmp.7 = or i32 %tmp.6, %tmp.3          ; <i32> [#uses=1]
34         ret i32 %tmp.7
37 define i32 @test5(i32 %x, i32 %y) {
38 entry:
39         %tmp.3 = shl i32 %x, 1          ; <i32> [#uses=1]
40         %tmp.4 = and i32 %tmp.3, -65536         ; <i32> [#uses=1]
41         %tmp.7 = and i32 %y, 65535              ; <i32> [#uses=1]
42         %tmp.9 = or i32 %tmp.4, %tmp.7          ; <i32> [#uses=1]
43         ret i32 %tmp.9
46 define i32 @test6(i32 %x, i32 %y) {
47 entry:
48         %tmp.7 = and i32 %x, 65535              ; <i32> [#uses=1]
49         %tmp.3 = shl i32 %y, 1          ; <i32> [#uses=1]
50         %tmp.4 = and i32 %tmp.3, -65536         ; <i32> [#uses=1]
51         %tmp.9 = or i32 %tmp.4, %tmp.7          ; <i32> [#uses=1]
52         ret i32 %tmp.9
55 define i32 @test7(i32 %x, i32 %y) {
56 entry:
57         %tmp.2 = and i32 %x, -65536             ; <i32> [#uses=1]
58         %tmp.5 = and i32 %y, 65535              ; <i32> [#uses=1]
59         %tmp.7 = or i32 %tmp.5, %tmp.2          ; <i32> [#uses=1]
60         ret i32 %tmp.7
63 define i32 @test8(i32 %bar) {
64 entry:
65         %tmp.3 = shl i32 %bar, 1                ; <i32> [#uses=1]
66         %tmp.4 = and i32 %tmp.3, 2              ; <i32> [#uses=1]
67         %tmp.6 = and i32 %bar, -3               ; <i32> [#uses=1]
68         %tmp.7 = or i32 %tmp.4, %tmp.6          ; <i32> [#uses=1]
69         ret i32 %tmp.7