• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; All of these ands and shifts should be folded into rlwimi's
2; RUN: llc < %s -march=ppc32 | not grep and
3; RUN: llc < %s -march=ppc32 | grep rlwimi | count 8
4
5define i32 @test1(i32 %x, i32 %y) {
6entry:
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
11}
12
13define i32 @test2(i32 %x, i32 %y) {
14entry:
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
19}
20
21define i32 @test3(i32 %x, i32 %y) {
22entry:
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
27}
28
29define i32 @test4(i32 %x, i32 %y) {
30entry:
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
35}
36
37define i32 @test5(i32 %x, i32 %y) {
38entry:
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
44}
45
46define i32 @test6(i32 %x, i32 %y) {
47entry:
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
53}
54
55define i32 @test7(i32 %x, i32 %y) {
56entry:
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
61}
62
63define i32 @test8(i32 %bar) {
64entry:
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
70}
71