blob: 5e310bb6a6ef6f10d08e770b51a1326f7992499b [file] [log] [blame]
Chris Lattner5f0a8c72004-11-06 21:11:04 +00001; All of these ands and shifts should be folded into rlwimi's
Tanya Lattnercfab3da2008-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
Nate Begeman2a408412004-10-24 10:30:22 +00004
Tanya Lattnercfab3da2008-02-19 08:07:33 +00005define i32 @test1(i32 %x, i32 %y) {
Nate Begeman2a408412004-10-24 10:30:22 +00006entry:
Tanya Lattnercfab3da2008-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
Nate Begeman2a408412004-10-24 10:30:22 +000011}
12
Tanya Lattnercfab3da2008-02-19 08:07:33 +000013define i32 @test2(i32 %x, i32 %y) {
Nate Begeman2a408412004-10-24 10:30:22 +000014entry:
Tanya Lattnercfab3da2008-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
Nate Begeman2a408412004-10-24 10:30:22 +000019}
20
Tanya Lattnercfab3da2008-02-19 08:07:33 +000021define i32 @test3(i32 %x, i32 %y) {
Nate Begeman2a408412004-10-24 10:30:22 +000022entry:
Tanya Lattnercfab3da2008-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
Nate Begeman2a408412004-10-24 10:30:22 +000027}
28
Tanya Lattnercfab3da2008-02-19 08:07:33 +000029define i32 @test4(i32 %x, i32 %y) {
Nate Begeman2a408412004-10-24 10:30:22 +000030entry:
Tanya Lattnercfab3da2008-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
Nate Begeman2a408412004-10-24 10:30:22 +000035}
36
Tanya Lattnercfab3da2008-02-19 08:07:33 +000037define i32 @test5(i32 %x, i32 %y) {
Nate Begeman2a408412004-10-24 10:30:22 +000038entry:
Tanya Lattnercfab3da2008-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
Nate Begeman2a408412004-10-24 10:30:22 +000044}
45
Tanya Lattnercfab3da2008-02-19 08:07:33 +000046define i32 @test6(i32 %x, i32 %y) {
Nate Begeman2a408412004-10-24 10:30:22 +000047entry:
Tanya Lattnercfab3da2008-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
Nate Begeman2a408412004-10-24 10:30:22 +000053}
54
Tanya Lattnercfab3da2008-02-19 08:07:33 +000055define i32 @test7(i32 %x, i32 %y) {
Nate Begeman2a408412004-10-24 10:30:22 +000056entry:
Tanya Lattnercfab3da2008-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
Nate Begeman2a408412004-10-24 10:30:22 +000061}
Nate Begeman2bbcca32005-08-03 18:11:23 +000062
Tanya Lattnercfab3da2008-02-19 08:07:33 +000063define i32 @test8(i32 %bar) {
Nate Begeman2bbcca32005-08-03 18:11:23 +000064entry:
Tanya Lattnercfab3da2008-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
Nate Begeman2bbcca32005-08-03 18:11:23 +000070}