blob: fd556d0113129940f325c290230b509e8cf4a4ef [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; i8 integer comparisons:
19define i8 @icmp_eq_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
20entry:
21 %A = icmp eq i8 %arg1, %arg2
22 %B = select i1 %A, i8 %val1, i8 %val2
23 ret i8 %B
24}
25
26define i1 @icmp_eq_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
27entry:
28 %A = icmp eq i8 %arg1, %arg2
29 ret i1 %A
30}
31
32define i8 @icmp_eq_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
33entry:
34 %A = icmp eq i8 %arg1, 127
35 %B = select i1 %A, i8 %val1, i8 %val2
36 ret i8 %B
37}
38
39define i8 @icmp_eq_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
40entry:
41 %A = icmp eq i8 %arg1, -128
42 %B = select i1 %A, i8 %val1, i8 %val2
43 ret i8 %B
44}
45
46define i8 @icmp_eq_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
47entry:
48 %A = icmp eq i8 %arg1, -1
49 %B = select i1 %A, i8 %val1, i8 %val2
50 ret i8 %B
51}
52
53define i8 @icmp_ne_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
54entry:
55 %A = icmp ne i8 %arg1, %arg2
56 %B = select i1 %A, i8 %val1, i8 %val2
57 ret i8 %B
58}
59
60define i1 @icmp_ne_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
61entry:
62 %A = icmp ne i8 %arg1, %arg2
63 ret i1 %A
64}
65
66define i8 @icmp_ne_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
67entry:
68 %A = icmp ne i8 %arg1, 127
69 %B = select i1 %A, i8 %val1, i8 %val2
70 ret i8 %B
71}
72
73define i8 @icmp_ne_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
74entry:
75 %A = icmp ne i8 %arg1, -128
76 %B = select i1 %A, i8 %val1, i8 %val2
77 ret i8 %B
78}
79
80define i8 @icmp_ne_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
81entry:
82 %A = icmp ne i8 %arg1, -1
83 %B = select i1 %A, i8 %val1, i8 %val2
84 ret i8 %B
85}
86
87define i8 @icmp_ugt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
88entry:
89 %A = icmp ugt i8 %arg1, %arg2
90 %B = select i1 %A, i8 %val1, i8 %val2
91 ret i8 %B
92}
93
94define i1 @icmp_ugt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
95entry:
96 %A = icmp ugt i8 %arg1, %arg2
97 ret i1 %A
98}
99
100define i8 @icmp_ugt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
101entry:
102 %A = icmp ugt i8 %arg1, 126
103 %B = select i1 %A, i8 %val1, i8 %val2
104 ret i8 %B
105}
106
107define i8 @icmp_uge_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
108entry:
109 %A = icmp uge i8 %arg1, %arg2
110 %B = select i1 %A, i8 %val1, i8 %val2
111 ret i8 %B
112}
113
114define i1 @icmp_uge_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
115entry:
116 %A = icmp uge i8 %arg1, %arg2
117 ret i1 %A
118}
119
120;; Note: icmp uge i8 %arg1, <immed> can always be transformed into
121;; icmp ugt i8 %arg1, <immed>-1
122;;
123;; Consequently, even though the patterns exist to match, it's unlikely
124;; they'll ever be generated.
125
126define i8 @icmp_ult_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
127entry:
128 %A = icmp ult i8 %arg1, %arg2
129 %B = select i1 %A, i8 %val1, i8 %val2
130 ret i8 %B
131}
132
133define i1 @icmp_ult_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
134entry:
135 %A = icmp ult i8 %arg1, %arg2
136 ret i1 %A
137}
138
139define i8 @icmp_ult_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
140entry:
141 %A = icmp ult i8 %arg1, 253
142 %B = select i1 %A, i8 %val1, i8 %val2
143 ret i8 %B
144}
145
146define i8 @icmp_ult_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
147entry:
148 %A = icmp ult i8 %arg1, 129
149 %B = select i1 %A, i8 %val1, i8 %val2
150 ret i8 %B
151}
152
153define i8 @icmp_ule_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
154entry:
155 %A = icmp ule i8 %arg1, %arg2
156 %B = select i1 %A, i8 %val1, i8 %val2
157 ret i8 %B
158}
159
160define i1 @icmp_ule_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
161entry:
162 %A = icmp ule i8 %arg1, %arg2
163 ret i1 %A
164}
165
166;; Note: icmp ule i8 %arg1, <immed> can always be transformed into
167;; icmp ult i8 %arg1, <immed>+1
168;;
169;; Consequently, even though the patterns exist to match, it's unlikely
170;; they'll ever be generated.
171
172define i8 @icmp_sgt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
173entry:
174 %A = icmp sgt i8 %arg1, %arg2
175 %B = select i1 %A, i8 %val1, i8 %val2
176 ret i8 %B
177}
178
179define i1 @icmp_sgt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
180entry:
181 %A = icmp sgt i8 %arg1, %arg2
182 ret i1 %A
183}
184
185define i8 @icmp_sgt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
186entry:
187 %A = icmp sgt i8 %arg1, 127
188 %B = select i1 %A, i8 %val1, i8 %val2
189 ret i8 %B
190}
191
192define i8 @icmp_sgt_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
193entry:
194 %A = icmp sgt i8 %arg1, -1
195 %B = select i1 %A, i8 %val1, i8 %val2
196 ret i8 %B
197}
198
199define i8 @icmp_sgt_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
200entry:
201 %A = icmp sgt i8 %arg1, -128
202 %B = select i1 %A, i8 %val1, i8 %val2
203 ret i8 %B
204}
205
206define i8 @icmp_sge_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
207entry:
208 %A = icmp sge i8 %arg1, %arg2
209 %B = select i1 %A, i8 %val1, i8 %val2
210 ret i8 %B
211}
212
213define i1 @icmp_sge_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
214entry:
215 %A = icmp sge i8 %arg1, %arg2
216 ret i1 %A
217}
218
219;; Note: icmp sge i8 %arg1, <immed> can always be transformed into
220;; icmp sgt i8 %arg1, <immed>-1
221;;
222;; Consequently, even though the patterns exist to match, it's unlikely
223;; they'll ever be generated.
224
225define i8 @icmp_slt_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
226entry:
227 %A = icmp slt i8 %arg1, %arg2
228 %B = select i1 %A, i8 %val1, i8 %val2
229 ret i8 %B
230}
231
232define i1 @icmp_slt_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
233entry:
234 %A = icmp slt i8 %arg1, %arg2
235 ret i1 %A
236}
237
238define i8 @icmp_slt_immed01_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
239entry:
240 %A = icmp slt i8 %arg1, 127
241 %B = select i1 %A, i8 %val1, i8 %val2
242 ret i8 %B
243}
244
245define i8 @icmp_slt_immed02_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
246entry:
247 %A = icmp slt i8 %arg1, -128
248 %B = select i1 %A, i8 %val1, i8 %val2
249 ret i8 %B
250}
251
252define i8 @icmp_slt_immed03_i8(i8 %arg1, i8 %val1, i8 %val2) nounwind {
253entry:
254 %A = icmp slt i8 %arg1, -1
255 %B = select i1 %A, i8 %val1, i8 %val2
256 ret i8 %B
257}
258
259define i8 @icmp_sle_select_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
260entry:
261 %A = icmp sle i8 %arg1, %arg2
262 %B = select i1 %A, i8 %val1, i8 %val2
263 ret i8 %B
264}
265
266define i1 @icmp_sle_setcc_i8(i8 %arg1, i8 %arg2, i8 %val1, i8 %val2) nounwind {
267entry:
268 %A = icmp sle i8 %arg1, %arg2
269 ret i1 %A
270}
271
272;; Note: icmp sle i8 %arg1, <immed> can always be transformed into
273;; icmp slt i8 %arg1, <immed>+1
274;;
275;; Consequently, even though the patterns exist to match, it's unlikely
276;; they'll ever be generated.
277