blob: 3de86be10a5c5c7d40e625628cabcfe6c3d789ec [file] [log] [blame]
Bjarke Hammersholt Roune6c647382015-08-26 23:22:02 +00001; RUN: llc < %s -march=nvptx -mcpu=sm_20 -O2 | FileCheck %s
2
3; *************************************
4; * Cases with no min/max
5
6define 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
13}
14
15define 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
22}
23
Justin Lebarcc938fc2017-01-18 00:09:01 +000024; *************************************
25; * All variations with i16
26
27; *** ab, unsigned, i16
Bjarke Hammersholt Roune6c647382015-08-26 23:22:02 +000028define i16 @ab_ugt_i16(i16 %a, i16 %b) {
29; LABEL: @ab_ugt_i16
Justin Lebarcc938fc2017-01-18 00:09:01 +000030; CHECK: max.u16
Bjarke Hammersholt Roune6c647382015-08-26 23:22:02 +000031 %cmp = icmp ugt i16 %a, %b
32 %sel = select i1 %cmp, i16 %a, i16 %b
33 ret i16 %sel
34}
35
Justin Lebarcc938fc2017-01-18 00:09:01 +000036define 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
42}
43
44define 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
50}
51
52define 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
58}
59
60; *** ab, signed, i16
61define 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
67}
68
69define 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
75}
76
77define 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
83}
84
85define 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
91}
92
93; *** ba, unsigned, i16
94define 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
100}
101
102define 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
108}
109
110define 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
116}
117
118define 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
124}
125
126; *** ba, signed, i16
127define 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
133}
134
135define 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
141}
142
143define 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
149}
150
151define 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
157}
Bjarke Hammersholt Roune6c647382015-08-26 23:22:02 +0000158
159; *************************************
160; * All variations with i32
161
162; *** ab, unsigned, i32
163define 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
169}
170
171define 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
177}
178
179define 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
185}
186
187define 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
193}
194
195; *** ab, signed, i32
196define 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
202}
203
204define 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
210}
211
212define 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
218}
219
220define 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
226}
227
228; *** ba, unsigned, i32
229define 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
235}
236
237define 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
243}
244
245define 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
251}
252
253define 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
259}
260
261; *** ba, signed, i32
262define 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
268}
269
270define 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
276}
277
278define 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
284}
285
286define 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
292}
293
294; *************************************
295; * All variations with i64
296
297; *** ab, unsigned, i64
298define 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
304}
305
306define 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
312}
313
314define 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
320}
321
322define 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
328}
329
330; *** ab, signed, i64
331define 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
337}
338
339define 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
345}
346
347define 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
353}
354
355define 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
361}
362
363; *** ba, unsigned, i64
364define 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
370}
371
372define 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
378}
379
380define 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
386}
387
388define 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
394}
395
396; *** ba, signed, i64
397define 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
403}
404
405define 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
411}
412
413define 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
419}
420
421define 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
427}