Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Analysis / CostModel / SystemZ / divrem-pow2.ll
blobb30245fe9d305ea2e151683421822b53206813c5
1 ; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -mtriple=systemz-unknown -mcpu=z13 \
2 ; RUN:  | FileCheck %s -check-prefix=COST
4 ; Check that all divide/remainder instructions are implemented by cheaper instructions.
5 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 -o - | FileCheck %s
6 ; CHECK-NOT: dsg
7 ; CHECK-NOT: dl
9 ; Scalar sdiv
11 define i64 @fun0(i64 %a) {
12   %r = sdiv i64 %a, 2
13   ret i64 %r
14 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv i64 %a, 2
17 define i64 @fun1(i64 %a) {
18   %r = sdiv i64 %a, -4
19   ret i64 %r
20 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv i64 %a, -4
23 define i32 @fun2(i32 %a) {
24   %r = sdiv i32 %a, 8
25   ret i32 %r
26 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv i32 %a, 8
29 define i32 @fun3(i32 %a) {
30   %r = sdiv i32 %a, -16
31   ret i32 %r
32 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv i32 %a, -16
35 define i16 @fun4(i16 %a) {
36   %r = sdiv i16 %a, 32
37   ret i16 %r
38 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv i16 %a, 32
41 define i16 @fun5(i16 %a) {
42   %r = sdiv i16 %a, -64
43   ret i16 %r
44 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv i16 %a, -64
47 define i8 @fun6(i8 %a) {
48   %r = sdiv i8 %a, 64
49   ret i8 %r
50 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv i8 %a, 64
53 define i8 @fun7(i8 %a) {
54   %r = sdiv i8 %a, -128
55   ret i8 %r
56 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv i8 %a, -128
59 ; Vector sdiv
61 define <2 x i64> @fun8(<2 x i64> %a) {
62   %r = sdiv <2 x i64> %a, <i64 2, i64 2>
63   ret <2 x i64> %r
64 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv <2 x i64> %a, <i64 2, i64 2>
67 define <2 x i64> @fun9(<2 x i64> %a) {
68   %r = sdiv <2 x i64> %a, <i64 -4, i64 -4>
69   ret <2 x i64> %r
70 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv <2 x i64> %a, <i64 -4, i64 -4>
73 define <4 x i32> @fun10(<4 x i32> %a) {
74   %r = sdiv <4 x i32> %a, <i32 8, i32 8, i32 8, i32 8>
75   ret <4 x i32> %r
76 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv <4 x i32> %a, <i32 8, i32 8, i32 8, i32 8>
79 define <4 x i32> @fun11(<4 x i32> %a) {
80   %r = sdiv <4 x i32> %a, <i32 -16, i32 -16, i32 -16, i32 -16>
81   ret <4 x i32> %r
82 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv <4 x i32> %a, <i32 -16
85 define <2 x i32> @fun12(<2 x i32> %a) {
86   %r = sdiv <2 x i32> %a, <i32 -16, i32 -16>
87   ret <2 x i32> %r
88 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv <2 x i32> %a, <i32 -16
91 define <8 x i16> @fun13(<8 x i16> %a) {
92   %r = sdiv <8 x i16> %a, <i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32>
93   ret <8 x i16> %r
94 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv <8 x i16> %a, <i16 32
97 define <8 x i16> @fun14(<8 x i16> %a) {
98   %r = sdiv <8 x i16> %a, <i16 -64, i16 -64, i16 -64, i16 -64, i16 -64, i16 -64, i16 -64, i16 -64>
99   ret <8 x i16> %r
100 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv <8 x i16> %a, <i16 -64
103 define <4 x i16> @fun15(<4 x i16> %a) {
104   %r = sdiv <4 x i16> %a, <i16 32, i16 32, i16 32, i16 32>
105   ret <4 x i16> %r
106 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv <4 x i16> %a, <i16 32
109 define <16 x i8> @fun16(<16 x i8> %a) {
110   %r = sdiv <16 x i8> %a, <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>
111   ret <16 x i8> %r
112 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv <16 x i8> %a, <i8 64
115 define <16 x i8> @fun17(<16 x i8> %a) {
116   %r = sdiv <16 x i8> %a, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
117   ret <16 x i8> %r
118 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv <16 x i8> %a, <i8 -128
121 define <8 x i8> @fun18(<8 x i8> %a) {
122   %r = sdiv <8 x i8> %a, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
123   ret <8 x i8> %r
124 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = sdiv <8 x i8> %a, <i8 -128
127 ; Scalar udiv
129 define i64 @fun19(i64 %a) {
130   %r = udiv i64 %a, 2
131   ret i64 %r
132 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = udiv i64 %a, 2
135 define i32 @fun20(i32 %a) {
136   %r = udiv i32 %a, 8
137   ret i32 %r
138 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = udiv i32 %a, 8
141 define i16 @fun21(i16 %a) {
142   %r = udiv i16 %a, 32
143   ret i16 %r
144 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = udiv i16 %a, 32
147 define i8 @fun22(i8 %a) {
148   %r = udiv i8 %a, 128
149   ret i8 %r
150 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = udiv i8 %a, -128
153 ; Vector udiv
155 define <2 x i64> @fun23(<2 x i64> %a) {
156   %r = udiv <2 x i64> %a, <i64 2, i64 2>
157   ret <2 x i64> %r
158 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = udiv <2 x i64> %a, <i64 2
161 define <4 x i32> @fun24(<4 x i32> %a) {
162   %r = udiv <4 x i32> %a, <i32 8, i32 8, i32 8, i32 8>
163   ret <4 x i32> %r
164 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = udiv <4 x i32> %a, <i32 8
167 define <2 x i32> @fun25(<2 x i32> %a) {
168   %r = udiv <2 x i32> %a, <i32 8, i32 8>
169   ret <2 x i32> %r
170 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = udiv <2 x i32> %a, <i32 8
173 define <8 x i16> @fun26(<8 x i16> %a) {
174   %r = udiv <8 x i16> %a, <i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32>
175   ret <8 x i16> %r
176 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = udiv <8 x i16> %a, <i16 32
179 define <4 x i16> @fun27(<4 x i16> %a) {
180   %r = udiv <4 x i16> %a, <i16 32, i16 32, i16 32, i16 32>
181   ret <4 x i16> %r
182 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = udiv <4 x i16> %a, <i16 32
185 define <16 x i8> @fun28(<16 x i8> %a) {
186   %r = udiv <16 x i8> %a, <i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>
187   ret <16 x i8> %r
188 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = udiv <16 x i8> %a, <i8 -128
191 define <8 x i8> @fun29(<8 x i8> %a) {
192   %r = udiv <8 x i8> %a, <i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>
193   ret <8 x i8> %r
194 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = udiv <8 x i8> %a, <i8 -128
197 ; Scalar srem
199 define i64 @fun30(i64 %a) {
200   %r = srem i64 %a, 2
201   ret i64 %r
202 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem i64 %a, 2
205 define i64 @fun31(i64 %a) {
206   %r = srem i64 %a, -4
207   ret i64 %r
208 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem i64 %a, -4
211 define i32 @fun32(i32 %a) {
212   %r = srem i32 %a, 8
213   ret i32 %r
214 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem i32 %a, 8
217 define i32 @fun33(i32 %a) {
218   %r = srem i32 %a, -16
219   ret i32 %r
220 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem i32 %a, -16
223 define i16 @fun34(i16 %a) {
224   %r = srem i16 %a, 32
225   ret i16 %r
226 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem i16 %a, 32
229 define i16 @fun35(i16 %a) {
230   %r = srem i16 %a, -64
231   ret i16 %r
232 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem i16 %a, -64
235 define i8 @fun36(i8 %a) {
236   %r = srem i8 %a, 64
237   ret i8 %r
238 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem i8 %a, 64
241 define i8 @fun37(i8 %a) {
242   %r = srem i8 %a, -128
243   ret i8 %r
244 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem i8 %a, -128
247 ; Vector srem
249 define <2 x i64> @fun38(<2 x i64> %a) {
250   %r = srem <2 x i64> %a, <i64 2, i64 2>
251   ret <2 x i64> %r
252 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem <2 x i64> %a, <i64 2, i64 2>
255 define <2 x i64> @fun39(<2 x i64> %a) {
256   %r = srem <2 x i64> %a, <i64 -4, i64 -4>
257   ret <2 x i64> %r
258 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem <2 x i64> %a, <i64 -4, i64 -4>
261 define <4 x i32> @fun40(<4 x i32> %a) {
262   %r = srem <4 x i32> %a, <i32 8, i32 8, i32 8, i32 8>
263   ret <4 x i32> %r
264 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem <4 x i32> %a, <i32 8, i32 8, i32 8, i32 8>
267 define <4 x i32> @fun41(<4 x i32> %a) {
268   %r = srem <4 x i32> %a, <i32 -16, i32 -16, i32 -16, i32 -16>
269   ret <4 x i32> %r
270 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem <4 x i32> %a, <i32 -16
273 define <2 x i32> @fun42(<2 x i32> %a) {
274   %r = srem <2 x i32> %a, <i32 -16, i32 -16>
275   ret <2 x i32> %r
276 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem <2 x i32> %a, <i32 -16
279 define <8 x i16> @fun43(<8 x i16> %a) {
280   %r = srem <8 x i16> %a, <i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32>
281   ret <8 x i16> %r
282 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem <8 x i16> %a, <i16 32
285 define <8 x i16> @fun44(<8 x i16> %a) {
286   %r = srem <8 x i16> %a, <i16 -64, i16 -64, i16 -64, i16 -64, i16 -64, i16 -64, i16 -64, i16 -64>
287   ret <8 x i16> %r
288 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem <8 x i16> %a, <i16 -64
291 define <4 x i16> @fun45(<4 x i16> %a) {
292   %r = srem <4 x i16> %a, <i16 32, i16 32, i16 32, i16 32>
293   ret <4 x i16> %r
294 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem <4 x i16> %a, <i16 32
297 define <16 x i8> @fun46(<16 x i8> %a) {
298   %r = srem <16 x i8> %a, <i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64, i8 64>
299   ret <16 x i8> %r
300 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem <16 x i8> %a, <i8 64
303 define <16 x i8> @fun47(<16 x i8> %a) {
304   %r = srem <16 x i8> %a, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
305   ret <16 x i8> %r
306 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem <16 x i8> %a, <i8 -128
309 define <8 x i8> @fun48(<8 x i8> %a) {
310   %r = srem <8 x i8> %a, <i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128, i8 -128>
311   ret <8 x i8> %r
312 ; COST: Cost Model: Found an estimated cost of 4 for instruction:   %r = srem <8 x i8> %a, <i8 -128
315 ; Scalar urem
317 define i64 @fun49(i64 %a) {
318   %r = urem i64 %a, 2
319   ret i64 %r
320 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = urem i64 %a, 2
323 define i32 @fun50(i32 %a) {
324   %r = urem i32 %a, 8
325   ret i32 %r
326 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = urem i32 %a, 8
329 define i16 @fun51(i16 %a) {
330   %r = urem i16 %a, 32
331   ret i16 %r
332 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = urem i16 %a, 32
335 define i8 @fun52(i8 %a) {
336   %r = urem i8 %a, 128
337   ret i8 %r
338 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = urem i8 %a, -128
341 ; Vector urem
343 define <2 x i64> @fun53(<2 x i64> %a) {
344   %r = urem <2 x i64> %a, <i64 2, i64 2>
345   ret <2 x i64> %r
346 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = urem <2 x i64> %a, <i64 2
349 define <4 x i32> @fun54(<4 x i32> %a) {
350   %r = urem <4 x i32> %a, <i32 8, i32 8, i32 8, i32 8>
351   ret <4 x i32> %r
352 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = urem <4 x i32> %a, <i32 8
355 define <2 x i32> @fun55(<2 x i32> %a) {
356   %r = urem <2 x i32> %a, <i32 8, i32 8>
357   ret <2 x i32> %r
358 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = urem <2 x i32> %a, <i32 8
361 define <8 x i16> @fun56(<8 x i16> %a) {
362   %r = urem <8 x i16> %a, <i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32>
363   ret <8 x i16> %r
364 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = urem <8 x i16> %a, <i16 32
367 define <4 x i16> @fun57(<4 x i16> %a) {
368   %r = urem <4 x i16> %a, <i16 32, i16 32, i16 32, i16 32>
369   ret <4 x i16> %r
370 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = urem <4 x i16> %a, <i16 32
373 define <16 x i8> @fun58(<16 x i8> %a) {
374   %r = urem <16 x i8> %a, <i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>
375   ret <16 x i8> %r
376 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = urem <16 x i8> %a, <i8 -128
379 define <8 x i8> @fun59(<8 x i8> %a) {
380   %r = urem <8 x i8> %a, <i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128, i8 128>
381   ret <8 x i8> %r
382 ; COST: Cost Model: Found an estimated cost of 1 for instruction:   %r = urem <8 x i8> %a, <i8 -128