]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/Mips/llvm-ir/and.ll
Vendor import of llvm trunk r338150:
[FreeBSD/FreeBSD.git] / test / CodeGen / Mips / llvm-ir / and.ll
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips2 | FileCheck %s \
3 ; RUN:    -check-prefix=MIPS
4 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32 | FileCheck %s \
5 ; RUN:    -check-prefix=MIPS
6 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r2 | FileCheck %s \
7 ; RUN:    -check-prefix=MIPS32R2
8 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 | FileCheck %s \
9 ; RUN:    -check-prefix=MIPS32R2
10 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r5 | FileCheck %s \
11 ; RUN:    -check-prefix=MIPS32R2
12 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 | FileCheck %s \
13 ; RUN:    -check-prefix=MIPS32R6
14 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips3 | FileCheck %s \
15 ; RUN:    -check-prefix=MIPS64
16 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips4 | FileCheck %s \
17 ; RUN:    -check-prefix=MIPS64
18 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64 | FileCheck %s \
19 ; RUN:    -check-prefix=MIPS64
20 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r2 | FileCheck %s \
21 ; RUN:    -check-prefix=MIPS64R2
22 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r3 | FileCheck %s \
23 ; RUN:    -check-prefix=MIPS64R2
24 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r5 | FileCheck %s \
25 ; RUN:    -check-prefix=MIPS64R2
26 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r6 | FileCheck %s \
27 ; RUN:    -check-prefix=MIPS64R6
28 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 -mattr=+micromips | FileCheck %s \
29 ; RUN:    -check-prefix=MM32R3
30 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 -mattr=+micromips | FileCheck %s \
31 ; RUN:    -check-prefix=MM32R6
32
33 define signext i1 @and_i1(i1 signext %a, i1 signext %b) {
34 ; MIPS-LABEL: and_i1:
35 ; MIPS:       # %bb.0: # %entry
36 ; MIPS-NEXT:    jr $ra
37 ; MIPS-NEXT:    and $2, $4, $5
38 ;
39 ; MIPS32R2-LABEL: and_i1:
40 ; MIPS32R2:       # %bb.0: # %entry
41 ; MIPS32R2-NEXT:    jr $ra
42 ; MIPS32R2-NEXT:    and $2, $4, $5
43 ;
44 ; MIPS32R6-LABEL: and_i1:
45 ; MIPS32R6:       # %bb.0: # %entry
46 ; MIPS32R6-NEXT:    jr $ra
47 ; MIPS32R6-NEXT:    and $2, $4, $5
48 ;
49 ; MIPS64-LABEL: and_i1:
50 ; MIPS64:       # %bb.0: # %entry
51 ; MIPS64-NEXT:    and $1, $4, $5
52 ; MIPS64-NEXT:    jr $ra
53 ; MIPS64-NEXT:    sll $2, $1, 0
54 ;
55 ; MIPS64R2-LABEL: and_i1:
56 ; MIPS64R2:       # %bb.0: # %entry
57 ; MIPS64R2-NEXT:    and $1, $4, $5
58 ; MIPS64R2-NEXT:    jr $ra
59 ; MIPS64R2-NEXT:    sll $2, $1, 0
60 ;
61 ; MIPS64R6-LABEL: and_i1:
62 ; MIPS64R6:       # %bb.0: # %entry
63 ; MIPS64R6-NEXT:    and $1, $4, $5
64 ; MIPS64R6-NEXT:    jr $ra
65 ; MIPS64R6-NEXT:    sll $2, $1, 0
66 ;
67 ; MM32R3-LABEL: and_i1:
68 ; MM32R3:       # %bb.0: # %entry
69 ; MM32R3-NEXT:    and16 $4, $5
70 ; MM32R3-NEXT:    move $2, $4
71 ; MM32R3-NEXT:    jrc $ra
72 ;
73 ; MM32R6-LABEL: and_i1:
74 ; MM32R6:       # %bb.0: # %entry
75 ; MM32R6-NEXT:    and $2, $4, $5
76 ; MM32R6-NEXT:    jrc $ra
77 entry:
78   %r = and i1 %a, %b
79   ret i1 %r
80 }
81
82 define signext i8 @and_i8(i8 signext %a, i8 signext %b) {
83 ; MIPS-LABEL: and_i8:
84 ; MIPS:       # %bb.0: # %entry
85 ; MIPS-NEXT:    jr $ra
86 ; MIPS-NEXT:    and $2, $4, $5
87 ;
88 ; MIPS32R2-LABEL: and_i8:
89 ; MIPS32R2:       # %bb.0: # %entry
90 ; MIPS32R2-NEXT:    jr $ra
91 ; MIPS32R2-NEXT:    and $2, $4, $5
92 ;
93 ; MIPS32R6-LABEL: and_i8:
94 ; MIPS32R6:       # %bb.0: # %entry
95 ; MIPS32R6-NEXT:    jr $ra
96 ; MIPS32R6-NEXT:    and $2, $4, $5
97 ;
98 ; MIPS64-LABEL: and_i8:
99 ; MIPS64:       # %bb.0: # %entry
100 ; MIPS64-NEXT:    and $1, $4, $5
101 ; MIPS64-NEXT:    jr $ra
102 ; MIPS64-NEXT:    sll $2, $1, 0
103 ;
104 ; MIPS64R2-LABEL: and_i8:
105 ; MIPS64R2:       # %bb.0: # %entry
106 ; MIPS64R2-NEXT:    and $1, $4, $5
107 ; MIPS64R2-NEXT:    jr $ra
108 ; MIPS64R2-NEXT:    sll $2, $1, 0
109 ;
110 ; MIPS64R6-LABEL: and_i8:
111 ; MIPS64R6:       # %bb.0: # %entry
112 ; MIPS64R6-NEXT:    and $1, $4, $5
113 ; MIPS64R6-NEXT:    jr $ra
114 ; MIPS64R6-NEXT:    sll $2, $1, 0
115 ;
116 ; MM32R3-LABEL: and_i8:
117 ; MM32R3:       # %bb.0: # %entry
118 ; MM32R3-NEXT:    and16 $4, $5
119 ; MM32R3-NEXT:    move $2, $4
120 ; MM32R3-NEXT:    jrc $ra
121 ;
122 ; MM32R6-LABEL: and_i8:
123 ; MM32R6:       # %bb.0: # %entry
124 ; MM32R6-NEXT:    and $2, $4, $5
125 ; MM32R6-NEXT:    jrc $ra
126 entry:
127   %r = and i8 %a, %b
128   ret i8 %r
129 }
130
131 define signext i16 @and_i16(i16 signext %a, i16 signext %b) {
132 ; MIPS-LABEL: and_i16:
133 ; MIPS:       # %bb.0: # %entry
134 ; MIPS-NEXT:    jr $ra
135 ; MIPS-NEXT:    and $2, $4, $5
136 ;
137 ; MIPS32R2-LABEL: and_i16:
138 ; MIPS32R2:       # %bb.0: # %entry
139 ; MIPS32R2-NEXT:    jr $ra
140 ; MIPS32R2-NEXT:    and $2, $4, $5
141 ;
142 ; MIPS32R6-LABEL: and_i16:
143 ; MIPS32R6:       # %bb.0: # %entry
144 ; MIPS32R6-NEXT:    jr $ra
145 ; MIPS32R6-NEXT:    and $2, $4, $5
146 ;
147 ; MIPS64-LABEL: and_i16:
148 ; MIPS64:       # %bb.0: # %entry
149 ; MIPS64-NEXT:    and $1, $4, $5
150 ; MIPS64-NEXT:    jr $ra
151 ; MIPS64-NEXT:    sll $2, $1, 0
152 ;
153 ; MIPS64R2-LABEL: and_i16:
154 ; MIPS64R2:       # %bb.0: # %entry
155 ; MIPS64R2-NEXT:    and $1, $4, $5
156 ; MIPS64R2-NEXT:    jr $ra
157 ; MIPS64R2-NEXT:    sll $2, $1, 0
158 ;
159 ; MIPS64R6-LABEL: and_i16:
160 ; MIPS64R6:       # %bb.0: # %entry
161 ; MIPS64R6-NEXT:    and $1, $4, $5
162 ; MIPS64R6-NEXT:    jr $ra
163 ; MIPS64R6-NEXT:    sll $2, $1, 0
164 ;
165 ; MM32R3-LABEL: and_i16:
166 ; MM32R3:       # %bb.0: # %entry
167 ; MM32R3-NEXT:    and16 $4, $5
168 ; MM32R3-NEXT:    move $2, $4
169 ; MM32R3-NEXT:    jrc $ra
170 ;
171 ; MM32R6-LABEL: and_i16:
172 ; MM32R6:       # %bb.0: # %entry
173 ; MM32R6-NEXT:    and $2, $4, $5
174 ; MM32R6-NEXT:    jrc $ra
175 entry:
176   %r = and i16 %a, %b
177   ret i16 %r
178 }
179
180 define signext i32 @and_i32(i32 signext %a, i32 signext %b) {
181 ; MIPS-LABEL: and_i32:
182 ; MIPS:       # %bb.0: # %entry
183 ; MIPS-NEXT:    jr $ra
184 ; MIPS-NEXT:    and $2, $4, $5
185 ;
186 ; MIPS32R2-LABEL: and_i32:
187 ; MIPS32R2:       # %bb.0: # %entry
188 ; MIPS32R2-NEXT:    jr $ra
189 ; MIPS32R2-NEXT:    and $2, $4, $5
190 ;
191 ; MIPS32R6-LABEL: and_i32:
192 ; MIPS32R6:       # %bb.0: # %entry
193 ; MIPS32R6-NEXT:    jr $ra
194 ; MIPS32R6-NEXT:    and $2, $4, $5
195 ;
196 ; MIPS64-LABEL: and_i32:
197 ; MIPS64:       # %bb.0: # %entry
198 ; MIPS64-NEXT:    jr $ra
199 ; MIPS64-NEXT:    and $2, $4, $5
200 ;
201 ; MIPS64R2-LABEL: and_i32:
202 ; MIPS64R2:       # %bb.0: # %entry
203 ; MIPS64R2-NEXT:    jr $ra
204 ; MIPS64R2-NEXT:    and $2, $4, $5
205 ;
206 ; MIPS64R6-LABEL: and_i32:
207 ; MIPS64R6:       # %bb.0: # %entry
208 ; MIPS64R6-NEXT:    jr $ra
209 ; MIPS64R6-NEXT:    and $2, $4, $5
210 ;
211 ; MM32R3-LABEL: and_i32:
212 ; MM32R3:       # %bb.0: # %entry
213 ; MM32R3-NEXT:    and16 $4, $5
214 ; MM32R3-NEXT:    move $2, $4
215 ; MM32R3-NEXT:    jrc $ra
216 ;
217 ; MM32R6-LABEL: and_i32:
218 ; MM32R6:       # %bb.0: # %entry
219 ; MM32R6-NEXT:    and $2, $4, $5
220 ; MM32R6-NEXT:    jrc $ra
221 entry:
222   %r = and i32 %a, %b
223   ret i32 %r
224 }
225
226 define signext i64 @and_i64(i64 signext %a, i64 signext %b) {
227 ; MIPS-LABEL: and_i64:
228 ; MIPS:       # %bb.0: # %entry
229 ; MIPS-NEXT:    and $2, $4, $6
230 ; MIPS-NEXT:    jr $ra
231 ; MIPS-NEXT:    and $3, $5, $7
232 ;
233 ; MIPS32R2-LABEL: and_i64:
234 ; MIPS32R2:       # %bb.0: # %entry
235 ; MIPS32R2-NEXT:    and $2, $4, $6
236 ; MIPS32R2-NEXT:    jr $ra
237 ; MIPS32R2-NEXT:    and $3, $5, $7
238 ;
239 ; MIPS32R6-LABEL: and_i64:
240 ; MIPS32R6:       # %bb.0: # %entry
241 ; MIPS32R6-NEXT:    and $2, $4, $6
242 ; MIPS32R6-NEXT:    jr $ra
243 ; MIPS32R6-NEXT:    and $3, $5, $7
244 ;
245 ; MIPS64-LABEL: and_i64:
246 ; MIPS64:       # %bb.0: # %entry
247 ; MIPS64-NEXT:    jr $ra
248 ; MIPS64-NEXT:    and $2, $4, $5
249 ;
250 ; MIPS64R2-LABEL: and_i64:
251 ; MIPS64R2:       # %bb.0: # %entry
252 ; MIPS64R2-NEXT:    jr $ra
253 ; MIPS64R2-NEXT:    and $2, $4, $5
254 ;
255 ; MIPS64R6-LABEL: and_i64:
256 ; MIPS64R6:       # %bb.0: # %entry
257 ; MIPS64R6-NEXT:    jr $ra
258 ; MIPS64R6-NEXT:    and $2, $4, $5
259 ;
260 ; MM32R3-LABEL: and_i64:
261 ; MM32R3:       # %bb.0: # %entry
262 ; MM32R3-NEXT:    and16 $4, $6
263 ; MM32R3-NEXT:    and16 $5, $7
264 ; MM32R3-NEXT:    move $2, $4
265 ; MM32R3-NEXT:    move $3, $5
266 ; MM32R3-NEXT:    jrc $ra
267 ;
268 ; MM32R6-LABEL: and_i64:
269 ; MM32R6:       # %bb.0: # %entry
270 ; MM32R6-NEXT:    and $2, $4, $6
271 ; MM32R6-NEXT:    and $3, $5, $7
272 ; MM32R6-NEXT:    jrc $ra
273 entry:
274   %r = and i64 %a, %b
275   ret i64 %r
276 }
277
278 define signext i128 @and_i128(i128 signext %a, i128 signext %b) {
279 ; MIPS-LABEL: and_i128:
280 ; MIPS:       # %bb.0: # %entry
281 ; MIPS-NEXT:    lw $1, 20($sp)
282 ; MIPS-NEXT:    lw $2, 16($sp)
283 ; MIPS-NEXT:    and $2, $4, $2
284 ; MIPS-NEXT:    and $3, $5, $1
285 ; MIPS-NEXT:    lw $1, 24($sp)
286 ; MIPS-NEXT:    and $4, $6, $1
287 ; MIPS-NEXT:    lw $1, 28($sp)
288 ; MIPS-NEXT:    jr $ra
289 ; MIPS-NEXT:    and $5, $7, $1
290 ;
291 ; MIPS32R2-LABEL: and_i128:
292 ; MIPS32R2:       # %bb.0: # %entry
293 ; MIPS32R2-NEXT:    lw $1, 20($sp)
294 ; MIPS32R2-NEXT:    lw $2, 16($sp)
295 ; MIPS32R2-NEXT:    and $2, $4, $2
296 ; MIPS32R2-NEXT:    and $3, $5, $1
297 ; MIPS32R2-NEXT:    lw $1, 24($sp)
298 ; MIPS32R2-NEXT:    and $4, $6, $1
299 ; MIPS32R2-NEXT:    lw $1, 28($sp)
300 ; MIPS32R2-NEXT:    jr $ra
301 ; MIPS32R2-NEXT:    and $5, $7, $1
302 ;
303 ; MIPS32R6-LABEL: and_i128:
304 ; MIPS32R6:       # %bb.0: # %entry
305 ; MIPS32R6-NEXT:    lw $1, 20($sp)
306 ; MIPS32R6-NEXT:    lw $2, 16($sp)
307 ; MIPS32R6-NEXT:    and $2, $4, $2
308 ; MIPS32R6-NEXT:    and $3, $5, $1
309 ; MIPS32R6-NEXT:    lw $1, 24($sp)
310 ; MIPS32R6-NEXT:    and $4, $6, $1
311 ; MIPS32R6-NEXT:    lw $1, 28($sp)
312 ; MIPS32R6-NEXT:    jr $ra
313 ; MIPS32R6-NEXT:    and $5, $7, $1
314 ;
315 ; MIPS64-LABEL: and_i128:
316 ; MIPS64:       # %bb.0: # %entry
317 ; MIPS64-NEXT:    and $2, $4, $6
318 ; MIPS64-NEXT:    jr $ra
319 ; MIPS64-NEXT:    and $3, $5, $7
320 ;
321 ; MIPS64R2-LABEL: and_i128:
322 ; MIPS64R2:       # %bb.0: # %entry
323 ; MIPS64R2-NEXT:    and $2, $4, $6
324 ; MIPS64R2-NEXT:    jr $ra
325 ; MIPS64R2-NEXT:    and $3, $5, $7
326 ;
327 ; MIPS64R6-LABEL: and_i128:
328 ; MIPS64R6:       # %bb.0: # %entry
329 ; MIPS64R6-NEXT:    and $2, $4, $6
330 ; MIPS64R6-NEXT:    jr $ra
331 ; MIPS64R6-NEXT:    and $3, $5, $7
332 ;
333 ; MM32R3-LABEL: and_i128:
334 ; MM32R3:       # %bb.0: # %entry
335 ; MM32R3-NEXT:    lwp $2, 16($sp)
336 ; MM32R3-NEXT:    and16 $2, $4
337 ; MM32R3-NEXT:    and16 $3, $5
338 ; MM32R3-NEXT:    lw $4, 24($sp)
339 ; MM32R3-NEXT:    and16 $4, $6
340 ; MM32R3-NEXT:    lw $5, 28($sp)
341 ; MM32R3-NEXT:    and16 $5, $7
342 ; MM32R3-NEXT:    jrc $ra
343 ;
344 ; MM32R6-LABEL: and_i128:
345 ; MM32R6:       # %bb.0: # %entry
346 ; MM32R6-NEXT:    lw $1, 20($sp)
347 ; MM32R6-NEXT:    lw $2, 16($sp)
348 ; MM32R6-NEXT:    and $2, $4, $2
349 ; MM32R6-NEXT:    and $3, $5, $1
350 ; MM32R6-NEXT:    lw $1, 24($sp)
351 ; MM32R6-NEXT:    and $4, $6, $1
352 ; MM32R6-NEXT:    lw $1, 28($sp)
353 ; MM32R6-NEXT:    and $5, $7, $1
354 ; MM32R6-NEXT:    jrc $ra
355 entry:
356   %r = and i128 %a, %b
357   ret i128 %r
358 }
359
360 define signext i1 @and_i1_4(i1 signext %b) {
361 ; MIPS-LABEL: and_i1_4:
362 ; MIPS:       # %bb.0: # %entry
363 ; MIPS-NEXT:    jr $ra
364 ; MIPS-NEXT:    addiu $2, $zero, 0
365 ;
366 ; MIPS32R2-LABEL: and_i1_4:
367 ; MIPS32R2:       # %bb.0: # %entry
368 ; MIPS32R2-NEXT:    jr $ra
369 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
370 ;
371 ; MIPS32R6-LABEL: and_i1_4:
372 ; MIPS32R6:       # %bb.0: # %entry
373 ; MIPS32R6-NEXT:    jr $ra
374 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
375 ;
376 ; MIPS64-LABEL: and_i1_4:
377 ; MIPS64:       # %bb.0: # %entry
378 ; MIPS64-NEXT:    jr $ra
379 ; MIPS64-NEXT:    addiu $2, $zero, 0
380 ;
381 ; MIPS64R2-LABEL: and_i1_4:
382 ; MIPS64R2:       # %bb.0: # %entry
383 ; MIPS64R2-NEXT:    jr $ra
384 ; MIPS64R2-NEXT:    addiu $2, $zero, 0
385 ;
386 ; MIPS64R6-LABEL: and_i1_4:
387 ; MIPS64R6:       # %bb.0: # %entry
388 ; MIPS64R6-NEXT:    jr $ra
389 ; MIPS64R6-NEXT:    addiu $2, $zero, 0
390 ;
391 ; MM32R3-LABEL: and_i1_4:
392 ; MM32R3:       # %bb.0: # %entry
393 ; MM32R3-NEXT:    li16 $2, 0
394 ; MM32R3-NEXT:    jrc $ra
395 ;
396 ; MM32R6-LABEL: and_i1_4:
397 ; MM32R6:       # %bb.0: # %entry
398 ; MM32R6-NEXT:    li16 $2, 0
399 ; MM32R6-NEXT:    jrc $ra
400 entry:
401   %r = and i1 4, %b
402   ret i1 %r
403 }
404
405 define signext i8 @and_i8_4(i8 signext %b) {
406 ; MIPS-LABEL: and_i8_4:
407 ; MIPS:       # %bb.0: # %entry
408 ; MIPS-NEXT:    jr $ra
409 ; MIPS-NEXT:    andi $2, $4, 4
410 ;
411 ; MIPS32R2-LABEL: and_i8_4:
412 ; MIPS32R2:       # %bb.0: # %entry
413 ; MIPS32R2-NEXT:    jr $ra
414 ; MIPS32R2-NEXT:    andi $2, $4, 4
415 ;
416 ; MIPS32R6-LABEL: and_i8_4:
417 ; MIPS32R6:       # %bb.0: # %entry
418 ; MIPS32R6-NEXT:    jr $ra
419 ; MIPS32R6-NEXT:    andi $2, $4, 4
420 ;
421 ; MIPS64-LABEL: and_i8_4:
422 ; MIPS64:       # %bb.0: # %entry
423 ; MIPS64-NEXT:    jr $ra
424 ; MIPS64-NEXT:    andi $2, $4, 4
425 ;
426 ; MIPS64R2-LABEL: and_i8_4:
427 ; MIPS64R2:       # %bb.0: # %entry
428 ; MIPS64R2-NEXT:    jr $ra
429 ; MIPS64R2-NEXT:    andi $2, $4, 4
430 ;
431 ; MIPS64R6-LABEL: and_i8_4:
432 ; MIPS64R6:       # %bb.0: # %entry
433 ; MIPS64R6-NEXT:    jr $ra
434 ; MIPS64R6-NEXT:    andi $2, $4, 4
435 ;
436 ; MM32R3-LABEL: and_i8_4:
437 ; MM32R3:       # %bb.0: # %entry
438 ; MM32R3-NEXT:    andi16 $2, $4, 4
439 ; MM32R3-NEXT:    jrc $ra
440 ;
441 ; MM32R6-LABEL: and_i8_4:
442 ; MM32R6:       # %bb.0: # %entry
443 ; MM32R6-NEXT:    andi16 $2, $4, 4
444 ; MM32R6-NEXT:    jrc $ra
445 entry:
446   %r = and i8 4, %b
447   ret i8 %r
448 }
449
450 define signext i16 @and_i16_4(i16 signext %b) {
451 ; MIPS-LABEL: and_i16_4:
452 ; MIPS:       # %bb.0: # %entry
453 ; MIPS-NEXT:    jr $ra
454 ; MIPS-NEXT:    andi $2, $4, 4
455 ;
456 ; MIPS32R2-LABEL: and_i16_4:
457 ; MIPS32R2:       # %bb.0: # %entry
458 ; MIPS32R2-NEXT:    jr $ra
459 ; MIPS32R2-NEXT:    andi $2, $4, 4
460 ;
461 ; MIPS32R6-LABEL: and_i16_4:
462 ; MIPS32R6:       # %bb.0: # %entry
463 ; MIPS32R6-NEXT:    jr $ra
464 ; MIPS32R6-NEXT:    andi $2, $4, 4
465 ;
466 ; MIPS64-LABEL: and_i16_4:
467 ; MIPS64:       # %bb.0: # %entry
468 ; MIPS64-NEXT:    jr $ra
469 ; MIPS64-NEXT:    andi $2, $4, 4
470 ;
471 ; MIPS64R2-LABEL: and_i16_4:
472 ; MIPS64R2:       # %bb.0: # %entry
473 ; MIPS64R2-NEXT:    jr $ra
474 ; MIPS64R2-NEXT:    andi $2, $4, 4
475 ;
476 ; MIPS64R6-LABEL: and_i16_4:
477 ; MIPS64R6:       # %bb.0: # %entry
478 ; MIPS64R6-NEXT:    jr $ra
479 ; MIPS64R6-NEXT:    andi $2, $4, 4
480 ;
481 ; MM32R3-LABEL: and_i16_4:
482 ; MM32R3:       # %bb.0: # %entry
483 ; MM32R3-NEXT:    andi16 $2, $4, 4
484 ; MM32R3-NEXT:    jrc $ra
485 ;
486 ; MM32R6-LABEL: and_i16_4:
487 ; MM32R6:       # %bb.0: # %entry
488 ; MM32R6-NEXT:    andi16 $2, $4, 4
489 ; MM32R6-NEXT:    jrc $ra
490 entry:
491   %r = and i16 4, %b
492   ret i16 %r
493 }
494
495 define signext i32 @and_i32_4(i32 signext %b) {
496 ; MIPS-LABEL: and_i32_4:
497 ; MIPS:       # %bb.0: # %entry
498 ; MIPS-NEXT:    jr $ra
499 ; MIPS-NEXT:    andi $2, $4, 4
500 ;
501 ; MIPS32R2-LABEL: and_i32_4:
502 ; MIPS32R2:       # %bb.0: # %entry
503 ; MIPS32R2-NEXT:    jr $ra
504 ; MIPS32R2-NEXT:    andi $2, $4, 4
505 ;
506 ; MIPS32R6-LABEL: and_i32_4:
507 ; MIPS32R6:       # %bb.0: # %entry
508 ; MIPS32R6-NEXT:    jr $ra
509 ; MIPS32R6-NEXT:    andi $2, $4, 4
510 ;
511 ; MIPS64-LABEL: and_i32_4:
512 ; MIPS64:       # %bb.0: # %entry
513 ; MIPS64-NEXT:    jr $ra
514 ; MIPS64-NEXT:    andi $2, $4, 4
515 ;
516 ; MIPS64R2-LABEL: and_i32_4:
517 ; MIPS64R2:       # %bb.0: # %entry
518 ; MIPS64R2-NEXT:    jr $ra
519 ; MIPS64R2-NEXT:    andi $2, $4, 4
520 ;
521 ; MIPS64R6-LABEL: and_i32_4:
522 ; MIPS64R6:       # %bb.0: # %entry
523 ; MIPS64R6-NEXT:    jr $ra
524 ; MIPS64R6-NEXT:    andi $2, $4, 4
525 ;
526 ; MM32R3-LABEL: and_i32_4:
527 ; MM32R3:       # %bb.0: # %entry
528 ; MM32R3-NEXT:    andi16 $2, $4, 4
529 ; MM32R3-NEXT:    jrc $ra
530 ;
531 ; MM32R6-LABEL: and_i32_4:
532 ; MM32R6:       # %bb.0: # %entry
533 ; MM32R6-NEXT:    andi16 $2, $4, 4
534 ; MM32R6-NEXT:    jrc $ra
535 entry:
536   %r = and i32 4, %b
537   ret i32 %r
538 }
539
540 define signext i64 @and_i64_4(i64 signext %b) {
541 ; MIPS-LABEL: and_i64_4:
542 ; MIPS:       # %bb.0: # %entry
543 ; MIPS-NEXT:    andi $3, $5, 4
544 ; MIPS-NEXT:    jr $ra
545 ; MIPS-NEXT:    addiu $2, $zero, 0
546 ;
547 ; MIPS32R2-LABEL: and_i64_4:
548 ; MIPS32R2:       # %bb.0: # %entry
549 ; MIPS32R2-NEXT:    andi $3, $5, 4
550 ; MIPS32R2-NEXT:    jr $ra
551 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
552 ;
553 ; MIPS32R6-LABEL: and_i64_4:
554 ; MIPS32R6:       # %bb.0: # %entry
555 ; MIPS32R6-NEXT:    andi $3, $5, 4
556 ; MIPS32R6-NEXT:    jr $ra
557 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
558 ;
559 ; MIPS64-LABEL: and_i64_4:
560 ; MIPS64:       # %bb.0: # %entry
561 ; MIPS64-NEXT:    jr $ra
562 ; MIPS64-NEXT:    andi $2, $4, 4
563 ;
564 ; MIPS64R2-LABEL: and_i64_4:
565 ; MIPS64R2:       # %bb.0: # %entry
566 ; MIPS64R2-NEXT:    jr $ra
567 ; MIPS64R2-NEXT:    andi $2, $4, 4
568 ;
569 ; MIPS64R6-LABEL: and_i64_4:
570 ; MIPS64R6:       # %bb.0: # %entry
571 ; MIPS64R6-NEXT:    jr $ra
572 ; MIPS64R6-NEXT:    andi $2, $4, 4
573 ;
574 ; MM32R3-LABEL: and_i64_4:
575 ; MM32R3:       # %bb.0: # %entry
576 ; MM32R3-NEXT:    andi16 $3, $5, 4
577 ; MM32R3-NEXT:    li16 $2, 0
578 ; MM32R3-NEXT:    jrc $ra
579 ;
580 ; MM32R6-LABEL: and_i64_4:
581 ; MM32R6:       # %bb.0: # %entry
582 ; MM32R6-NEXT:    andi16 $3, $5, 4
583 ; MM32R6-NEXT:    li16 $2, 0
584 ; MM32R6-NEXT:    jrc $ra
585 entry:
586   %r = and i64 4, %b
587   ret i64 %r
588 }
589
590 define signext i128 @and_i128_4(i128 signext %b) {
591 ; MIPS-LABEL: and_i128_4:
592 ; MIPS:       # %bb.0: # %entry
593 ; MIPS-NEXT:    andi $5, $7, 4
594 ; MIPS-NEXT:    addiu $2, $zero, 0
595 ; MIPS-NEXT:    addiu $3, $zero, 0
596 ; MIPS-NEXT:    jr $ra
597 ; MIPS-NEXT:    addiu $4, $zero, 0
598 ;
599 ; MIPS32R2-LABEL: and_i128_4:
600 ; MIPS32R2:       # %bb.0: # %entry
601 ; MIPS32R2-NEXT:    andi $5, $7, 4
602 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
603 ; MIPS32R2-NEXT:    addiu $3, $zero, 0
604 ; MIPS32R2-NEXT:    jr $ra
605 ; MIPS32R2-NEXT:    addiu $4, $zero, 0
606 ;
607 ; MIPS32R6-LABEL: and_i128_4:
608 ; MIPS32R6:       # %bb.0: # %entry
609 ; MIPS32R6-NEXT:    andi $5, $7, 4
610 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
611 ; MIPS32R6-NEXT:    addiu $3, $zero, 0
612 ; MIPS32R6-NEXT:    jr $ra
613 ; MIPS32R6-NEXT:    addiu $4, $zero, 0
614 ;
615 ; MIPS64-LABEL: and_i128_4:
616 ; MIPS64:       # %bb.0: # %entry
617 ; MIPS64-NEXT:    andi $3, $5, 4
618 ; MIPS64-NEXT:    jr $ra
619 ; MIPS64-NEXT:    daddiu $2, $zero, 0
620 ;
621 ; MIPS64R2-LABEL: and_i128_4:
622 ; MIPS64R2:       # %bb.0: # %entry
623 ; MIPS64R2-NEXT:    andi $3, $5, 4
624 ; MIPS64R2-NEXT:    jr $ra
625 ; MIPS64R2-NEXT:    daddiu $2, $zero, 0
626 ;
627 ; MIPS64R6-LABEL: and_i128_4:
628 ; MIPS64R6:       # %bb.0: # %entry
629 ; MIPS64R6-NEXT:    andi $3, $5, 4
630 ; MIPS64R6-NEXT:    jr $ra
631 ; MIPS64R6-NEXT:    daddiu $2, $zero, 0
632 ;
633 ; MM32R3-LABEL: and_i128_4:
634 ; MM32R3:       # %bb.0: # %entry
635 ; MM32R3-NEXT:    andi16 $5, $7, 4
636 ; MM32R3-NEXT:    li16 $2, 0
637 ; MM32R3-NEXT:    li16 $3, 0
638 ; MM32R3-NEXT:    li16 $4, 0
639 ; MM32R3-NEXT:    jrc $ra
640 ;
641 ; MM32R6-LABEL: and_i128_4:
642 ; MM32R6:       # %bb.0: # %entry
643 ; MM32R6-NEXT:    andi16 $5, $7, 4
644 ; MM32R6-NEXT:    li16 $2, 0
645 ; MM32R6-NEXT:    li16 $3, 0
646 ; MM32R6-NEXT:    li16 $4, 0
647 ; MM32R6-NEXT:    jrc $ra
648 entry:
649   %r = and i128 4, %b
650   ret i128 %r
651 }
652
653 define signext i1 @and_i1_31(i1 signext %b) {
654 ; MIPS-LABEL: and_i1_31:
655 ; MIPS:       # %bb.0: # %entry
656 ; MIPS-NEXT:    jr $ra
657 ; MIPS-NEXT:    move $2, $4
658 ;
659 ; MIPS32R2-LABEL: and_i1_31:
660 ; MIPS32R2:       # %bb.0: # %entry
661 ; MIPS32R2-NEXT:    jr $ra
662 ; MIPS32R2-NEXT:    move $2, $4
663 ;
664 ; MIPS32R6-LABEL: and_i1_31:
665 ; MIPS32R6:       # %bb.0: # %entry
666 ; MIPS32R6-NEXT:    jr $ra
667 ; MIPS32R6-NEXT:    move $2, $4
668 ;
669 ; MIPS64-LABEL: and_i1_31:
670 ; MIPS64:       # %bb.0: # %entry
671 ; MIPS64-NEXT:    jr $ra
672 ; MIPS64-NEXT:    move $2, $4
673 ;
674 ; MIPS64R2-LABEL: and_i1_31:
675 ; MIPS64R2:       # %bb.0: # %entry
676 ; MIPS64R2-NEXT:    jr $ra
677 ; MIPS64R2-NEXT:    move $2, $4
678 ;
679 ; MIPS64R6-LABEL: and_i1_31:
680 ; MIPS64R6:       # %bb.0: # %entry
681 ; MIPS64R6-NEXT:    jr $ra
682 ; MIPS64R6-NEXT:    move $2, $4
683 ;
684 ; MM32R3-LABEL: and_i1_31:
685 ; MM32R3:       # %bb.0: # %entry
686 ; MM32R3-NEXT:    move $2, $4
687 ; MM32R3-NEXT:    jrc $ra
688 ;
689 ; MM32R6-LABEL: and_i1_31:
690 ; MM32R6:       # %bb.0: # %entry
691 ; MM32R6-NEXT:    move $2, $4
692 ; MM32R6-NEXT:    jrc $ra
693 entry:
694   %r = and i1 31, %b
695   ret i1 %r
696 }
697
698 define signext i8 @and_i8_31(i8 signext %b) {
699 ; MIPS-LABEL: and_i8_31:
700 ; MIPS:       # %bb.0: # %entry
701 ; MIPS-NEXT:    jr $ra
702 ; MIPS-NEXT:    andi $2, $4, 31
703 ;
704 ; MIPS32R2-LABEL: and_i8_31:
705 ; MIPS32R2:       # %bb.0: # %entry
706 ; MIPS32R2-NEXT:    jr $ra
707 ; MIPS32R2-NEXT:    andi $2, $4, 31
708 ;
709 ; MIPS32R6-LABEL: and_i8_31:
710 ; MIPS32R6:       # %bb.0: # %entry
711 ; MIPS32R6-NEXT:    jr $ra
712 ; MIPS32R6-NEXT:    andi $2, $4, 31
713 ;
714 ; MIPS64-LABEL: and_i8_31:
715 ; MIPS64:       # %bb.0: # %entry
716 ; MIPS64-NEXT:    jr $ra
717 ; MIPS64-NEXT:    andi $2, $4, 31
718 ;
719 ; MIPS64R2-LABEL: and_i8_31:
720 ; MIPS64R2:       # %bb.0: # %entry
721 ; MIPS64R2-NEXT:    jr $ra
722 ; MIPS64R2-NEXT:    andi $2, $4, 31
723 ;
724 ; MIPS64R6-LABEL: and_i8_31:
725 ; MIPS64R6:       # %bb.0: # %entry
726 ; MIPS64R6-NEXT:    jr $ra
727 ; MIPS64R6-NEXT:    andi $2, $4, 31
728 ;
729 ; MM32R3-LABEL: and_i8_31:
730 ; MM32R3:       # %bb.0: # %entry
731 ; MM32R3-NEXT:    andi16 $2, $4, 31
732 ; MM32R3-NEXT:    jrc $ra
733 ;
734 ; MM32R6-LABEL: and_i8_31:
735 ; MM32R6:       # %bb.0: # %entry
736 ; MM32R6-NEXT:    andi16 $2, $4, 31
737 ; MM32R6-NEXT:    jrc $ra
738 entry:
739   %r = and i8 31, %b
740   ret i8 %r
741 }
742
743 define signext i16 @and_i16_31(i16 signext %b) {
744 ; MIPS-LABEL: and_i16_31:
745 ; MIPS:       # %bb.0: # %entry
746 ; MIPS-NEXT:    jr $ra
747 ; MIPS-NEXT:    andi $2, $4, 31
748 ;
749 ; MIPS32R2-LABEL: and_i16_31:
750 ; MIPS32R2:       # %bb.0: # %entry
751 ; MIPS32R2-NEXT:    jr $ra
752 ; MIPS32R2-NEXT:    andi $2, $4, 31
753 ;
754 ; MIPS32R6-LABEL: and_i16_31:
755 ; MIPS32R6:       # %bb.0: # %entry
756 ; MIPS32R6-NEXT:    jr $ra
757 ; MIPS32R6-NEXT:    andi $2, $4, 31
758 ;
759 ; MIPS64-LABEL: and_i16_31:
760 ; MIPS64:       # %bb.0: # %entry
761 ; MIPS64-NEXT:    jr $ra
762 ; MIPS64-NEXT:    andi $2, $4, 31
763 ;
764 ; MIPS64R2-LABEL: and_i16_31:
765 ; MIPS64R2:       # %bb.0: # %entry
766 ; MIPS64R2-NEXT:    jr $ra
767 ; MIPS64R2-NEXT:    andi $2, $4, 31
768 ;
769 ; MIPS64R6-LABEL: and_i16_31:
770 ; MIPS64R6:       # %bb.0: # %entry
771 ; MIPS64R6-NEXT:    jr $ra
772 ; MIPS64R6-NEXT:    andi $2, $4, 31
773 ;
774 ; MM32R3-LABEL: and_i16_31:
775 ; MM32R3:       # %bb.0: # %entry
776 ; MM32R3-NEXT:    andi16 $2, $4, 31
777 ; MM32R3-NEXT:    jrc $ra
778 ;
779 ; MM32R6-LABEL: and_i16_31:
780 ; MM32R6:       # %bb.0: # %entry
781 ; MM32R6-NEXT:    andi16 $2, $4, 31
782 ; MM32R6-NEXT:    jrc $ra
783 entry:
784   %r = and i16 31, %b
785   ret i16 %r
786 }
787
788 define signext i32 @and_i32_31(i32 signext %b) {
789 ; MIPS-LABEL: and_i32_31:
790 ; MIPS:       # %bb.0: # %entry
791 ; MIPS-NEXT:    jr $ra
792 ; MIPS-NEXT:    andi $2, $4, 31
793 ;
794 ; MIPS32R2-LABEL: and_i32_31:
795 ; MIPS32R2:       # %bb.0: # %entry
796 ; MIPS32R2-NEXT:    jr $ra
797 ; MIPS32R2-NEXT:    andi $2, $4, 31
798 ;
799 ; MIPS32R6-LABEL: and_i32_31:
800 ; MIPS32R6:       # %bb.0: # %entry
801 ; MIPS32R6-NEXT:    jr $ra
802 ; MIPS32R6-NEXT:    andi $2, $4, 31
803 ;
804 ; MIPS64-LABEL: and_i32_31:
805 ; MIPS64:       # %bb.0: # %entry
806 ; MIPS64-NEXT:    jr $ra
807 ; MIPS64-NEXT:    andi $2, $4, 31
808 ;
809 ; MIPS64R2-LABEL: and_i32_31:
810 ; MIPS64R2:       # %bb.0: # %entry
811 ; MIPS64R2-NEXT:    jr $ra
812 ; MIPS64R2-NEXT:    andi $2, $4, 31
813 ;
814 ; MIPS64R6-LABEL: and_i32_31:
815 ; MIPS64R6:       # %bb.0: # %entry
816 ; MIPS64R6-NEXT:    jr $ra
817 ; MIPS64R6-NEXT:    andi $2, $4, 31
818 ;
819 ; MM32R3-LABEL: and_i32_31:
820 ; MM32R3:       # %bb.0: # %entry
821 ; MM32R3-NEXT:    andi16 $2, $4, 31
822 ; MM32R3-NEXT:    jrc $ra
823 ;
824 ; MM32R6-LABEL: and_i32_31:
825 ; MM32R6:       # %bb.0: # %entry
826 ; MM32R6-NEXT:    andi16 $2, $4, 31
827 ; MM32R6-NEXT:    jrc $ra
828 entry:
829   %r = and i32 31, %b
830   ret i32 %r
831 }
832
833 define signext i64 @and_i64_31(i64 signext %b) {
834 ; MIPS-LABEL: and_i64_31:
835 ; MIPS:       # %bb.0: # %entry
836 ; MIPS-NEXT:    andi $3, $5, 31
837 ; MIPS-NEXT:    jr $ra
838 ; MIPS-NEXT:    addiu $2, $zero, 0
839 ;
840 ; MIPS32R2-LABEL: and_i64_31:
841 ; MIPS32R2:       # %bb.0: # %entry
842 ; MIPS32R2-NEXT:    andi $3, $5, 31
843 ; MIPS32R2-NEXT:    jr $ra
844 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
845 ;
846 ; MIPS32R6-LABEL: and_i64_31:
847 ; MIPS32R6:       # %bb.0: # %entry
848 ; MIPS32R6-NEXT:    andi $3, $5, 31
849 ; MIPS32R6-NEXT:    jr $ra
850 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
851 ;
852 ; MIPS64-LABEL: and_i64_31:
853 ; MIPS64:       # %bb.0: # %entry
854 ; MIPS64-NEXT:    jr $ra
855 ; MIPS64-NEXT:    andi $2, $4, 31
856 ;
857 ; MIPS64R2-LABEL: and_i64_31:
858 ; MIPS64R2:       # %bb.0: # %entry
859 ; MIPS64R2-NEXT:    jr $ra
860 ; MIPS64R2-NEXT:    andi $2, $4, 31
861 ;
862 ; MIPS64R6-LABEL: and_i64_31:
863 ; MIPS64R6:       # %bb.0: # %entry
864 ; MIPS64R6-NEXT:    jr $ra
865 ; MIPS64R6-NEXT:    andi $2, $4, 31
866 ;
867 ; MM32R3-LABEL: and_i64_31:
868 ; MM32R3:       # %bb.0: # %entry
869 ; MM32R3-NEXT:    andi16 $3, $5, 31
870 ; MM32R3-NEXT:    li16 $2, 0
871 ; MM32R3-NEXT:    jrc $ra
872 ;
873 ; MM32R6-LABEL: and_i64_31:
874 ; MM32R6:       # %bb.0: # %entry
875 ; MM32R6-NEXT:    andi16 $3, $5, 31
876 ; MM32R6-NEXT:    li16 $2, 0
877 ; MM32R6-NEXT:    jrc $ra
878 entry:
879   %r = and i64 31, %b
880   ret i64 %r
881 }
882
883 define signext i128 @and_i128_31(i128 signext %b) {
884 ; MIPS-LABEL: and_i128_31:
885 ; MIPS:       # %bb.0: # %entry
886 ; MIPS-NEXT:    andi $5, $7, 31
887 ; MIPS-NEXT:    addiu $2, $zero, 0
888 ; MIPS-NEXT:    addiu $3, $zero, 0
889 ; MIPS-NEXT:    jr $ra
890 ; MIPS-NEXT:    addiu $4, $zero, 0
891 ;
892 ; MIPS32R2-LABEL: and_i128_31:
893 ; MIPS32R2:       # %bb.0: # %entry
894 ; MIPS32R2-NEXT:    andi $5, $7, 31
895 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
896 ; MIPS32R2-NEXT:    addiu $3, $zero, 0
897 ; MIPS32R2-NEXT:    jr $ra
898 ; MIPS32R2-NEXT:    addiu $4, $zero, 0
899 ;
900 ; MIPS32R6-LABEL: and_i128_31:
901 ; MIPS32R6:       # %bb.0: # %entry
902 ; MIPS32R6-NEXT:    andi $5, $7, 31
903 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
904 ; MIPS32R6-NEXT:    addiu $3, $zero, 0
905 ; MIPS32R6-NEXT:    jr $ra
906 ; MIPS32R6-NEXT:    addiu $4, $zero, 0
907 ;
908 ; MIPS64-LABEL: and_i128_31:
909 ; MIPS64:       # %bb.0: # %entry
910 ; MIPS64-NEXT:    andi $3, $5, 31
911 ; MIPS64-NEXT:    jr $ra
912 ; MIPS64-NEXT:    daddiu $2, $zero, 0
913 ;
914 ; MIPS64R2-LABEL: and_i128_31:
915 ; MIPS64R2:       # %bb.0: # %entry
916 ; MIPS64R2-NEXT:    andi $3, $5, 31
917 ; MIPS64R2-NEXT:    jr $ra
918 ; MIPS64R2-NEXT:    daddiu $2, $zero, 0
919 ;
920 ; MIPS64R6-LABEL: and_i128_31:
921 ; MIPS64R6:       # %bb.0: # %entry
922 ; MIPS64R6-NEXT:    andi $3, $5, 31
923 ; MIPS64R6-NEXT:    jr $ra
924 ; MIPS64R6-NEXT:    daddiu $2, $zero, 0
925 ;
926 ; MM32R3-LABEL: and_i128_31:
927 ; MM32R3:       # %bb.0: # %entry
928 ; MM32R3-NEXT:    andi16 $5, $7, 31
929 ; MM32R3-NEXT:    li16 $2, 0
930 ; MM32R3-NEXT:    li16 $3, 0
931 ; MM32R3-NEXT:    li16 $4, 0
932 ; MM32R3-NEXT:    jrc $ra
933 ;
934 ; MM32R6-LABEL: and_i128_31:
935 ; MM32R6:       # %bb.0: # %entry
936 ; MM32R6-NEXT:    andi16 $5, $7, 31
937 ; MM32R6-NEXT:    li16 $2, 0
938 ; MM32R6-NEXT:    li16 $3, 0
939 ; MM32R6-NEXT:    li16 $4, 0
940 ; MM32R6-NEXT:    jrc $ra
941 entry:
942   %r = and i128 31, %b
943   ret i128 %r
944 }
945
946 define signext i1 @and_i1_255(i1 signext %b) {
947 ; MIPS-LABEL: and_i1_255:
948 ; MIPS:       # %bb.0: # %entry
949 ; MIPS-NEXT:    jr $ra
950 ; MIPS-NEXT:    move $2, $4
951 ;
952 ; MIPS32R2-LABEL: and_i1_255:
953 ; MIPS32R2:       # %bb.0: # %entry
954 ; MIPS32R2-NEXT:    jr $ra
955 ; MIPS32R2-NEXT:    move $2, $4
956 ;
957 ; MIPS32R6-LABEL: and_i1_255:
958 ; MIPS32R6:       # %bb.0: # %entry
959 ; MIPS32R6-NEXT:    jr $ra
960 ; MIPS32R6-NEXT:    move $2, $4
961 ;
962 ; MIPS64-LABEL: and_i1_255:
963 ; MIPS64:       # %bb.0: # %entry
964 ; MIPS64-NEXT:    jr $ra
965 ; MIPS64-NEXT:    move $2, $4
966 ;
967 ; MIPS64R2-LABEL: and_i1_255:
968 ; MIPS64R2:       # %bb.0: # %entry
969 ; MIPS64R2-NEXT:    jr $ra
970 ; MIPS64R2-NEXT:    move $2, $4
971 ;
972 ; MIPS64R6-LABEL: and_i1_255:
973 ; MIPS64R6:       # %bb.0: # %entry
974 ; MIPS64R6-NEXT:    jr $ra
975 ; MIPS64R6-NEXT:    move $2, $4
976 ;
977 ; MM32R3-LABEL: and_i1_255:
978 ; MM32R3:       # %bb.0: # %entry
979 ; MM32R3-NEXT:    move $2, $4
980 ; MM32R3-NEXT:    jrc $ra
981 ;
982 ; MM32R6-LABEL: and_i1_255:
983 ; MM32R6:       # %bb.0: # %entry
984 ; MM32R6-NEXT:    move $2, $4
985 ; MM32R6-NEXT:    jrc $ra
986 entry:
987   %r = and i1 255, %b
988   ret i1 %r
989 }
990
991 define signext i8 @and_i8_255(i8 signext %b) {
992 ; MIPS-LABEL: and_i8_255:
993 ; MIPS:       # %bb.0: # %entry
994 ; MIPS-NEXT:    jr $ra
995 ; MIPS-NEXT:    move $2, $4
996 ;
997 ; MIPS32R2-LABEL: and_i8_255:
998 ; MIPS32R2:       # %bb.0: # %entry
999 ; MIPS32R2-NEXT:    jr $ra
1000 ; MIPS32R2-NEXT:    move $2, $4
1001 ;
1002 ; MIPS32R6-LABEL: and_i8_255:
1003 ; MIPS32R6:       # %bb.0: # %entry
1004 ; MIPS32R6-NEXT:    jr $ra
1005 ; MIPS32R6-NEXT:    move $2, $4
1006 ;
1007 ; MIPS64-LABEL: and_i8_255:
1008 ; MIPS64:       # %bb.0: # %entry
1009 ; MIPS64-NEXT:    jr $ra
1010 ; MIPS64-NEXT:    move $2, $4
1011 ;
1012 ; MIPS64R2-LABEL: and_i8_255:
1013 ; MIPS64R2:       # %bb.0: # %entry
1014 ; MIPS64R2-NEXT:    jr $ra
1015 ; MIPS64R2-NEXT:    move $2, $4
1016 ;
1017 ; MIPS64R6-LABEL: and_i8_255:
1018 ; MIPS64R6:       # %bb.0: # %entry
1019 ; MIPS64R6-NEXT:    jr $ra
1020 ; MIPS64R6-NEXT:    move $2, $4
1021 ;
1022 ; MM32R3-LABEL: and_i8_255:
1023 ; MM32R3:       # %bb.0: # %entry
1024 ; MM32R3-NEXT:    move $2, $4
1025 ; MM32R3-NEXT:    jrc $ra
1026 ;
1027 ; MM32R6-LABEL: and_i8_255:
1028 ; MM32R6:       # %bb.0: # %entry
1029 ; MM32R6-NEXT:    move $2, $4
1030 ; MM32R6-NEXT:    jrc $ra
1031 entry:
1032   %r = and i8 255, %b
1033   ret i8 %r
1034 }
1035
1036 define signext i16 @and_i16_255(i16 signext %b) {
1037 ; MIPS-LABEL: and_i16_255:
1038 ; MIPS:       # %bb.0: # %entry
1039 ; MIPS-NEXT:    jr $ra
1040 ; MIPS-NEXT:    andi $2, $4, 255
1041 ;
1042 ; MIPS32R2-LABEL: and_i16_255:
1043 ; MIPS32R2:       # %bb.0: # %entry
1044 ; MIPS32R2-NEXT:    jr $ra
1045 ; MIPS32R2-NEXT:    andi $2, $4, 255
1046 ;
1047 ; MIPS32R6-LABEL: and_i16_255:
1048 ; MIPS32R6:       # %bb.0: # %entry
1049 ; MIPS32R6-NEXT:    jr $ra
1050 ; MIPS32R6-NEXT:    andi $2, $4, 255
1051 ;
1052 ; MIPS64-LABEL: and_i16_255:
1053 ; MIPS64:       # %bb.0: # %entry
1054 ; MIPS64-NEXT:    jr $ra
1055 ; MIPS64-NEXT:    andi $2, $4, 255
1056 ;
1057 ; MIPS64R2-LABEL: and_i16_255:
1058 ; MIPS64R2:       # %bb.0: # %entry
1059 ; MIPS64R2-NEXT:    jr $ra
1060 ; MIPS64R2-NEXT:    andi $2, $4, 255
1061 ;
1062 ; MIPS64R6-LABEL: and_i16_255:
1063 ; MIPS64R6:       # %bb.0: # %entry
1064 ; MIPS64R6-NEXT:    jr $ra
1065 ; MIPS64R6-NEXT:    andi $2, $4, 255
1066 ;
1067 ; MM32R3-LABEL: and_i16_255:
1068 ; MM32R3:       # %bb.0: # %entry
1069 ; MM32R3-NEXT:    andi16 $2, $4, 255
1070 ; MM32R3-NEXT:    jrc $ra
1071 ;
1072 ; MM32R6-LABEL: and_i16_255:
1073 ; MM32R6:       # %bb.0: # %entry
1074 ; MM32R6-NEXT:    andi16 $2, $4, 255
1075 ; MM32R6-NEXT:    jrc $ra
1076 entry:
1077   %r = and i16 255, %b
1078   ret i16 %r
1079 }
1080
1081 define signext i32 @and_i32_255(i32 signext %b) {
1082 ; MIPS-LABEL: and_i32_255:
1083 ; MIPS:       # %bb.0: # %entry
1084 ; MIPS-NEXT:    jr $ra
1085 ; MIPS-NEXT:    andi $2, $4, 255
1086 ;
1087 ; MIPS32R2-LABEL: and_i32_255:
1088 ; MIPS32R2:       # %bb.0: # %entry
1089 ; MIPS32R2-NEXT:    jr $ra
1090 ; MIPS32R2-NEXT:    andi $2, $4, 255
1091 ;
1092 ; MIPS32R6-LABEL: and_i32_255:
1093 ; MIPS32R6:       # %bb.0: # %entry
1094 ; MIPS32R6-NEXT:    jr $ra
1095 ; MIPS32R6-NEXT:    andi $2, $4, 255
1096 ;
1097 ; MIPS64-LABEL: and_i32_255:
1098 ; MIPS64:       # %bb.0: # %entry
1099 ; MIPS64-NEXT:    jr $ra
1100 ; MIPS64-NEXT:    andi $2, $4, 255
1101 ;
1102 ; MIPS64R2-LABEL: and_i32_255:
1103 ; MIPS64R2:       # %bb.0: # %entry
1104 ; MIPS64R2-NEXT:    jr $ra
1105 ; MIPS64R2-NEXT:    andi $2, $4, 255
1106 ;
1107 ; MIPS64R6-LABEL: and_i32_255:
1108 ; MIPS64R6:       # %bb.0: # %entry
1109 ; MIPS64R6-NEXT:    jr $ra
1110 ; MIPS64R6-NEXT:    andi $2, $4, 255
1111 ;
1112 ; MM32R3-LABEL: and_i32_255:
1113 ; MM32R3:       # %bb.0: # %entry
1114 ; MM32R3-NEXT:    andi16 $2, $4, 255
1115 ; MM32R3-NEXT:    jrc $ra
1116 ;
1117 ; MM32R6-LABEL: and_i32_255:
1118 ; MM32R6:       # %bb.0: # %entry
1119 ; MM32R6-NEXT:    andi16 $2, $4, 255
1120 ; MM32R6-NEXT:    jrc $ra
1121 entry:
1122   %r = and i32 255, %b
1123   ret i32 %r
1124 }
1125
1126 define signext i64 @and_i64_255(i64 signext %b) {
1127 ; MIPS-LABEL: and_i64_255:
1128 ; MIPS:       # %bb.0: # %entry
1129 ; MIPS-NEXT:    andi $3, $5, 255
1130 ; MIPS-NEXT:    jr $ra
1131 ; MIPS-NEXT:    addiu $2, $zero, 0
1132 ;
1133 ; MIPS32R2-LABEL: and_i64_255:
1134 ; MIPS32R2:       # %bb.0: # %entry
1135 ; MIPS32R2-NEXT:    andi $3, $5, 255
1136 ; MIPS32R2-NEXT:    jr $ra
1137 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
1138 ;
1139 ; MIPS32R6-LABEL: and_i64_255:
1140 ; MIPS32R6:       # %bb.0: # %entry
1141 ; MIPS32R6-NEXT:    andi $3, $5, 255
1142 ; MIPS32R6-NEXT:    jr $ra
1143 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
1144 ;
1145 ; MIPS64-LABEL: and_i64_255:
1146 ; MIPS64:       # %bb.0: # %entry
1147 ; MIPS64-NEXT:    jr $ra
1148 ; MIPS64-NEXT:    andi $2, $4, 255
1149 ;
1150 ; MIPS64R2-LABEL: and_i64_255:
1151 ; MIPS64R2:       # %bb.0: # %entry
1152 ; MIPS64R2-NEXT:    jr $ra
1153 ; MIPS64R2-NEXT:    andi $2, $4, 255
1154 ;
1155 ; MIPS64R6-LABEL: and_i64_255:
1156 ; MIPS64R6:       # %bb.0: # %entry
1157 ; MIPS64R6-NEXT:    jr $ra
1158 ; MIPS64R6-NEXT:    andi $2, $4, 255
1159 ;
1160 ; MM32R3-LABEL: and_i64_255:
1161 ; MM32R3:       # %bb.0: # %entry
1162 ; MM32R3-NEXT:    andi16 $3, $5, 255
1163 ; MM32R3-NEXT:    li16 $2, 0
1164 ; MM32R3-NEXT:    jrc $ra
1165 ;
1166 ; MM32R6-LABEL: and_i64_255:
1167 ; MM32R6:       # %bb.0: # %entry
1168 ; MM32R6-NEXT:    andi16 $3, $5, 255
1169 ; MM32R6-NEXT:    li16 $2, 0
1170 ; MM32R6-NEXT:    jrc $ra
1171 entry:
1172   %r = and i64 255, %b
1173   ret i64 %r
1174 }
1175
1176 define signext i128 @and_i128_255(i128 signext %b) {
1177 ; MIPS-LABEL: and_i128_255:
1178 ; MIPS:       # %bb.0: # %entry
1179 ; MIPS-NEXT:    andi $5, $7, 255
1180 ; MIPS-NEXT:    addiu $2, $zero, 0
1181 ; MIPS-NEXT:    addiu $3, $zero, 0
1182 ; MIPS-NEXT:    jr $ra
1183 ; MIPS-NEXT:    addiu $4, $zero, 0
1184 ;
1185 ; MIPS32R2-LABEL: and_i128_255:
1186 ; MIPS32R2:       # %bb.0: # %entry
1187 ; MIPS32R2-NEXT:    andi $5, $7, 255
1188 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
1189 ; MIPS32R2-NEXT:    addiu $3, $zero, 0
1190 ; MIPS32R2-NEXT:    jr $ra
1191 ; MIPS32R2-NEXT:    addiu $4, $zero, 0
1192 ;
1193 ; MIPS32R6-LABEL: and_i128_255:
1194 ; MIPS32R6:       # %bb.0: # %entry
1195 ; MIPS32R6-NEXT:    andi $5, $7, 255
1196 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
1197 ; MIPS32R6-NEXT:    addiu $3, $zero, 0
1198 ; MIPS32R6-NEXT:    jr $ra
1199 ; MIPS32R6-NEXT:    addiu $4, $zero, 0
1200 ;
1201 ; MIPS64-LABEL: and_i128_255:
1202 ; MIPS64:       # %bb.0: # %entry
1203 ; MIPS64-NEXT:    andi $3, $5, 255
1204 ; MIPS64-NEXT:    jr $ra
1205 ; MIPS64-NEXT:    daddiu $2, $zero, 0
1206 ;
1207 ; MIPS64R2-LABEL: and_i128_255:
1208 ; MIPS64R2:       # %bb.0: # %entry
1209 ; MIPS64R2-NEXT:    andi $3, $5, 255
1210 ; MIPS64R2-NEXT:    jr $ra
1211 ; MIPS64R2-NEXT:    daddiu $2, $zero, 0
1212 ;
1213 ; MIPS64R6-LABEL: and_i128_255:
1214 ; MIPS64R6:       # %bb.0: # %entry
1215 ; MIPS64R6-NEXT:    andi $3, $5, 255
1216 ; MIPS64R6-NEXT:    jr $ra
1217 ; MIPS64R6-NEXT:    daddiu $2, $zero, 0
1218 ;
1219 ; MM32R3-LABEL: and_i128_255:
1220 ; MM32R3:       # %bb.0: # %entry
1221 ; MM32R3-NEXT:    andi16 $5, $7, 255
1222 ; MM32R3-NEXT:    li16 $2, 0
1223 ; MM32R3-NEXT:    li16 $3, 0
1224 ; MM32R3-NEXT:    li16 $4, 0
1225 ; MM32R3-NEXT:    jrc $ra
1226 ;
1227 ; MM32R6-LABEL: and_i128_255:
1228 ; MM32R6:       # %bb.0: # %entry
1229 ; MM32R6-NEXT:    andi16 $5, $7, 255
1230 ; MM32R6-NEXT:    li16 $2, 0
1231 ; MM32R6-NEXT:    li16 $3, 0
1232 ; MM32R6-NEXT:    li16 $4, 0
1233 ; MM32R6-NEXT:    jrc $ra
1234 entry:
1235   %r = and i128 255, %b
1236   ret i128 %r
1237 }
1238
1239 define signext i1 @and_i1_32768(i1 signext %b) {
1240 ; MIPS-LABEL: and_i1_32768:
1241 ; MIPS:       # %bb.0: # %entry
1242 ; MIPS-NEXT:    jr $ra
1243 ; MIPS-NEXT:    addiu $2, $zero, 0
1244 ;
1245 ; MIPS32R2-LABEL: and_i1_32768:
1246 ; MIPS32R2:       # %bb.0: # %entry
1247 ; MIPS32R2-NEXT:    jr $ra
1248 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
1249 ;
1250 ; MIPS32R6-LABEL: and_i1_32768:
1251 ; MIPS32R6:       # %bb.0: # %entry
1252 ; MIPS32R6-NEXT:    jr $ra
1253 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
1254 ;
1255 ; MIPS64-LABEL: and_i1_32768:
1256 ; MIPS64:       # %bb.0: # %entry
1257 ; MIPS64-NEXT:    jr $ra
1258 ; MIPS64-NEXT:    addiu $2, $zero, 0
1259 ;
1260 ; MIPS64R2-LABEL: and_i1_32768:
1261 ; MIPS64R2:       # %bb.0: # %entry
1262 ; MIPS64R2-NEXT:    jr $ra
1263 ; MIPS64R2-NEXT:    addiu $2, $zero, 0
1264 ;
1265 ; MIPS64R6-LABEL: and_i1_32768:
1266 ; MIPS64R6:       # %bb.0: # %entry
1267 ; MIPS64R6-NEXT:    jr $ra
1268 ; MIPS64R6-NEXT:    addiu $2, $zero, 0
1269 ;
1270 ; MM32R3-LABEL: and_i1_32768:
1271 ; MM32R3:       # %bb.0: # %entry
1272 ; MM32R3-NEXT:    li16 $2, 0
1273 ; MM32R3-NEXT:    jrc $ra
1274 ;
1275 ; MM32R6-LABEL: and_i1_32768:
1276 ; MM32R6:       # %bb.0: # %entry
1277 ; MM32R6-NEXT:    li16 $2, 0
1278 ; MM32R6-NEXT:    jrc $ra
1279 entry:
1280   %r = and i1 32768, %b
1281   ret i1 %r
1282 }
1283
1284 define signext i8 @and_i8_32768(i8 signext %b) {
1285 ; MIPS-LABEL: and_i8_32768:
1286 ; MIPS:       # %bb.0: # %entry
1287 ; MIPS-NEXT:    jr $ra
1288 ; MIPS-NEXT:    addiu $2, $zero, 0
1289 ;
1290 ; MIPS32R2-LABEL: and_i8_32768:
1291 ; MIPS32R2:       # %bb.0: # %entry
1292 ; MIPS32R2-NEXT:    jr $ra
1293 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
1294 ;
1295 ; MIPS32R6-LABEL: and_i8_32768:
1296 ; MIPS32R6:       # %bb.0: # %entry
1297 ; MIPS32R6-NEXT:    jr $ra
1298 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
1299 ;
1300 ; MIPS64-LABEL: and_i8_32768:
1301 ; MIPS64:       # %bb.0: # %entry
1302 ; MIPS64-NEXT:    jr $ra
1303 ; MIPS64-NEXT:    addiu $2, $zero, 0
1304 ;
1305 ; MIPS64R2-LABEL: and_i8_32768:
1306 ; MIPS64R2:       # %bb.0: # %entry
1307 ; MIPS64R2-NEXT:    jr $ra
1308 ; MIPS64R2-NEXT:    addiu $2, $zero, 0
1309 ;
1310 ; MIPS64R6-LABEL: and_i8_32768:
1311 ; MIPS64R6:       # %bb.0: # %entry
1312 ; MIPS64R6-NEXT:    jr $ra
1313 ; MIPS64R6-NEXT:    addiu $2, $zero, 0
1314 ;
1315 ; MM32R3-LABEL: and_i8_32768:
1316 ; MM32R3:       # %bb.0: # %entry
1317 ; MM32R3-NEXT:    li16 $2, 0
1318 ; MM32R3-NEXT:    jrc $ra
1319 ;
1320 ; MM32R6-LABEL: and_i8_32768:
1321 ; MM32R6:       # %bb.0: # %entry
1322 ; MM32R6-NEXT:    li16 $2, 0
1323 ; MM32R6-NEXT:    jrc $ra
1324 entry:
1325   %r = and i8 32768, %b
1326   ret i8 %r
1327 }
1328
1329 define signext i16 @and_i16_32768(i16 signext %b) {
1330 ; MIPS-LABEL: and_i16_32768:
1331 ; MIPS:       # %bb.0: # %entry
1332 ; MIPS-NEXT:    addiu $1, $zero, -32768
1333 ; MIPS-NEXT:    jr $ra
1334 ; MIPS-NEXT:    and $2, $4, $1
1335 ;
1336 ; MIPS32R2-LABEL: and_i16_32768:
1337 ; MIPS32R2:       # %bb.0: # %entry
1338 ; MIPS32R2-NEXT:    addiu $1, $zero, -32768
1339 ; MIPS32R2-NEXT:    jr $ra
1340 ; MIPS32R2-NEXT:    and $2, $4, $1
1341 ;
1342 ; MIPS32R6-LABEL: and_i16_32768:
1343 ; MIPS32R6:       # %bb.0: # %entry
1344 ; MIPS32R6-NEXT:    addiu $1, $zero, -32768
1345 ; MIPS32R6-NEXT:    jr $ra
1346 ; MIPS32R6-NEXT:    and $2, $4, $1
1347 ;
1348 ; MIPS64-LABEL: and_i16_32768:
1349 ; MIPS64:       # %bb.0: # %entry
1350 ; MIPS64-NEXT:    addiu $1, $zero, -32768
1351 ; MIPS64-NEXT:    jr $ra
1352 ; MIPS64-NEXT:    and $2, $4, $1
1353 ;
1354 ; MIPS64R2-LABEL: and_i16_32768:
1355 ; MIPS64R2:       # %bb.0: # %entry
1356 ; MIPS64R2-NEXT:    addiu $1, $zero, -32768
1357 ; MIPS64R2-NEXT:    jr $ra
1358 ; MIPS64R2-NEXT:    and $2, $4, $1
1359 ;
1360 ; MIPS64R6-LABEL: and_i16_32768:
1361 ; MIPS64R6:       # %bb.0: # %entry
1362 ; MIPS64R6-NEXT:    addiu $1, $zero, -32768
1363 ; MIPS64R6-NEXT:    jr $ra
1364 ; MIPS64R6-NEXT:    and $2, $4, $1
1365 ;
1366 ; MM32R3-LABEL: and_i16_32768:
1367 ; MM32R3:       # %bb.0: # %entry
1368 ; MM32R3-NEXT:    addiu $2, $zero, -32768
1369 ; MM32R3-NEXT:    and16 $2, $4
1370 ; MM32R3-NEXT:    jrc $ra
1371 ;
1372 ; MM32R6-LABEL: and_i16_32768:
1373 ; MM32R6:       # %bb.0: # %entry
1374 ; MM32R6-NEXT:    addiu $1, $zero, -32768
1375 ; MM32R6-NEXT:    and $2, $4, $1
1376 ; MM32R6-NEXT:    jrc $ra
1377 entry:
1378
1379   %r = and i16 32768, %b
1380   ret i16 %r
1381 }
1382
1383 define signext i32 @and_i32_32768(i32 signext %b) {
1384 ; MIPS-LABEL: and_i32_32768:
1385 ; MIPS:       # %bb.0: # %entry
1386 ; MIPS-NEXT:    jr $ra
1387 ; MIPS-NEXT:    andi $2, $4, 32768
1388 ;
1389 ; MIPS32R2-LABEL: and_i32_32768:
1390 ; MIPS32R2:       # %bb.0: # %entry
1391 ; MIPS32R2-NEXT:    jr $ra
1392 ; MIPS32R2-NEXT:    andi $2, $4, 32768
1393 ;
1394 ; MIPS32R6-LABEL: and_i32_32768:
1395 ; MIPS32R6:       # %bb.0: # %entry
1396 ; MIPS32R6-NEXT:    jr $ra
1397 ; MIPS32R6-NEXT:    andi $2, $4, 32768
1398 ;
1399 ; MIPS64-LABEL: and_i32_32768:
1400 ; MIPS64:       # %bb.0: # %entry
1401 ; MIPS64-NEXT:    jr $ra
1402 ; MIPS64-NEXT:    andi $2, $4, 32768
1403 ;
1404 ; MIPS64R2-LABEL: and_i32_32768:
1405 ; MIPS64R2:       # %bb.0: # %entry
1406 ; MIPS64R2-NEXT:    jr $ra
1407 ; MIPS64R2-NEXT:    andi $2, $4, 32768
1408 ;
1409 ; MIPS64R6-LABEL: and_i32_32768:
1410 ; MIPS64R6:       # %bb.0: # %entry
1411 ; MIPS64R6-NEXT:    jr $ra
1412 ; MIPS64R6-NEXT:    andi $2, $4, 32768
1413 ;
1414 ; MM32R3-LABEL: and_i32_32768:
1415 ; MM32R3:       # %bb.0: # %entry
1416 ; MM32R3-NEXT:    andi16 $2, $4, 32768
1417 ; MM32R3-NEXT:    jrc $ra
1418 ;
1419 ; MM32R6-LABEL: and_i32_32768:
1420 ; MM32R6:       # %bb.0: # %entry
1421 ; MM32R6-NEXT:    andi16 $2, $4, 32768
1422 ; MM32R6-NEXT:    jrc $ra
1423 entry:
1424   %r = and i32 32768, %b
1425   ret i32 %r
1426 }
1427
1428 define signext i64 @and_i64_32768(i64 signext %b) {
1429 ; MIPS-LABEL: and_i64_32768:
1430 ; MIPS:       # %bb.0: # %entry
1431 ; MIPS-NEXT:    andi $3, $5, 32768
1432 ; MIPS-NEXT:    jr $ra
1433 ; MIPS-NEXT:    addiu $2, $zero, 0
1434 ;
1435 ; MIPS32R2-LABEL: and_i64_32768:
1436 ; MIPS32R2:       # %bb.0: # %entry
1437 ; MIPS32R2-NEXT:    andi $3, $5, 32768
1438 ; MIPS32R2-NEXT:    jr $ra
1439 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
1440 ;
1441 ; MIPS32R6-LABEL: and_i64_32768:
1442 ; MIPS32R6:       # %bb.0: # %entry
1443 ; MIPS32R6-NEXT:    andi $3, $5, 32768
1444 ; MIPS32R6-NEXT:    jr $ra
1445 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
1446 ;
1447 ; MIPS64-LABEL: and_i64_32768:
1448 ; MIPS64:       # %bb.0: # %entry
1449 ; MIPS64-NEXT:    jr $ra
1450 ; MIPS64-NEXT:    andi $2, $4, 32768
1451 ;
1452 ; MIPS64R2-LABEL: and_i64_32768:
1453 ; MIPS64R2:       # %bb.0: # %entry
1454 ; MIPS64R2-NEXT:    jr $ra
1455 ; MIPS64R2-NEXT:    andi $2, $4, 32768
1456 ;
1457 ; MIPS64R6-LABEL: and_i64_32768:
1458 ; MIPS64R6:       # %bb.0: # %entry
1459 ; MIPS64R6-NEXT:    jr $ra
1460 ; MIPS64R6-NEXT:    andi $2, $4, 32768
1461 ;
1462 ; MM32R3-LABEL: and_i64_32768:
1463 ; MM32R3:       # %bb.0: # %entry
1464 ; MM32R3-NEXT:    andi16 $3, $5, 32768
1465 ; MM32R3-NEXT:    li16 $2, 0
1466 ; MM32R3-NEXT:    jrc $ra
1467 ;
1468 ; MM32R6-LABEL: and_i64_32768:
1469 ; MM32R6:       # %bb.0: # %entry
1470 ; MM32R6-NEXT:    andi16 $3, $5, 32768
1471 ; MM32R6-NEXT:    li16 $2, 0
1472 ; MM32R6-NEXT:    jrc $ra
1473 entry:
1474   %r = and i64 32768, %b
1475   ret i64 %r
1476 }
1477
1478 define signext i128 @and_i128_32768(i128 signext %b) {
1479 ; MIPS-LABEL: and_i128_32768:
1480 ; MIPS:       # %bb.0: # %entry
1481 ; MIPS-NEXT:    andi $5, $7, 32768
1482 ; MIPS-NEXT:    addiu $2, $zero, 0
1483 ; MIPS-NEXT:    addiu $3, $zero, 0
1484 ; MIPS-NEXT:    jr $ra
1485 ; MIPS-NEXT:    addiu $4, $zero, 0
1486 ;
1487 ; MIPS32R2-LABEL: and_i128_32768:
1488 ; MIPS32R2:       # %bb.0: # %entry
1489 ; MIPS32R2-NEXT:    andi $5, $7, 32768
1490 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
1491 ; MIPS32R2-NEXT:    addiu $3, $zero, 0
1492 ; MIPS32R2-NEXT:    jr $ra
1493 ; MIPS32R2-NEXT:    addiu $4, $zero, 0
1494 ;
1495 ; MIPS32R6-LABEL: and_i128_32768:
1496 ; MIPS32R6:       # %bb.0: # %entry
1497 ; MIPS32R6-NEXT:    andi $5, $7, 32768
1498 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
1499 ; MIPS32R6-NEXT:    addiu $3, $zero, 0
1500 ; MIPS32R6-NEXT:    jr $ra
1501 ; MIPS32R6-NEXT:    addiu $4, $zero, 0
1502 ;
1503 ; MIPS64-LABEL: and_i128_32768:
1504 ; MIPS64:       # %bb.0: # %entry
1505 ; MIPS64-NEXT:    andi $3, $5, 32768
1506 ; MIPS64-NEXT:    jr $ra
1507 ; MIPS64-NEXT:    daddiu $2, $zero, 0
1508 ;
1509 ; MIPS64R2-LABEL: and_i128_32768:
1510 ; MIPS64R2:       # %bb.0: # %entry
1511 ; MIPS64R2-NEXT:    andi $3, $5, 32768
1512 ; MIPS64R2-NEXT:    jr $ra
1513 ; MIPS64R2-NEXT:    daddiu $2, $zero, 0
1514 ;
1515 ; MIPS64R6-LABEL: and_i128_32768:
1516 ; MIPS64R6:       # %bb.0: # %entry
1517 ; MIPS64R6-NEXT:    andi $3, $5, 32768
1518 ; MIPS64R6-NEXT:    jr $ra
1519 ; MIPS64R6-NEXT:    daddiu $2, $zero, 0
1520 ;
1521 ; MM32R3-LABEL: and_i128_32768:
1522 ; MM32R3:       # %bb.0: # %entry
1523 ; MM32R3-NEXT:    andi16 $5, $7, 32768
1524 ; MM32R3-NEXT:    li16 $2, 0
1525 ; MM32R3-NEXT:    li16 $3, 0
1526 ; MM32R3-NEXT:    li16 $4, 0
1527 ; MM32R3-NEXT:    jrc $ra
1528 ;
1529 ; MM32R6-LABEL: and_i128_32768:
1530 ; MM32R6:       # %bb.0: # %entry
1531 ; MM32R6-NEXT:    andi16 $5, $7, 32768
1532 ; MM32R6-NEXT:    li16 $2, 0
1533 ; MM32R6-NEXT:    li16 $3, 0
1534 ; MM32R6-NEXT:    li16 $4, 0
1535 ; MM32R6-NEXT:    jrc $ra
1536 entry:
1537   %r = and i128 32768, %b
1538   ret i128 %r
1539 }
1540
1541 define signext i1 @and_i1_65(i1 signext %b) {
1542 ; MIPS-LABEL: and_i1_65:
1543 ; MIPS:       # %bb.0: # %entry
1544 ; MIPS-NEXT:    jr $ra
1545 ; MIPS-NEXT:    move $2, $4
1546 ;
1547 ; MIPS32R2-LABEL: and_i1_65:
1548 ; MIPS32R2:       # %bb.0: # %entry
1549 ; MIPS32R2-NEXT:    jr $ra
1550 ; MIPS32R2-NEXT:    move $2, $4
1551 ;
1552 ; MIPS32R6-LABEL: and_i1_65:
1553 ; MIPS32R6:       # %bb.0: # %entry
1554 ; MIPS32R6-NEXT:    jr $ra
1555 ; MIPS32R6-NEXT:    move $2, $4
1556 ;
1557 ; MIPS64-LABEL: and_i1_65:
1558 ; MIPS64:       # %bb.0: # %entry
1559 ; MIPS64-NEXT:    jr $ra
1560 ; MIPS64-NEXT:    move $2, $4
1561 ;
1562 ; MIPS64R2-LABEL: and_i1_65:
1563 ; MIPS64R2:       # %bb.0: # %entry
1564 ; MIPS64R2-NEXT:    jr $ra
1565 ; MIPS64R2-NEXT:    move $2, $4
1566 ;
1567 ; MIPS64R6-LABEL: and_i1_65:
1568 ; MIPS64R6:       # %bb.0: # %entry
1569 ; MIPS64R6-NEXT:    jr $ra
1570 ; MIPS64R6-NEXT:    move $2, $4
1571 ;
1572 ; MM32R3-LABEL: and_i1_65:
1573 ; MM32R3:       # %bb.0: # %entry
1574 ; MM32R3-NEXT:    move $2, $4
1575 ; MM32R3-NEXT:    jrc $ra
1576 ;
1577 ; MM32R6-LABEL: and_i1_65:
1578 ; MM32R6:       # %bb.0: # %entry
1579 ; MM32R6-NEXT:    move $2, $4
1580 ; MM32R6-NEXT:    jrc $ra
1581 entry:
1582   %r = and i1 65, %b
1583   ret i1 %r
1584 }
1585
1586 define signext i8 @and_i8_65(i8 signext %b) {
1587 ; MIPS-LABEL: and_i8_65:
1588 ; MIPS:       # %bb.0: # %entry
1589 ; MIPS-NEXT:    jr $ra
1590 ; MIPS-NEXT:    andi $2, $4, 65
1591 ;
1592 ; MIPS32R2-LABEL: and_i8_65:
1593 ; MIPS32R2:       # %bb.0: # %entry
1594 ; MIPS32R2-NEXT:    jr $ra
1595 ; MIPS32R2-NEXT:    andi $2, $4, 65
1596 ;
1597 ; MIPS32R6-LABEL: and_i8_65:
1598 ; MIPS32R6:       # %bb.0: # %entry
1599 ; MIPS32R6-NEXT:    jr $ra
1600 ; MIPS32R6-NEXT:    andi $2, $4, 65
1601 ;
1602 ; MIPS64-LABEL: and_i8_65:
1603 ; MIPS64:       # %bb.0: # %entry
1604 ; MIPS64-NEXT:    jr $ra
1605 ; MIPS64-NEXT:    andi $2, $4, 65
1606 ;
1607 ; MIPS64R2-LABEL: and_i8_65:
1608 ; MIPS64R2:       # %bb.0: # %entry
1609 ; MIPS64R2-NEXT:    jr $ra
1610 ; MIPS64R2-NEXT:    andi $2, $4, 65
1611 ;
1612 ; MIPS64R6-LABEL: and_i8_65:
1613 ; MIPS64R6:       # %bb.0: # %entry
1614 ; MIPS64R6-NEXT:    jr $ra
1615 ; MIPS64R6-NEXT:    andi $2, $4, 65
1616 ;
1617 ; MM32R3-LABEL: and_i8_65:
1618 ; MM32R3:       # %bb.0: # %entry
1619 ; MM32R3-NEXT:    jr $ra
1620 ; MM32R3-NEXT:    andi $2, $4, 65
1621 ;
1622 ; MM32R6-LABEL: and_i8_65:
1623 ; MM32R6:       # %bb.0: # %entry
1624 ; MM32R6-NEXT:    andi $2, $4, 65
1625 ; MM32R6-NEXT:    jrc $ra
1626 entry:
1627   %r = and i8 65, %b
1628   ret i8 %r
1629 }
1630
1631 define signext i16 @and_i16_65(i16 signext %b) {
1632 ; MIPS-LABEL: and_i16_65:
1633 ; MIPS:       # %bb.0: # %entry
1634 ; MIPS-NEXT:    jr $ra
1635 ; MIPS-NEXT:    andi $2, $4, 65
1636 ;
1637 ; MIPS32R2-LABEL: and_i16_65:
1638 ; MIPS32R2:       # %bb.0: # %entry
1639 ; MIPS32R2-NEXT:    jr $ra
1640 ; MIPS32R2-NEXT:    andi $2, $4, 65
1641 ;
1642 ; MIPS32R6-LABEL: and_i16_65:
1643 ; MIPS32R6:       # %bb.0: # %entry
1644 ; MIPS32R6-NEXT:    jr $ra
1645 ; MIPS32R6-NEXT:    andi $2, $4, 65
1646 ;
1647 ; MIPS64-LABEL: and_i16_65:
1648 ; MIPS64:       # %bb.0: # %entry
1649 ; MIPS64-NEXT:    jr $ra
1650 ; MIPS64-NEXT:    andi $2, $4, 65
1651 ;
1652 ; MIPS64R2-LABEL: and_i16_65:
1653 ; MIPS64R2:       # %bb.0: # %entry
1654 ; MIPS64R2-NEXT:    jr $ra
1655 ; MIPS64R2-NEXT:    andi $2, $4, 65
1656 ;
1657 ; MIPS64R6-LABEL: and_i16_65:
1658 ; MIPS64R6:       # %bb.0: # %entry
1659 ; MIPS64R6-NEXT:    jr $ra
1660 ; MIPS64R6-NEXT:    andi $2, $4, 65
1661 ;
1662 ; MM32R3-LABEL: and_i16_65:
1663 ; MM32R3:       # %bb.0: # %entry
1664 ; MM32R3-NEXT:    jr $ra
1665 ; MM32R3-NEXT:    andi $2, $4, 65
1666 ;
1667 ; MM32R6-LABEL: and_i16_65:
1668 ; MM32R6:       # %bb.0: # %entry
1669 ; MM32R6-NEXT:    andi $2, $4, 65
1670 ; MM32R6-NEXT:    jrc $ra
1671 entry:
1672   %r = and i16 65, %b
1673   ret i16 %r
1674 }
1675
1676 define signext i32 @and_i32_65(i32 signext %b) {
1677 ; MIPS-LABEL: and_i32_65:
1678 ; MIPS:       # %bb.0: # %entry
1679 ; MIPS-NEXT:    jr $ra
1680 ; MIPS-NEXT:    andi $2, $4, 65
1681 ;
1682 ; MIPS32R2-LABEL: and_i32_65:
1683 ; MIPS32R2:       # %bb.0: # %entry
1684 ; MIPS32R2-NEXT:    jr $ra
1685 ; MIPS32R2-NEXT:    andi $2, $4, 65
1686 ;
1687 ; MIPS32R6-LABEL: and_i32_65:
1688 ; MIPS32R6:       # %bb.0: # %entry
1689 ; MIPS32R6-NEXT:    jr $ra
1690 ; MIPS32R6-NEXT:    andi $2, $4, 65
1691 ;
1692 ; MIPS64-LABEL: and_i32_65:
1693 ; MIPS64:       # %bb.0: # %entry
1694 ; MIPS64-NEXT:    jr $ra
1695 ; MIPS64-NEXT:    andi $2, $4, 65
1696 ;
1697 ; MIPS64R2-LABEL: and_i32_65:
1698 ; MIPS64R2:       # %bb.0: # %entry
1699 ; MIPS64R2-NEXT:    jr $ra
1700 ; MIPS64R2-NEXT:    andi $2, $4, 65
1701 ;
1702 ; MIPS64R6-LABEL: and_i32_65:
1703 ; MIPS64R6:       # %bb.0: # %entry
1704 ; MIPS64R6-NEXT:    jr $ra
1705 ; MIPS64R6-NEXT:    andi $2, $4, 65
1706 ;
1707 ; MM32R3-LABEL: and_i32_65:
1708 ; MM32R3:       # %bb.0: # %entry
1709 ; MM32R3-NEXT:    jr $ra
1710 ; MM32R3-NEXT:    andi $2, $4, 65
1711 ;
1712 ; MM32R6-LABEL: and_i32_65:
1713 ; MM32R6:       # %bb.0: # %entry
1714 ; MM32R6-NEXT:    andi $2, $4, 65
1715 ; MM32R6-NEXT:    jrc $ra
1716 entry:
1717   %r = and i32 65, %b
1718   ret i32 %r
1719 }
1720
1721 define signext i64 @and_i64_65(i64 signext %b) {
1722 ; MIPS-LABEL: and_i64_65:
1723 ; MIPS:       # %bb.0: # %entry
1724 ; MIPS-NEXT:    andi $3, $5, 65
1725 ; MIPS-NEXT:    jr $ra
1726 ; MIPS-NEXT:    addiu $2, $zero, 0
1727 ;
1728 ; MIPS32R2-LABEL: and_i64_65:
1729 ; MIPS32R2:       # %bb.0: # %entry
1730 ; MIPS32R2-NEXT:    andi $3, $5, 65
1731 ; MIPS32R2-NEXT:    jr $ra
1732 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
1733 ;
1734 ; MIPS32R6-LABEL: and_i64_65:
1735 ; MIPS32R6:       # %bb.0: # %entry
1736 ; MIPS32R6-NEXT:    andi $3, $5, 65
1737 ; MIPS32R6-NEXT:    jr $ra
1738 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
1739 ;
1740 ; MIPS64-LABEL: and_i64_65:
1741 ; MIPS64:       # %bb.0: # %entry
1742 ; MIPS64-NEXT:    jr $ra
1743 ; MIPS64-NEXT:    andi $2, $4, 65
1744 ;
1745 ; MIPS64R2-LABEL: and_i64_65:
1746 ; MIPS64R2:       # %bb.0: # %entry
1747 ; MIPS64R2-NEXT:    jr $ra
1748 ; MIPS64R2-NEXT:    andi $2, $4, 65
1749 ;
1750 ; MIPS64R6-LABEL: and_i64_65:
1751 ; MIPS64R6:       # %bb.0: # %entry
1752 ; MIPS64R6-NEXT:    jr $ra
1753 ; MIPS64R6-NEXT:    andi $2, $4, 65
1754 ;
1755 ; MM32R3-LABEL: and_i64_65:
1756 ; MM32R3:       # %bb.0: # %entry
1757 ; MM32R3-NEXT:    li16 $2, 0
1758 ; MM32R3-NEXT:    jr $ra
1759 ; MM32R3-NEXT:    andi $3, $5, 65
1760 ;
1761 ; MM32R6-LABEL: and_i64_65:
1762 ; MM32R6:       # %bb.0: # %entry
1763 ; MM32R6-NEXT:    andi $3, $5, 65
1764 ; MM32R6-NEXT:    li16 $2, 0
1765 ; MM32R6-NEXT:    jrc $ra
1766 entry:
1767   %r = and i64 65, %b
1768   ret i64 %r
1769 }
1770
1771 define signext i128 @and_i128_65(i128 signext %b) {
1772 ; MIPS-LABEL: and_i128_65:
1773 ; MIPS:       # %bb.0: # %entry
1774 ; MIPS-NEXT:    andi $5, $7, 65
1775 ; MIPS-NEXT:    addiu $2, $zero, 0
1776 ; MIPS-NEXT:    addiu $3, $zero, 0
1777 ; MIPS-NEXT:    jr $ra
1778 ; MIPS-NEXT:    addiu $4, $zero, 0
1779 ;
1780 ; MIPS32R2-LABEL: and_i128_65:
1781 ; MIPS32R2:       # %bb.0: # %entry
1782 ; MIPS32R2-NEXT:    andi $5, $7, 65
1783 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
1784 ; MIPS32R2-NEXT:    addiu $3, $zero, 0
1785 ; MIPS32R2-NEXT:    jr $ra
1786 ; MIPS32R2-NEXT:    addiu $4, $zero, 0
1787 ;
1788 ; MIPS32R6-LABEL: and_i128_65:
1789 ; MIPS32R6:       # %bb.0: # %entry
1790 ; MIPS32R6-NEXT:    andi $5, $7, 65
1791 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
1792 ; MIPS32R6-NEXT:    addiu $3, $zero, 0
1793 ; MIPS32R6-NEXT:    jr $ra
1794 ; MIPS32R6-NEXT:    addiu $4, $zero, 0
1795 ;
1796 ; MIPS64-LABEL: and_i128_65:
1797 ; MIPS64:       # %bb.0: # %entry
1798 ; MIPS64-NEXT:    andi $3, $5, 65
1799 ; MIPS64-NEXT:    jr $ra
1800 ; MIPS64-NEXT:    daddiu $2, $zero, 0
1801 ;
1802 ; MIPS64R2-LABEL: and_i128_65:
1803 ; MIPS64R2:       # %bb.0: # %entry
1804 ; MIPS64R2-NEXT:    andi $3, $5, 65
1805 ; MIPS64R2-NEXT:    jr $ra
1806 ; MIPS64R2-NEXT:    daddiu $2, $zero, 0
1807 ;
1808 ; MIPS64R6-LABEL: and_i128_65:
1809 ; MIPS64R6:       # %bb.0: # %entry
1810 ; MIPS64R6-NEXT:    andi $3, $5, 65
1811 ; MIPS64R6-NEXT:    jr $ra
1812 ; MIPS64R6-NEXT:    daddiu $2, $zero, 0
1813 ;
1814 ; MM32R3-LABEL: and_i128_65:
1815 ; MM32R3:       # %bb.0: # %entry
1816 ; MM32R3-NEXT:    li16 $2, 0
1817 ; MM32R3-NEXT:    li16 $3, 0
1818 ; MM32R3-NEXT:    li16 $4, 0
1819 ; MM32R3-NEXT:    jr $ra
1820 ; MM32R3-NEXT:    andi $5, $7, 65
1821 ;
1822 ; MM32R6-LABEL: and_i128_65:
1823 ; MM32R6:       # %bb.0: # %entry
1824 ; MM32R6-NEXT:    andi $5, $7, 65
1825 ; MM32R6-NEXT:    li16 $2, 0
1826 ; MM32R6-NEXT:    li16 $3, 0
1827 ; MM32R6-NEXT:    li16 $4, 0
1828 ; MM32R6-NEXT:    jrc $ra
1829 entry:
1830   %r = and i128 65, %b
1831   ret i128 %r
1832 }
1833
1834 define signext i1 @and_i1_256(i1 signext %b) {
1835 ; MIPS-LABEL: and_i1_256:
1836 ; MIPS:       # %bb.0: # %entry
1837 ; MIPS-NEXT:    jr $ra
1838 ; MIPS-NEXT:    addiu $2, $zero, 0
1839 ;
1840 ; MIPS32R2-LABEL: and_i1_256:
1841 ; MIPS32R2:       # %bb.0: # %entry
1842 ; MIPS32R2-NEXT:    jr $ra
1843 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
1844 ;
1845 ; MIPS32R6-LABEL: and_i1_256:
1846 ; MIPS32R6:       # %bb.0: # %entry
1847 ; MIPS32R6-NEXT:    jr $ra
1848 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
1849 ;
1850 ; MIPS64-LABEL: and_i1_256:
1851 ; MIPS64:       # %bb.0: # %entry
1852 ; MIPS64-NEXT:    jr $ra
1853 ; MIPS64-NEXT:    addiu $2, $zero, 0
1854 ;
1855 ; MIPS64R2-LABEL: and_i1_256:
1856 ; MIPS64R2:       # %bb.0: # %entry
1857 ; MIPS64R2-NEXT:    jr $ra
1858 ; MIPS64R2-NEXT:    addiu $2, $zero, 0
1859 ;
1860 ; MIPS64R6-LABEL: and_i1_256:
1861 ; MIPS64R6:       # %bb.0: # %entry
1862 ; MIPS64R6-NEXT:    jr $ra
1863 ; MIPS64R6-NEXT:    addiu $2, $zero, 0
1864 ;
1865 ; MM32R3-LABEL: and_i1_256:
1866 ; MM32R3:       # %bb.0: # %entry
1867 ; MM32R3-NEXT:    li16 $2, 0
1868 ; MM32R3-NEXT:    jrc $ra
1869 ;
1870 ; MM32R6-LABEL: and_i1_256:
1871 ; MM32R6:       # %bb.0: # %entry
1872 ; MM32R6-NEXT:    li16 $2, 0
1873 ; MM32R6-NEXT:    jrc $ra
1874 entry:
1875   %r = and i1 256, %b
1876   ret i1 %r
1877 }
1878
1879 define signext i8 @and_i8_256(i8 signext %b) {
1880 ; MIPS-LABEL: and_i8_256:
1881 ; MIPS:       # %bb.0: # %entry
1882 ; MIPS-NEXT:    jr $ra
1883 ; MIPS-NEXT:    addiu $2, $zero, 0
1884 ;
1885 ; MIPS32R2-LABEL: and_i8_256:
1886 ; MIPS32R2:       # %bb.0: # %entry
1887 ; MIPS32R2-NEXT:    jr $ra
1888 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
1889 ;
1890 ; MIPS32R6-LABEL: and_i8_256:
1891 ; MIPS32R6:       # %bb.0: # %entry
1892 ; MIPS32R6-NEXT:    jr $ra
1893 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
1894 ;
1895 ; MIPS64-LABEL: and_i8_256:
1896 ; MIPS64:       # %bb.0: # %entry
1897 ; MIPS64-NEXT:    jr $ra
1898 ; MIPS64-NEXT:    addiu $2, $zero, 0
1899 ;
1900 ; MIPS64R2-LABEL: and_i8_256:
1901 ; MIPS64R2:       # %bb.0: # %entry
1902 ; MIPS64R2-NEXT:    jr $ra
1903 ; MIPS64R2-NEXT:    addiu $2, $zero, 0
1904 ;
1905 ; MIPS64R6-LABEL: and_i8_256:
1906 ; MIPS64R6:       # %bb.0: # %entry
1907 ; MIPS64R6-NEXT:    jr $ra
1908 ; MIPS64R6-NEXT:    addiu $2, $zero, 0
1909 ;
1910 ; MM32R3-LABEL: and_i8_256:
1911 ; MM32R3:       # %bb.0: # %entry
1912 ; MM32R3-NEXT:    li16 $2, 0
1913 ; MM32R3-NEXT:    jrc $ra
1914 ;
1915 ; MM32R6-LABEL: and_i8_256:
1916 ; MM32R6:       # %bb.0: # %entry
1917 ; MM32R6-NEXT:    li16 $2, 0
1918 ; MM32R6-NEXT:    jrc $ra
1919 entry:
1920   %r = and i8 256, %b
1921   ret i8 %r
1922 }
1923
1924 define signext i16 @and_i16_256(i16 signext %b) {
1925 ; MIPS-LABEL: and_i16_256:
1926 ; MIPS:       # %bb.0: # %entry
1927 ; MIPS-NEXT:    jr $ra
1928 ; MIPS-NEXT:    andi $2, $4, 256
1929 ;
1930 ; MIPS32R2-LABEL: and_i16_256:
1931 ; MIPS32R2:       # %bb.0: # %entry
1932 ; MIPS32R2-NEXT:    jr $ra
1933 ; MIPS32R2-NEXT:    andi $2, $4, 256
1934 ;
1935 ; MIPS32R6-LABEL: and_i16_256:
1936 ; MIPS32R6:       # %bb.0: # %entry
1937 ; MIPS32R6-NEXT:    jr $ra
1938 ; MIPS32R6-NEXT:    andi $2, $4, 256
1939 ;
1940 ; MIPS64-LABEL: and_i16_256:
1941 ; MIPS64:       # %bb.0: # %entry
1942 ; MIPS64-NEXT:    jr $ra
1943 ; MIPS64-NEXT:    andi $2, $4, 256
1944 ;
1945 ; MIPS64R2-LABEL: and_i16_256:
1946 ; MIPS64R2:       # %bb.0: # %entry
1947 ; MIPS64R2-NEXT:    jr $ra
1948 ; MIPS64R2-NEXT:    andi $2, $4, 256
1949 ;
1950 ; MIPS64R6-LABEL: and_i16_256:
1951 ; MIPS64R6:       # %bb.0: # %entry
1952 ; MIPS64R6-NEXT:    jr $ra
1953 ; MIPS64R6-NEXT:    andi $2, $4, 256
1954 ;
1955 ; MM32R3-LABEL: and_i16_256:
1956 ; MM32R3:       # %bb.0: # %entry
1957 ; MM32R3-NEXT:    jr $ra
1958 ; MM32R3-NEXT:    andi $2, $4, 256
1959 ;
1960 ; MM32R6-LABEL: and_i16_256:
1961 ; MM32R6:       # %bb.0: # %entry
1962 ; MM32R6-NEXT:    andi $2, $4, 256
1963 ; MM32R6-NEXT:    jrc $ra
1964 entry:
1965   %r = and i16 256, %b
1966   ret i16 %r
1967 }
1968
1969 define signext i32 @and_i32_256(i32 signext %b) {
1970 ; MIPS-LABEL: and_i32_256:
1971 ; MIPS:       # %bb.0: # %entry
1972 ; MIPS-NEXT:    jr $ra
1973 ; MIPS-NEXT:    andi $2, $4, 256
1974 ;
1975 ; MIPS32R2-LABEL: and_i32_256:
1976 ; MIPS32R2:       # %bb.0: # %entry
1977 ; MIPS32R2-NEXT:    jr $ra
1978 ; MIPS32R2-NEXT:    andi $2, $4, 256
1979 ;
1980 ; MIPS32R6-LABEL: and_i32_256:
1981 ; MIPS32R6:       # %bb.0: # %entry
1982 ; MIPS32R6-NEXT:    jr $ra
1983 ; MIPS32R6-NEXT:    andi $2, $4, 256
1984 ;
1985 ; MIPS64-LABEL: and_i32_256:
1986 ; MIPS64:       # %bb.0: # %entry
1987 ; MIPS64-NEXT:    jr $ra
1988 ; MIPS64-NEXT:    andi $2, $4, 256
1989 ;
1990 ; MIPS64R2-LABEL: and_i32_256:
1991 ; MIPS64R2:       # %bb.0: # %entry
1992 ; MIPS64R2-NEXT:    jr $ra
1993 ; MIPS64R2-NEXT:    andi $2, $4, 256
1994 ;
1995 ; MIPS64R6-LABEL: and_i32_256:
1996 ; MIPS64R6:       # %bb.0: # %entry
1997 ; MIPS64R6-NEXT:    jr $ra
1998 ; MIPS64R6-NEXT:    andi $2, $4, 256
1999 ;
2000 ; MM32R3-LABEL: and_i32_256:
2001 ; MM32R3:       # %bb.0: # %entry
2002 ; MM32R3-NEXT:    jr $ra
2003 ; MM32R3-NEXT:    andi $2, $4, 256
2004 ;
2005 ; MM32R6-LABEL: and_i32_256:
2006 ; MM32R6:       # %bb.0: # %entry
2007 ; MM32R6-NEXT:    andi $2, $4, 256
2008 ; MM32R6-NEXT:    jrc $ra
2009 entry:
2010   %r = and i32 256, %b
2011   ret i32 %r
2012 }
2013
2014 define signext i64 @and_i64_256(i64 signext %b) {
2015 ; MIPS-LABEL: and_i64_256:
2016 ; MIPS:       # %bb.0: # %entry
2017 ; MIPS-NEXT:    andi $3, $5, 256
2018 ; MIPS-NEXT:    jr $ra
2019 ; MIPS-NEXT:    addiu $2, $zero, 0
2020 ;
2021 ; MIPS32R2-LABEL: and_i64_256:
2022 ; MIPS32R2:       # %bb.0: # %entry
2023 ; MIPS32R2-NEXT:    andi $3, $5, 256
2024 ; MIPS32R2-NEXT:    jr $ra
2025 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
2026 ;
2027 ; MIPS32R6-LABEL: and_i64_256:
2028 ; MIPS32R6:       # %bb.0: # %entry
2029 ; MIPS32R6-NEXT:    andi $3, $5, 256
2030 ; MIPS32R6-NEXT:    jr $ra
2031 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
2032 ;
2033 ; MIPS64-LABEL: and_i64_256:
2034 ; MIPS64:       # %bb.0: # %entry
2035 ; MIPS64-NEXT:    jr $ra
2036 ; MIPS64-NEXT:    andi $2, $4, 256
2037 ;
2038 ; MIPS64R2-LABEL: and_i64_256:
2039 ; MIPS64R2:       # %bb.0: # %entry
2040 ; MIPS64R2-NEXT:    jr $ra
2041 ; MIPS64R2-NEXT:    andi $2, $4, 256
2042 ;
2043 ; MIPS64R6-LABEL: and_i64_256:
2044 ; MIPS64R6:       # %bb.0: # %entry
2045 ; MIPS64R6-NEXT:    jr $ra
2046 ; MIPS64R6-NEXT:    andi $2, $4, 256
2047 ;
2048 ; MM32R3-LABEL: and_i64_256:
2049 ; MM32R3:       # %bb.0: # %entry
2050 ; MM32R3-NEXT:    li16 $2, 0
2051 ; MM32R3-NEXT:    jr $ra
2052 ; MM32R3-NEXT:    andi $3, $5, 256
2053 ;
2054 ; MM32R6-LABEL: and_i64_256:
2055 ; MM32R6:       # %bb.0: # %entry
2056 ; MM32R6-NEXT:    andi $3, $5, 256
2057 ; MM32R6-NEXT:    li16 $2, 0
2058 ; MM32R6-NEXT:    jrc $ra
2059 entry:
2060   %r = and i64 256, %b
2061   ret i64 %r
2062 }
2063
2064 define signext i128 @and_i128_256(i128 signext %b) {
2065 ; MIPS-LABEL: and_i128_256:
2066 ; MIPS:       # %bb.0: # %entry
2067 ; MIPS-NEXT:    andi $5, $7, 256
2068 ; MIPS-NEXT:    addiu $2, $zero, 0
2069 ; MIPS-NEXT:    addiu $3, $zero, 0
2070 ; MIPS-NEXT:    jr $ra
2071 ; MIPS-NEXT:    addiu $4, $zero, 0
2072 ;
2073 ; MIPS32R2-LABEL: and_i128_256:
2074 ; MIPS32R2:       # %bb.0: # %entry
2075 ; MIPS32R2-NEXT:    andi $5, $7, 256
2076 ; MIPS32R2-NEXT:    addiu $2, $zero, 0
2077 ; MIPS32R2-NEXT:    addiu $3, $zero, 0
2078 ; MIPS32R2-NEXT:    jr $ra
2079 ; MIPS32R2-NEXT:    addiu $4, $zero, 0
2080 ;
2081 ; MIPS32R6-LABEL: and_i128_256:
2082 ; MIPS32R6:       # %bb.0: # %entry
2083 ; MIPS32R6-NEXT:    andi $5, $7, 256
2084 ; MIPS32R6-NEXT:    addiu $2, $zero, 0
2085 ; MIPS32R6-NEXT:    addiu $3, $zero, 0
2086 ; MIPS32R6-NEXT:    jr $ra
2087 ; MIPS32R6-NEXT:    addiu $4, $zero, 0
2088 ;
2089 ; MIPS64-LABEL: and_i128_256:
2090 ; MIPS64:       # %bb.0: # %entry
2091 ; MIPS64-NEXT:    andi $3, $5, 256
2092 ; MIPS64-NEXT:    jr $ra
2093 ; MIPS64-NEXT:    daddiu $2, $zero, 0
2094 ;
2095 ; MIPS64R2-LABEL: and_i128_256:
2096 ; MIPS64R2:       # %bb.0: # %entry
2097 ; MIPS64R2-NEXT:    andi $3, $5, 256
2098 ; MIPS64R2-NEXT:    jr $ra
2099 ; MIPS64R2-NEXT:    daddiu $2, $zero, 0
2100 ;
2101 ; MIPS64R6-LABEL: and_i128_256:
2102 ; MIPS64R6:       # %bb.0: # %entry
2103 ; MIPS64R6-NEXT:    andi $3, $5, 256
2104 ; MIPS64R6-NEXT:    jr $ra
2105 ; MIPS64R6-NEXT:    daddiu $2, $zero, 0
2106 ;
2107 ; MM32R3-LABEL: and_i128_256:
2108 ; MM32R3:       # %bb.0: # %entry
2109 ; MM32R3-NEXT:    li16 $2, 0
2110 ; MM32R3-NEXT:    li16 $3, 0
2111 ; MM32R3-NEXT:    li16 $4, 0
2112 ; MM32R3-NEXT:    jr $ra
2113 ; MM32R3-NEXT:    andi $5, $7, 256
2114 ;
2115 ; MM32R6-LABEL: and_i128_256:
2116 ; MM32R6:       # %bb.0: # %entry
2117 ; MM32R6-NEXT:    andi $5, $7, 256
2118 ; MM32R6-NEXT:    li16 $2, 0
2119 ; MM32R6-NEXT:    li16 $3, 0
2120 ; MM32R6-NEXT:    li16 $4, 0
2121 ; MM32R6-NEXT:    jrc $ra
2122 entry:
2123   %r = and i128 256, %b
2124   ret i128 %r
2125 }