blob: 1db641e5a853ae0e4a5070dee4f83199e0cfb332 [file] [log] [blame]
Chandler Carruth38adf0b2012-07-02 12:20:14 +00001; RUN: llc < %s -march=cellspu | FileCheck %s
Scott Michel78c47fa2008-03-10 16:58:52 +00002
3target 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"
4target triple = "spu"
5
6; $3 = %arg1, $4 = %arg2, $5 = %val1, $6 = %val2
7; $3 = %arg1, $4 = %val1, $5 = %val2
8;
9; For "positive" comparisons:
10; selb $3, $6, $5, <i1>
11; selb $3, $5, $4, <i1>
12;
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>
17
18; i8 integer comparisons:
19define i8 @icmp_eq_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000020; CHECK: icmp_eq_select_i8:
21; CHECK: ceqb
22; CHECK: selb $3, $6, $5, $3
23
Scott Michel78c47fa2008-03-10 16:58:52 +000024entry:
25 %A = icmp eq i8 %arg1, %arg2
26 %B = select i1 %A, i8 %val1, i8 %val2
27 ret i8 %B
28}
29
30define i1 @icmp_eq_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000031; CHECK: icmp_eq_setcc_i8:
32; CHECK: ceqb
33; CHECK-NEXT: bi
34
Scott Michel78c47fa2008-03-10 16:58:52 +000035entry:
36 %A = icmp eq i8 %arg1, %arg2
37 ret i1 %A
38}
39
40define i8 @icmp_eq_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000041; CHECK: icmp_eq_immed01_i8:
42; CHECK: ceqbi
43; CHECK: selb $3, $5, $4, $3
44
Scott Michel78c47fa2008-03-10 16:58:52 +000045entry:
46 %A = icmp eq i8 %arg1, 127
47 %B = select i1 %A, i8 %val1, i8 %val2
48 ret i8 %B
49}
50
51define i8 @icmp_eq_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000052; CHECK: icmp_eq_immed02_i8:
53; CHECK: ceqbi
54; CHECK: selb $3, $5, $4, $3
55
Scott Michel78c47fa2008-03-10 16:58:52 +000056entry:
57 %A = icmp eq i8 %arg1, -128
58 %B = select i1 %A, i8 %val1, i8 %val2
59 ret i8 %B
60}
61
62define i8 @icmp_eq_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000063; CHECK: icmp_eq_immed03_i8:
64; CHECK: ceqbi
65; CHECK: selb $3, $5, $4, $3
66
Scott Michel78c47fa2008-03-10 16:58:52 +000067entry:
68 %A = icmp eq i8 %arg1, -1
69 %B = select i1 %A, i8 %val1, i8 %val2
70 ret i8 %B
71}
72
73define i8 @icmp_ne_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000074; CHECK: icmp_ne_select_i8:
75; CHECK: ceqb
76; CHECK: selb $3, $5, $6, $3
77
Scott Michel78c47fa2008-03-10 16:58:52 +000078entry:
79 %A = icmp ne i8 %arg1, %arg2
80 %B = select i1 %A, i8 %val1, i8 %val2
81 ret i8 %B
82}
83
84define i1 @icmp_ne_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000085; CHECK: icmp_ne_setcc_i8:
86; CHECK: ceqb
87; CHECK: xorbi
88; CHECK-NEXT: bi
89
Scott Michel78c47fa2008-03-10 16:58:52 +000090entry:
91 %A = icmp ne i8 %arg1, %arg2
92 ret i1 %A
93}
94
95define i8 @icmp_ne_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000096; CHECK: icmp_ne_immed01_i8:
97; CHECK: ceqbi
98; CHECK: selb $3, $4, $5, $3
99
Scott Michel78c47fa2008-03-10 16:58:52 +0000100entry:
101 %A = icmp ne i8 %arg1, 127
102 %B = select i1 %A, i8 %val1, i8 %val2
103 ret i8 %B
104}
105
106define i8 @icmp_ne_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000107; CHECK: icmp_ne_immed02_i8:
108; CHECK: ceqbi
109; CHECK: selb $3, $4, $5, $3
110
Scott Michel78c47fa2008-03-10 16:58:52 +0000111entry:
112 %A = icmp ne i8 %arg1, -128
113 %B = select i1 %A, i8 %val1, i8 %val2
114 ret i8 %B
115}
116
117define i8 @icmp_ne_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000118; CHECK: icmp_ne_immed03_i8:
119; CHECK: ceqbi
120; CHECK: selb $3, $4, $5, $3
121
Scott Michel78c47fa2008-03-10 16:58:52 +0000122entry:
123 %A = icmp ne i8 %arg1, -1
124 %B = select i1 %A, i8 %val1, i8 %val2
125 ret i8 %B
126}
127
128define i8 @icmp_ugt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000129; CHECK: icmp_ugt_select_i8:
130; CHECK: clgtb
131; CHECK: selb $3, $6, $5, $3
132
Scott Michel78c47fa2008-03-10 16:58:52 +0000133entry:
134 %A = icmp ugt i8 %arg1, %arg2
135 %B = select i1 %A, i8 %val1, i8 %val2
136 ret i8 %B
137}
138
139define i1 @icmp_ugt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000140; CHECK: icmp_ugt_setcc_i8:
141; CHECK: clgtb
142; CHECK-NEXT: bi
143
Scott Michel78c47fa2008-03-10 16:58:52 +0000144entry:
145 %A = icmp ugt i8 %arg1, %arg2
146 ret i1 %A
147}
148
149define i8 @icmp_ugt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000150; CHECK: icmp_ugt_immed01_i8:
151; CHECK: clgtbi
152; CHECK: selb $3, $5, $4, $3
153
Scott Michel78c47fa2008-03-10 16:58:52 +0000154entry:
155 %A = icmp ugt i8 %arg1, 126
156 %B = select i1 %A, i8 %val1, i8 %val2
157 ret i8 %B
158}
159
160define i8 @icmp_uge_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000161; CHECK: icmp_uge_select_i8:
162; CHECK: ceqb
163; CHECK: clgtb
164; CHECK: or
165; CHECK: selb $3, $6, $5, $3
166
Scott Michel78c47fa2008-03-10 16:58:52 +0000167entry:
168 %A = icmp uge i8 %arg1, %arg2
169 %B = select i1 %A, i8 %val1, i8 %val2
170 ret i8 %B
171}
172
173define i1 @icmp_uge_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000174; CHECK: icmp_uge_setcc_i8:
175; CHECK: ceqb
176; CHECK: clgtb
177; CHECK: or
178; CHECK-NEXT: bi
179
Scott Michel78c47fa2008-03-10 16:58:52 +0000180entry:
181 %A = icmp uge i8 %arg1, %arg2
182 ret i1 %A
183}
184
185;; Note: icmp uge i8 %arg1, <immed> can always be transformed into
186;; icmp ugt i8 %arg1, <immed>-1
187;;
188;; Consequently, even though the patterns exist to match, it's unlikely
189;; they'll ever be generated.
190
191define i8 @icmp_ult_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000192; CHECK: icmp_ult_select_i8:
193; CHECK: ceqb
194; CHECK: clgtb
195; CHECK: nor
196; CHECK: selb $3, $6, $5, $3
197
Scott Michel78c47fa2008-03-10 16:58:52 +0000198entry:
199 %A = icmp ult i8 %arg1, %arg2
200 %B = select i1 %A, i8 %val1, i8 %val2
201 ret i8 %B
202}
203
204define i1 @icmp_ult_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000205; CHECK: icmp_ult_setcc_i8:
206; CHECK: ceqb
207; CHECK: clgtb
208; CHECK: nor
209; CHECK-NEXT: bi
210
Scott Michel78c47fa2008-03-10 16:58:52 +0000211entry:
212 %A = icmp ult i8 %arg1, %arg2
213 ret i1 %A
214}
215
216define i8 @icmp_ult_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000217; CHECK: icmp_ult_immed01_i8:
218; CHECK: ceqbi
219; CHECK: clgtbi
220; CHECK: nor
221; CHECK: selb $3, $5, $4, $3
222
Scott Michel78c47fa2008-03-10 16:58:52 +0000223entry:
224 %A = icmp ult i8 %arg1, 253
225 %B = select i1 %A, i8 %val1, i8 %val2
226 ret i8 %B
227}
228
229define i8 @icmp_ult_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000230; CHECK: icmp_ult_immed02_i8:
231; CHECK: ceqbi
232; CHECK: clgtbi
233; CHECK: nor
234; CHECK: selb $3, $5, $4, $3
235
Scott Michel78c47fa2008-03-10 16:58:52 +0000236entry:
237 %A = icmp ult i8 %arg1, 129
238 %B = select i1 %A, i8 %val1, i8 %val2
239 ret i8 %B
240}
241
242define i8 @icmp_ule_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000243; CHECK: icmp_ule_select_i8:
244; CHECK: clgtb
245; CHECK: selb $3, $5, $6, $3
246
Scott Michel78c47fa2008-03-10 16:58:52 +0000247entry:
248 %A = icmp ule i8 %arg1, %arg2
249 %B = select i1 %A, i8 %val1, i8 %val2
250 ret i8 %B
251}
252
253define i1 @icmp_ule_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000254; CHECK: icmp_ule_setcc_i8:
255; CHECK: clgtb
256; CHECK: xorbi
257; CHECK-NEXT: bi
258
Scott Michel78c47fa2008-03-10 16:58:52 +0000259entry:
260 %A = icmp ule i8 %arg1, %arg2
261 ret i1 %A
262}
263
264;; Note: icmp ule i8 %arg1, <immed> can always be transformed into
265;; icmp ult i8 %arg1, <immed>+1
266;;
267;; Consequently, even though the patterns exist to match, it's unlikely
268;; they'll ever be generated.
269
270define i8 @icmp_sgt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000271; CHECK: icmp_sgt_select_i8:
272; CHECK: cgtb
273; CHECK: selb $3, $6, $5, $3
274
Scott Michel78c47fa2008-03-10 16:58:52 +0000275entry:
276 %A = icmp sgt i8 %arg1, %arg2
277 %B = select i1 %A, i8 %val1, i8 %val2
278 ret i8 %B
279}
280
281define i1 @icmp_sgt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000282; CHECK: icmp_sgt_setcc_i8:
283; CHECK: cgtb
284; CHECK-NEXT: bi
285
Scott Michel78c47fa2008-03-10 16:58:52 +0000286entry:
287 %A = icmp sgt i8 %arg1, %arg2
288 ret i1 %A
289}
290
291define i8 @icmp_sgt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000292; CHECK: icmp_sgt_immed01_i8:
293; CHECK: cgtbi
294; CHECK: selb $3, $5, $4, $3
295
Scott Michel78c47fa2008-03-10 16:58:52 +0000296entry:
Scott Michel79698f62008-03-20 00:51:36 +0000297 %A = icmp sgt i8 %arg1, 96
Scott Michel78c47fa2008-03-10 16:58:52 +0000298 %B = select i1 %A, i8 %val1, i8 %val2
299 ret i8 %B
300}
301
302define i8 @icmp_sgt_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000303; CHECK: icmp_sgt_immed02_i8:
304; CHECK: cgtbi
305; CHECK: selb $3, $5, $4, $3
306
Scott Michel78c47fa2008-03-10 16:58:52 +0000307entry:
308 %A = icmp sgt i8 %arg1, -1
309 %B = select i1 %A, i8 %val1, i8 %val2
310 ret i8 %B
311}
312
313define i8 @icmp_sgt_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000314; CHECK: icmp_sgt_immed03_i8:
315; CHECK: ceqbi
316; CHECK: selb $3, $4, $5, $3
317
Scott Michel78c47fa2008-03-10 16:58:52 +0000318entry:
319 %A = icmp sgt i8 %arg1, -128
320 %B = select i1 %A, i8 %val1, i8 %val2
321 ret i8 %B
322}
323
324define i8 @icmp_sge_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000325; CHECK: icmp_sge_select_i8:
326; CHECK: ceqb
327; CHECK: cgtb
328; CHECK: or
329; CHECK: selb $3, $6, $5, $3
330
Scott Michel78c47fa2008-03-10 16:58:52 +0000331entry:
332 %A = icmp sge i8 %arg1, %arg2
333 %B = select i1 %A, i8 %val1, i8 %val2
334 ret i8 %B
335}
336
337define i1 @icmp_sge_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000338; CHECK: icmp_sge_setcc_i8:
339; CHECK: ceqb
340; CHECK: cgtb
341; CHECK: or
342; CHECK-NEXT: bi
343
Scott Michel78c47fa2008-03-10 16:58:52 +0000344entry:
345 %A = icmp sge i8 %arg1, %arg2
346 ret i1 %A
347}
348
349;; Note: icmp sge i8 %arg1, <immed> can always be transformed into
350;; icmp sgt i8 %arg1, <immed>-1
351;;
352;; Consequently, even though the patterns exist to match, it's unlikely
353;; they'll ever be generated.
354
355define i8 @icmp_slt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000356; CHECK: icmp_slt_select_i8:
357; CHECK: ceqb
358; CHECK: cgtb
359; CHECK: nor
360; CHECK: selb $3, $6, $5, $3
361
Scott Michel78c47fa2008-03-10 16:58:52 +0000362entry:
363 %A = icmp slt i8 %arg1, %arg2
364 %B = select i1 %A, i8 %val1, i8 %val2
365 ret i8 %B
366}
367
368define i1 @icmp_slt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000369; CHECK: icmp_slt_setcc_i8:
370; CHECK: ceqb
371; CHECK: cgtb
372; CHECK: nor
373; CHECK-NEXT: bi
374
Scott Michel78c47fa2008-03-10 16:58:52 +0000375entry:
376 %A = icmp slt i8 %arg1, %arg2
377 ret i1 %A
378}
379
380define i8 @icmp_slt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000381; CHECK: icmp_slt_immed01_i8:
382; CHECK: ceqbi
383; CHECK: cgtbi
384; CHECK: nor
385; CHECK: selb $3, $5, $4, $3
386
Scott Michel78c47fa2008-03-10 16:58:52 +0000387entry:
Scott Michel79698f62008-03-20 00:51:36 +0000388 %A = icmp slt i8 %arg1, 96
Scott Michel78c47fa2008-03-10 16:58:52 +0000389 %B = select i1 %A, i8 %val1, i8 %val2
390 ret i8 %B
391}
392
393define i8 @icmp_slt_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000394; CHECK: icmp_slt_immed02_i8:
395; CHECK: ceqbi
396; CHECK: cgtbi
397; CHECK: nor
398; CHECK: selb $3, $5, $4, $3
399
Scott Michel78c47fa2008-03-10 16:58:52 +0000400entry:
Scott Michel79698f62008-03-20 00:51:36 +0000401 %A = icmp slt i8 %arg1, -120
Scott Michel78c47fa2008-03-10 16:58:52 +0000402 %B = select i1 %A, i8 %val1, i8 %val2
403 ret i8 %B
404}
405
406define i8 @icmp_slt_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000407; CHECK: icmp_slt_immed03_i8:
408; CHECK: ceqbi
409; CHECK: cgtbi
410; CHECK: nor
411; CHECK: selb $3, $5, $4, $3
412
Scott Michel78c47fa2008-03-10 16:58:52 +0000413entry:
414 %A = icmp slt i8 %arg1, -1
415 %B = select i1 %A, i8 %val1, i8 %val2
416 ret i8 %B
417}
418
419define i8 @icmp_sle_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000420; CHECK: icmp_sle_select_i8:
421; CHECK: cgtb
422; CHECK: selb $3, $5, $6, $3
423
Scott Michel78c47fa2008-03-10 16:58:52 +0000424entry:
425 %A = icmp sle i8 %arg1, %arg2
426 %B = select i1 %A, i8 %val1, i8 %val2
427 ret i8 %B
428}
429
430define i1 @icmp_sle_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000431; CHECK: icmp_sle_setcc_i8:
432; CHECK: cgtb
433; CHECK: xorbi
434; CHECK-NEXT: bi
435
Scott Michel78c47fa2008-03-10 16:58:52 +0000436entry:
437 %A = icmp sle i8 %arg1, %arg2
438 ret i1 %A
439}
440
441;; Note: icmp sle i8 %arg1, <immed> can always be transformed into
442;; icmp slt i8 %arg1, <immed>+1
443;;
444;; Consequently, even though the patterns exist to match, it's unlikely
445;; they'll ever be generated.
446