1 ; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s
3 target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128"
6 ; $3 = %arg1, $4 = %arg2, $5 = %val1, $6 = %val2
7 ; $3 = %arg1, $4 = %val1, $5 = %val2
9 ; For "positive" comparisons:
10 ; selb $3, $6, $5, <i1>
11 ; selb $3, $5, $4, <i1>
13 ; For "negative" comparisons, i.e., those where the result of the comparison
14 ; must be inverted (setne, for example):
15 ; selb $3, $5, $6, <i1>
16 ; selb $3, $4, $5, <i1>
18 ; i32 integer comparisons:
19 define i32 @icmp_eq_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
21 %A = icmp eq i32 %arg1, %arg2
22 %B = select i1 %A, i32 %val1, i32 %val2
26 define i1 @icmp_eq_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
28 %A = icmp eq i32 %arg1, %arg2
32 define i32 @icmp_eq_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
34 %A = icmp eq i32 %arg1, 511
35 %B = select i1 %A, i32 %val1, i32 %val2
39 define i32 @icmp_eq_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
41 %A = icmp eq i32 %arg1, -512
42 %B = select i1 %A, i32 %val1, i32 %val2
46 define i32 @icmp_eq_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
48 %A = icmp eq i32 %arg1, -1
49 %B = select i1 %A, i32 %val1, i32 %val2
53 define i32 @icmp_eq_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
55 %A = icmp eq i32 %arg1, 32768
56 %B = select i1 %A, i32 %val1, i32 %val2
60 define i32 @icmp_ne_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
62 %A = icmp ne i32 %arg1, %arg2
63 %B = select i1 %A, i32 %val1, i32 %val2
67 define i1 @icmp_ne_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
69 %A = icmp ne i32 %arg1, %arg2
73 define i32 @icmp_ne_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
75 %A = icmp ne i32 %arg1, 511
76 %B = select i1 %A, i32 %val1, i32 %val2
80 define i32 @icmp_ne_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
82 %A = icmp ne i32 %arg1, -512
83 %B = select i1 %A, i32 %val1, i32 %val2
87 define i32 @icmp_ne_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
89 %A = icmp ne i32 %arg1, -1
90 %B = select i1 %A, i32 %val1, i32 %val2
94 define i32 @icmp_ne_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
96 %A = icmp ne i32 %arg1, 32768
97 %B = select i1 %A, i32 %val1, i32 %val2
101 define i32 @icmp_ugt_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
103 %A = icmp ugt i32 %arg1, %arg2
104 %B = select i1 %A, i32 %val1, i32 %val2
108 define i1 @icmp_ugt_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
110 %A = icmp ugt i32 %arg1, %arg2
114 define i32 @icmp_ugt_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
116 %A = icmp ugt i32 %arg1, 511
117 %B = select i1 %A, i32 %val1, i32 %val2
121 define i32 @icmp_ugt_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
123 %A = icmp ugt i32 %arg1, 4294966784
124 %B = select i1 %A, i32 %val1, i32 %val2
128 define i32 @icmp_ugt_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
130 %A = icmp ugt i32 %arg1, 4294967293
131 %B = select i1 %A, i32 %val1, i32 %val2
135 define i32 @icmp_ugt_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
137 %A = icmp ugt i32 %arg1, 32768
138 %B = select i1 %A, i32 %val1, i32 %val2
142 define i32 @icmp_uge_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
144 %A = icmp uge i32 %arg1, %arg2
145 %B = select i1 %A, i32 %val1, i32 %val2
149 define i1 @icmp_uge_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
151 %A = icmp uge i32 %arg1, %arg2
155 ;; Note: icmp uge i32 %arg1, <immed> can always be transformed into
156 ;; icmp ugt i32 %arg1, <immed>-1
158 ;; Consequently, even though the patterns exist to match, it's unlikely
159 ;; they'll ever be generated.
161 define i32 @icmp_ult_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
163 %A = icmp ult i32 %arg1, %arg2
164 %B = select i1 %A, i32 %val1, i32 %val2
168 define i1 @icmp_ult_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
170 %A = icmp ult i32 %arg1, %arg2
174 define i32 @icmp_ult_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
176 %A = icmp ult i32 %arg1, 511
177 %B = select i1 %A, i32 %val1, i32 %val2
181 define i32 @icmp_ult_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
183 %A = icmp ult i32 %arg1, 4294966784
184 %B = select i1 %A, i32 %val1, i32 %val2
188 define i32 @icmp_ult_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
190 %A = icmp ult i32 %arg1, 4294967293
191 %B = select i1 %A, i32 %val1, i32 %val2
195 define i32 @icmp_ult_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
197 %A = icmp ult i32 %arg1, 32768
198 %B = select i1 %A, i32 %val1, i32 %val2
202 define i32 @icmp_ule_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
204 %A = icmp ule i32 %arg1, %arg2
205 %B = select i1 %A, i32 %val1, i32 %val2
209 define i1 @icmp_ule_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
211 %A = icmp ule i32 %arg1, %arg2
215 ;; Note: icmp ule i32 %arg1, <immed> can always be transformed into
216 ;; icmp ult i32 %arg1, <immed>+1
218 ;; Consequently, even though the patterns exist to match, it's unlikely
219 ;; they'll ever be generated.
221 define i32 @icmp_sgt_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
223 %A = icmp sgt i32 %arg1, %arg2
224 %B = select i1 %A, i32 %val1, i32 %val2
228 define i1 @icmp_sgt_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
230 %A = icmp sgt i32 %arg1, %arg2
234 define i32 @icmp_sgt_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
236 %A = icmp sgt i32 %arg1, 511
237 %B = select i1 %A, i32 %val1, i32 %val2
241 define i32 @icmp_sgt_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
243 %A = icmp sgt i32 %arg1, 4294966784
244 %B = select i1 %A, i32 %val1, i32 %val2
248 define i32 @icmp_sgt_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
250 %A = icmp sgt i32 %arg1, 4294967293
251 %B = select i1 %A, i32 %val1, i32 %val2
255 define i32 @icmp_sgt_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
257 %A = icmp sgt i32 %arg1, 32768
258 %B = select i1 %A, i32 %val1, i32 %val2
262 define i32 @icmp_sge_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
264 %A = icmp sge i32 %arg1, %arg2
265 %B = select i1 %A, i32 %val1, i32 %val2
269 define i1 @icmp_sge_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
271 %A = icmp sge i32 %arg1, %arg2
275 ;; Note: icmp sge i32 %arg1, <immed> can always be transformed into
276 ;; icmp sgt i32 %arg1, <immed>-1
278 ;; Consequently, even though the patterns exist to match, it's unlikely
279 ;; they'll ever be generated.
281 define i32 @icmp_slt_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
283 %A = icmp slt i32 %arg1, %arg2
284 %B = select i1 %A, i32 %val1, i32 %val2
288 define i1 @icmp_slt_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
290 %A = icmp slt i32 %arg1, %arg2
294 define i32 @icmp_slt_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
296 %A = icmp slt i32 %arg1, 511
297 %B = select i1 %A, i32 %val1, i32 %val2
301 define i32 @icmp_slt_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
303 %A = icmp slt i32 %arg1, -512
304 %B = select i1 %A, i32 %val1, i32 %val2
308 define i32 @icmp_slt_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
310 %A = icmp slt i32 %arg1, -1
311 %B = select i1 %A, i32 %val1, i32 %val2
315 define i32 @icmp_slt_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
317 %A = icmp slt i32 %arg1, 32768
318 %B = select i1 %A, i32 %val1, i32 %val2
322 define i32 @icmp_sle_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
324 %A = icmp sle i32 %arg1, %arg2
325 %B = select i1 %A, i32 %val1, i32 %val2
329 define i1 @icmp_sle_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
331 %A = icmp sle i32 %arg1, %arg2
335 ;; Note: icmp sle i32 %arg1, <immed> can always be transformed into
336 ;; icmp slt i32 %arg1, <immed>+1
338 ;; Consequently, even though the patterns exist to match, it's unlikely
339 ;; they'll ever be generated.