blob: daa673b8d61d6e53a8f7eeff41f67819d714474d [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; i32 integer comparisons:
19define i32 @icmp_eq_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
20entry:
21 %A = icmp eq i32 %arg1, %arg2
22 %B = select i1 %A, i32 %val1, i32 %val2
23 ret i32 %B
24}
25
26define i1 @icmp_eq_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
27entry:
28 %A = icmp eq i32 %arg1, %arg2
29 ret i1 %A
30}
31
32define i32 @icmp_eq_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
33entry:
34 %A = icmp eq i32 %arg1, 511
35 %B = select i1 %A, i32 %val1, i32 %val2
36 ret i32 %B
37}
38
39define i32 @icmp_eq_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
40entry:
41 %A = icmp eq i32 %arg1, -512
42 %B = select i1 %A, i32 %val1, i32 %val2
43 ret i32 %B
44}
45
46define i32 @icmp_eq_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
47entry:
48 %A = icmp eq i32 %arg1, -1
49 %B = select i1 %A, i32 %val1, i32 %val2
50 ret i32 %B
51}
52
53define i32 @icmp_eq_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
54entry:
55 %A = icmp eq i32 %arg1, 32768
56 %B = select i1 %A, i32 %val1, i32 %val2
57 ret i32 %B
58}
59
60define i32 @icmp_ne_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
61entry:
62 %A = icmp ne i32 %arg1, %arg2
63 %B = select i1 %A, i32 %val1, i32 %val2
64 ret i32 %B
65}
66
67define i1 @icmp_ne_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
68entry:
69 %A = icmp ne i32 %arg1, %arg2
70 ret i1 %A
71}
72
73define i32 @icmp_ne_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
74entry:
75 %A = icmp ne i32 %arg1, 511
76 %B = select i1 %A, i32 %val1, i32 %val2
77 ret i32 %B
78}
79
80define i32 @icmp_ne_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
81entry:
82 %A = icmp ne i32 %arg1, -512
83 %B = select i1 %A, i32 %val1, i32 %val2
84 ret i32 %B
85}
86
87define i32 @icmp_ne_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
88entry:
89 %A = icmp ne i32 %arg1, -1
90 %B = select i1 %A, i32 %val1, i32 %val2
91 ret i32 %B
92}
93
94define i32 @icmp_ne_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
95entry:
96 %A = icmp ne i32 %arg1, 32768
97 %B = select i1 %A, i32 %val1, i32 %val2
98 ret i32 %B
99}
100
101define i32 @icmp_ugt_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
102entry:
103 %A = icmp ugt i32 %arg1, %arg2
104 %B = select i1 %A, i32 %val1, i32 %val2
105 ret i32 %B
106}
107
108define i1 @icmp_ugt_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
109entry:
110 %A = icmp ugt i32 %arg1, %arg2
111 ret i1 %A
112}
113
114define i32 @icmp_ugt_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
115entry:
116 %A = icmp ugt i32 %arg1, 511
117 %B = select i1 %A, i32 %val1, i32 %val2
118 ret i32 %B
119}
120
121define i32 @icmp_ugt_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
122entry:
123 %A = icmp ugt i32 %arg1, 4294966784
124 %B = select i1 %A, i32 %val1, i32 %val2
125 ret i32 %B
126}
127
128define i32 @icmp_ugt_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
129entry:
130 %A = icmp ugt i32 %arg1, 4294967293
131 %B = select i1 %A, i32 %val1, i32 %val2
132 ret i32 %B
133}
134
135define i32 @icmp_ugt_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
136entry:
137 %A = icmp ugt i32 %arg1, 32768
138 %B = select i1 %A, i32 %val1, i32 %val2
139 ret i32 %B
140}
141
142define i32 @icmp_uge_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
143entry:
144 %A = icmp uge i32 %arg1, %arg2
145 %B = select i1 %A, i32 %val1, i32 %val2
146 ret i32 %B
147}
148
149define i1 @icmp_uge_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
150entry:
151 %A = icmp uge i32 %arg1, %arg2
152 ret i1 %A
153}
154
155;; Note: icmp uge i32 %arg1, <immed> can always be transformed into
156;; icmp ugt i32 %arg1, <immed>-1
157;;
158;; Consequently, even though the patterns exist to match, it's unlikely
159;; they'll ever be generated.
160
161define i32 @icmp_ult_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
162entry:
163 %A = icmp ult i32 %arg1, %arg2
164 %B = select i1 %A, i32 %val1, i32 %val2
165 ret i32 %B
166}
167
168define i1 @icmp_ult_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
169entry:
170 %A = icmp ult i32 %arg1, %arg2
171 ret i1 %A
172}
173
174define i32 @icmp_ult_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
175entry:
176 %A = icmp ult i32 %arg1, 511
177 %B = select i1 %A, i32 %val1, i32 %val2
178 ret i32 %B
179}
180
181define i32 @icmp_ult_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
182entry:
183 %A = icmp ult i32 %arg1, 4294966784
184 %B = select i1 %A, i32 %val1, i32 %val2
185 ret i32 %B
186}
187
188define i32 @icmp_ult_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
189entry:
190 %A = icmp ult i32 %arg1, 4294967293
191 %B = select i1 %A, i32 %val1, i32 %val2
192 ret i32 %B
193}
194
195define i32 @icmp_ult_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
196entry:
197 %A = icmp ult i32 %arg1, 32768
198 %B = select i1 %A, i32 %val1, i32 %val2
199 ret i32 %B
200}
201
202define i32 @icmp_ule_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
203entry:
204 %A = icmp ule i32 %arg1, %arg2
205 %B = select i1 %A, i32 %val1, i32 %val2
206 ret i32 %B
207}
208
209define i1 @icmp_ule_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
210entry:
211 %A = icmp ule i32 %arg1, %arg2
212 ret i1 %A
213}
214
215;; Note: icmp ule i32 %arg1, <immed> can always be transformed into
216;; icmp ult i32 %arg1, <immed>+1
217;;
218;; Consequently, even though the patterns exist to match, it's unlikely
219;; they'll ever be generated.
220
221define i32 @icmp_sgt_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
222entry:
223 %A = icmp sgt i32 %arg1, %arg2
224 %B = select i1 %A, i32 %val1, i32 %val2
225 ret i32 %B
226}
227
228define i1 @icmp_sgt_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
229entry:
230 %A = icmp sgt i32 %arg1, %arg2
231 ret i1 %A
232}
233
234define i32 @icmp_sgt_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
235entry:
236 %A = icmp sgt i32 %arg1, 511
237 %B = select i1 %A, i32 %val1, i32 %val2
238 ret i32 %B
239}
240
241define i32 @icmp_sgt_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
242entry:
243 %A = icmp sgt i32 %arg1, 4294966784
244 %B = select i1 %A, i32 %val1, i32 %val2
245 ret i32 %B
246}
247
248define i32 @icmp_sgt_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
249entry:
250 %A = icmp sgt i32 %arg1, 4294967293
251 %B = select i1 %A, i32 %val1, i32 %val2
252 ret i32 %B
253}
254
255define i32 @icmp_sgt_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
256entry:
257 %A = icmp sgt i32 %arg1, 32768
258 %B = select i1 %A, i32 %val1, i32 %val2
259 ret i32 %B
260}
261
262define i32 @icmp_sge_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
263entry:
264 %A = icmp sge i32 %arg1, %arg2
265 %B = select i1 %A, i32 %val1, i32 %val2
266 ret i32 %B
267}
268
269define i1 @icmp_sge_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
270entry:
271 %A = icmp sge i32 %arg1, %arg2
272 ret i1 %A
273}
274
275;; Note: icmp sge i32 %arg1, <immed> can always be transformed into
276;; icmp sgt i32 %arg1, <immed>-1
277;;
278;; Consequently, even though the patterns exist to match, it's unlikely
279;; they'll ever be generated.
280
281define i32 @icmp_slt_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
282entry:
283 %A = icmp slt i32 %arg1, %arg2
284 %B = select i1 %A, i32 %val1, i32 %val2
285 ret i32 %B
286}
287
288define i1 @icmp_slt_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
289entry:
290 %A = icmp slt i32 %arg1, %arg2
291 ret i1 %A
292}
293
294define i32 @icmp_slt_immed01_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
295entry:
296 %A = icmp slt i32 %arg1, 511
297 %B = select i1 %A, i32 %val1, i32 %val2
298 ret i32 %B
299}
300
301define i32 @icmp_slt_immed02_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
302entry:
303 %A = icmp slt i32 %arg1, -512
304 %B = select i1 %A, i32 %val1, i32 %val2
305 ret i32 %B
306}
307
308define i32 @icmp_slt_immed03_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
309entry:
310 %A = icmp slt i32 %arg1, -1
311 %B = select i1 %A, i32 %val1, i32 %val2
312 ret i32 %B
313}
314
315define i32 @icmp_slt_immed04_i32(i32 %arg1, i32 %val1, i32 %val2) nounwind {
316entry:
317 %A = icmp slt i32 %arg1, 32768
318 %B = select i1 %A, i32 %val1, i32 %val2
319 ret i32 %B
320}
321
322define i32 @icmp_sle_select_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
323entry:
324 %A = icmp sle i32 %arg1, %arg2
325 %B = select i1 %A, i32 %val1, i32 %val2
326 ret i32 %B
327}
328
329define i1 @icmp_sle_setcc_i32(i32 %arg1, i32 %arg2, i32 %val1, i32 %val2) nounwind {
330entry:
331 %A = icmp sle i32 %arg1, %arg2
332 ret i1 %A
333}
334
335;; Note: icmp sle i32 %arg1, <immed> can always be transformed into
336;; icmp slt i32 %arg1, <immed>+1
337;;
338;; Consequently, even though the patterns exist to match, it's unlikely
339;; they'll ever be generated.
340