1 ; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 -O2 | FileCheck %s
2 ; RUN: %if ptxas %{ llc < %s -march=nvptx64 -mcpu=sm_20 -O2 | %ptxas-verify %}
4 ; *************************************
5 ; * Cases with no min/max
7 define i32 @ab_eq_i32(i32 %a, i32 %b) {
8 ; CHECK-LABEL: @ab_eq_i32
11 %cmp = icmp eq i32 %a, %b
12 %sel = select i1 %cmp, i32 %a, i32 %b
16 define i64 @ab_ne_i64(i64 %a, i64 %b) {
17 ; CHECK-LABEL: @ab_ne_i64
20 %cmp = icmp ne i64 %a, %b
21 %sel = select i1 %cmp, i64 %b, i64 %a
25 ; *************************************
26 ; * All variations with i16
28 ; *** ab, unsigned, i16
29 define i16 @ab_ugt_i16(i16 %a, i16 %b) {
30 ; CHECK-LABEL: @ab_ugt_i16
32 %cmp = icmp ugt i16 %a, %b
33 %sel = select i1 %cmp, i16 %a, i16 %b
37 define i16 @ab_uge_i16(i16 %a, i16 %b) {
38 ; CHECK-LABEL: @ab_uge_i16
40 %cmp = icmp uge i16 %a, %b
41 %sel = select i1 %cmp, i16 %a, i16 %b
45 define i16 @ab_ult_i16(i16 %a, i16 %b) {
46 ; CHECK-LABEL: @ab_ult_i16
48 %cmp = icmp ult i16 %a, %b
49 %sel = select i1 %cmp, i16 %a, i16 %b
53 define i16 @ab_ule_i16(i16 %a, i16 %b) {
54 ; CHECK-LABEL: @ab_ule_i16
56 %cmp = icmp ule i16 %a, %b
57 %sel = select i1 %cmp, i16 %a, i16 %b
62 define i16 @ab_sgt_i16(i16 %a, i16 %b) {
63 ; CHECK-LABEL: @ab_sgt_i16
65 %cmp = icmp sgt i16 %a, %b
66 %sel = select i1 %cmp, i16 %a, i16 %b
70 define i16 @ab_sge_i16(i16 %a, i16 %b) {
71 ; CHECK-LABEL: @ab_sge_i16
73 %cmp = icmp sge i16 %a, %b
74 %sel = select i1 %cmp, i16 %a, i16 %b
78 define i16 @ab_slt_i16(i16 %a, i16 %b) {
79 ; CHECK-LABEL: @ab_slt_i16
81 %cmp = icmp slt i16 %a, %b
82 %sel = select i1 %cmp, i16 %a, i16 %b
86 define i16 @ab_sle_i16(i16 %a, i16 %b) {
87 ; CHECK-LABEL: @ab_sle_i16
89 %cmp = icmp sle i16 %a, %b
90 %sel = select i1 %cmp, i16 %a, i16 %b
94 ; *** ba, unsigned, i16
95 define i16 @ba_ugt_i16(i16 %a, i16 %b) {
96 ; CHECK-LABEL: @ba_ugt_i16
98 %cmp = icmp ugt i16 %a, %b
99 %sel = select i1 %cmp, i16 %b, i16 %a
103 define i16 @ba_uge_i16(i16 %a, i16 %b) {
104 ; CHECK-LABEL: @ba_uge_i16
106 %cmp = icmp uge i16 %a, %b
107 %sel = select i1 %cmp, i16 %b, i16 %a
111 define i16 @ba_ult_i16(i16 %a, i16 %b) {
112 ; CHECK-LABEL: @ba_ult_i16
114 %cmp = icmp ult i16 %a, %b
115 %sel = select i1 %cmp, i16 %b, i16 %a
119 define i16 @ba_ule_i16(i16 %a, i16 %b) {
120 ; CHECK-LABEL: @ba_ule_i16
122 %cmp = icmp ule i16 %a, %b
123 %sel = select i1 %cmp, i16 %b, i16 %a
127 ; *** ba, signed, i16
128 define i16 @ba_sgt_i16(i16 %a, i16 %b) {
129 ; CHECK-LABEL: @ba_sgt_i16
131 %cmp = icmp sgt i16 %a, %b
132 %sel = select i1 %cmp, i16 %b, i16 %a
136 define i16 @ba_sge_i16(i16 %a, i16 %b) {
137 ; CHECK-LABEL: @ba_sge_i16
139 %cmp = icmp sge i16 %a, %b
140 %sel = select i1 %cmp, i16 %b, i16 %a
144 define i16 @ba_slt_i16(i16 %a, i16 %b) {
145 ; CHECK-LABEL: @ba_slt_i16
147 %cmp = icmp slt i16 %a, %b
148 %sel = select i1 %cmp, i16 %b, i16 %a
152 define i16 @ba_sle_i16(i16 %a, i16 %b) {
153 ; CHECK-LABEL: @ba_sle_i16
155 %cmp = icmp sle i16 %a, %b
156 %sel = select i1 %cmp, i16 %b, i16 %a
160 ; *************************************
161 ; * All variations with i32
163 ; *** ab, unsigned, i32
164 define i32 @ab_ugt_i32(i32 %a, i32 %b) {
165 ; CHECK-LABEL: @ab_ugt_i32
167 %cmp = icmp ugt i32 %a, %b
168 %sel = select i1 %cmp, i32 %a, i32 %b
172 define i32 @ab_uge_i32(i32 %a, i32 %b) {
173 ; CHECK-LABEL: @ab_uge_i32
175 %cmp = icmp uge i32 %a, %b
176 %sel = select i1 %cmp, i32 %a, i32 %b
180 define i32 @ab_ult_i32(i32 %a, i32 %b) {
181 ; CHECK-LABEL: @ab_ult_i32
183 %cmp = icmp ult i32 %a, %b
184 %sel = select i1 %cmp, i32 %a, i32 %b
188 define i32 @ab_ule_i32(i32 %a, i32 %b) {
189 ; CHECK-LABEL: @ab_ule_i32
191 %cmp = icmp ule i32 %a, %b
192 %sel = select i1 %cmp, i32 %a, i32 %b
196 ; *** ab, signed, i32
197 define i32 @ab_sgt_i32(i32 %a, i32 %b) {
198 ; CHECK-LABEL: @ab_sgt_i32
200 %cmp = icmp sgt i32 %a, %b
201 %sel = select i1 %cmp, i32 %a, i32 %b
205 define i32 @ab_sge_i32(i32 %a, i32 %b) {
206 ; CHECK-LABEL: @ab_sge_i32
208 %cmp = icmp sge i32 %a, %b
209 %sel = select i1 %cmp, i32 %a, i32 %b
213 define i32 @ab_slt_i32(i32 %a, i32 %b) {
214 ; CHECK-LABEL: @ab_slt_i32
216 %cmp = icmp slt i32 %a, %b
217 %sel = select i1 %cmp, i32 %a, i32 %b
221 define i32 @ab_sle_i32(i32 %a, i32 %b) {
222 ; CHECK-LABEL: @ab_sle_i32
224 %cmp = icmp sle i32 %a, %b
225 %sel = select i1 %cmp, i32 %a, i32 %b
229 ; *** ba, unsigned, i32
230 define i32 @ba_ugt_i32(i32 %a, i32 %b) {
231 ; CHECK-LABEL: @ba_ugt_i32
233 %cmp = icmp ugt i32 %a, %b
234 %sel = select i1 %cmp, i32 %b, i32 %a
238 define i32 @ba_uge_i32(i32 %a, i32 %b) {
239 ; CHECK-LABEL: @ba_uge_i32
241 %cmp = icmp uge i32 %a, %b
242 %sel = select i1 %cmp, i32 %b, i32 %a
246 define i32 @ba_ult_i32(i32 %a, i32 %b) {
247 ; CHECK-LABEL: @ba_ult_i32
249 %cmp = icmp ult i32 %a, %b
250 %sel = select i1 %cmp, i32 %b, i32 %a
254 define i32 @ba_ule_i32(i32 %a, i32 %b) {
255 ; CHECK-LABEL: @ba_ule_i32
257 %cmp = icmp ule i32 %a, %b
258 %sel = select i1 %cmp, i32 %b, i32 %a
262 ; *** ba, signed, i32
263 define i32 @ba_sgt_i32(i32 %a, i32 %b) {
264 ; CHECK-LABEL: @ba_sgt_i32
266 %cmp = icmp sgt i32 %a, %b
267 %sel = select i1 %cmp, i32 %b, i32 %a
271 define i32 @ba_sge_i32(i32 %a, i32 %b) {
272 ; CHECK-LABEL: @ba_sge_i32
274 %cmp = icmp sge i32 %a, %b
275 %sel = select i1 %cmp, i32 %b, i32 %a
279 define i32 @ba_slt_i32(i32 %a, i32 %b) {
280 ; CHECK-LABEL: @ba_slt_i32
282 %cmp = icmp slt i32 %a, %b
283 %sel = select i1 %cmp, i32 %b, i32 %a
287 define i32 @ba_sle_i32(i32 %a, i32 %b) {
288 ; CHECK-LABEL: @ba_sle_i32
290 %cmp = icmp sle i32 %a, %b
291 %sel = select i1 %cmp, i32 %b, i32 %a
295 ; *************************************
296 ; * All variations with i64
298 ; *** ab, unsigned, i64
299 define i64 @ab_ugt_i64(i64 %a, i64 %b) {
300 ; CHECK-LABEL: @ab_ugt_i64
302 %cmp = icmp ugt i64 %a, %b
303 %sel = select i1 %cmp, i64 %a, i64 %b
307 define i64 @ab_uge_i64(i64 %a, i64 %b) {
308 ; CHECK-LABEL: @ab_uge_i64
310 %cmp = icmp uge i64 %a, %b
311 %sel = select i1 %cmp, i64 %a, i64 %b
315 define i64 @ab_ult_i64(i64 %a, i64 %b) {
316 ; CHECK-LABEL: @ab_ult_i64
318 %cmp = icmp ult i64 %a, %b
319 %sel = select i1 %cmp, i64 %a, i64 %b
323 define i64 @ab_ule_i64(i64 %a, i64 %b) {
324 ; CHECK-LABEL: @ab_ule_i64
326 %cmp = icmp ule i64 %a, %b
327 %sel = select i1 %cmp, i64 %a, i64 %b
331 ; *** ab, signed, i64
332 define i64 @ab_sgt_i64(i64 %a, i64 %b) {
333 ; CHECK-LABEL: @ab_sgt_i64
335 %cmp = icmp sgt i64 %a, %b
336 %sel = select i1 %cmp, i64 %a, i64 %b
340 define i64 @ab_sge_i64(i64 %a, i64 %b) {
341 ; CHECK-LABEL: @ab_sge_i64
343 %cmp = icmp sge i64 %a, %b
344 %sel = select i1 %cmp, i64 %a, i64 %b
348 define i64 @ab_slt_i64(i64 %a, i64 %b) {
349 ; CHECK-LABEL: @ab_slt_i64
351 %cmp = icmp slt i64 %a, %b
352 %sel = select i1 %cmp, i64 %a, i64 %b
356 define i64 @ab_sle_i64(i64 %a, i64 %b) {
357 ; CHECK-LABEL: @ab_sle_i64
359 %cmp = icmp sle i64 %a, %b
360 %sel = select i1 %cmp, i64 %a, i64 %b
364 ; *** ba, unsigned, i64
365 define i64 @ba_ugt_i64(i64 %a, i64 %b) {
366 ; CHECK-LABEL: @ba_ugt_i64
368 %cmp = icmp ugt i64 %a, %b
369 %sel = select i1 %cmp, i64 %b, i64 %a
373 define i64 @ba_uge_i64(i64 %a, i64 %b) {
374 ; CHECK-LABEL: @ba_uge_i64
376 %cmp = icmp uge i64 %a, %b
377 %sel = select i1 %cmp, i64 %b, i64 %a
381 define i64 @ba_ult_i64(i64 %a, i64 %b) {
382 ; CHECK-LABEL: @ba_ult_i64
384 %cmp = icmp ult i64 %a, %b
385 %sel = select i1 %cmp, i64 %b, i64 %a
389 define i64 @ba_ule_i64(i64 %a, i64 %b) {
390 ; CHECK-LABEL: @ba_ule_i64
392 %cmp = icmp ule i64 %a, %b
393 %sel = select i1 %cmp, i64 %b, i64 %a
397 ; *** ba, signed, i64
398 define i64 @ba_sgt_i64(i64 %a, i64 %b) {
399 ; CHECK-LABEL: @ba_sgt_i64
401 %cmp = icmp sgt i64 %a, %b
402 %sel = select i1 %cmp, i64 %b, i64 %a
406 define i64 @ba_sge_i64(i64 %a, i64 %b) {
407 ; CHECK-LABEL: @ba_sge_i64
409 %cmp = icmp sge i64 %a, %b
410 %sel = select i1 %cmp, i64 %b, i64 %a
414 define i64 @ba_slt_i64(i64 %a, i64 %b) {
415 ; CHECK-LABEL: @ba_slt_i64
417 %cmp = icmp slt i64 %a, %b
418 %sel = select i1 %cmp, i64 %b, i64 %a
422 define i64 @ba_sle_i64(i64 %a, i64 %b) {
423 ; CHECK-LABEL: @ba_sle_i64
425 %cmp = icmp sle i64 %a, %b
426 %sel = select i1 %cmp, i64 %b, i64 %a