blob: 5e310bb6a6ef6f10d08e770b51a1326f7992499b [file] [log] [blame]
Dan Gohmanf17a25c2007-07-18 16:29:46 +00001; All of these ands and shifts should be folded into rlwimi's
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +00002; RUN: llvm-as < %s | llc -march=ppc32 | not grep and
3; RUN: llvm-as < %s | llc -march=ppc32 | grep rlwimi | count 8
Dan Gohmanf17a25c2007-07-18 16:29:46 +00004
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +00005define i32 @test1(i32 %x, i32 %y) {
Dan Gohmanf17a25c2007-07-18 16:29:46 +00006entry:
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +00007 %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
Dan Gohmanf17a25c2007-07-18 16:29:46 +000011}
12
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000013define i32 @test2(i32 %x, i32 %y) {
Dan Gohmanf17a25c2007-07-18 16:29:46 +000014entry:
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000015 %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
Dan Gohmanf17a25c2007-07-18 16:29:46 +000019}
20
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000021define i32 @test3(i32 %x, i32 %y) {
Dan Gohmanf17a25c2007-07-18 16:29:46 +000022entry:
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000023 %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
Dan Gohmanf17a25c2007-07-18 16:29:46 +000027}
28
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000029define i32 @test4(i32 %x, i32 %y) {
Dan Gohmanf17a25c2007-07-18 16:29:46 +000030entry:
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000031 %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
Dan Gohmanf17a25c2007-07-18 16:29:46 +000035}
36
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000037define i32 @test5(i32 %x, i32 %y) {
Dan Gohmanf17a25c2007-07-18 16:29:46 +000038entry:
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000039 %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
Dan Gohmanf17a25c2007-07-18 16:29:46 +000044}
45
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000046define i32 @test6(i32 %x, i32 %y) {
Dan Gohmanf17a25c2007-07-18 16:29:46 +000047entry:
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000048 %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
Dan Gohmanf17a25c2007-07-18 16:29:46 +000053}
54
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000055define i32 @test7(i32 %x, i32 %y) {
Dan Gohmanf17a25c2007-07-18 16:29:46 +000056entry:
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000057 %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
Dan Gohmanf17a25c2007-07-18 16:29:46 +000061}
62
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000063define i32 @test8(i32 %bar) {
Dan Gohmanf17a25c2007-07-18 16:29:46 +000064entry:
Tanya Lattner5ebaf3b2008-02-19 08:07:33 +000065 %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
Dan Gohmanf17a25c2007-07-18 16:29:46 +000070}