blob: 8eda8de45e08e946c7ceef6ed6a23713b6c24e30 [file] [log] [blame]
Reed Kotler097556d2012-10-25 21:33:30 +00001; RUN: llc -march=mipsel -mcpu=mips16 -relocation-model=pic -O3 < %s | FileCheck %s -check-prefix=16
2
3@t = global i32 10, align 4
4@f = global i32 199, align 4
5@a = global i32 1, align 4
6@b = global i32 10, align 4
7@c = global i32 1, align 4
8@z1 = common global i32 0, align 4
9@z2 = common global i32 0, align 4
10@z3 = common global i32 0, align 4
11@z4 = common global i32 0, align 4
12
13define void @calc_seleq() nounwind {
14entry:
15 %0 = load i32* @a, align 4
16 %1 = load i32* @b, align 4
17 %cmp = icmp eq i32 %0, %1
18 %2 = load i32* @f, align 4
19 %3 = load i32* @t, align 4
20 %cond = select i1 %cmp, i32 %2, i32 %3
21 store i32 %cond, i32* @z1, align 4
22; 16: cmp ${{[0-9]+}}, ${{[0-9]+}}
Reed Kotlerdacee2b2013-02-23 03:09:56 +000023; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +000024; 16: move ${{[0-9]+}}, ${{[0-9]+}}
25 store i32 %cond, i32* @z2, align 4
26 %4 = load i32* @c, align 4
27 %cmp6 = icmp eq i32 %4, %0
28 %cond10 = select i1 %cmp6, i32 %3, i32 %2
29 store i32 %cond10, i32* @z3, align 4
30 store i32 %cond10, i32* @z4, align 4
31 ret void
32}
33
34
35define void @calc_seleqk() nounwind {
36entry:
37 %0 = load i32* @a, align 4
38 %cmp = icmp eq i32 %0, 1
39 %1 = load i32* @t, align 4
40 %2 = load i32* @f, align 4
41 %cond = select i1 %cmp, i32 %1, i32 %2
42 store i32 %cond, i32* @z1, align 4
43; 16: cmpi ${{[0-9]+}}, 1
Reed Kotler4416cda2013-02-22 05:10:51 +000044; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +000045; 16: move ${{[0-9]+}}, ${{[0-9]+}}
46 %cmp1 = icmp eq i32 %0, 10
47 %cond5 = select i1 %cmp1, i32 %2, i32 %1
48 store i32 %cond5, i32* @z2, align 4
49 %3 = load i32* @b, align 4
50 %cmp6 = icmp eq i32 %3, 3
51 %cond10 = select i1 %cmp6, i32 %2, i32 %1
52 store i32 %cond10, i32* @z3, align 4
53; 16: cmpi ${{[0-9]+}}, 10
Reed Kotler4416cda2013-02-22 05:10:51 +000054; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +000055; 16: move ${{[0-9]+}}, ${{[0-9]+}}
56 %cmp11 = icmp eq i32 %3, 10
57 %cond15 = select i1 %cmp11, i32 %1, i32 %2
58 store i32 %cond15, i32* @z4, align 4
59 ret void
60}
61
62define void @calc_seleqz() nounwind {
63entry:
64 %0 = load i32* @a, align 4
65 %cmp = icmp eq i32 %0, 0
66 %1 = load i32* @t, align 4
67 %2 = load i32* @f, align 4
68 %cond = select i1 %cmp, i32 %1, i32 %2
69 store i32 %cond, i32* @z1, align 4
Reed Kotler97ba5f22013-02-21 04:22:38 +000070; 16: beqz ${{[0-9]+}}, $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +000071; 16: move ${{[0-9]+}}, ${{[0-9]+}}
72 %3 = load i32* @b, align 4
73 %cmp1 = icmp eq i32 %3, 0
74 %cond5 = select i1 %cmp1, i32 %2, i32 %1
75 store i32 %cond5, i32* @z2, align 4
76 %4 = load i32* @c, align 4
77 %cmp6 = icmp eq i32 %4, 0
78 %cond10 = select i1 %cmp6, i32 %1, i32 %2
79 store i32 %cond10, i32* @z3, align 4
80 store i32 %cond, i32* @z4, align 4
81 ret void
82}
83
84define void @calc_selge() nounwind {
85entry:
86 %0 = load i32* @a, align 4
87 %1 = load i32* @b, align 4
88 %cmp = icmp sge i32 %0, %1
89 %2 = load i32* @f, align 4
90 %3 = load i32* @t, align 4
91 %cond = select i1 %cmp, i32 %2, i32 %3
92 store i32 %cond, i32* @z1, align 4
93; 16: slt ${{[0-9]+}}, ${{[0-9]+}}
Reed Kotlerdacee2b2013-02-23 03:09:56 +000094; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +000095; 16: move ${{[0-9]+}}, ${{[0-9]+}}
96 %cmp1 = icmp sge i32 %1, %0
97 %cond5 = select i1 %cmp1, i32 %3, i32 %2
98 store i32 %cond5, i32* @z2, align 4
99 %4 = load i32* @c, align 4
100 %cmp6 = icmp sge i32 %4, %0
101 %cond10 = select i1 %cmp6, i32 %3, i32 %2
102 store i32 %cond10, i32* @z3, align 4
103 %cmp11 = icmp sge i32 %0, %4
104 %cond15 = select i1 %cmp11, i32 %3, i32 %2
105 store i32 %cond15, i32* @z4, align 4
106 ret void
107}
108
109define i32 @calc_selgt() nounwind {
110entry:
111 %0 = load i32* @a, align 4
112 %1 = load i32* @b, align 4
113 %cmp = icmp sgt i32 %0, %1
114; 16: slt ${{[0-9]+}}, ${{[0-9]+}}
Reed Kotlerdacee2b2013-02-23 03:09:56 +0000115; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +0000116; 16: move ${{[0-9]+}}, ${{[0-9]+}}
117 %2 = load i32* @f, align 4
118 %3 = load i32* @t, align 4
119 %cond = select i1 %cmp, i32 %2, i32 %3
120 store i32 %cond, i32* @z1, align 4
121 %cmp1 = icmp sgt i32 %1, %0
122 %cond5 = select i1 %cmp1, i32 %3, i32 %2
123 store i32 %cond5, i32* @z2, align 4
124 %4 = load i32* @c, align 4
125 %cmp6 = icmp sgt i32 %4, %0
126 %cond10 = select i1 %cmp6, i32 %2, i32 %3
127 store i32 %cond10, i32* @z3, align 4
128 %cmp11 = icmp sgt i32 %0, %4
129 %cond15 = select i1 %cmp11, i32 %2, i32 %3
130 store i32 %cond15, i32* @z4, align 4
131 ret i32 undef
132}
133
134define void @calc_selle() nounwind {
135entry:
136 %0 = load i32* @a, align 4
137 %1 = load i32* @b, align 4
138 %cmp = icmp sle i32 %0, %1
139 %2 = load i32* @t, align 4
140 %3 = load i32* @f, align 4
141 %cond = select i1 %cmp, i32 %2, i32 %3
142 store i32 %cond, i32* @z1, align 4
143; 16: slt ${{[0-9]+}}, ${{[0-9]+}}
Reed Kotlerdacee2b2013-02-23 03:09:56 +0000144; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +0000145; 16: move ${{[0-9]+}}, ${{[0-9]+}}
146 %cmp1 = icmp sle i32 %1, %0
147 %cond5 = select i1 %cmp1, i32 %3, i32 %2
148 store i32 %cond5, i32* @z2, align 4
149 %4 = load i32* @c, align 4
150 %cmp6 = icmp sle i32 %4, %0
151 %cond10 = select i1 %cmp6, i32 %2, i32 %3
152 store i32 %cond10, i32* @z3, align 4
153 %cmp11 = icmp sle i32 %0, %4
154 %cond15 = select i1 %cmp11, i32 %2, i32 %3
155 store i32 %cond15, i32* @z4, align 4
156 ret void
157}
158
159define void @calc_selltk() nounwind {
160entry:
161 %0 = load i32* @a, align 4
162 %cmp = icmp slt i32 %0, 10
163 %1 = load i32* @t, align 4
164 %2 = load i32* @f, align 4
165 %cond = select i1 %cmp, i32 %1, i32 %2
166 store i32 %cond, i32* @z1, align 4
167; 16: slti ${{[0-9]+}}, {{[0-9]+}}
Reed Kotlerdacee2b2013-02-23 03:09:56 +0000168; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +0000169; 16: move ${{[0-9]+}}, ${{[0-9]+}}
170 %3 = load i32* @b, align 4
171 %cmp1 = icmp slt i32 %3, 2
172 %cond5 = select i1 %cmp1, i32 %2, i32 %1
173 store i32 %cond5, i32* @z2, align 4
174 %4 = load i32* @c, align 4
175 %cmp6 = icmp sgt i32 %4, 2
176 %cond10 = select i1 %cmp6, i32 %2, i32 %1
177 store i32 %cond10, i32* @z3, align 4
178 %cmp11 = icmp sgt i32 %0, 2
179 %cond15 = select i1 %cmp11, i32 %2, i32 %1
180 store i32 %cond15, i32* @z4, align 4
181 ret void
182}
183
184
185define void @calc_selne() nounwind {
186entry:
187 %0 = load i32* @a, align 4
188 %1 = load i32* @b, align 4
189 %cmp = icmp ne i32 %0, %1
190 %2 = load i32* @t, align 4
191 %3 = load i32* @f, align 4
192 %cond = select i1 %cmp, i32 %2, i32 %3
193 store i32 %cond, i32* @z1, align 4
194; 16: cmp ${{[0-9]+}}, ${{[0-9]+}}
Reed Kotlerdacee2b2013-02-23 03:09:56 +0000195; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +0000196; 16: move ${{[0-9]+}}, ${{[0-9]+}}
197 store i32 %cond, i32* @z2, align 4
198 %4 = load i32* @c, align 4
199 %cmp6 = icmp ne i32 %4, %0
200 %cond10 = select i1 %cmp6, i32 %3, i32 %2
201 store i32 %cond10, i32* @z3, align 4
202 store i32 %cond10, i32* @z4, align 4
203 ret void
204}
205
206define void @calc_selnek() nounwind {
207entry:
208 %0 = load i32* @a, align 4
209 %cmp = icmp ne i32 %0, 1
210 %1 = load i32* @f, align 4
211 %2 = load i32* @t, align 4
212 %cond = select i1 %cmp, i32 %1, i32 %2
213 store i32 %cond, i32* @z1, align 4
214; 16: cmpi ${{[0-9]+}}, 1
Reed Kotler4416cda2013-02-22 05:10:51 +0000215; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +0000216; 16: move ${{[0-9]+}}, ${{[0-9]+}}
217 %cmp1 = icmp ne i32 %0, 10
218 %cond5 = select i1 %cmp1, i32 %2, i32 %1
219 store i32 %cond5, i32* @z2, align 4
220 %3 = load i32* @b, align 4
221 %cmp6 = icmp ne i32 %3, 3
222 %cond10 = select i1 %cmp6, i32 %2, i32 %1
223 store i32 %cond10, i32* @z3, align 4
224; 16: cmpi ${{[0-9]+}}, 10
Reed Kotler4416cda2013-02-22 05:10:51 +0000225; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +0000226; 16: move ${{[0-9]+}}, ${{[0-9]+}}
227 %cmp11 = icmp ne i32 %3, 10
228 %cond15 = select i1 %cmp11, i32 %1, i32 %2
229 store i32 %cond15, i32* @z4, align 4
230 ret void
231}
232
233define void @calc_selnez() nounwind {
234entry:
235 %0 = load i32* @a, align 4
236 %cmp = icmp ne i32 %0, 0
237 %1 = load i32* @f, align 4
238 %2 = load i32* @t, align 4
239 %cond = select i1 %cmp, i32 %1, i32 %2
240 store i32 %cond, i32* @z1, align 4
Reed Kotler97ba5f22013-02-21 04:22:38 +0000241; 16: bnez ${{[0-9]+}}, $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +0000242; 16: move ${{[0-9]+}}, ${{[0-9]+}}
243 %3 = load i32* @b, align 4
244 %cmp1 = icmp ne i32 %3, 0
245 %cond5 = select i1 %cmp1, i32 %2, i32 %1
246 store i32 %cond5, i32* @z2, align 4
247 %4 = load i32* @c, align 4
248 %cmp6 = icmp ne i32 %4, 0
249 %cond10 = select i1 %cmp6, i32 %1, i32 %2
250 store i32 %cond10, i32* @z3, align 4
251 store i32 %cond, i32* @z4, align 4
252 ret void
253}
254
255define void @calc_selnez2() nounwind {
256entry:
257 %0 = load i32* @a, align 4
258 %tobool = icmp ne i32 %0, 0
259 %1 = load i32* @f, align 4
260 %2 = load i32* @t, align 4
261 %cond = select i1 %tobool, i32 %1, i32 %2
262 store i32 %cond, i32* @z1, align 4
Reed Kotler97ba5f22013-02-21 04:22:38 +0000263; 16: bnez ${{[0-9]+}}, $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +0000264; 16: move ${{[0-9]+}}, ${{[0-9]+}}
265 %3 = load i32* @b, align 4
266 %tobool1 = icmp ne i32 %3, 0
267 %cond5 = select i1 %tobool1, i32 %2, i32 %1
268 store i32 %cond5, i32* @z2, align 4
269 %4 = load i32* @c, align 4
270 %tobool6 = icmp ne i32 %4, 0
271 %cond10 = select i1 %tobool6, i32 %1, i32 %2
272 store i32 %cond10, i32* @z3, align 4
273 store i32 %cond, i32* @z4, align 4
274 ret void
275}
276
277define void @calc_seluge() nounwind {
278entry:
279 %0 = load i32* @a, align 4
280 %1 = load i32* @b, align 4
281 %cmp = icmp uge i32 %0, %1
282 %2 = load i32* @f, align 4
283 %3 = load i32* @t, align 4
284 %cond = select i1 %cmp, i32 %2, i32 %3
285 store i32 %cond, i32* @z1, align 4
286; 16: sltu ${{[0-9]+}}, ${{[0-9]+}}
Reed Kotlerdacee2b2013-02-23 03:09:56 +0000287; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +0000288; 16: move ${{[0-9]+}}, ${{[0-9]+}}
289 %cmp1 = icmp uge i32 %1, %0
290 %cond5 = select i1 %cmp1, i32 %3, i32 %2
291 store i32 %cond5, i32* @z2, align 4
292 %4 = load i32* @c, align 4
293 %cmp6 = icmp uge i32 %4, %0
294 %cond10 = select i1 %cmp6, i32 %3, i32 %2
295 store i32 %cond10, i32* @z3, align 4
296 %cmp11 = icmp uge i32 %0, %4
297 %cond15 = select i1 %cmp11, i32 %3, i32 %2
298 store i32 %cond15, i32* @z4, align 4
299 ret void
300}
301
302define void @calc_selugt() nounwind {
303entry:
304 %0 = load i32* @a, align 4
305 %1 = load i32* @b, align 4
306 %cmp = icmp ugt i32 %0, %1
307 %2 = load i32* @f, align 4
308 %3 = load i32* @t, align 4
309 %cond = select i1 %cmp, i32 %2, i32 %3
310 store i32 %cond, i32* @z1, align 4
311; 16: sltu ${{[0-9]+}}, ${{[0-9]+}}
Reed Kotlerdacee2b2013-02-23 03:09:56 +0000312; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +0000313; 16: move ${{[0-9]+}}, ${{[0-9]+}}
314 %cmp1 = icmp ugt i32 %1, %0
315 %cond5 = select i1 %cmp1, i32 %3, i32 %2
316 store i32 %cond5, i32* @z2, align 4
317 %4 = load i32* @c, align 4
318 %cmp6 = icmp ugt i32 %4, %0
319 %cond10 = select i1 %cmp6, i32 %2, i32 %3
320 store i32 %cond10, i32* @z3, align 4
321 %cmp11 = icmp ugt i32 %0, %4
322 %cond15 = select i1 %cmp11, i32 %2, i32 %3
323 store i32 %cond15, i32* @z4, align 4
324 ret void
325}
326
327define void @calc_selule() nounwind {
328entry:
329 %0 = load i32* @a, align 4
330 %1 = load i32* @b, align 4
331 %cmp = icmp ule i32 %0, %1
332 %2 = load i32* @t, align 4
333 %3 = load i32* @f, align 4
334 %cond = select i1 %cmp, i32 %2, i32 %3
335 store i32 %cond, i32* @z1, align 4
336; 16: sltu ${{[0-9]+}}, ${{[0-9]+}}
Reed Kotlerdacee2b2013-02-23 03:09:56 +0000337; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
Reed Kotler097556d2012-10-25 21:33:30 +0000338; 16: move ${{[0-9]+}}, ${{[0-9]+}}
339 %cmp1 = icmp ule i32 %1, %0
340 %cond5 = select i1 %cmp1, i32 %3, i32 %2
341 store i32 %cond5, i32* @z2, align 4
342 %4 = load i32* @c, align 4
343 %cmp6 = icmp ule i32 %4, %0
344 %cond10 = select i1 %cmp6, i32 %2, i32 %3
345 store i32 %cond10, i32* @z3, align 4
346 %cmp11 = icmp ule i32 %0, %4
347 %cond15 = select i1 %cmp11, i32 %2, i32 %3
348 store i32 %cond15, i32* @z4, align 4
349 ret void
350}