[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / NVPTX / combine-min-max.ll
blob3de86be10a5c5c7d40e625628cabcfe6c3d789ec
1 ; RUN: llc < %s -march=nvptx -mcpu=sm_20 -O2 | FileCheck %s
3 ; *************************************
4 ; * Cases with no min/max
6 define i32 @ab_eq_i32(i32 %a, i32 %b) {
7 ; LABEL: @ab_slt_i32
8 ; CHECK-NOT: min
9 ; CHECK-NOT: max
10   %cmp = icmp eq i32 %a, %b
11   %sel = select i1 %cmp, i32 %a, i32 %b
12   ret i32 %sel
15 define i64 @ba_ne_i64(i64 %a, i64 %b) {
16 ; LABEL: @ab_ne_i64
17 ; CHECK-NOT: min
18 ; CHECK-NOT: max
19   %cmp = icmp ne i64 %a, %b
20   %sel = select i1 %cmp, i64 %b, i64 %a
21   ret i64 %sel
24 ; *************************************
25 ; * All variations with i16
27 ; *** ab, unsigned, i16
28 define i16 @ab_ugt_i16(i16 %a, i16 %b) {
29 ; LABEL: @ab_ugt_i16
30 ; CHECK: max.u16
31   %cmp = icmp ugt i16 %a, %b
32   %sel = select i1 %cmp, i16 %a, i16 %b
33   ret i16 %sel
36 define i16 @ab_uge_i16(i16 %a, i16 %b) {
37 ; LABEL: @ab_uge_i16
38 ; CHECK: max.u16
39   %cmp = icmp uge i16 %a, %b
40   %sel = select i1 %cmp, i16 %a, i16 %b
41   ret i16 %sel
44 define i16 @ab_ult_i16(i16 %a, i16 %b) {
45 ; LABEL: @ab_ult_i16
46 ; CHECK: min.u16
47   %cmp = icmp ult i16 %a, %b
48   %sel = select i1 %cmp, i16 %a, i16 %b
49   ret i16 %sel
52 define i16 @ab_ule_i16(i16 %a, i16 %b) {
53 ; LABEL: @ab_ule_i16
54 ; CHECK: min.u16
55   %cmp = icmp ule i16 %a, %b
56   %sel = select i1 %cmp, i16 %a, i16 %b
57   ret i16 %sel
60 ; *** ab, signed, i16
61 define i16 @ab_sgt_i16(i16 %a, i16 %b) {
62 ; LABEL: @ab_ugt_i16
63 ; CHECK: max.s16
64   %cmp = icmp sgt i16 %a, %b
65   %sel = select i1 %cmp, i16 %a, i16 %b
66   ret i16 %sel
69 define i16 @ab_sge_i16(i16 %a, i16 %b) {
70 ; LABEL: @ab_sge_i16
71 ; CHECK: max.s16
72   %cmp = icmp sge i16 %a, %b
73   %sel = select i1 %cmp, i16 %a, i16 %b
74   ret i16 %sel
77 define i16 @ab_slt_i16(i16 %a, i16 %b) {
78 ; LABEL: @ab_slt_i16
79 ; CHECK: min.s16
80   %cmp = icmp slt i16 %a, %b
81   %sel = select i1 %cmp, i16 %a, i16 %b
82   ret i16 %sel
85 define i16 @ab_sle_i16(i16 %a, i16 %b) {
86 ; LABEL: @ab_sle_i16
87 ; CHECK: min.s16
88   %cmp = icmp sle i16 %a, %b
89   %sel = select i1 %cmp, i16 %a, i16 %b
90   ret i16 %sel
93 ; *** ba, unsigned, i16
94 define i16 @ba_ugt_i16(i16 %a, i16 %b) {
95 ; LABEL: @ba_ugt_i16
96 ; CHECK: min.u16
97   %cmp = icmp ugt i16 %a, %b
98   %sel = select i1 %cmp, i16 %b, i16 %a
99   ret i16 %sel
102 define i16 @ba_uge_i16(i16 %a, i16 %b) {
103 ; LABEL: @ba_uge_i16
104 ; CHECK: min.u16
105   %cmp = icmp uge i16 %a, %b
106   %sel = select i1 %cmp, i16 %b, i16 %a
107   ret i16 %sel
110 define i16 @ba_ult_i16(i16 %a, i16 %b) {
111 ; LABEL: @ba_ult_i16
112 ; CHECK: max.u16
113   %cmp = icmp ult i16 %a, %b
114   %sel = select i1 %cmp, i16 %b, i16 %a
115   ret i16 %sel
118 define i16 @ba_ule_i16(i16 %a, i16 %b) {
119 ; LABEL: @ba_ule_i16
120 ; CHECK: max.u16
121   %cmp = icmp ule i16 %a, %b
122   %sel = select i1 %cmp, i16 %b, i16 %a
123   ret i16 %sel
126 ; *** ba, signed, i16
127 define i16 @ba_sgt_i16(i16 %a, i16 %b) {
128 ; LBAEL: @ba_ugt_i16
129 ; CHECK: min.s16
130   %cmp = icmp sgt i16 %a, %b
131   %sel = select i1 %cmp, i16 %b, i16 %a
132   ret i16 %sel
135 define i16 @ba_sge_i16(i16 %a, i16 %b) {
136 ; LABEL: @ba_sge_i16
137 ; CHECK: min.s16
138   %cmp = icmp sge i16 %a, %b
139   %sel = select i1 %cmp, i16 %b, i16 %a
140   ret i16 %sel
143 define i16 @ba_slt_i16(i16 %a, i16 %b) {
144 ; LABEL: @ba_slt_i16
145 ; CHECK: max.s16
146   %cmp = icmp slt i16 %a, %b
147   %sel = select i1 %cmp, i16 %b, i16 %a
148   ret i16 %sel
151 define i16 @ba_sle_i16(i16 %a, i16 %b) {
152 ; LABEL: @ba_sle_i16
153 ; CHECK: max.s16
154   %cmp = icmp sle i16 %a, %b
155   %sel = select i1 %cmp, i16 %b, i16 %a
156   ret i16 %sel
159 ; *************************************
160 ; * All variations with i32
162 ; *** ab, unsigned, i32
163 define i32 @ab_ugt_i32(i32 %a, i32 %b) {
164 ; LABEL: @ab_ugt_i32
165 ; CHECK: max.u32
166   %cmp = icmp ugt i32 %a, %b
167   %sel = select i1 %cmp, i32 %a, i32 %b
168   ret i32 %sel
171 define i32 @ab_uge_i32(i32 %a, i32 %b) {
172 ; LABEL: @ab_uge_i32
173 ; CHECK: max.u32
174   %cmp = icmp uge i32 %a, %b
175   %sel = select i1 %cmp, i32 %a, i32 %b
176   ret i32 %sel
179 define i32 @ab_ult_i32(i32 %a, i32 %b) {
180 ; LABEL: @ab_ult_i32
181 ; CHECK: min.u32
182   %cmp = icmp ult i32 %a, %b
183   %sel = select i1 %cmp, i32 %a, i32 %b
184   ret i32 %sel
187 define i32 @ab_ule_i32(i32 %a, i32 %b) {
188 ; LABEL: @ab_ule_i32
189 ; CHECK: min.u32
190   %cmp = icmp ule i32 %a, %b
191   %sel = select i1 %cmp, i32 %a, i32 %b
192   ret i32 %sel
195 ; *** ab, signed, i32
196 define i32 @ab_sgt_i32(i32 %a, i32 %b) {
197 ; LABEL: @ab_ugt_i32
198 ; CHECK: max.s32
199   %cmp = icmp sgt i32 %a, %b
200   %sel = select i1 %cmp, i32 %a, i32 %b
201   ret i32 %sel
204 define i32 @ab_sge_i32(i32 %a, i32 %b) {
205 ; LABEL: @ab_sge_i32
206 ; CHECK: max.s32
207   %cmp = icmp sge i32 %a, %b
208   %sel = select i1 %cmp, i32 %a, i32 %b
209   ret i32 %sel
212 define i32 @ab_slt_i32(i32 %a, i32 %b) {
213 ; LABEL: @ab_slt_i32
214 ; CHECK: min.s32
215   %cmp = icmp slt i32 %a, %b
216   %sel = select i1 %cmp, i32 %a, i32 %b
217   ret i32 %sel
220 define i32 @ab_sle_i32(i32 %a, i32 %b) {
221 ; LABEL: @ab_sle_i32
222 ; CHECK: min.s32
223   %cmp = icmp sle i32 %a, %b
224   %sel = select i1 %cmp, i32 %a, i32 %b
225   ret i32 %sel
228 ; *** ba, unsigned, i32
229 define i32 @ba_ugt_i32(i32 %a, i32 %b) {
230 ; LABEL: @ba_ugt_i32
231 ; CHECK: min.u32
232   %cmp = icmp ugt i32 %a, %b
233   %sel = select i1 %cmp, i32 %b, i32 %a
234   ret i32 %sel
237 define i32 @ba_uge_i32(i32 %a, i32 %b) {
238 ; LABEL: @ba_uge_i32
239 ; CHECK: min.u32
240   %cmp = icmp uge i32 %a, %b
241   %sel = select i1 %cmp, i32 %b, i32 %a
242   ret i32 %sel
245 define i32 @ba_ult_i32(i32 %a, i32 %b) {
246 ; LABEL: @ba_ult_i32
247 ; CHECK: max.u32
248   %cmp = icmp ult i32 %a, %b
249   %sel = select i1 %cmp, i32 %b, i32 %a
250   ret i32 %sel
253 define i32 @ba_ule_i32(i32 %a, i32 %b) {
254 ; LABEL: @ba_ule_i32
255 ; CHECK: max.u32
256   %cmp = icmp ule i32 %a, %b
257   %sel = select i1 %cmp, i32 %b, i32 %a
258   ret i32 %sel
261 ; *** ba, signed, i32
262 define i32 @ba_sgt_i32(i32 %a, i32 %b) {
263 ; LBAEL: @ba_ugt_i32
264 ; CHECK: min.s32
265   %cmp = icmp sgt i32 %a, %b
266   %sel = select i1 %cmp, i32 %b, i32 %a
267   ret i32 %sel
270 define i32 @ba_sge_i32(i32 %a, i32 %b) {
271 ; LABEL: @ba_sge_i32
272 ; CHECK: min.s32
273   %cmp = icmp sge i32 %a, %b
274   %sel = select i1 %cmp, i32 %b, i32 %a
275   ret i32 %sel
278 define i32 @ba_slt_i32(i32 %a, i32 %b) {
279 ; LABEL: @ba_slt_i32
280 ; CHECK: max.s32
281   %cmp = icmp slt i32 %a, %b
282   %sel = select i1 %cmp, i32 %b, i32 %a
283   ret i32 %sel
286 define i32 @ba_sle_i32(i32 %a, i32 %b) {
287 ; LABEL: @ba_sle_i32
288 ; CHECK: max.s32
289   %cmp = icmp sle i32 %a, %b
290   %sel = select i1 %cmp, i32 %b, i32 %a
291   ret i32 %sel
294 ; *************************************
295 ; * All variations with i64
297 ; *** ab, unsigned, i64
298 define i64 @ab_ugt_i64(i64 %a, i64 %b) {
299 ; LABEL: @ab_ugt_i64
300 ; CHECK: max.u64
301   %cmp = icmp ugt i64 %a, %b
302   %sel = select i1 %cmp, i64 %a, i64 %b
303   ret i64 %sel
306 define i64 @ab_uge_i64(i64 %a, i64 %b) {
307 ; LABEL: @ab_uge_i64
308 ; CHECK: max.u64
309   %cmp = icmp uge i64 %a, %b
310   %sel = select i1 %cmp, i64 %a, i64 %b
311   ret i64 %sel
314 define i64 @ab_ult_i64(i64 %a, i64 %b) {
315 ; LABEL: @ab_ult_i64
316 ; CHECK: min.u64
317   %cmp = icmp ult i64 %a, %b
318   %sel = select i1 %cmp, i64 %a, i64 %b
319   ret i64 %sel
322 define i64 @ab_ule_i64(i64 %a, i64 %b) {
323 ; LABEL: @ab_ule_i64
324 ; CHECK: min.u64
325   %cmp = icmp ule i64 %a, %b
326   %sel = select i1 %cmp, i64 %a, i64 %b
327   ret i64 %sel
330 ; *** ab, signed, i64
331 define i64 @ab_sgt_i64(i64 %a, i64 %b) {
332 ; LABEL: @ab_ugt_i64
333 ; CHECK: max.s64
334   %cmp = icmp sgt i64 %a, %b
335   %sel = select i1 %cmp, i64 %a, i64 %b
336   ret i64 %sel
339 define i64 @ab_sge_i64(i64 %a, i64 %b) {
340 ; LABEL: @ab_sge_i64
341 ; CHECK: max.s64
342   %cmp = icmp sge i64 %a, %b
343   %sel = select i1 %cmp, i64 %a, i64 %b
344   ret i64 %sel
347 define i64 @ab_slt_i64(i64 %a, i64 %b) {
348 ; LABEL: @ab_slt_i64
349 ; CHECK: min.s64
350   %cmp = icmp slt i64 %a, %b
351   %sel = select i1 %cmp, i64 %a, i64 %b
352   ret i64 %sel
355 define i64 @ab_sle_i64(i64 %a, i64 %b) {
356 ; LABEL: @ab_sle_i64
357 ; CHECK: min.s64
358   %cmp = icmp sle i64 %a, %b
359   %sel = select i1 %cmp, i64 %a, i64 %b
360   ret i64 %sel
363 ; *** ba, unsigned, i64
364 define i64 @ba_ugt_i64(i64 %a, i64 %b) {
365 ; LABEL: @ba_ugt_i64
366 ; CHECK: min.u64
367   %cmp = icmp ugt i64 %a, %b
368   %sel = select i1 %cmp, i64 %b, i64 %a
369   ret i64 %sel
372 define i64 @ba_uge_i64(i64 %a, i64 %b) {
373 ; LABEL: @ba_uge_i64
374 ; CHECK: min.u64
375   %cmp = icmp uge i64 %a, %b
376   %sel = select i1 %cmp, i64 %b, i64 %a
377   ret i64 %sel
380 define i64 @ba_ult_i64(i64 %a, i64 %b) {
381 ; LABEL: @ba_ult_i64
382 ; CHECK: max.u64
383   %cmp = icmp ult i64 %a, %b
384   %sel = select i1 %cmp, i64 %b, i64 %a
385   ret i64 %sel
388 define i64 @ba_ule_i64(i64 %a, i64 %b) {
389 ; LABEL: @ba_ule_i64
390 ; CHECK: max.u64
391   %cmp = icmp ule i64 %a, %b
392   %sel = select i1 %cmp, i64 %b, i64 %a
393   ret i64 %sel
396 ; *** ba, signed, i64
397 define i64 @ba_sgt_i64(i64 %a, i64 %b) {
398 ; LBAEL: @ba_ugt_i64
399 ; CHECK: min.s64
400   %cmp = icmp sgt i64 %a, %b
401   %sel = select i1 %cmp, i64 %b, i64 %a
402   ret i64 %sel
405 define i64 @ba_sge_i64(i64 %a, i64 %b) {
406 ; LABEL: @ba_sge_i64
407 ; CHECK: min.s64
408   %cmp = icmp sge i64 %a, %b
409   %sel = select i1 %cmp, i64 %b, i64 %a
410   ret i64 %sel
413 define i64 @ba_slt_i64(i64 %a, i64 %b) {
414 ; LABEL: @ba_slt_i64
415 ; CHECK: max.s64
416   %cmp = icmp slt i64 %a, %b
417   %sel = select i1 %cmp, i64 %b, i64 %a
418   ret i64 %sel
421 define i64 @ba_sle_i64(i64 %a, i64 %b) {
422 ; LABEL: @ba_sle_i64
423 ; CHECK: max.s64
424   %cmp = icmp sle i64 %a, %b
425   %sel = select i1 %cmp, i64 %b, i64 %a
426   ret i64 %sel