blob: 2f9b091faea3af9687666584e23dd6f130bab2ed [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; i16 integer comparisons:
19define i16 @icmp_eq_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000020; CHECK: icmp_eq_select_i16:
21; CHECK: ceqh
22; CHECK: selb $3, $6, $5, $3
23
Scott Michel78c47fa2008-03-10 16:58:52 +000024entry:
25 %A = icmp eq i16 %arg1, %arg2
26 %B = select i1 %A, i16 %val1, i16 %val2
27 ret i16 %B
28}
29
30define i1 @icmp_eq_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000031; CHECK: icmp_eq_setcc_i16:
32; CHECK: ilhu
33; CHECK: ceqh
34; CHECK: iohl
35; CHECK: shufb
36
Scott Michel78c47fa2008-03-10 16:58:52 +000037entry:
38 %A = icmp eq i16 %arg1, %arg2
39 ret i1 %A
40}
41
42define i16 @icmp_eq_immed01_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000043; CHECK: icmp_eq_immed01_i16:
44; CHECK: ceqhi
45; CHECK: selb $3, $5, $4, $3
46
Scott Michel78c47fa2008-03-10 16:58:52 +000047entry:
48 %A = icmp eq i16 %arg1, 511
49 %B = select i1 %A, i16 %val1, i16 %val2
50 ret i16 %B
51}
52
53define i16 @icmp_eq_immed02_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000054; CHECK: icmp_eq_immed02_i16:
55; CHECK: ceqhi
56; CHECK: selb $3, $5, $4, $3
57
Scott Michel78c47fa2008-03-10 16:58:52 +000058entry:
59 %A = icmp eq i16 %arg1, -512
60 %B = select i1 %A, i16 %val1, i16 %val2
61 ret i16 %B
62}
63
64define i16 @icmp_eq_immed03_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000065; CHECK: icmp_eq_immed03_i16:
66; CHECK: ceqhi
67; CHECK: selb $3, $5, $4, $3
68
Scott Michel78c47fa2008-03-10 16:58:52 +000069entry:
70 %A = icmp eq i16 %arg1, -1
71 %B = select i1 %A, i16 %val1, i16 %val2
72 ret i16 %B
73}
74
75define i16 @icmp_eq_immed04_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000076; CHECK: icmp_eq_immed04_i16:
77; CHECK: ilh
78; CHECK: ceqh
79; CHECK: selb $3, $5, $4, $3
80
Scott Michel78c47fa2008-03-10 16:58:52 +000081entry:
82 %A = icmp eq i16 %arg1, 32768
83 %B = select i1 %A, i16 %val1, i16 %val2
84 ret i16 %B
85}
86
87define i16 @icmp_ne_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000088; CHECK: icmp_ne_select_i16:
89; CHECK: ceqh
90; CHECK: selb $3, $5, $6, $3
91
Scott Michel78c47fa2008-03-10 16:58:52 +000092entry:
93 %A = icmp ne i16 %arg1, %arg2
94 %B = select i1 %A, i16 %val1, i16 %val2
95 ret i16 %B
96}
97
98define i1 @icmp_ne_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +000099; CHECK: icmp_ne_setcc_i16:
100; CHECK: ceqh
101; CHECK: ilhu
102; CHECK: xorhi
103; CHECK: iohl
104; CHECK: shufb
105
Scott Michel78c47fa2008-03-10 16:58:52 +0000106entry:
107 %A = icmp ne i16 %arg1, %arg2
108 ret i1 %A
109}
110
111define i16 @icmp_ne_immed01_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000112; CHECK: icmp_ne_immed01_i16:
113; CHECK: ceqhi
114; CHECK: selb $3, $4, $5, $3
115
Scott Michel78c47fa2008-03-10 16:58:52 +0000116entry:
117 %A = icmp ne i16 %arg1, 511
118 %B = select i1 %A, i16 %val1, i16 %val2
119 ret i16 %B
120}
121
122define i16 @icmp_ne_immed02_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000123; CHECK: icmp_ne_immed02_i16:
124; CHECK: ceqhi
125; CHECK: selb $3, $4, $5, $3
126
Scott Michel78c47fa2008-03-10 16:58:52 +0000127entry:
128 %A = icmp ne i16 %arg1, -512
129 %B = select i1 %A, i16 %val1, i16 %val2
130 ret i16 %B
131}
132
133define i16 @icmp_ne_immed03_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000134; CHECK: icmp_ne_immed03_i16:
135; CHECK: ceqhi
136; CHECK: selb $3, $4, $5, $3
137
Scott Michel78c47fa2008-03-10 16:58:52 +0000138entry:
139 %A = icmp ne i16 %arg1, -1
140 %B = select i1 %A, i16 %val1, i16 %val2
141 ret i16 %B
142}
143
144define i16 @icmp_ne_immed04_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000145; CHECK: icmp_ne_immed04_i16:
146; CHECK: ilh
147; CHECK: ceqh
148; CHECK: selb $3, $4, $5, $3
149
Scott Michel78c47fa2008-03-10 16:58:52 +0000150entry:
151 %A = icmp ne i16 %arg1, 32768
152 %B = select i1 %A, i16 %val1, i16 %val2
153 ret i16 %B
154}
155
156define i16 @icmp_ugt_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000157; CHECK: icmp_ugt_select_i16:
158; CHECK: clgth
159; CHECK: selb $3, $6, $5, $3
160
Scott Michel78c47fa2008-03-10 16:58:52 +0000161entry:
162 %A = icmp ugt i16 %arg1, %arg2
163 %B = select i1 %A, i16 %val1, i16 %val2
164 ret i16 %B
165}
166
167define i1 @icmp_ugt_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000168; CHECK: icmp_ugt_setcc_i16:
169; CHECK: ilhu
170; CHECK: clgth
171; CHECK: iohl
172; CHECK: shufb
173
Scott Michel78c47fa2008-03-10 16:58:52 +0000174entry:
175 %A = icmp ugt i16 %arg1, %arg2
176 ret i1 %A
177}
178
179define i16 @icmp_ugt_immed01_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000180; CHECK: icmp_ugt_immed01_i16:
181; CHECK: clgthi
182; CHECK: selb $3, $5, $4, $3
183
Scott Michel78c47fa2008-03-10 16:58:52 +0000184entry:
Scott Michel79698f62008-03-20 00:51:36 +0000185 %A = icmp ugt i16 %arg1, 500
Scott Michel78c47fa2008-03-10 16:58:52 +0000186 %B = select i1 %A, i16 %val1, i16 %val2
187 ret i16 %B
188}
189
190define i16 @icmp_ugt_immed02_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000191; CHECK: icmp_ugt_immed02_i16:
192; CHECK: ceqhi
193; CHECK: selb $3, $4, $5, $3
194
Scott Michel78c47fa2008-03-10 16:58:52 +0000195entry:
Scott Michel79698f62008-03-20 00:51:36 +0000196 %A = icmp ugt i16 %arg1, 0
Scott Michel78c47fa2008-03-10 16:58:52 +0000197 %B = select i1 %A, i16 %val1, i16 %val2
198 ret i16 %B
199}
200
201define i16 @icmp_ugt_immed03_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000202; CHECK: icmp_ugt_immed03_i16:
203; CHECK: clgthi
204; CHECK: selb $3, $5, $4, $3
205
Scott Michel78c47fa2008-03-10 16:58:52 +0000206entry:
207 %A = icmp ugt i16 %arg1, 65024
208 %B = select i1 %A, i16 %val1, i16 %val2
209 ret i16 %B
210}
211
212define i16 @icmp_ugt_immed04_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000213; CHECK: icmp_ugt_immed04_i16:
214; CHECK: ilh
215; CHECK: clgth
216; CHECK: selb $3, $5, $4, $3
217
Scott Michel78c47fa2008-03-10 16:58:52 +0000218entry:
219 %A = icmp ugt i16 %arg1, 32768
220 %B = select i1 %A, i16 %val1, i16 %val2
221 ret i16 %B
222}
223
224define i16 @icmp_uge_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000225; CHECK: icmp_uge_select_i16:
226; CHECK: ceqh
227; CHECK: clgth
228; CHECK: or
229; CHECK: selb $3, $6, $5, $3
230
Scott Michel78c47fa2008-03-10 16:58:52 +0000231entry:
232 %A = icmp uge i16 %arg1, %arg2
233 %B = select i1 %A, i16 %val1, i16 %val2
234 ret i16 %B
235}
236
237define i1 @icmp_uge_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000238; CHECK: icmp_uge_setcc_i16:
239; CHECK: ceqh
240; CHECK: clgth
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 i16 %arg1, %arg2
248 ret i1 %A
249}
250
251;; Note: icmp uge i16 %arg1, <immed> can always be transformed into
252;; icmp ugt i16 %arg1, <immed>-1
253;;
254;; Consequently, even though the patterns exist to match, it's unlikely
255;; they'll ever be generated.
256
257define i16 @icmp_ult_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000258; CHECK: icmp_ult_select_i16:
259; CHECK: ceqh
260; CHECK: clgth
261; CHECK: nor
262; CHECK: selb $3, $6, $5, $3
263
Scott Michel78c47fa2008-03-10 16:58:52 +0000264entry:
265 %A = icmp ult i16 %arg1, %arg2
266 %B = select i1 %A, i16 %val1, i16 %val2
267 ret i16 %B
268}
269
270define i1 @icmp_ult_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000271; CHECK: icmp_ult_setcc_i16:
272; CHECK: ceqh
273; CHECK: clgth
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 i16 %arg1, %arg2
281 ret i1 %A
282}
283
284define i16 @icmp_ult_immed01_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000285; CHECK: icmp_ult_immed01_i16:
286; CHECK: ceqhi
287; CHECK: clgthi
288; CHECK: nor
289; CHECK: selb $3, $5, $4, $3
290
Scott Michel78c47fa2008-03-10 16:58:52 +0000291entry:
292 %A = icmp ult i16 %arg1, 511
293 %B = select i1 %A, i16 %val1, i16 %val2
294 ret i16 %B
295}
296
297define i16 @icmp_ult_immed02_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000298; CHECK: icmp_ult_immed02_i16:
299; CHECK: ceqhi
300; CHECK: clgthi
301; CHECK: nor
302; CHECK: selb $3, $5, $4, $3
303
Scott Michel78c47fa2008-03-10 16:58:52 +0000304entry:
305 %A = icmp ult i16 %arg1, 65534
306 %B = select i1 %A, i16 %val1, i16 %val2
307 ret i16 %B
308}
309
310define i16 @icmp_ult_immed03_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000311; CHECK: icmp_ult_immed03_i16:
312; CHECK: ceqhi
313; CHECK: clgthi
314; CHECK: nor
315; CHECK: selb $3, $5, $4, $3
316
Scott Michel78c47fa2008-03-10 16:58:52 +0000317entry:
318 %A = icmp ult i16 %arg1, 65024
319 %B = select i1 %A, i16 %val1, i16 %val2
320 ret i16 %B
321}
322
323define i16 @icmp_ult_immed04_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000324; CHECK: icmp_ult_immed04_i16:
325; CHECK: ilh
326; CHECK: ceqh
327; CHECK: clgth
328; CHECK: nor
329; CHECK: selb $3, $5, $4, $3
330
Scott Michel78c47fa2008-03-10 16:58:52 +0000331entry:
Eli Friedman86f874d2008-11-30 04:59:26 +0000332 %A = icmp ult i16 %arg1, 32769
Scott Michel78c47fa2008-03-10 16:58:52 +0000333 %B = select i1 %A, i16 %val1, i16 %val2
334 ret i16 %B
335}
336
337define i16 @icmp_ule_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000338; CHECK: icmp_ule_select_i16:
339; CHECK: clgth
340; CHECK: selb $3, $5, $6, $3
341
Scott Michel78c47fa2008-03-10 16:58:52 +0000342entry:
343 %A = icmp ule i16 %arg1, %arg2
344 %B = select i1 %A, i16 %val1, i16 %val2
345 ret i16 %B
346}
347
348define i1 @icmp_ule_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000349; CHECK: icmp_ule_setcc_i16:
350; CHECK: clgth
351; CHECK: ilhu
352; CHECK: xorhi
353; CHECK: iohl
354; CHECK: shufb
355
Scott Michel78c47fa2008-03-10 16:58:52 +0000356entry:
357 %A = icmp ule i16 %arg1, %arg2
358 ret i1 %A
359}
360
361;; Note: icmp ule i16 %arg1, <immed> can always be transformed into
362;; icmp ult i16 %arg1, <immed>+1
363;;
364;; Consequently, even though the patterns exist to match, it's unlikely
365;; they'll ever be generated.
366
367define i16 @icmp_sgt_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000368; CHECK: icmp_sgt_select_i16:
369; CHECK: cgth
370; CHECK: selb $3, $6, $5, $3
371
Scott Michel78c47fa2008-03-10 16:58:52 +0000372entry:
373 %A = icmp sgt i16 %arg1, %arg2
374 %B = select i1 %A, i16 %val1, i16 %val2
375 ret i16 %B
376}
377
378define i1 @icmp_sgt_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000379; CHECK: icmp_sgt_setcc_i16:
380; CHECK: ilhu
381; CHECK: cgth
382; CHECK: iohl
383; CHECK: shufb
384
Scott Michel78c47fa2008-03-10 16:58:52 +0000385entry:
386 %A = icmp sgt i16 %arg1, %arg2
387 ret i1 %A
388}
389
390define i16 @icmp_sgt_immed01_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000391; CHECK: icmp_sgt_immed01_i16:
392; CHECK: cgthi
393; CHECK: selb $3, $5, $4, $3
394
Scott Michel78c47fa2008-03-10 16:58:52 +0000395entry:
396 %A = icmp sgt i16 %arg1, 511
397 %B = select i1 %A, i16 %val1, i16 %val2
398 ret i16 %B
399}
400
401define i16 @icmp_sgt_immed02_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000402; CHECK: icmp_sgt_immed02_i16:
403; CHECK: cgthi
404; CHECK: selb $3, $5, $4, $3
405
Scott Michel78c47fa2008-03-10 16:58:52 +0000406entry:
407 %A = icmp sgt i16 %arg1, -1
408 %B = select i1 %A, i16 %val1, i16 %val2
409 ret i16 %B
410}
411
412define i16 @icmp_sgt_immed03_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000413; CHECK: icmp_sgt_immed03_i16:
414; CHECK: cgthi
415; CHECK: selb $3, $5, $4, $3
416
Scott Michel78c47fa2008-03-10 16:58:52 +0000417entry:
418 %A = icmp sgt i16 %arg1, -512
419 %B = select i1 %A, i16 %val1, i16 %val2
420 ret i16 %B
421}
422
423define i16 @icmp_sgt_immed04_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000424; CHECK: icmp_sgt_immed04_i16:
425; CHECK: ilh
426; CHECK: ceqh
427; CHECK: selb $3, $4, $5, $3
428
Scott Michel78c47fa2008-03-10 16:58:52 +0000429entry:
430 %A = icmp sgt i16 %arg1, 32768
431 %B = select i1 %A, i16 %val1, i16 %val2
432 ret i16 %B
433}
434
435define i16 @icmp_sge_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000436; CHECK: icmp_sge_select_i16:
437; CHECK: ceqh
438; CHECK: cgth
439; CHECK: or
440; CHECK: selb $3, $6, $5, $3
441
Scott Michel78c47fa2008-03-10 16:58:52 +0000442entry:
443 %A = icmp sge i16 %arg1, %arg2
444 %B = select i1 %A, i16 %val1, i16 %val2
445 ret i16 %B
446}
447
448define i1 @icmp_sge_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000449; CHECK: icmp_sge_setcc_i16:
450; CHECK: ceqh
451; CHECK: cgth
452; CHECK: ilhu
453; CHECK: or
454; CHECK: iohl
455; CHECK: shufb
456
Scott Michel78c47fa2008-03-10 16:58:52 +0000457entry:
458 %A = icmp sge i16 %arg1, %arg2
459 ret i1 %A
460}
461
462;; Note: icmp sge i16 %arg1, <immed> can always be transformed into
463;; icmp sgt i16 %arg1, <immed>-1
464;;
465;; Consequently, even though the patterns exist to match, it's unlikely
466;; they'll ever be generated.
467
468define i16 @icmp_slt_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000469; CHECK: icmp_slt_select_i16:
470; CHECK: ceqh
471; CHECK: cgth
472; CHECK: nor
473; CHECK: selb $3, $6, $5, $3
474
Scott Michel78c47fa2008-03-10 16:58:52 +0000475entry:
476 %A = icmp slt i16 %arg1, %arg2
477 %B = select i1 %A, i16 %val1, i16 %val2
478 ret i16 %B
479}
480
481define i1 @icmp_slt_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000482; CHECK: icmp_slt_setcc_i16:
483; CHECK: ceqh
484; CHECK: cgth
485; CHECK: ilhu
486; CHECK: nor
487; CHECK: iohl
488; CHECK: shufb
489
Scott Michel78c47fa2008-03-10 16:58:52 +0000490entry:
491 %A = icmp slt i16 %arg1, %arg2
492 ret i1 %A
493}
494
495define i16 @icmp_slt_immed01_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000496; CHECK: icmp_slt_immed01_i16:
497; CHECK: ceqhi
498; CHECK: cgthi
499; CHECK: nor
500; CHECK: selb $3, $5, $4, $3
501
Scott Michel78c47fa2008-03-10 16:58:52 +0000502entry:
503 %A = icmp slt i16 %arg1, 511
504 %B = select i1 %A, i16 %val1, i16 %val2
505 ret i16 %B
506}
507
508define i16 @icmp_slt_immed02_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000509; CHECK: icmp_slt_immed02_i16:
510; CHECK: ceqhi
511; CHECK: cgthi
512; CHECK: nor
513; CHECK: selb $3, $5, $4, $3
514
Scott Michel78c47fa2008-03-10 16:58:52 +0000515entry:
516 %A = icmp slt i16 %arg1, -512
517 %B = select i1 %A, i16 %val1, i16 %val2
518 ret i16 %B
519}
520
521define i16 @icmp_slt_immed03_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000522; CHECK: icmp_slt_immed03_i16:
523; CHECK: ceqhi
524; CHECK: cgthi
525; CHECK: nor
526; CHECK: selb $3, $5, $4, $3
527
Scott Michel78c47fa2008-03-10 16:58:52 +0000528entry:
529 %A = icmp slt i16 %arg1, -1
530 %B = select i1 %A, i16 %val1, i16 %val2
531 ret i16 %B
532}
533
534define i16 @icmp_slt_immed04_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000535; CHECK: icmp_slt_immed04_i16:
536; CHECK: lr
537; CHECK-NETX: bi
538
Scott Michel78c47fa2008-03-10 16:58:52 +0000539entry:
540 %A = icmp slt i16 %arg1, 32768
541 %B = select i1 %A, i16 %val1, i16 %val2
542 ret i16 %B
543}
544
545define i16 @icmp_sle_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000546; CHECK: icmp_sle_select_i16:
547; CHECK: cgth
548; CHECK: selb $3, $5, $6, $3
549
Scott Michel78c47fa2008-03-10 16:58:52 +0000550entry:
551 %A = icmp sle i16 %arg1, %arg2
552 %B = select i1 %A, i16 %val1, i16 %val2
553 ret i16 %B
554}
555
556define i1 @icmp_sle_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
Chandler Carruth38adf0b2012-07-02 12:20:14 +0000557; CHECK: icmp_sle_setcc_i16:
558; CHECK: cgth
559; CHECK: ilhu
560; CHECK: xorhi
561; CHECK: iohl
562; CHECK-NETX: bi
563
Scott Michel78c47fa2008-03-10 16:58:52 +0000564entry:
565 %A = icmp sle i16 %arg1, %arg2
566 ret i1 %A
567}
568
569;; Note: icmp sle i16 %arg1, <immed> can always be transformed into
570;; icmp slt i16 %arg1, <immed>+1
571;;
572;; Consequently, even though the patterns exist to match, it's unlikely
573;; they'll ever be generated.
574