blob: 4dc0ad89a4ef0aeffc07248239f7d434c83e8103 [file] [log] [blame]
Scott Michel78c47fa2008-03-10 16:58:52 +00001; RUN: llvm-as -o - %s | llc -march=cellspu > %t1.s
2
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 {
20entry:
21 %A = icmp eq i16 %arg1, %arg2
22 %B = select i1 %A, i16 %val1, i16 %val2
23 ret i16 %B
24}
25
26define i1 @icmp_eq_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
27entry:
28 %A = icmp eq i16 %arg1, %arg2
29 ret i1 %A
30}
31
32define i16 @icmp_eq_immed01_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
33entry:
34 %A = icmp eq i16 %arg1, 511
35 %B = select i1 %A, i16 %val1, i16 %val2
36 ret i16 %B
37}
38
39define i16 @icmp_eq_immed02_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
40entry:
41 %A = icmp eq i16 %arg1, -512
42 %B = select i1 %A, i16 %val1, i16 %val2
43 ret i16 %B
44}
45
46define i16 @icmp_eq_immed03_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
47entry:
48 %A = icmp eq i16 %arg1, -1
49 %B = select i1 %A, i16 %val1, i16 %val2
50 ret i16 %B
51}
52
53define i16 @icmp_eq_immed04_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
54entry:
55 %A = icmp eq i16 %arg1, 32768
56 %B = select i1 %A, i16 %val1, i16 %val2
57 ret i16 %B
58}
59
60define i16 @icmp_ne_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
61entry:
62 %A = icmp ne i16 %arg1, %arg2
63 %B = select i1 %A, i16 %val1, i16 %val2
64 ret i16 %B
65}
66
67define i1 @icmp_ne_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
68entry:
69 %A = icmp ne i16 %arg1, %arg2
70 ret i1 %A
71}
72
73define i16 @icmp_ne_immed01_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
74entry:
75 %A = icmp ne i16 %arg1, 511
76 %B = select i1 %A, i16 %val1, i16 %val2
77 ret i16 %B
78}
79
80define i16 @icmp_ne_immed02_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
81entry:
82 %A = icmp ne i16 %arg1, -512
83 %B = select i1 %A, i16 %val1, i16 %val2
84 ret i16 %B
85}
86
87define i16 @icmp_ne_immed03_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
88entry:
89 %A = icmp ne i16 %arg1, -1
90 %B = select i1 %A, i16 %val1, i16 %val2
91 ret i16 %B
92}
93
94define i16 @icmp_ne_immed04_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
95entry:
96 %A = icmp ne i16 %arg1, 32768
97 %B = select i1 %A, i16 %val1, i16 %val2
98 ret i16 %B
99}
100
101define i16 @icmp_ugt_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
102entry:
103 %A = icmp ugt i16 %arg1, %arg2
104 %B = select i1 %A, i16 %val1, i16 %val2
105 ret i16 %B
106}
107
108define i1 @icmp_ugt_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
109entry:
110 %A = icmp ugt i16 %arg1, %arg2
111 ret i1 %A
112}
113
114define i16 @icmp_ugt_immed01_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
115entry:
116 %A = icmp ugt i16 %arg1, 511
117 %B = select i1 %A, i16 %val1, i16 %val2
118 ret i16 %B
119}
120
121define i16 @icmp_ugt_immed02_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
122entry:
123 %A = icmp ugt i16 %arg1, 65534
124 %B = select i1 %A, i16 %val1, i16 %val2
125 ret i16 %B
126}
127
128define i16 @icmp_ugt_immed03_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
129entry:
130 %A = icmp ugt i16 %arg1, 65024
131 %B = select i1 %A, i16 %val1, i16 %val2
132 ret i16 %B
133}
134
135define i16 @icmp_ugt_immed04_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
136entry:
137 %A = icmp ugt i16 %arg1, 32768
138 %B = select i1 %A, i16 %val1, i16 %val2
139 ret i16 %B
140}
141
142define i16 @icmp_uge_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
143entry:
144 %A = icmp uge i16 %arg1, %arg2
145 %B = select i1 %A, i16 %val1, i16 %val2
146 ret i16 %B
147}
148
149define i1 @icmp_uge_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
150entry:
151 %A = icmp uge i16 %arg1, %arg2
152 ret i1 %A
153}
154
155;; Note: icmp uge i16 %arg1, <immed> can always be transformed into
156;; icmp ugt i16 %arg1, <immed>-1
157;;
158;; Consequently, even though the patterns exist to match, it's unlikely
159;; they'll ever be generated.
160
161define i16 @icmp_ult_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
162entry:
163 %A = icmp ult i16 %arg1, %arg2
164 %B = select i1 %A, i16 %val1, i16 %val2
165 ret i16 %B
166}
167
168define i1 @icmp_ult_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
169entry:
170 %A = icmp ult i16 %arg1, %arg2
171 ret i1 %A
172}
173
174define i16 @icmp_ult_immed01_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
175entry:
176 %A = icmp ult i16 %arg1, 511
177 %B = select i1 %A, i16 %val1, i16 %val2
178 ret i16 %B
179}
180
181define i16 @icmp_ult_immed02_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
182entry:
183 %A = icmp ult i16 %arg1, 65534
184 %B = select i1 %A, i16 %val1, i16 %val2
185 ret i16 %B
186}
187
188define i16 @icmp_ult_immed03_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
189entry:
190 %A = icmp ult i16 %arg1, 65024
191 %B = select i1 %A, i16 %val1, i16 %val2
192 ret i16 %B
193}
194
195define i16 @icmp_ult_immed04_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
196entry:
197 %A = icmp ult i16 %arg1, 32768
198 %B = select i1 %A, i16 %val1, i16 %val2
199 ret i16 %B
200}
201
202define i16 @icmp_ule_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
203entry:
204 %A = icmp ule i16 %arg1, %arg2
205 %B = select i1 %A, i16 %val1, i16 %val2
206 ret i16 %B
207}
208
209define i1 @icmp_ule_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
210entry:
211 %A = icmp ule i16 %arg1, %arg2
212 ret i1 %A
213}
214
215;; Note: icmp ule i16 %arg1, <immed> can always be transformed into
216;; icmp ult i16 %arg1, <immed>+1
217;;
218;; Consequently, even though the patterns exist to match, it's unlikely
219;; they'll ever be generated.
220
221define i16 @icmp_sgt_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
222entry:
223 %A = icmp sgt i16 %arg1, %arg2
224 %B = select i1 %A, i16 %val1, i16 %val2
225 ret i16 %B
226}
227
228define i1 @icmp_sgt_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
229entry:
230 %A = icmp sgt i16 %arg1, %arg2
231 ret i1 %A
232}
233
234define i16 @icmp_sgt_immed01_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
235entry:
236 %A = icmp sgt i16 %arg1, 511
237 %B = select i1 %A, i16 %val1, i16 %val2
238 ret i16 %B
239}
240
241define i16 @icmp_sgt_immed02_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
242entry:
243 %A = icmp sgt i16 %arg1, -1
244 %B = select i1 %A, i16 %val1, i16 %val2
245 ret i16 %B
246}
247
248define i16 @icmp_sgt_immed03_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
249entry:
250 %A = icmp sgt i16 %arg1, -512
251 %B = select i1 %A, i16 %val1, i16 %val2
252 ret i16 %B
253}
254
255define i16 @icmp_sgt_immed04_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
256entry:
257 %A = icmp sgt i16 %arg1, 32768
258 %B = select i1 %A, i16 %val1, i16 %val2
259 ret i16 %B
260}
261
262define i16 @icmp_sge_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
263entry:
264 %A = icmp sge i16 %arg1, %arg2
265 %B = select i1 %A, i16 %val1, i16 %val2
266 ret i16 %B
267}
268
269define i1 @icmp_sge_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
270entry:
271 %A = icmp sge i16 %arg1, %arg2
272 ret i1 %A
273}
274
275;; Note: icmp sge i16 %arg1, <immed> can always be transformed into
276;; icmp sgt i16 %arg1, <immed>-1
277;;
278;; Consequently, even though the patterns exist to match, it's unlikely
279;; they'll ever be generated.
280
281define i16 @icmp_slt_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
282entry:
283 %A = icmp slt i16 %arg1, %arg2
284 %B = select i1 %A, i16 %val1, i16 %val2
285 ret i16 %B
286}
287
288define i1 @icmp_slt_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
289entry:
290 %A = icmp slt i16 %arg1, %arg2
291 ret i1 %A
292}
293
294define i16 @icmp_slt_immed01_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
295entry:
296 %A = icmp slt i16 %arg1, 511
297 %B = select i1 %A, i16 %val1, i16 %val2
298 ret i16 %B
299}
300
301define i16 @icmp_slt_immed02_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
302entry:
303 %A = icmp slt i16 %arg1, -512
304 %B = select i1 %A, i16 %val1, i16 %val2
305 ret i16 %B
306}
307
308define i16 @icmp_slt_immed03_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
309entry:
310 %A = icmp slt i16 %arg1, -1
311 %B = select i1 %A, i16 %val1, i16 %val2
312 ret i16 %B
313}
314
315define i16 @icmp_slt_immed04_i16(i16 %arg1, i16 %val1, i16 %val2) nounwind {
316entry:
317 %A = icmp slt i16 %arg1, 32768
318 %B = select i1 %A, i16 %val1, i16 %val2
319 ret i16 %B
320}
321
322define i16 @icmp_sle_select_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
323entry:
324 %A = icmp sle i16 %arg1, %arg2
325 %B = select i1 %A, i16 %val1, i16 %val2
326 ret i16 %B
327}
328
329define i1 @icmp_sle_setcc_i16(i16 %arg1, i16 %arg2, i16 %val1, i16 %val2) nounwind {
330entry:
331 %A = icmp sle i16 %arg1, %arg2
332 ret i1 %A
333}
334
335;; Note: icmp sle i16 %arg1, <immed> can always be transformed into
336;; icmp slt i16 %arg1, <immed>+1
337;;
338;; Consequently, even though the patterns exist to match, it's unlikely
339;; they'll ever be generated.
340