ARM cost model: Integer div and rem is lowered to a function call
[oota-llvm.git] / test / Analysis / CostModel / ARM / divrem.ll
1 ; RUN: opt < %s  -cost-model -analyze -mtriple=thumbv7-apple-ios6.0.0 -mcpu=cortex-a9 | FileCheck %s
2
3 define <2 x i8> @sdiv_v2_i8(<2 x i8>  %a, <2 x i8> %b) {
4   ; CHECK: sdiv_v2_i8
5   ; CHECK: cost of 40 {{.*}} sdiv
6
7   %1 = sdiv <2 x i8>  %a, %b
8   ret <2 x i8> %1
9 }
10 define <2 x i16> @sdiv_v2_i16(<2 x i16>  %a, <2 x i16> %b) {
11   ; CHECK: sdiv_v2_i16
12   ; CHECK: cost of 40 {{.*}} sdiv
13
14   %1 = sdiv <2 x i16>  %a, %b
15   ret <2 x i16> %1
16 }
17 define <2 x i32> @sdiv_v2_i32(<2 x i32>  %a, <2 x i32> %b) {
18   ; CHECK: sdiv_v2_i32
19   ; CHECK: cost of 40 {{.*}} sdiv
20
21   %1 = sdiv <2 x i32>  %a, %b
22   ret <2 x i32> %1
23 }
24 define <2 x i64> @sdiv_v2_i64(<2 x i64>  %a, <2 x i64> %b) {
25   ; CHECK: sdiv_v2_i64
26   ; CHECK: cost of 40 {{.*}} sdiv
27
28   %1 = sdiv <2 x i64>  %a, %b
29   ret <2 x i64> %1
30 }
31 define <4 x i8> @sdiv_v4_i8(<4 x i8>  %a, <4 x i8> %b) {
32   ; CHECK: sdiv_v4_i8
33   ; CHECK: cost of 10 {{.*}} sdiv
34
35   %1 = sdiv <4 x i8>  %a, %b
36   ret <4 x i8> %1
37 }
38 define <4 x i16> @sdiv_v4_i16(<4 x i16>  %a, <4 x i16> %b) {
39   ; CHECK: sdiv_v4_i16
40   ; CHECK: cost of 10 {{.*}} sdiv
41
42   %1 = sdiv <4 x i16>  %a, %b
43   ret <4 x i16> %1
44 }
45 define <4 x i32> @sdiv_v4_i32(<4 x i32>  %a, <4 x i32> %b) {
46   ; CHECK: sdiv_v4_i32
47   ; CHECK: cost of 80 {{.*}} sdiv
48
49   %1 = sdiv <4 x i32>  %a, %b
50   ret <4 x i32> %1
51 }
52 define <4 x i64> @sdiv_v4_i64(<4 x i64>  %a, <4 x i64> %b) {
53   ; CHECK: sdiv_v4_i64
54   ; CHECK: cost of 80 {{.*}} sdiv
55
56   %1 = sdiv <4 x i64>  %a, %b
57   ret <4 x i64> %1
58 }
59 define <8 x i8> @sdiv_v8_i8(<8 x i8>  %a, <8 x i8> %b) {
60   ; CHECK: sdiv_v8_i8
61   ; CHECK: cost of 10 {{.*}} sdiv
62
63   %1 = sdiv <8 x i8>  %a, %b
64   ret <8 x i8> %1
65 }
66 define <8 x i16> @sdiv_v8_i16(<8 x i16>  %a, <8 x i16> %b) {
67   ; CHECK: sdiv_v8_i16
68   ; CHECK: cost of 160 {{.*}} sdiv
69
70   %1 = sdiv <8 x i16>  %a, %b
71   ret <8 x i16> %1
72 }
73 define <8 x i32> @sdiv_v8_i32(<8 x i32>  %a, <8 x i32> %b) {
74   ; CHECK: sdiv_v8_i32
75   ; CHECK: cost of 160 {{.*}} sdiv
76
77   %1 = sdiv <8 x i32>  %a, %b
78   ret <8 x i32> %1
79 }
80 define <8 x i64> @sdiv_v8_i64(<8 x i64>  %a, <8 x i64> %b) {
81   ; CHECK: sdiv_v8_i64
82   ; CHECK: cost of 160 {{.*}} sdiv
83
84   %1 = sdiv <8 x i64>  %a, %b
85   ret <8 x i64> %1
86 }
87 define <16 x i8> @sdiv_v16_i8(<16 x i8>  %a, <16 x i8> %b) {
88   ; CHECK: sdiv_v16_i8
89   ; CHECK: cost of 320 {{.*}} sdiv
90
91   %1 = sdiv <16 x i8>  %a, %b
92   ret <16 x i8> %1
93 }
94 define <16 x i16> @sdiv_v16_i16(<16 x i16>  %a, <16 x i16> %b) {
95   ; CHECK: sdiv_v16_i16
96   ; CHECK: cost of 320 {{.*}} sdiv
97
98   %1 = sdiv <16 x i16>  %a, %b
99   ret <16 x i16> %1
100 }
101 define <16 x i32> @sdiv_v16_i32(<16 x i32>  %a, <16 x i32> %b) {
102   ; CHECK: sdiv_v16_i32
103   ; CHECK: cost of 320 {{.*}} sdiv
104
105   %1 = sdiv <16 x i32>  %a, %b
106   ret <16 x i32> %1
107 }
108 define <16 x i64> @sdiv_v16_i64(<16 x i64>  %a, <16 x i64> %b) {
109   ; CHECK: sdiv_v16_i64
110   ; CHECK: cost of 320 {{.*}} sdiv
111
112   %1 = sdiv <16 x i64>  %a, %b
113   ret <16 x i64> %1
114 }
115 define <2 x i8> @udiv_v2_i8(<2 x i8>  %a, <2 x i8> %b) {
116   ; CHECK: udiv_v2_i8
117   ; CHECK: cost of 40 {{.*}} udiv
118
119   %1 = udiv <2 x i8>  %a, %b
120   ret <2 x i8> %1
121 }
122 define <2 x i16> @udiv_v2_i16(<2 x i16>  %a, <2 x i16> %b) {
123   ; CHECK: udiv_v2_i16
124   ; CHECK: cost of 40 {{.*}} udiv
125
126   %1 = udiv <2 x i16>  %a, %b
127   ret <2 x i16> %1
128 }
129 define <2 x i32> @udiv_v2_i32(<2 x i32>  %a, <2 x i32> %b) {
130   ; CHECK: udiv_v2_i32
131   ; CHECK: cost of 40 {{.*}} udiv
132
133   %1 = udiv <2 x i32>  %a, %b
134   ret <2 x i32> %1
135 }
136 define <2 x i64> @udiv_v2_i64(<2 x i64>  %a, <2 x i64> %b) {
137   ; CHECK: udiv_v2_i64
138   ; CHECK: cost of 40 {{.*}} udiv
139
140   %1 = udiv <2 x i64>  %a, %b
141   ret <2 x i64> %1
142 }
143 define <4 x i8> @udiv_v4_i8(<4 x i8>  %a, <4 x i8> %b) {
144   ; CHECK: udiv_v4_i8
145   ; CHECK: cost of 10 {{.*}} udiv
146
147   %1 = udiv <4 x i8>  %a, %b
148   ret <4 x i8> %1
149 }
150 define <4 x i16> @udiv_v4_i16(<4 x i16>  %a, <4 x i16> %b) {
151   ; CHECK: udiv_v4_i16
152   ; CHECK: cost of 10 {{.*}} udiv
153
154   %1 = udiv <4 x i16>  %a, %b
155   ret <4 x i16> %1
156 }
157 define <4 x i32> @udiv_v4_i32(<4 x i32>  %a, <4 x i32> %b) {
158   ; CHECK: udiv_v4_i32
159   ; CHECK: cost of 80 {{.*}} udiv
160
161   %1 = udiv <4 x i32>  %a, %b
162   ret <4 x i32> %1
163 }
164 define <4 x i64> @udiv_v4_i64(<4 x i64>  %a, <4 x i64> %b) {
165   ; CHECK: udiv_v4_i64
166   ; CHECK: cost of 80 {{.*}} udiv
167
168   %1 = udiv <4 x i64>  %a, %b
169   ret <4 x i64> %1
170 }
171 define <8 x i8> @udiv_v8_i8(<8 x i8>  %a, <8 x i8> %b) {
172   ; CHECK: udiv_v8_i8
173   ; CHECK: cost of 10 {{.*}} udiv
174
175   %1 = udiv <8 x i8>  %a, %b
176   ret <8 x i8> %1
177 }
178 define <8 x i16> @udiv_v8_i16(<8 x i16>  %a, <8 x i16> %b) {
179   ; CHECK: udiv_v8_i16
180   ; CHECK: cost of 160 {{.*}} udiv
181
182   %1 = udiv <8 x i16>  %a, %b
183   ret <8 x i16> %1
184 }
185 define <8 x i32> @udiv_v8_i32(<8 x i32>  %a, <8 x i32> %b) {
186   ; CHECK: udiv_v8_i32
187   ; CHECK: cost of 160 {{.*}} udiv
188
189   %1 = udiv <8 x i32>  %a, %b
190   ret <8 x i32> %1
191 }
192 define <8 x i64> @udiv_v8_i64(<8 x i64>  %a, <8 x i64> %b) {
193   ; CHECK: udiv_v8_i64
194   ; CHECK: cost of 160 {{.*}} udiv
195
196   %1 = udiv <8 x i64>  %a, %b
197   ret <8 x i64> %1
198 }
199 define <16 x i8> @udiv_v16_i8(<16 x i8>  %a, <16 x i8> %b) {
200   ; CHECK: udiv_v16_i8
201   ; CHECK: cost of 320 {{.*}} udiv
202
203   %1 = udiv <16 x i8>  %a, %b
204   ret <16 x i8> %1
205 }
206 define <16 x i16> @udiv_v16_i16(<16 x i16>  %a, <16 x i16> %b) {
207   ; CHECK: udiv_v16_i16
208   ; CHECK: cost of 320 {{.*}} udiv
209
210   %1 = udiv <16 x i16>  %a, %b
211   ret <16 x i16> %1
212 }
213 define <16 x i32> @udiv_v16_i32(<16 x i32>  %a, <16 x i32> %b) {
214   ; CHECK: udiv_v16_i32
215   ; CHECK: cost of 320 {{.*}} udiv
216
217   %1 = udiv <16 x i32>  %a, %b
218   ret <16 x i32> %1
219 }
220 define <16 x i64> @udiv_v16_i64(<16 x i64>  %a, <16 x i64> %b) {
221   ; CHECK: udiv_v16_i64
222   ; CHECK: cost of 320 {{.*}} udiv
223
224   %1 = udiv <16 x i64>  %a, %b
225   ret <16 x i64> %1
226 }
227 define <2 x i8> @srem_v2_i8(<2 x i8>  %a, <2 x i8> %b) {
228   ; CHECK: srem_v2_i8
229   ; CHECK: cost of 40 {{.*}} srem
230
231   %1 = srem <2 x i8>  %a, %b
232   ret <2 x i8> %1
233 }
234 define <2 x i16> @srem_v2_i16(<2 x i16>  %a, <2 x i16> %b) {
235   ; CHECK: srem_v2_i16
236   ; CHECK: cost of 40 {{.*}} srem
237
238   %1 = srem <2 x i16>  %a, %b
239   ret <2 x i16> %1
240 }
241 define <2 x i32> @srem_v2_i32(<2 x i32>  %a, <2 x i32> %b) {
242   ; CHECK: srem_v2_i32
243   ; CHECK: cost of 40 {{.*}} srem
244
245   %1 = srem <2 x i32>  %a, %b
246   ret <2 x i32> %1
247 }
248 define <2 x i64> @srem_v2_i64(<2 x i64>  %a, <2 x i64> %b) {
249   ; CHECK: srem_v2_i64
250   ; CHECK: cost of 40 {{.*}} srem
251
252   %1 = srem <2 x i64>  %a, %b
253   ret <2 x i64> %1
254 }
255 define <4 x i8> @srem_v4_i8(<4 x i8>  %a, <4 x i8> %b) {
256   ; CHECK: srem_v4_i8
257   ; CHECK: cost of 80 {{.*}} srem
258
259   %1 = srem <4 x i8>  %a, %b
260   ret <4 x i8> %1
261 }
262 define <4 x i16> @srem_v4_i16(<4 x i16>  %a, <4 x i16> %b) {
263   ; CHECK: srem_v4_i16
264   ; CHECK: cost of 80 {{.*}} srem
265
266   %1 = srem <4 x i16>  %a, %b
267   ret <4 x i16> %1
268 }
269 define <4 x i32> @srem_v4_i32(<4 x i32>  %a, <4 x i32> %b) {
270   ; CHECK: srem_v4_i32
271   ; CHECK: cost of 80 {{.*}} srem
272
273   %1 = srem <4 x i32>  %a, %b
274   ret <4 x i32> %1
275 }
276 define <4 x i64> @srem_v4_i64(<4 x i64>  %a, <4 x i64> %b) {
277   ; CHECK: srem_v4_i64
278   ; CHECK: cost of 80 {{.*}} srem
279
280   %1 = srem <4 x i64>  %a, %b
281   ret <4 x i64> %1
282 }
283 define <8 x i8> @srem_v8_i8(<8 x i8>  %a, <8 x i8> %b) {
284   ; CHECK: srem_v8_i8
285   ; CHECK: cost of 160 {{.*}} srem
286
287   %1 = srem <8 x i8>  %a, %b
288   ret <8 x i8> %1
289 }
290 define <8 x i16> @srem_v8_i16(<8 x i16>  %a, <8 x i16> %b) {
291   ; CHECK: srem_v8_i16
292   ; CHECK: cost of 160 {{.*}} srem
293
294   %1 = srem <8 x i16>  %a, %b
295   ret <8 x i16> %1
296 }
297 define <8 x i32> @srem_v8_i32(<8 x i32>  %a, <8 x i32> %b) {
298   ; CHECK: srem_v8_i32
299   ; CHECK: cost of 160 {{.*}} srem
300
301   %1 = srem <8 x i32>  %a, %b
302   ret <8 x i32> %1
303 }
304 define <8 x i64> @srem_v8_i64(<8 x i64>  %a, <8 x i64> %b) {
305   ; CHECK: srem_v8_i64
306   ; CHECK: cost of 160 {{.*}} srem
307
308   %1 = srem <8 x i64>  %a, %b
309   ret <8 x i64> %1
310 }
311 define <16 x i8> @srem_v16_i8(<16 x i8>  %a, <16 x i8> %b) {
312   ; CHECK: srem_v16_i8
313   ; CHECK: cost of 320 {{.*}} srem
314
315   %1 = srem <16 x i8>  %a, %b
316   ret <16 x i8> %1
317 }
318 define <16 x i16> @srem_v16_i16(<16 x i16>  %a, <16 x i16> %b) {
319   ; CHECK: srem_v16_i16
320   ; CHECK: cost of 320 {{.*}} srem
321
322   %1 = srem <16 x i16>  %a, %b
323   ret <16 x i16> %1
324 }
325 define <16 x i32> @srem_v16_i32(<16 x i32>  %a, <16 x i32> %b) {
326   ; CHECK: srem_v16_i32
327   ; CHECK: cost of 320 {{.*}} srem
328
329   %1 = srem <16 x i32>  %a, %b
330   ret <16 x i32> %1
331 }
332 define <16 x i64> @srem_v16_i64(<16 x i64>  %a, <16 x i64> %b) {
333   ; CHECK: srem_v16_i64
334   ; CHECK: cost of 320 {{.*}} srem
335
336   %1 = srem <16 x i64>  %a, %b
337   ret <16 x i64> %1
338 }
339 define <2 x i8> @urem_v2_i8(<2 x i8>  %a, <2 x i8> %b) {
340   ; CHECK: urem_v2_i8
341   ; CHECK: cost of 40 {{.*}} urem
342
343   %1 = urem <2 x i8>  %a, %b
344   ret <2 x i8> %1
345 }
346 define <2 x i16> @urem_v2_i16(<2 x i16>  %a, <2 x i16> %b) {
347   ; CHECK: urem_v2_i16
348   ; CHECK: cost of 40 {{.*}} urem
349
350   %1 = urem <2 x i16>  %a, %b
351   ret <2 x i16> %1
352 }
353 define <2 x i32> @urem_v2_i32(<2 x i32>  %a, <2 x i32> %b) {
354   ; CHECK: urem_v2_i32
355   ; CHECK: cost of 40 {{.*}} urem
356
357   %1 = urem <2 x i32>  %a, %b
358   ret <2 x i32> %1
359 }
360 define <2 x i64> @urem_v2_i64(<2 x i64>  %a, <2 x i64> %b) {
361   ; CHECK: urem_v2_i64
362   ; CHECK: cost of 40 {{.*}} urem
363
364   %1 = urem <2 x i64>  %a, %b
365   ret <2 x i64> %1
366 }
367 define <4 x i8> @urem_v4_i8(<4 x i8>  %a, <4 x i8> %b) {
368   ; CHECK: urem_v4_i8
369   ; CHECK: cost of 80 {{.*}} urem
370
371   %1 = urem <4 x i8>  %a, %b
372   ret <4 x i8> %1
373 }
374 define <4 x i16> @urem_v4_i16(<4 x i16>  %a, <4 x i16> %b) {
375   ; CHECK: urem_v4_i16
376   ; CHECK: cost of 80 {{.*}} urem
377
378   %1 = urem <4 x i16>  %a, %b
379   ret <4 x i16> %1
380 }
381 define <4 x i32> @urem_v4_i32(<4 x i32>  %a, <4 x i32> %b) {
382   ; CHECK: urem_v4_i32
383   ; CHECK: cost of 80 {{.*}} urem
384
385   %1 = urem <4 x i32>  %a, %b
386   ret <4 x i32> %1
387 }
388 define <4 x i64> @urem_v4_i64(<4 x i64>  %a, <4 x i64> %b) {
389   ; CHECK: urem_v4_i64
390   ; CHECK: cost of 80 {{.*}} urem
391
392   %1 = urem <4 x i64>  %a, %b
393   ret <4 x i64> %1
394 }
395 define <8 x i8> @urem_v8_i8(<8 x i8>  %a, <8 x i8> %b) {
396   ; CHECK: urem_v8_i8
397   ; CHECK: cost of 160 {{.*}} urem
398
399   %1 = urem <8 x i8>  %a, %b
400   ret <8 x i8> %1
401 }
402 define <8 x i16> @urem_v8_i16(<8 x i16>  %a, <8 x i16> %b) {
403   ; CHECK: urem_v8_i16
404   ; CHECK: cost of 160 {{.*}} urem
405
406   %1 = urem <8 x i16>  %a, %b
407   ret <8 x i16> %1
408 }
409 define <8 x i32> @urem_v8_i32(<8 x i32>  %a, <8 x i32> %b) {
410   ; CHECK: urem_v8_i32
411   ; CHECK: cost of 160 {{.*}} urem
412
413   %1 = urem <8 x i32>  %a, %b
414   ret <8 x i32> %1
415 }
416 define <8 x i64> @urem_v8_i64(<8 x i64>  %a, <8 x i64> %b) {
417   ; CHECK: urem_v8_i64
418   ; CHECK: cost of 160 {{.*}} urem
419
420   %1 = urem <8 x i64>  %a, %b
421   ret <8 x i64> %1
422 }
423 define <16 x i8> @urem_v16_i8(<16 x i8>  %a, <16 x i8> %b) {
424   ; CHECK: urem_v16_i8
425   ; CHECK: cost of 320 {{.*}} urem
426
427   %1 = urem <16 x i8>  %a, %b
428   ret <16 x i8> %1
429 }
430 define <16 x i16> @urem_v16_i16(<16 x i16>  %a, <16 x i16> %b) {
431   ; CHECK: urem_v16_i16
432   ; CHECK: cost of 320 {{.*}} urem
433
434   %1 = urem <16 x i16>  %a, %b
435   ret <16 x i16> %1
436 }
437 define <16 x i32> @urem_v16_i32(<16 x i32>  %a, <16 x i32> %b) {
438   ; CHECK: urem_v16_i32
439   ; CHECK: cost of 320 {{.*}} urem
440
441   %1 = urem <16 x i32>  %a, %b
442   ret <16 x i32> %1
443 }
444 define <16 x i64> @urem_v16_i64(<16 x i64>  %a, <16 x i64> %b) {
445   ; CHECK: urem_v16_i64
446   ; CHECK: cost of 320 {{.*}} urem
447
448   %1 = urem <16 x i64>  %a, %b
449   ret <16 x i64> %1
450 }