blob: 391418d75508bde1b8f50e8b96b5e9408e5df6c7 [file] [log] [blame]
Tim Northovere3d42362013-02-01 11:40:47 +00001; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu | FileCheck %s
Tim Northover20603722014-04-15 13:59:40 +00002; RUN: llc -verify-machineinstrs -o - %s -mtriple=arm64 | FileCheck %s
Tim Northovere0e3aef2013-01-31 12:12:40 +00003
4@var32_0 = global i32 0
5@var32_1 = global i32 0
6@var64_0 = global i64 0
7@var64_1 = global i64 0
8
9define void @rorv_i64() {
Stephen Lind24ab202013-07-14 06:24:09 +000010; CHECK-LABEL: rorv_i64:
Tim Northovere0e3aef2013-01-31 12:12:40 +000011 %val0_tmp = load i64* @var64_0
12 %val1_tmp = load i64* @var64_1
13 %val2_tmp = sub i64 64, %val1_tmp
14 %val3_tmp = shl i64 %val0_tmp, %val2_tmp
15 %val4_tmp = lshr i64 %val0_tmp, %val1_tmp
16 %val5_tmp = or i64 %val3_tmp, %val4_tmp
Tim Northover20603722014-04-15 13:59:40 +000017; CHECK: {{ror|rorv}} {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
Tim Northovere0e3aef2013-01-31 12:12:40 +000018 store volatile i64 %val5_tmp, i64* @var64_0
19 ret void
20}
21
22define void @asrv_i64() {
Stephen Lind24ab202013-07-14 06:24:09 +000023; CHECK-LABEL: asrv_i64:
Tim Northovere0e3aef2013-01-31 12:12:40 +000024 %val0_tmp = load i64* @var64_0
25 %val1_tmp = load i64* @var64_1
26 %val4_tmp = ashr i64 %val0_tmp, %val1_tmp
Tim Northover20603722014-04-15 13:59:40 +000027; CHECK: {{asr|asrv}} {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
Tim Northovere0e3aef2013-01-31 12:12:40 +000028 store volatile i64 %val4_tmp, i64* @var64_1
29 ret void
30}
31
32define void @lsrv_i64() {
Stephen Lind24ab202013-07-14 06:24:09 +000033; CHECK-LABEL: lsrv_i64:
Tim Northovere0e3aef2013-01-31 12:12:40 +000034 %val0_tmp = load i64* @var64_0
35 %val1_tmp = load i64* @var64_1
36 %val4_tmp = lshr i64 %val0_tmp, %val1_tmp
Tim Northover20603722014-04-15 13:59:40 +000037; CHECK: {{lsr|lsrv}} {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
Tim Northovere0e3aef2013-01-31 12:12:40 +000038 store volatile i64 %val4_tmp, i64* @var64_0
39 ret void
40}
41
42define void @lslv_i64() {
Stephen Lind24ab202013-07-14 06:24:09 +000043; CHECK-LABEL: lslv_i64:
Tim Northovere0e3aef2013-01-31 12:12:40 +000044 %val0_tmp = load i64* @var64_0
45 %val1_tmp = load i64* @var64_1
46 %val4_tmp = shl i64 %val0_tmp, %val1_tmp
Tim Northover20603722014-04-15 13:59:40 +000047; CHECK: {{lsl|lslv}} {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
Tim Northovere0e3aef2013-01-31 12:12:40 +000048 store volatile i64 %val4_tmp, i64* @var64_1
49 ret void
50}
51
52define void @udiv_i64() {
Stephen Lind24ab202013-07-14 06:24:09 +000053; CHECK-LABEL: udiv_i64:
Tim Northovere0e3aef2013-01-31 12:12:40 +000054 %val0_tmp = load i64* @var64_0
55 %val1_tmp = load i64* @var64_1
56 %val4_tmp = udiv i64 %val0_tmp, %val1_tmp
57; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
58 store volatile i64 %val4_tmp, i64* @var64_0
59 ret void
60}
61
62define void @sdiv_i64() {
Stephen Lind24ab202013-07-14 06:24:09 +000063; CHECK-LABEL: sdiv_i64:
Tim Northovere0e3aef2013-01-31 12:12:40 +000064 %val0_tmp = load i64* @var64_0
65 %val1_tmp = load i64* @var64_1
66 %val4_tmp = sdiv i64 %val0_tmp, %val1_tmp
67; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
68 store volatile i64 %val4_tmp, i64* @var64_1
69 ret void
70}
71
72
73define void @lsrv_i32() {
Stephen Lind24ab202013-07-14 06:24:09 +000074; CHECK-LABEL: lsrv_i32:
Tim Northovere0e3aef2013-01-31 12:12:40 +000075 %val0_tmp = load i32* @var32_0
76 %val1_tmp = load i32* @var32_1
77 %val2_tmp = add i32 1, %val1_tmp
78 %val4_tmp = lshr i32 %val0_tmp, %val2_tmp
Tim Northover20603722014-04-15 13:59:40 +000079; CHECK: {{lsr|lsrv}} {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
Tim Northovere0e3aef2013-01-31 12:12:40 +000080 store volatile i32 %val4_tmp, i32* @var32_0
81 ret void
82}
83
84define void @lslv_i32() {
Stephen Lind24ab202013-07-14 06:24:09 +000085; CHECK-LABEL: lslv_i32:
Tim Northovere0e3aef2013-01-31 12:12:40 +000086 %val0_tmp = load i32* @var32_0
87 %val1_tmp = load i32* @var32_1
88 %val2_tmp = add i32 1, %val1_tmp
89 %val4_tmp = shl i32 %val0_tmp, %val2_tmp
Tim Northover20603722014-04-15 13:59:40 +000090; CHECK: {{lsl|lslv}} {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
Tim Northovere0e3aef2013-01-31 12:12:40 +000091 store volatile i32 %val4_tmp, i32* @var32_1
92 ret void
93}
94
95define void @rorv_i32() {
Stephen Lind24ab202013-07-14 06:24:09 +000096; CHECK-LABEL: rorv_i32:
Tim Northovere0e3aef2013-01-31 12:12:40 +000097 %val0_tmp = load i32* @var32_0
98 %val6_tmp = load i32* @var32_1
99 %val1_tmp = add i32 1, %val6_tmp
100 %val2_tmp = sub i32 32, %val1_tmp
101 %val3_tmp = shl i32 %val0_tmp, %val2_tmp
102 %val4_tmp = lshr i32 %val0_tmp, %val1_tmp
103 %val5_tmp = or i32 %val3_tmp, %val4_tmp
Tim Northover20603722014-04-15 13:59:40 +0000104; CHECK: {{ror|rorv}} {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
Tim Northovere0e3aef2013-01-31 12:12:40 +0000105 store volatile i32 %val5_tmp, i32* @var32_0
106 ret void
107}
108
109define void @asrv_i32() {
Stephen Lind24ab202013-07-14 06:24:09 +0000110; CHECK-LABEL: asrv_i32:
Tim Northovere0e3aef2013-01-31 12:12:40 +0000111 %val0_tmp = load i32* @var32_0
112 %val1_tmp = load i32* @var32_1
113 %val2_tmp = add i32 1, %val1_tmp
114 %val4_tmp = ashr i32 %val0_tmp, %val2_tmp
Tim Northover20603722014-04-15 13:59:40 +0000115; CHECK: {{asr|asrv}} {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
Tim Northovere0e3aef2013-01-31 12:12:40 +0000116 store volatile i32 %val4_tmp, i32* @var32_1
117 ret void
118}
119
120define void @sdiv_i32() {
Stephen Lind24ab202013-07-14 06:24:09 +0000121; CHECK-LABEL: sdiv_i32:
Tim Northovere0e3aef2013-01-31 12:12:40 +0000122 %val0_tmp = load i32* @var32_0
123 %val1_tmp = load i32* @var32_1
124 %val4_tmp = sdiv i32 %val0_tmp, %val1_tmp
125; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
126 store volatile i32 %val4_tmp, i32* @var32_1
127 ret void
128}
129
130define void @udiv_i32() {
Stephen Lind24ab202013-07-14 06:24:09 +0000131; CHECK-LABEL: udiv_i32:
Tim Northovere0e3aef2013-01-31 12:12:40 +0000132 %val0_tmp = load i32* @var32_0
133 %val1_tmp = load i32* @var32_1
134 %val4_tmp = udiv i32 %val0_tmp, %val1_tmp
135; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
136 store volatile i32 %val4_tmp, i32* @var32_0
137 ret void
138}
139
140; The point of this test is that we may not actually see (shl GPR32:$Val, (zext GPR32:$Val2))
141; in the DAG (the RHS may be natively 64-bit), but we should still use the lsl instructions.
142define i32 @test_lsl32() {
Stephen Linf799e3f2013-07-13 20:38:47 +0000143; CHECK-LABEL: test_lsl32:
Tim Northovere0e3aef2013-01-31 12:12:40 +0000144
145 %val = load i32* @var32_0
146 %ret = shl i32 1, %val
Tim Northover20603722014-04-15 13:59:40 +0000147; CHECK: {{lsl|lslv}} {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
Tim Northovere0e3aef2013-01-31 12:12:40 +0000148
149 ret i32 %ret
150}
151
152define i32 @test_lsr32() {
Stephen Linf799e3f2013-07-13 20:38:47 +0000153; CHECK-LABEL: test_lsr32:
Tim Northovere0e3aef2013-01-31 12:12:40 +0000154
155 %val = load i32* @var32_0
156 %ret = lshr i32 1, %val
Tim Northover20603722014-04-15 13:59:40 +0000157; CHECK: {{lsr|lsrv}} {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
Tim Northovere0e3aef2013-01-31 12:12:40 +0000158
159 ret i32 %ret
160}
161
162define i32 @test_asr32(i32 %in) {
Stephen Linf799e3f2013-07-13 20:38:47 +0000163; CHECK-LABEL: test_asr32:
Tim Northovere0e3aef2013-01-31 12:12:40 +0000164
165 %val = load i32* @var32_0
166 %ret = ashr i32 %in, %val
Tim Northover20603722014-04-15 13:59:40 +0000167; CHECK: {{asr|asrv}} {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
Tim Northovere0e3aef2013-01-31 12:12:40 +0000168
169 ret i32 %ret
170}