1
; RUN: llc -march=mipsel -mcpu=mips16 -relocation-model=pic -O3 < %s | FileCheck %s -check-prefix=16
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
13
define void @calc_seleq() nounwind {
15
%0 = load i32, i32* @a, align 4
16
%1 = load i32, i32* @b, align 4
17
%cmp = icmp eq i32 %0, %1
18
%2 = load i32, i32* @f, align 4
19
%3 = load i32, 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]+}}
23
; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
24
; 16: move ${{[0-9]+}}, ${{[0-9]+}}
25
store i32 %cond, i32* @z2, align 4
26
%4 = load i32, 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
35
define void @calc_seleqk() nounwind {
37
%0 = load i32, i32* @a, align 4
38
%cmp = icmp eq i32 %0, 1
39
%1 = load i32, i32* @t, align 4
40
%2 = load i32, 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
44
; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
45
; 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, 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
54
; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
55
; 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
62
define void @calc_seleqz() nounwind {
64
%0 = load i32, i32* @a, align 4
65
%cmp = icmp eq i32 %0, 0
66
%1 = load i32, i32* @t, align 4
67
%2 = load i32, i32* @f, align 4
68
%cond = select i1 %cmp, i32 %1, i32 %2
69
store i32 %cond, i32* @z1, align 4
70
; 16: beqz ${{[0-9]+}}, $BB{{[0-9]+}}_{{[0-9]}}
71
; 16: move ${{[0-9]+}}, ${{[0-9]+}}
72
%3 = load i32, 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, 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
84
define void @calc_selge() nounwind {
86
%0 = load i32, i32* @a, align 4
87
%1 = load i32, i32* @b, align 4
88
%cmp = icmp sge i32 %0, %1
89
%2 = load i32, i32* @f, align 4
90
%3 = load i32, 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]+}}
94
; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
95
; 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, 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
109
define i32 @calc_selgt() nounwind {
111
%0 = load i32, i32* @a, align 4
112
%1 = load i32, i32* @b, align 4
113
%cmp = icmp sgt i32 %0, %1
114
; 16: slt ${{[0-9]+}}, ${{[0-9]+}}
115
; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}
116
; 16: move ${{[0-9]+}}, ${{[0-9]+}}
117
%2 = load i32, i32* @f, align 4
118
%3 = load i32, 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, 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
134
define void @calc_selle() nounwind {
136
%0 = load i32, i32* @a, align 4
137
%1 = load i32, i32* @b, align 4
138
%cmp = icmp sle i32 %0, %1
139
%2 = load i32, i32* @t, align 4
140
%3 = load i32, 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]+}}
144
; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
145
; 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, 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
159
define void @calc_selltk() nounwind {
161
%0 = load i32, i32* @a, align 4
162
%cmp = icmp slt i32 %0, 10
163
%1 = load i32, i32* @t, align 4
164
%2 = load i32, 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]+}}
168
; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}
169
; 16: move ${{[0-9]+}}, ${{[0-9]+}}
170
%3 = load i32, 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, 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
185
define void @calc_selne() nounwind {
187
%0 = load i32, i32* @a, align 4
188
%1 = load i32, i32* @b, align 4
189
%cmp = icmp ne i32 %0, %1
190
%2 = load i32, i32* @t, align 4
191
%3 = load i32, 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]+}}
195
; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}
196
; 16: move ${{[0-9]+}}, ${{[0-9]+}}
197
store i32 %cond, i32* @z2, align 4
198
%4 = load i32, 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
206
define void @calc_selnek() nounwind {
208
%0 = load i32, i32* @a, align 4
209
%cmp = icmp ne i32 %0, 1
210
%1 = load i32, i32* @f, align 4
211
%2 = load i32, 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
215
; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}
216
; 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, 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
225
; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}
226
; 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
233
define void @calc_selnez() nounwind {
235
%0 = load i32, i32* @a, align 4
236
%cmp = icmp ne i32 %0, 0
237
%1 = load i32, i32* @f, align 4
238
%2 = load i32, i32* @t, align 4
239
%cond = select i1 %cmp, i32 %1, i32 %2
240
store i32 %cond, i32* @z1, align 4
241
; 16: bnez ${{[0-9]+}}, $BB{{[0-9]+}}_{{[0-9]}}
242
; 16: move ${{[0-9]+}}, ${{[0-9]+}}
243
%3 = load i32, 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, 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
255
define void @calc_selnez2() nounwind {
257
%0 = load i32, i32* @a, align 4
258
%tobool = icmp ne i32 %0, 0
259
%1 = load i32, i32* @f, align 4
260
%2 = load i32, i32* @t, align 4
261
%cond = select i1 %tobool, i32 %1, i32 %2
262
store i32 %cond, i32* @z1, align 4
263
; 16: bnez ${{[0-9]+}}, $BB{{[0-9]+}}_{{[0-9]}}
264
; 16: move ${{[0-9]+}}, ${{[0-9]+}}
265
%3 = load i32, 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, 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
277
define void @calc_seluge() nounwind {
279
%0 = load i32, i32* @a, align 4
280
%1 = load i32, i32* @b, align 4
281
%cmp = icmp uge i32 %0, %1
282
%2 = load i32, i32* @f, align 4
283
%3 = load i32, 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]+}}
287
; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
288
; 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, 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
302
define void @calc_selugt() nounwind {
304
%0 = load i32, i32* @a, align 4
305
%1 = load i32, i32* @b, align 4
306
%cmp = icmp ugt i32 %0, %1
307
%2 = load i32, i32* @f, align 4
308
%3 = load i32, 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]+}}
312
; 16: btnez $BB{{[0-9]+}}_{{[0-9]}}
313
; 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, 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
327
define void @calc_selule() nounwind {
329
%0 = load i32, i32* @a, align 4
330
%1 = load i32, i32* @b, align 4
331
%cmp = icmp ule i32 %0, %1
332
%2 = load i32, i32* @t, align 4
333
%3 = load i32, 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]+}}
337
; 16: bteqz $BB{{[0-9]+}}_{{[0-9]}}
338
; 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, 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