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) {
10 %cmp = icmp eq i32 %a, %b
11 %sel = select i1 %cmp, i32 %a, i32 %b
15 define i64 @ba_ne_i64(i64 %a, i64 %b) {
19 %cmp = icmp ne i64 %a, %b
20 %sel = select i1 %cmp, i64 %b, i64 %a
24 ; PTX does have e.g. max.s16, but at least as of Kepler (sm_3x) that
25 ; gets compiled to SASS that converts the 16 bit parameters to 32 bit
26 ; before using a 32 bit instruction. That is probably not a win and
27 ; NVCC 7.5 does not emit 16 bit min/max either, presumably for that
29 define i16 @ab_ugt_i16(i16 %a, i16 %b) {
33 %cmp = icmp ugt i16 %a, %b
34 %sel = select i1 %cmp, i16 %a, i16 %b
39 ; *************************************
40 ; * All variations with i32
42 ; *** ab, unsigned, i32
43 define i32 @ab_ugt_i32(i32 %a, i32 %b) {
46 %cmp = icmp ugt i32 %a, %b
47 %sel = select i1 %cmp, i32 %a, i32 %b
51 define i32 @ab_uge_i32(i32 %a, i32 %b) {
54 %cmp = icmp uge i32 %a, %b
55 %sel = select i1 %cmp, i32 %a, i32 %b
59 define i32 @ab_ult_i32(i32 %a, i32 %b) {
62 %cmp = icmp ult i32 %a, %b
63 %sel = select i1 %cmp, i32 %a, i32 %b
67 define i32 @ab_ule_i32(i32 %a, i32 %b) {
70 %cmp = icmp ule i32 %a, %b
71 %sel = select i1 %cmp, i32 %a, i32 %b
76 define i32 @ab_sgt_i32(i32 %a, i32 %b) {
79 %cmp = icmp sgt i32 %a, %b
80 %sel = select i1 %cmp, i32 %a, i32 %b
84 define i32 @ab_sge_i32(i32 %a, i32 %b) {
87 %cmp = icmp sge i32 %a, %b
88 %sel = select i1 %cmp, i32 %a, i32 %b
92 define i32 @ab_slt_i32(i32 %a, i32 %b) {
95 %cmp = icmp slt i32 %a, %b
96 %sel = select i1 %cmp, i32 %a, i32 %b
100 define i32 @ab_sle_i32(i32 %a, i32 %b) {
103 %cmp = icmp sle i32 %a, %b
104 %sel = select i1 %cmp, i32 %a, i32 %b
108 ; *** ba, unsigned, i32
109 define i32 @ba_ugt_i32(i32 %a, i32 %b) {
112 %cmp = icmp ugt i32 %a, %b
113 %sel = select i1 %cmp, i32 %b, i32 %a
117 define i32 @ba_uge_i32(i32 %a, i32 %b) {
120 %cmp = icmp uge i32 %a, %b
121 %sel = select i1 %cmp, i32 %b, i32 %a
125 define i32 @ba_ult_i32(i32 %a, i32 %b) {
128 %cmp = icmp ult i32 %a, %b
129 %sel = select i1 %cmp, i32 %b, i32 %a
133 define i32 @ba_ule_i32(i32 %a, i32 %b) {
136 %cmp = icmp ule i32 %a, %b
137 %sel = select i1 %cmp, i32 %b, i32 %a
141 ; *** ba, signed, i32
142 define i32 @ba_sgt_i32(i32 %a, i32 %b) {
145 %cmp = icmp sgt i32 %a, %b
146 %sel = select i1 %cmp, i32 %b, i32 %a
150 define i32 @ba_sge_i32(i32 %a, i32 %b) {
153 %cmp = icmp sge i32 %a, %b
154 %sel = select i1 %cmp, i32 %b, i32 %a
158 define i32 @ba_slt_i32(i32 %a, i32 %b) {
161 %cmp = icmp slt i32 %a, %b
162 %sel = select i1 %cmp, i32 %b, i32 %a
166 define i32 @ba_sle_i32(i32 %a, i32 %b) {
169 %cmp = icmp sle i32 %a, %b
170 %sel = select i1 %cmp, i32 %b, i32 %a
174 ; *************************************
175 ; * All variations with i64
177 ; *** ab, unsigned, i64
178 define i64 @ab_ugt_i64(i64 %a, i64 %b) {
181 %cmp = icmp ugt i64 %a, %b
182 %sel = select i1 %cmp, i64 %a, i64 %b
186 define i64 @ab_uge_i64(i64 %a, i64 %b) {
189 %cmp = icmp uge i64 %a, %b
190 %sel = select i1 %cmp, i64 %a, i64 %b
194 define i64 @ab_ult_i64(i64 %a, i64 %b) {
197 %cmp = icmp ult i64 %a, %b
198 %sel = select i1 %cmp, i64 %a, i64 %b
202 define i64 @ab_ule_i64(i64 %a, i64 %b) {
205 %cmp = icmp ule i64 %a, %b
206 %sel = select i1 %cmp, i64 %a, i64 %b
210 ; *** ab, signed, i64
211 define i64 @ab_sgt_i64(i64 %a, i64 %b) {
214 %cmp = icmp sgt i64 %a, %b
215 %sel = select i1 %cmp, i64 %a, i64 %b
219 define i64 @ab_sge_i64(i64 %a, i64 %b) {
222 %cmp = icmp sge i64 %a, %b
223 %sel = select i1 %cmp, i64 %a, i64 %b
227 define i64 @ab_slt_i64(i64 %a, i64 %b) {
230 %cmp = icmp slt i64 %a, %b
231 %sel = select i1 %cmp, i64 %a, i64 %b
235 define i64 @ab_sle_i64(i64 %a, i64 %b) {
238 %cmp = icmp sle i64 %a, %b
239 %sel = select i1 %cmp, i64 %a, i64 %b
243 ; *** ba, unsigned, i64
244 define i64 @ba_ugt_i64(i64 %a, i64 %b) {
247 %cmp = icmp ugt i64 %a, %b
248 %sel = select i1 %cmp, i64 %b, i64 %a
252 define i64 @ba_uge_i64(i64 %a, i64 %b) {
255 %cmp = icmp uge i64 %a, %b
256 %sel = select i1 %cmp, i64 %b, i64 %a
260 define i64 @ba_ult_i64(i64 %a, i64 %b) {
263 %cmp = icmp ult i64 %a, %b
264 %sel = select i1 %cmp, i64 %b, i64 %a
268 define i64 @ba_ule_i64(i64 %a, i64 %b) {
271 %cmp = icmp ule i64 %a, %b
272 %sel = select i1 %cmp, i64 %b, i64 %a
276 ; *** ba, signed, i64
277 define i64 @ba_sgt_i64(i64 %a, i64 %b) {
280 %cmp = icmp sgt i64 %a, %b
281 %sel = select i1 %cmp, i64 %b, i64 %a
285 define i64 @ba_sge_i64(i64 %a, i64 %b) {
288 %cmp = icmp sge i64 %a, %b
289 %sel = select i1 %cmp, i64 %b, i64 %a
293 define i64 @ba_slt_i64(i64 %a, i64 %b) {
296 %cmp = icmp slt i64 %a, %b
297 %sel = select i1 %cmp, i64 %b, i64 %a
301 define i64 @ba_sle_i64(i64 %a, i64 %b) {
304 %cmp = icmp sle i64 %a, %b
305 %sel = select i1 %cmp, i64 %b, i64 %a