blob: 1794f4cd7b66d95e6636bf956a15138ed27435d0 [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; i32 integer comparisons:
19define i32 @icmp_eq_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000020; CHECK: icmp_eq_select_i32:
21; CHECK: ceq
22; CHECK: selb $3, $6, $5, $3
23
Scott Michel78c47fa2008-03-10 16:58:52 +000024entry:
25 %A = icmp eq i32 %arg1, %arg2
26 %B = select i1 %A, i32 %val1, i32 %val2
27 ret i32 %B
28}
29
30define i1 @icmp_eq_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000031; CHECK: icmp_eq_setcc_i32:
32; CHECK: ilhu
33; CHECK: ceq
34; CHECK: iohl
35; CHECK: shufb
36
Scott Michel78c47fa2008-03-10 16:58:52 +000037entry:
38 %A = icmp eq i32 %arg1, %arg2
39 ret i1 %A
40}
41
42define i32 @icmp_eq_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000043; CHECK: icmp_eq_immed01_i32:
44; CHECK: ceqi
45; CHECK: selb $3, $5, $4, $3
46
Scott Michel78c47fa2008-03-10 16:58:52 +000047entry:
48 %A = icmp eq i32 %arg1, 511
49 %B = select i1 %A, i32 %val1, i32 %val2
50 ret i32 %B
51}
52
53define i32 @icmp_eq_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000054; CHECK: icmp_eq_immed02_i32:
55; CHECK: ceqi
56; CHECK: selb $3, $5, $4, $3
57
Scott Michel78c47fa2008-03-10 16:58:52 +000058entry:
59 %A = icmp eq i32 %arg1, -512
60 %B = select i1 %A, i32 %val1, i32 %val2
61 ret i32 %B
62}
63
64define i32 @icmp_eq_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000065; CHECK: icmp_eq_immed03_i32:
66; CHECK: ceqi
67; CHECK: selb $3, $5, $4, $3
68
Scott Michel78c47fa2008-03-10 16:58:52 +000069entry:
70 %A = icmp eq i32 %arg1, -1
71 %B = select i1 %A, i32 %val1, i32 %val2
72 ret i32 %B
73}
74
75define i32 @icmp_eq_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000076; CHECK: icmp_eq_immed04_i32:
77; CHECK: ila
78; CHECK: ceq
79; CHECK: selb $3, $5, $4, $3
80
Scott Michel78c47fa2008-03-10 16:58:52 +000081entry:
82 %A = icmp eq i32 %arg1, 32768
83 %B = select i1 %A, i32 %val1, i32 %val2
84 ret i32 %B
85}
86
87define i32 @icmp_ne_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000088; CHECK: icmp_ne_select_i32:
89; CHECK: ceq
90; CHECK: selb $3, $5, $6, $3
91
Scott Michel78c47fa2008-03-10 16:58:52 +000092entry:
93 %A = icmp ne i32 %arg1, %arg2
94 %B = select i1 %A, i32 %val1, i32 %val2
95 ret i32 %B
96}
97
98define i1 @icmp_ne_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000099; CHECK: icmp_ne_setcc_i32:
100; CHECK: ceq
101; CHECK: ilhu
102; CHECK: xori
103; CHECK: iohl
104; CHECK: shufb
105
Scott Michel78c47fa2008-03-10 16:58:52 +0000106entry:
107 %A = icmp ne i32 %arg1, %arg2
108 ret i1 %A
109}
110
111define i32 @icmp_ne_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000112; CHECK: icmp_ne_immed01_i32:
113; CHECK: ceqi
114; CHECK: selb $3, $4, $5, $3
115
Scott Michel78c47fa2008-03-10 16:58:52 +0000116entry:
117 %A = icmp ne i32 %arg1, 511
118 %B = select i1 %A, i32 %val1, i32 %val2
119 ret i32 %B
120}
121
122define i32 @icmp_ne_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000123; CHECK: icmp_ne_immed02_i32:
124; CHECK: ceqi
125; CHECK: selb $3, $4, $5, $3
126
Scott Michel78c47fa2008-03-10 16:58:52 +0000127entry:
128 %A = icmp ne i32 %arg1, -512
129 %B = select i1 %A, i32 %val1, i32 %val2
130 ret i32 %B
131}
132
133define i32 @icmp_ne_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000134; CHECK: icmp_ne_immed03_i32:
135; CHECK: ceqi
136; CHECK: selb $3, $4, $5, $3
137
Scott Michel78c47fa2008-03-10 16:58:52 +0000138entry:
139 %A = icmp ne i32 %arg1, -1
140 %B = select i1 %A, i32 %val1, i32 %val2
141 ret i32 %B
142}
143
144define i32 @icmp_ne_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000145; CHECK: icmp_ne_immed04_i32:
146; CHECK: ila
147; CHECK: ceq
148; CHECK: selb $3, $4, $5, $3
149
Scott Michel78c47fa2008-03-10 16:58:52 +0000150entry:
151 %A = icmp ne i32 %arg1, 32768
152 %B = select i1 %A, i32 %val1, i32 %val2
153 ret i32 %B
154}
155
156define i32 @icmp_ugt_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000157; CHECK: icmp_ugt_select_i32:
158; CHECK: clgt
159; CHECK: selb $3, $6, $5, $3
160
Scott Michel78c47fa2008-03-10 16:58:52 +0000161entry:
162 %A = icmp ugt i32 %arg1, %arg2
163 %B = select i1 %A, i32 %val1, i32 %val2
164 ret i32 %B
165}
166
167define i1 @icmp_ugt_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000168; CHECK: icmp_ugt_setcc_i32:
169; CHECK: ilhu
170; CHECK: clgt
171; CHECK: iohl
172; CHECK: shufb
173
Scott Michel78c47fa2008-03-10 16:58:52 +0000174entry:
175 %A = icmp ugt i32 %arg1, %arg2
176 ret i1 %A
177}
178
179define i32 @icmp_ugt_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000180; CHECK: icmp_ugt_immed01_i32:
181; CHECK: clgti
182; CHECK: selb $3, $5, $4, $3
183
Scott Michel78c47fa2008-03-10 16:58:52 +0000184entry:
185 %A = icmp ugt i32 %arg1, 511
186 %B = select i1 %A, i32 %val1, i32 %val2
187 ret i32 %B
188}
189
190define i32 @icmp_ugt_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000191; CHECK: icmp_ugt_immed02_i32:
192; CHECK: clgti
193; CHECK: selb $3, $5, $4, $3
194
Scott Michel78c47fa2008-03-10 16:58:52 +0000195entry:
196 %A = icmp ugt i32 %arg1, 4294966784
197 %B = select i1 %A, i32 %val1, i32 %val2
198 ret i32 %B
199}
200
201define i32 @icmp_ugt_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000202; CHECK: icmp_ugt_immed03_i32:
203; CHECK: clgti
204; CHECK: selb $3, $5, $4, $3
205
Scott Michel78c47fa2008-03-10 16:58:52 +0000206entry:
207 %A = icmp ugt i32 %arg1, 4294967293
208 %B = select i1 %A, i32 %val1, i32 %val2
209 ret i32 %B
210}
211
212define i32 @icmp_ugt_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000213; CHECK: icmp_ugt_immed04_i32:
214; CHECK: ila
215; CHECK: clgt
216; CHECK: selb $3, $5, $4, $3
217
Scott Michel78c47fa2008-03-10 16:58:52 +0000218entry:
219 %A = icmp ugt i32 %arg1, 32768
220 %B = select i1 %A, i32 %val1, i32 %val2
221 ret i32 %B
222}
223
224define i32 @icmp_uge_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000225; CHECK: icmp_uge_select_i32:
226; CHECK: ceq
227; CHECK: clgt
228; CHECK: or
229; CHECK: selb $3, $6, $5, $3
230
Scott Michel78c47fa2008-03-10 16:58:52 +0000231entry:
232 %A = icmp uge i32 %arg1, %arg2
233 %B = select i1 %A, i32 %val1, i32 %val2
234 ret i32 %B
235}
236
237define i1 @icmp_uge_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000238; CHECK: icmp_uge_setcc_i32:
239; CHECK: ceq
240; CHECK: clgt
241; CHECK: ilhu
242; CHECK: or
243; CHECK: iohl
244; CHECK: shufb
245
Scott Michel78c47fa2008-03-10 16:58:52 +0000246entry:
247 %A = icmp uge i32 %arg1, %arg2
248 ret i1 %A
249}
250
251;; Note: icmp uge i32 %arg1, <immed> can always be transformed into
252;; icmp ugt i32 %arg1, <immed>-1
253;;
254;; Consequently, even though the patterns exist to match, it's unlikely
255;; they'll ever be generated.
256
257define i32 @icmp_ult_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000258; CHECK: icmp_ult_select_i32:
259; CHECK: ceq
260; CHECK: clgt
261; CHECK: nor
262; CHECK: selb $3, $6, $5, $3
263
Scott Michel78c47fa2008-03-10 16:58:52 +0000264entry:
265 %A = icmp ult i32 %arg1, %arg2
266 %B = select i1 %A, i32 %val1, i32 %val2
267 ret i32 %B
268}
269
270define i1 @icmp_ult_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000271; CHECK: icmp_ult_setcc_i32:
272; CHECK: ceq
273; CHECK: clgt
274; CHECK: ilhu
275; CHECK: nor
276; CHECK: iohl
277; CHECK: shufb
278
Scott Michel78c47fa2008-03-10 16:58:52 +0000279entry:
280 %A = icmp ult i32 %arg1, %arg2
281 ret i1 %A
282}
283
284define i32 @icmp_ult_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000285; CHECK: icmp_ult_immed01_i32:
286; CHECK: ceqi
287; CHECK: clgti
288; CHECK: nor
289; CHECK: selb $3, $5, $4, $3
290
Scott Michel78c47fa2008-03-10 16:58:52 +0000291entry:
292 %A = icmp ult i32 %arg1, 511
293 %B = select i1 %A, i32 %val1, i32 %val2
294 ret i32 %B
295}
296
297define i32 @icmp_ult_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000298; CHECK: icmp_ult_immed02_i32:
299; CHECK: ceqi
300; CHECK: clgti
301; CHECK: nor
302; CHECK: selb $3, $5, $4, $3
303
Scott Michel78c47fa2008-03-10 16:58:52 +0000304entry:
305 %A = icmp ult i32 %arg1, 4294966784
306 %B = select i1 %A, i32 %val1, i32 %val2
307 ret i32 %B
308}
309
310define i32 @icmp_ult_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000311; CHECK: icmp_ult_immed03_i32:
312; CHECK: ceqi
313; CHECK: clgti
314; CHECK: nor
315; CHECK: selb $3, $5, $4, $3
316
Scott Michel78c47fa2008-03-10 16:58:52 +0000317entry:
318 %A = icmp ult i32 %arg1, 4294967293
319 %B = select i1 %A, i32 %val1, i32 %val2
320 ret i32 %B
321}
322
323define i32 @icmp_ult_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000324; CHECK: icmp_ult_immed04_i32:
Evan Chengf5c05392012-07-17 08:31:11 +0000325; CHECK: rotmi
326; CHECK: ceqi
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000327; CHECK: selb $3, $5, $4, $3
328
Scott Michel78c47fa2008-03-10 16:58:52 +0000329entry:
330 %A = icmp ult i32 %arg1, 32768
331 %B = select i1 %A, i32 %val1, i32 %val2
332 ret i32 %B
333}
334
335define i32 @icmp_ule_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000336; CHECK: icmp_ule_select_i32:
337; CHECK: clgt
338; CHECK: selb $3, $5, $6, $3
339
Scott Michel78c47fa2008-03-10 16:58:52 +0000340entry:
341 %A = icmp ule i32 %arg1, %arg2
342 %B = select i1 %A, i32 %val1, i32 %val2
343 ret i32 %B
344}
345
346define i1 @icmp_ule_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000347; CHECK: icmp_ule_setcc_i32:
348; CHECK: clgt
349; CHECK: ilhu
350; CHECK: xori
351; CHECK: iohl
352; CHECK: shufb
353
Scott Michel78c47fa2008-03-10 16:58:52 +0000354entry:
355 %A = icmp ule i32 %arg1, %arg2
356 ret i1 %A
357}
358
359;; Note: icmp ule i32 %arg1, <immed> can always be transformed into
360;; icmp ult i32 %arg1, <immed>+1
361;;
362;; Consequently, even though the patterns exist to match, it's unlikely
363;; they'll ever be generated.
364
365define i32 @icmp_sgt_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000366; CHECK: icmp_sgt_select_i32:
367; CHECK: cgt
368; CHECK: selb $3, $6, $5, $3
369
Scott Michel78c47fa2008-03-10 16:58:52 +0000370entry:
371 %A = icmp sgt i32 %arg1, %arg2
372 %B = select i1 %A, i32 %val1, i32 %val2
373 ret i32 %B
374}
375
376define i1 @icmp_sgt_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000377; CHECK: icmp_sgt_setcc_i32:
378; CHECK: ilhu
379; CHECK: cgt
380; CHECK: iohl
381; CHECK: shufb
382
Scott Michel78c47fa2008-03-10 16:58:52 +0000383entry:
384 %A = icmp sgt i32 %arg1, %arg2
385 ret i1 %A
386}
387
388define i32 @icmp_sgt_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000389; CHECK: icmp_sgt_immed01_i32:
390; CHECK: cgti
391; CHECK: selb $3, $5, $4, $3
392
Scott Michel78c47fa2008-03-10 16:58:52 +0000393entry:
394 %A = icmp sgt i32 %arg1, 511
395 %B = select i1 %A, i32 %val1, i32 %val2
396 ret i32 %B
397}
398
399define i32 @icmp_sgt_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000400; CHECK: icmp_sgt_immed02_i32:
401; CHECK: cgti
402; CHECK: selb $3, $5, $4, $3
403
Scott Michel78c47fa2008-03-10 16:58:52 +0000404entry:
405 %A = icmp sgt i32 %arg1, 4294966784
406 %B = select i1 %A, i32 %val1, i32 %val2
407 ret i32 %B
408}
409
410define i32 @icmp_sgt_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000411; CHECK: icmp_sgt_immed03_i32:
412; CHECK: cgti
413; CHECK: selb $3, $5, $4, $3
414
Scott Michel78c47fa2008-03-10 16:58:52 +0000415entry:
416 %A = icmp sgt i32 %arg1, 4294967293
417 %B = select i1 %A, i32 %val1, i32 %val2
418 ret i32 %B
419}
420
421define i32 @icmp_sgt_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000422; CHECK: icmp_sgt_immed04_i32:
423; CHECK: ila
424; CHECK: cgt
425; CHECK: selb $3, $5, $4, $3
426
Scott Michel78c47fa2008-03-10 16:58:52 +0000427entry:
428 %A = icmp sgt i32 %arg1, 32768
429 %B = select i1 %A, i32 %val1, i32 %val2
430 ret i32 %B
431}
432
433define i32 @icmp_sge_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000434; CHECK: icmp_sge_select_i32:
435; CHECK: ceq
436; CHECK: cgt
437; CHECK: or
438; CHECK: selb $3, $6, $5, $3
439
Scott Michel78c47fa2008-03-10 16:58:52 +0000440entry:
441 %A = icmp sge i32 %arg1, %arg2
442 %B = select i1 %A, i32 %val1, i32 %val2
443 ret i32 %B
444}
445
446define i1 @icmp_sge_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000447; CHECK: icmp_sge_setcc_i32:
448; CHECK: ceq
449; CHECK: cgt
450; CHECK: ilhu
451; CHECK: or
452; CHECK: iohl
453; CHECK: shufb
454
Scott Michel78c47fa2008-03-10 16:58:52 +0000455entry:
456 %A = icmp sge i32 %arg1, %arg2
457 ret i1 %A
458}
459
460;; Note: icmp sge i32 %arg1, <immed> can always be transformed into
461;; icmp sgt i32 %arg1, <immed>-1
462;;
463;; Consequently, even though the patterns exist to match, it's unlikely
464;; they'll ever be generated.
465
466define i32 @icmp_slt_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000467; CHECK: icmp_slt_select_i32:
468; CHECK: ceq
469; CHECK: cgt
470; CHECK: nor
471; CHECK: selb $3, $6, $5, $3
472
Scott Michel78c47fa2008-03-10 16:58:52 +0000473entry:
474 %A = icmp slt i32 %arg1, %arg2
475 %B = select i1 %A, i32 %val1, i32 %val2
476 ret i32 %B
477}
478
479define i1 @icmp_slt_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000480; CHECK: icmp_slt_setcc_i32:
481; CHECK: ceq
482; CHECK: cgt
483; CHECK: ilhu
484; CHECK: nor
485; CHECK: iohl
486; CHECK: shufb
487
Scott Michel78c47fa2008-03-10 16:58:52 +0000488entry:
489 %A = icmp slt i32 %arg1, %arg2
490 ret i1 %A
491}
492
493define i32 @icmp_slt_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000494; CHECK: icmp_slt_immed01_i32:
495; CHECK: ceqi
496; CHECK: cgti
497; CHECK: nor
498; CHECK: selb $3, $5, $4, $3
499
Scott Michel78c47fa2008-03-10 16:58:52 +0000500entry:
501 %A = icmp slt i32 %arg1, 511
502 %B = select i1 %A, i32 %val1, i32 %val2
503 ret i32 %B
504}
505
506define i32 @icmp_slt_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000507; CHECK: icmp_slt_immed02_i32:
508; CHECK: ceqi
509; CHECK: cgti
510; CHECK: nor
511; CHECK: selb $3, $5, $4, $3
512
Scott Michel78c47fa2008-03-10 16:58:52 +0000513entry:
514 %A = icmp slt i32 %arg1, -512
515 %B = select i1 %A, i32 %val1, i32 %val2
516 ret i32 %B
517}
518
519define i32 @icmp_slt_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000520; CHECK: icmp_slt_immed03_i32:
521; CHECK: ceqi
522; CHECK: cgti
523; CHECK: nor
524; CHECK: selb $3, $5, $4, $3
525
Scott Michel78c47fa2008-03-10 16:58:52 +0000526entry:
527 %A = icmp slt i32 %arg1, -1
528 %B = select i1 %A, i32 %val1, i32 %val2
529 ret i32 %B
530}
531
532define i32 @icmp_slt_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000533; CHECK: icmp_slt_immed04_i32:
534; CHECK: ila
535; CHECK: ceq
536; CHECK: cgt
537; CHECK: nor
538; CHECK: selb $3, $5, $4, $3
539
Scott Michel78c47fa2008-03-10 16:58:52 +0000540entry:
541 %A = icmp slt i32 %arg1, 32768
542 %B = select i1 %A, i32 %val1, i32 %val2
543 ret i32 %B
544}
545
546define i32 @icmp_sle_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000547; CHECK: icmp_sle_select_i32:
548; CHECK: cgt
549; CHECK: selb $3, $5, $6, $3
550
Scott Michel78c47fa2008-03-10 16:58:52 +0000551entry:
552 %A = icmp sle i32 %arg1, %arg2
553 %B = select i1 %A, i32 %val1, i32 %val2
554 ret i32 %B
555}
556
557define i1 @icmp_sle_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000558; CHECK: icmp_sle_setcc_i32:
559; CHECK: cgt
560; CHECK: ilhu
561; CHECK: xori
562; CHECK: iohl
563; CHECK: shufb
564
Scott Michel78c47fa2008-03-10 16:58:52 +0000565entry:
566 %A = icmp sle i32 %arg1, %arg2
567 ret i1 %A
568}
569
570;; Note: icmp sle i32 %arg1, <immed> can always be transformed into
571;; icmp slt i32 %arg1, <immed>+1
572;;
573;; Consequently, even though the patterns exist to match, it's unlikely
574;; they'll ever be generated.
575