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 -check-prefix=GP32
3 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32 | FileCheck %s -check-prefix=GP32
4 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r2 | FileCheck %s -check-prefix=GP32
5 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 | FileCheck %s -check-prefix=GP32
6 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r5 | FileCheck %s -check-prefix=GP32
7 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 | FileCheck %s -check-prefix=GP32
8 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips3 | FileCheck %s -check-prefix=GP64
9 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips4 | FileCheck %s -check-prefix=GP64
10 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64 | FileCheck %s -check-prefix=GP64
11 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r2 | FileCheck %s -check-prefix=GP64
12 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r3 | FileCheck %s -check-prefix=GP64
13 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r5 | FileCheck %s -check-prefix=GP64
14 ; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -mcpu=mips64r6 | FileCheck %s -check-prefix=GP64
15 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r3 -mattr=+micromips | FileCheck %s \
16 ; RUN: -check-prefix=MM32
17 ; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r6 -mattr=+micromips | FileCheck %s \
18 ; RUN: -check-prefix=MM32R6
20 define signext i1 @or_i1(i1 signext %a, i1 signext %b) {
22 ; GP32: # %bb.0: # %entry
24 ; GP32-NEXT: or $2, $4, $5
27 ; GP64: # %bb.0: # %entry
28 ; GP64-NEXT: or $1, $4, $5
30 ; GP64-NEXT: sll $2, $1, 0
33 ; MM32: # %bb.0: # %entry
34 ; MM32-NEXT: or16 $4, $5
35 ; MM32-NEXT: move $2, $4
38 ; MM32R6-LABEL: or_i1:
39 ; MM32R6: # %bb.0: # %entry
40 ; MM32R6-NEXT: or $2, $4, $5
41 ; MM32R6-NEXT: jrc $ra
47 define signext i8 @or_i8(i8 signext %a, i8 signext %b) {
49 ; GP32: # %bb.0: # %entry
51 ; GP32-NEXT: or $2, $4, $5
54 ; GP64: # %bb.0: # %entry
55 ; GP64-NEXT: or $1, $4, $5
57 ; GP64-NEXT: sll $2, $1, 0
60 ; MM32: # %bb.0: # %entry
61 ; MM32-NEXT: or16 $4, $5
62 ; MM32-NEXT: move $2, $4
65 ; MM32R6-LABEL: or_i8:
66 ; MM32R6: # %bb.0: # %entry
67 ; MM32R6-NEXT: or $2, $4, $5
68 ; MM32R6-NEXT: jrc $ra
74 define signext i16 @or_i16(i16 signext %a, i16 signext %b) {
76 ; GP32: # %bb.0: # %entry
78 ; GP32-NEXT: or $2, $4, $5
81 ; GP64: # %bb.0: # %entry
82 ; GP64-NEXT: or $1, $4, $5
84 ; GP64-NEXT: sll $2, $1, 0
87 ; MM32: # %bb.0: # %entry
88 ; MM32-NEXT: or16 $4, $5
89 ; MM32-NEXT: move $2, $4
92 ; MM32R6-LABEL: or_i16:
93 ; MM32R6: # %bb.0: # %entry
94 ; MM32R6-NEXT: or $2, $4, $5
95 ; MM32R6-NEXT: jrc $ra
101 define signext i32 @or_i32(i32 signext %a, i32 signext %b) {
102 ; GP32-LABEL: or_i32:
103 ; GP32: # %bb.0: # %entry
105 ; GP32-NEXT: or $2, $4, $5
107 ; GP64-LABEL: or_i32:
108 ; GP64: # %bb.0: # %entry
110 ; GP64-NEXT: or $2, $4, $5
112 ; MM32-LABEL: or_i32:
113 ; MM32: # %bb.0: # %entry
114 ; MM32-NEXT: or16 $4, $5
115 ; MM32-NEXT: move $2, $4
118 ; MM32R6-LABEL: or_i32:
119 ; MM32R6: # %bb.0: # %entry
120 ; MM32R6-NEXT: or $2, $4, $5
121 ; MM32R6-NEXT: jrc $ra
127 define signext i64 @or_i64(i64 signext %a, i64 signext %b) {
128 ; GP32-LABEL: or_i64:
129 ; GP32: # %bb.0: # %entry
130 ; GP32-NEXT: or $2, $4, $6
132 ; GP32-NEXT: or $3, $5, $7
134 ; GP64-LABEL: or_i64:
135 ; GP64: # %bb.0: # %entry
137 ; GP64-NEXT: or $2, $4, $5
139 ; MM32-LABEL: or_i64:
140 ; MM32: # %bb.0: # %entry
141 ; MM32-NEXT: or16 $4, $6
142 ; MM32-NEXT: or16 $5, $7
143 ; MM32-NEXT: move $2, $4
144 ; MM32-NEXT: move $3, $5
147 ; MM32R6-LABEL: or_i64:
148 ; MM32R6: # %bb.0: # %entry
149 ; MM32R6-NEXT: or $2, $4, $6
150 ; MM32R6-NEXT: or $3, $5, $7
151 ; MM32R6-NEXT: jrc $ra
157 define signext i128 @or_i128(i128 signext %a, i128 signext %b) {
158 ; GP32-LABEL: or_i128:
159 ; GP32: # %bb.0: # %entry
160 ; GP32-NEXT: lw $1, 20($sp)
161 ; GP32-NEXT: lw $2, 16($sp)
162 ; GP32-NEXT: or $2, $4, $2
163 ; GP32-NEXT: or $3, $5, $1
164 ; GP32-NEXT: lw $1, 24($sp)
165 ; GP32-NEXT: or $4, $6, $1
166 ; GP32-NEXT: lw $1, 28($sp)
168 ; GP32-NEXT: or $5, $7, $1
170 ; GP64-LABEL: or_i128:
171 ; GP64: # %bb.0: # %entry
172 ; GP64-NEXT: or $2, $4, $6
174 ; GP64-NEXT: or $3, $5, $7
176 ; MM32-LABEL: or_i128:
177 ; MM32: # %bb.0: # %entry
178 ; MM32-NEXT: lwp $2, 16($sp)
179 ; MM32-NEXT: or16 $2, $4
180 ; MM32-NEXT: or16 $3, $5
181 ; MM32-NEXT: lw $4, 24($sp)
182 ; MM32-NEXT: or16 $4, $6
183 ; MM32-NEXT: lw $5, 28($sp)
184 ; MM32-NEXT: or16 $5, $7
187 ; MM32R6-LABEL: or_i128:
188 ; MM32R6: # %bb.0: # %entry
189 ; MM32R6-NEXT: lw $1, 20($sp)
190 ; MM32R6-NEXT: lw $2, 16($sp)
191 ; MM32R6-NEXT: or $2, $4, $2
192 ; MM32R6-NEXT: or $3, $5, $1
193 ; MM32R6-NEXT: lw $1, 24($sp)
194 ; MM32R6-NEXT: or $4, $6, $1
195 ; MM32R6-NEXT: lw $1, 28($sp)
196 ; MM32R6-NEXT: or $5, $7, $1
197 ; MM32R6-NEXT: jrc $ra
203 define signext i1 @or_i1_4(i1 signext %b) {
204 ; GP32-LABEL: or_i1_4:
205 ; GP32: # %bb.0: # %entry
207 ; GP32-NEXT: move $2, $4
209 ; GP64-LABEL: or_i1_4:
210 ; GP64: # %bb.0: # %entry
212 ; GP64-NEXT: move $2, $4
214 ; MM32-LABEL: or_i1_4:
215 ; MM32: # %bb.0: # %entry
216 ; MM32-NEXT: move $2, $4
219 ; MM32R6-LABEL: or_i1_4:
220 ; MM32R6: # %bb.0: # %entry
221 ; MM32R6-NEXT: move $2, $4
222 ; MM32R6-NEXT: jrc $ra
228 define signext i8 @or_i8_4(i8 signext %b) {
229 ; GP32-LABEL: or_i8_4:
230 ; GP32: # %bb.0: # %entry
232 ; GP32-NEXT: ori $2, $4, 4
234 ; GP64-LABEL: or_i8_4:
235 ; GP64: # %bb.0: # %entry
237 ; GP64-NEXT: ori $2, $4, 4
239 ; MM32-LABEL: or_i8_4:
240 ; MM32: # %bb.0: # %entry
242 ; MM32-NEXT: ori $2, $4, 4
244 ; MM32R6-LABEL: or_i8_4:
245 ; MM32R6: # %bb.0: # %entry
246 ; MM32R6-NEXT: ori $2, $4, 4
247 ; MM32R6-NEXT: jrc $ra
253 define signext i16 @or_i16_4(i16 signext %b) {
254 ; GP32-LABEL: or_i16_4:
255 ; GP32: # %bb.0: # %entry
257 ; GP32-NEXT: ori $2, $4, 4
259 ; GP64-LABEL: or_i16_4:
260 ; GP64: # %bb.0: # %entry
262 ; GP64-NEXT: ori $2, $4, 4
264 ; MM32-LABEL: or_i16_4:
265 ; MM32: # %bb.0: # %entry
267 ; MM32-NEXT: ori $2, $4, 4
269 ; MM32R6-LABEL: or_i16_4:
270 ; MM32R6: # %bb.0: # %entry
271 ; MM32R6-NEXT: ori $2, $4, 4
272 ; MM32R6-NEXT: jrc $ra
278 define signext i32 @or_i32_4(i32 signext %b) {
279 ; GP32-LABEL: or_i32_4:
280 ; GP32: # %bb.0: # %entry
282 ; GP32-NEXT: ori $2, $4, 4
284 ; GP64-LABEL: or_i32_4:
285 ; GP64: # %bb.0: # %entry
286 ; GP64-NEXT: ori $1, $4, 4
288 ; GP64-NEXT: sll $2, $1, 0
290 ; MM32-LABEL: or_i32_4:
291 ; MM32: # %bb.0: # %entry
293 ; MM32-NEXT: ori $2, $4, 4
295 ; MM32R6-LABEL: or_i32_4:
296 ; MM32R6: # %bb.0: # %entry
297 ; MM32R6-NEXT: ori $2, $4, 4
298 ; MM32R6-NEXT: jrc $ra
304 define signext i64 @or_i64_4(i64 signext %b) {
305 ; GP32-LABEL: or_i64_4:
306 ; GP32: # %bb.0: # %entry
307 ; GP32-NEXT: ori $3, $5, 4
309 ; GP32-NEXT: move $2, $4
311 ; GP64-LABEL: or_i64_4:
312 ; GP64: # %bb.0: # %entry
314 ; GP64-NEXT: ori $2, $4, 4
316 ; MM32-LABEL: or_i64_4:
317 ; MM32: # %bb.0: # %entry
318 ; MM32-NEXT: ori $3, $5, 4
319 ; MM32-NEXT: move $2, $4
322 ; MM32R6-LABEL: or_i64_4:
323 ; MM32R6: # %bb.0: # %entry
324 ; MM32R6-NEXT: ori $3, $5, 4
325 ; MM32R6-NEXT: move $2, $4
326 ; MM32R6-NEXT: jrc $ra
332 define signext i128 @or_i128_4(i128 signext %b) {
333 ; GP32-LABEL: or_i128_4:
334 ; GP32: # %bb.0: # %entry
335 ; GP32-NEXT: ori $1, $7, 4
336 ; GP32-NEXT: move $2, $4
337 ; GP32-NEXT: move $3, $5
338 ; GP32-NEXT: move $4, $6
340 ; GP32-NEXT: move $5, $1
342 ; GP64-LABEL: or_i128_4:
343 ; GP64: # %bb.0: # %entry
344 ; GP64-NEXT: ori $3, $5, 4
346 ; GP64-NEXT: move $2, $4
348 ; MM32-LABEL: or_i128_4:
349 ; MM32: # %bb.0: # %entry
350 ; MM32-NEXT: ori $1, $7, 4
351 ; MM32-NEXT: move $2, $4
352 ; MM32-NEXT: move $3, $5
353 ; MM32-NEXT: move $4, $6
354 ; MM32-NEXT: move $5, $1
357 ; MM32R6-LABEL: or_i128_4:
358 ; MM32R6: # %bb.0: # %entry
359 ; MM32R6-NEXT: ori $1, $7, 4
360 ; MM32R6-NEXT: move $2, $4
361 ; MM32R6-NEXT: move $3, $5
362 ; MM32R6-NEXT: move $4, $6
363 ; MM32R6-NEXT: move $5, $1
364 ; MM32R6-NEXT: jrc $ra
370 define signext i1 @or_i1_31(i1 signext %b) {
371 ; GP32-LABEL: or_i1_31:
372 ; GP32: # %bb.0: # %entry
374 ; GP32-NEXT: addiu $2, $zero, -1
376 ; GP64-LABEL: or_i1_31:
377 ; GP64: # %bb.0: # %entry
379 ; GP64-NEXT: addiu $2, $zero, -1
381 ; MM32-LABEL: or_i1_31:
382 ; MM32: # %bb.0: # %entry
383 ; MM32-NEXT: li16 $2, -1
386 ; MM32R6-LABEL: or_i1_31:
387 ; MM32R6: # %bb.0: # %entry
388 ; MM32R6-NEXT: li16 $2, -1
389 ; MM32R6-NEXT: jrc $ra
395 define signext i8 @or_i8_31(i8 signext %b) {
396 ; GP32-LABEL: or_i8_31:
397 ; GP32: # %bb.0: # %entry
399 ; GP32-NEXT: ori $2, $4, 31
401 ; GP64-LABEL: or_i8_31:
402 ; GP64: # %bb.0: # %entry
404 ; GP64-NEXT: ori $2, $4, 31
406 ; MM32-LABEL: or_i8_31:
407 ; MM32: # %bb.0: # %entry
409 ; MM32-NEXT: ori $2, $4, 31
411 ; MM32R6-LABEL: or_i8_31:
412 ; MM32R6: # %bb.0: # %entry
413 ; MM32R6-NEXT: ori $2, $4, 31
414 ; MM32R6-NEXT: jrc $ra
420 define signext i16 @or_i16_31(i16 signext %b) {
421 ; GP32-LABEL: or_i16_31:
422 ; GP32: # %bb.0: # %entry
424 ; GP32-NEXT: ori $2, $4, 31
426 ; GP64-LABEL: or_i16_31:
427 ; GP64: # %bb.0: # %entry
429 ; GP64-NEXT: ori $2, $4, 31
431 ; MM32-LABEL: or_i16_31:
432 ; MM32: # %bb.0: # %entry
434 ; MM32-NEXT: ori $2, $4, 31
436 ; MM32R6-LABEL: or_i16_31:
437 ; MM32R6: # %bb.0: # %entry
438 ; MM32R6-NEXT: ori $2, $4, 31
439 ; MM32R6-NEXT: jrc $ra
445 define signext i32 @or_i32_31(i32 signext %b) {
446 ; GP32-LABEL: or_i32_31:
447 ; GP32: # %bb.0: # %entry
449 ; GP32-NEXT: ori $2, $4, 31
451 ; GP64-LABEL: or_i32_31:
452 ; GP64: # %bb.0: # %entry
453 ; GP64-NEXT: ori $1, $4, 31
455 ; GP64-NEXT: sll $2, $1, 0
457 ; MM32-LABEL: or_i32_31:
458 ; MM32: # %bb.0: # %entry
460 ; MM32-NEXT: ori $2, $4, 31
462 ; MM32R6-LABEL: or_i32_31:
463 ; MM32R6: # %bb.0: # %entry
464 ; MM32R6-NEXT: ori $2, $4, 31
465 ; MM32R6-NEXT: jrc $ra
471 define signext i64 @or_i64_31(i64 signext %b) {
472 ; GP32-LABEL: or_i64_31:
473 ; GP32: # %bb.0: # %entry
474 ; GP32-NEXT: ori $3, $5, 31
476 ; GP32-NEXT: move $2, $4
478 ; GP64-LABEL: or_i64_31:
479 ; GP64: # %bb.0: # %entry
481 ; GP64-NEXT: ori $2, $4, 31
483 ; MM32-LABEL: or_i64_31:
484 ; MM32: # %bb.0: # %entry
485 ; MM32-NEXT: ori $3, $5, 31
486 ; MM32-NEXT: move $2, $4
489 ; MM32R6-LABEL: or_i64_31:
490 ; MM32R6: # %bb.0: # %entry
491 ; MM32R6-NEXT: ori $3, $5, 31
492 ; MM32R6-NEXT: move $2, $4
493 ; MM32R6-NEXT: jrc $ra
499 define signext i128 @or_i128_31(i128 signext %b) {
500 ; GP32-LABEL: or_i128_31:
501 ; GP32: # %bb.0: # %entry
502 ; GP32-NEXT: ori $1, $7, 31
503 ; GP32-NEXT: move $2, $4
504 ; GP32-NEXT: move $3, $5
505 ; GP32-NEXT: move $4, $6
507 ; GP32-NEXT: move $5, $1
509 ; GP64-LABEL: or_i128_31:
510 ; GP64: # %bb.0: # %entry
511 ; GP64-NEXT: ori $3, $5, 31
513 ; GP64-NEXT: move $2, $4
515 ; MM32-LABEL: or_i128_31:
516 ; MM32: # %bb.0: # %entry
517 ; MM32-NEXT: ori $1, $7, 31
518 ; MM32-NEXT: move $2, $4
519 ; MM32-NEXT: move $3, $5
520 ; MM32-NEXT: move $4, $6
521 ; MM32-NEXT: move $5, $1
524 ; MM32R6-LABEL: or_i128_31:
525 ; MM32R6: # %bb.0: # %entry
526 ; MM32R6-NEXT: ori $1, $7, 31
527 ; MM32R6-NEXT: move $2, $4
528 ; MM32R6-NEXT: move $3, $5
529 ; MM32R6-NEXT: move $4, $6
530 ; MM32R6-NEXT: move $5, $1
531 ; MM32R6-NEXT: jrc $ra
537 define signext i1 @or_i1_255(i1 signext %b) {
538 ; GP32-LABEL: or_i1_255:
539 ; GP32: # %bb.0: # %entry
541 ; GP32-NEXT: addiu $2, $zero, -1
543 ; GP64-LABEL: or_i1_255:
544 ; GP64: # %bb.0: # %entry
546 ; GP64-NEXT: addiu $2, $zero, -1
548 ; MM32-LABEL: or_i1_255:
549 ; MM32: # %bb.0: # %entry
550 ; MM32-NEXT: li16 $2, -1
553 ; MM32R6-LABEL: or_i1_255:
554 ; MM32R6: # %bb.0: # %entry
555 ; MM32R6-NEXT: li16 $2, -1
556 ; MM32R6-NEXT: jrc $ra
562 define signext i8 @or_i8_255(i8 signext %b) {
563 ; GP32-LABEL: or_i8_255:
564 ; GP32: # %bb.0: # %entry
566 ; GP32-NEXT: addiu $2, $zero, -1
568 ; GP64-LABEL: or_i8_255:
569 ; GP64: # %bb.0: # %entry
571 ; GP64-NEXT: addiu $2, $zero, -1
573 ; MM32-LABEL: or_i8_255:
574 ; MM32: # %bb.0: # %entry
575 ; MM32-NEXT: li16 $2, -1
578 ; MM32R6-LABEL: or_i8_255:
579 ; MM32R6: # %bb.0: # %entry
580 ; MM32R6-NEXT: li16 $2, -1
581 ; MM32R6-NEXT: jrc $ra
587 define signext i16 @or_i16_255(i16 signext %b) {
588 ; GP32-LABEL: or_i16_255:
589 ; GP32: # %bb.0: # %entry
591 ; GP32-NEXT: ori $2, $4, 255
593 ; GP64-LABEL: or_i16_255:
594 ; GP64: # %bb.0: # %entry
596 ; GP64-NEXT: ori $2, $4, 255
598 ; MM32-LABEL: or_i16_255:
599 ; MM32: # %bb.0: # %entry
601 ; MM32-NEXT: ori $2, $4, 255
603 ; MM32R6-LABEL: or_i16_255:
604 ; MM32R6: # %bb.0: # %entry
605 ; MM32R6-NEXT: ori $2, $4, 255
606 ; MM32R6-NEXT: jrc $ra
612 define signext i32 @or_i32_255(i32 signext %b) {
613 ; GP32-LABEL: or_i32_255:
614 ; GP32: # %bb.0: # %entry
616 ; GP32-NEXT: ori $2, $4, 255
618 ; GP64-LABEL: or_i32_255:
619 ; GP64: # %bb.0: # %entry
620 ; GP64-NEXT: ori $1, $4, 255
622 ; GP64-NEXT: sll $2, $1, 0
624 ; MM32-LABEL: or_i32_255:
625 ; MM32: # %bb.0: # %entry
627 ; MM32-NEXT: ori $2, $4, 255
629 ; MM32R6-LABEL: or_i32_255:
630 ; MM32R6: # %bb.0: # %entry
631 ; MM32R6-NEXT: ori $2, $4, 255
632 ; MM32R6-NEXT: jrc $ra
638 define signext i64 @or_i64_255(i64 signext %b) {
639 ; GP32-LABEL: or_i64_255:
640 ; GP32: # %bb.0: # %entry
641 ; GP32-NEXT: ori $3, $5, 255
643 ; GP32-NEXT: move $2, $4
645 ; GP64-LABEL: or_i64_255:
646 ; GP64: # %bb.0: # %entry
648 ; GP64-NEXT: ori $2, $4, 255
650 ; MM32-LABEL: or_i64_255:
651 ; MM32: # %bb.0: # %entry
652 ; MM32-NEXT: ori $3, $5, 255
653 ; MM32-NEXT: move $2, $4
656 ; MM32R6-LABEL: or_i64_255:
657 ; MM32R6: # %bb.0: # %entry
658 ; MM32R6-NEXT: ori $3, $5, 255
659 ; MM32R6-NEXT: move $2, $4
660 ; MM32R6-NEXT: jrc $ra
666 define signext i128 @or_i128_255(i128 signext %b) {
667 ; GP32-LABEL: or_i128_255:
668 ; GP32: # %bb.0: # %entry
669 ; GP32-NEXT: ori $1, $7, 255
670 ; GP32-NEXT: move $2, $4
671 ; GP32-NEXT: move $3, $5
672 ; GP32-NEXT: move $4, $6
674 ; GP32-NEXT: move $5, $1
676 ; GP64-LABEL: or_i128_255:
677 ; GP64: # %bb.0: # %entry
678 ; GP64-NEXT: ori $3, $5, 255
680 ; GP64-NEXT: move $2, $4
682 ; MM32-LABEL: or_i128_255:
683 ; MM32: # %bb.0: # %entry
684 ; MM32-NEXT: ori $1, $7, 255
685 ; MM32-NEXT: move $2, $4
686 ; MM32-NEXT: move $3, $5
687 ; MM32-NEXT: move $4, $6
688 ; MM32-NEXT: move $5, $1
691 ; MM32R6-LABEL: or_i128_255:
692 ; MM32R6: # %bb.0: # %entry
693 ; MM32R6-NEXT: ori $1, $7, 255
694 ; MM32R6-NEXT: move $2, $4
695 ; MM32R6-NEXT: move $3, $5
696 ; MM32R6-NEXT: move $4, $6
697 ; MM32R6-NEXT: move $5, $1
698 ; MM32R6-NEXT: jrc $ra
704 define signext i1 @or_i1_32768(i1 signext %b) {
705 ; GP32-LABEL: or_i1_32768:
706 ; GP32: # %bb.0: # %entry
708 ; GP32-NEXT: move $2, $4
710 ; GP64-LABEL: or_i1_32768:
711 ; GP64: # %bb.0: # %entry
713 ; GP64-NEXT: move $2, $4
715 ; MM32-LABEL: or_i1_32768:
716 ; MM32: # %bb.0: # %entry
717 ; MM32-NEXT: move $2, $4
720 ; MM32R6-LABEL: or_i1_32768:
721 ; MM32R6: # %bb.0: # %entry
722 ; MM32R6-NEXT: move $2, $4
723 ; MM32R6-NEXT: jrc $ra
729 define signext i8 @or_i8_32768(i8 signext %b) {
730 ; GP32-LABEL: or_i8_32768:
731 ; GP32: # %bb.0: # %entry
733 ; GP32-NEXT: move $2, $4
735 ; GP64-LABEL: or_i8_32768:
736 ; GP64: # %bb.0: # %entry
738 ; GP64-NEXT: move $2, $4
740 ; MM32-LABEL: or_i8_32768:
741 ; MM32: # %bb.0: # %entry
742 ; MM32-NEXT: move $2, $4
745 ; MM32R6-LABEL: or_i8_32768:
746 ; MM32R6: # %bb.0: # %entry
747 ; MM32R6-NEXT: move $2, $4
748 ; MM32R6-NEXT: jrc $ra
754 define signext i16 @or_i16_32768(i16 signext %b) {
755 ; GP32-LABEL: or_i16_32768:
756 ; GP32: # %bb.0: # %entry
757 ; GP32-NEXT: addiu $1, $zero, -32768
759 ; GP32-NEXT: or $2, $4, $1
761 ; GP64-LABEL: or_i16_32768:
762 ; GP64: # %bb.0: # %entry
763 ; GP64-NEXT: addiu $1, $zero, -32768
765 ; GP64-NEXT: or $2, $4, $1
767 ; MM32-LABEL: or_i16_32768:
768 ; MM32: # %bb.0: # %entry
769 ; MM32-NEXT: addiu $2, $zero, -32768
770 ; MM32-NEXT: or16 $2, $4
773 ; MM32R6-LABEL: or_i16_32768:
774 ; MM32R6: # %bb.0: # %entry
775 ; MM32R6-NEXT: addiu $1, $zero, -32768
776 ; MM32R6-NEXT: or $2, $4, $1
777 ; MM32R6-NEXT: jrc $ra
779 %r = or i16 32768, %b
783 define signext i32 @or_i32_32768(i32 signext %b) {
784 ; GP32-LABEL: or_i32_32768:
785 ; GP32: # %bb.0: # %entry
787 ; GP32-NEXT: ori $2, $4, 32768
789 ; GP64-LABEL: or_i32_32768:
790 ; GP64: # %bb.0: # %entry
791 ; GP64-NEXT: ori $1, $4, 32768
793 ; GP64-NEXT: sll $2, $1, 0
795 ; MM32-LABEL: or_i32_32768:
796 ; MM32: # %bb.0: # %entry
798 ; MM32-NEXT: ori $2, $4, 32768
800 ; MM32R6-LABEL: or_i32_32768:
801 ; MM32R6: # %bb.0: # %entry
802 ; MM32R6-NEXT: ori $2, $4, 32768
803 ; MM32R6-NEXT: jrc $ra
805 %r = or i32 32768, %b
809 define signext i64 @or_i64_32768(i64 signext %b) {
810 ; GP32-LABEL: or_i64_32768:
811 ; GP32: # %bb.0: # %entry
812 ; GP32-NEXT: ori $3, $5, 32768
814 ; GP32-NEXT: move $2, $4
816 ; GP64-LABEL: or_i64_32768:
817 ; GP64: # %bb.0: # %entry
819 ; GP64-NEXT: ori $2, $4, 32768
821 ; MM32-LABEL: or_i64_32768:
822 ; MM32: # %bb.0: # %entry
823 ; MM32-NEXT: ori $3, $5, 32768
824 ; MM32-NEXT: move $2, $4
827 ; MM32R6-LABEL: or_i64_32768:
828 ; MM32R6: # %bb.0: # %entry
829 ; MM32R6-NEXT: ori $3, $5, 32768
830 ; MM32R6-NEXT: move $2, $4
831 ; MM32R6-NEXT: jrc $ra
833 %r = or i64 32768, %b
837 define signext i128 @or_i128_32768(i128 signext %b) {
838 ; GP32-LABEL: or_i128_32768:
839 ; GP32: # %bb.0: # %entry
840 ; GP32-NEXT: ori $1, $7, 32768
841 ; GP32-NEXT: move $2, $4
842 ; GP32-NEXT: move $3, $5
843 ; GP32-NEXT: move $4, $6
845 ; GP32-NEXT: move $5, $1
847 ; GP64-LABEL: or_i128_32768:
848 ; GP64: # %bb.0: # %entry
849 ; GP64-NEXT: ori $3, $5, 32768
851 ; GP64-NEXT: move $2, $4
853 ; MM32-LABEL: or_i128_32768:
854 ; MM32: # %bb.0: # %entry
855 ; MM32-NEXT: ori $1, $7, 32768
856 ; MM32-NEXT: move $2, $4
857 ; MM32-NEXT: move $3, $5
858 ; MM32-NEXT: move $4, $6
859 ; MM32-NEXT: move $5, $1
862 ; MM32R6-LABEL: or_i128_32768:
863 ; MM32R6: # %bb.0: # %entry
864 ; MM32R6-NEXT: ori $1, $7, 32768
865 ; MM32R6-NEXT: move $2, $4
866 ; MM32R6-NEXT: move $3, $5
867 ; MM32R6-NEXT: move $4, $6
868 ; MM32R6-NEXT: move $5, $1
869 ; MM32R6-NEXT: jrc $ra
871 %r = or i128 32768, %b
875 define signext i1 @or_i1_65(i1 signext %b) {
876 ; GP32-LABEL: or_i1_65:
877 ; GP32: # %bb.0: # %entry
879 ; GP32-NEXT: addiu $2, $zero, -1
881 ; GP64-LABEL: or_i1_65:
882 ; GP64: # %bb.0: # %entry
884 ; GP64-NEXT: addiu $2, $zero, -1
886 ; MM32-LABEL: or_i1_65:
887 ; MM32: # %bb.0: # %entry
888 ; MM32-NEXT: li16 $2, -1
891 ; MM32R6-LABEL: or_i1_65:
892 ; MM32R6: # %bb.0: # %entry
893 ; MM32R6-NEXT: li16 $2, -1
894 ; MM32R6-NEXT: jrc $ra
900 define signext i8 @or_i8_65(i8 signext %b) {
901 ; GP32-LABEL: or_i8_65:
902 ; GP32: # %bb.0: # %entry
904 ; GP32-NEXT: ori $2, $4, 65
906 ; GP64-LABEL: or_i8_65:
907 ; GP64: # %bb.0: # %entry
909 ; GP64-NEXT: ori $2, $4, 65
911 ; MM32-LABEL: or_i8_65:
912 ; MM32: # %bb.0: # %entry
914 ; MM32-NEXT: ori $2, $4, 65
916 ; MM32R6-LABEL: or_i8_65:
917 ; MM32R6: # %bb.0: # %entry
918 ; MM32R6-NEXT: ori $2, $4, 65
919 ; MM32R6-NEXT: jrc $ra
925 define signext i16 @or_i16_65(i16 signext %b) {
926 ; GP32-LABEL: or_i16_65:
927 ; GP32: # %bb.0: # %entry
929 ; GP32-NEXT: ori $2, $4, 65
931 ; GP64-LABEL: or_i16_65:
932 ; GP64: # %bb.0: # %entry
934 ; GP64-NEXT: ori $2, $4, 65
936 ; MM32-LABEL: or_i16_65:
937 ; MM32: # %bb.0: # %entry
939 ; MM32-NEXT: ori $2, $4, 65
941 ; MM32R6-LABEL: or_i16_65:
942 ; MM32R6: # %bb.0: # %entry
943 ; MM32R6-NEXT: ori $2, $4, 65
944 ; MM32R6-NEXT: jrc $ra
950 define signext i32 @or_i32_65(i32 signext %b) {
951 ; GP32-LABEL: or_i32_65:
952 ; GP32: # %bb.0: # %entry
954 ; GP32-NEXT: ori $2, $4, 65
956 ; GP64-LABEL: or_i32_65:
957 ; GP64: # %bb.0: # %entry
958 ; GP64-NEXT: ori $1, $4, 65
960 ; GP64-NEXT: sll $2, $1, 0
962 ; MM32-LABEL: or_i32_65:
963 ; MM32: # %bb.0: # %entry
965 ; MM32-NEXT: ori $2, $4, 65
967 ; MM32R6-LABEL: or_i32_65:
968 ; MM32R6: # %bb.0: # %entry
969 ; MM32R6-NEXT: ori $2, $4, 65
970 ; MM32R6-NEXT: jrc $ra
976 define signext i64 @or_i64_65(i64 signext %b) {
977 ; GP32-LABEL: or_i64_65:
978 ; GP32: # %bb.0: # %entry
979 ; GP32-NEXT: ori $3, $5, 65
981 ; GP32-NEXT: move $2, $4
983 ; GP64-LABEL: or_i64_65:
984 ; GP64: # %bb.0: # %entry
986 ; GP64-NEXT: ori $2, $4, 65
988 ; MM32-LABEL: or_i64_65:
989 ; MM32: # %bb.0: # %entry
990 ; MM32-NEXT: ori $3, $5, 65
991 ; MM32-NEXT: move $2, $4
994 ; MM32R6-LABEL: or_i64_65:
995 ; MM32R6: # %bb.0: # %entry
996 ; MM32R6-NEXT: ori $3, $5, 65
997 ; MM32R6-NEXT: move $2, $4
998 ; MM32R6-NEXT: jrc $ra
1004 define signext i128 @or_i128_65(i128 signext %b) {
1005 ; GP32-LABEL: or_i128_65:
1006 ; GP32: # %bb.0: # %entry
1007 ; GP32-NEXT: ori $1, $7, 65
1008 ; GP32-NEXT: move $2, $4
1009 ; GP32-NEXT: move $3, $5
1010 ; GP32-NEXT: move $4, $6
1012 ; GP32-NEXT: move $5, $1
1014 ; GP64-LABEL: or_i128_65:
1015 ; GP64: # %bb.0: # %entry
1016 ; GP64-NEXT: ori $3, $5, 65
1018 ; GP64-NEXT: move $2, $4
1020 ; MM32-LABEL: or_i128_65:
1021 ; MM32: # %bb.0: # %entry
1022 ; MM32-NEXT: ori $1, $7, 65
1023 ; MM32-NEXT: move $2, $4
1024 ; MM32-NEXT: move $3, $5
1025 ; MM32-NEXT: move $4, $6
1026 ; MM32-NEXT: move $5, $1
1027 ; MM32-NEXT: jrc $ra
1029 ; MM32R6-LABEL: or_i128_65:
1030 ; MM32R6: # %bb.0: # %entry
1031 ; MM32R6-NEXT: ori $1, $7, 65
1032 ; MM32R6-NEXT: move $2, $4
1033 ; MM32R6-NEXT: move $3, $5
1034 ; MM32R6-NEXT: move $4, $6
1035 ; MM32R6-NEXT: move $5, $1
1036 ; MM32R6-NEXT: jrc $ra
1042 define signext i1 @or_i1_256(i1 signext %b) {
1043 ; GP32-LABEL: or_i1_256:
1044 ; GP32: # %bb.0: # %entry
1046 ; GP32-NEXT: move $2, $4
1048 ; GP64-LABEL: or_i1_256:
1049 ; GP64: # %bb.0: # %entry
1051 ; GP64-NEXT: move $2, $4
1053 ; MM32-LABEL: or_i1_256:
1054 ; MM32: # %bb.0: # %entry
1055 ; MM32-NEXT: move $2, $4
1056 ; MM32-NEXT: jrc $ra
1058 ; MM32R6-LABEL: or_i1_256:
1059 ; MM32R6: # %bb.0: # %entry
1060 ; MM32R6-NEXT: move $2, $4
1061 ; MM32R6-NEXT: jrc $ra
1067 define signext i8 @or_i8_256(i8 signext %b) {
1068 ; GP32-LABEL: or_i8_256:
1069 ; GP32: # %bb.0: # %entry
1071 ; GP32-NEXT: move $2, $4
1073 ; GP64-LABEL: or_i8_256:
1074 ; GP64: # %bb.0: # %entry
1076 ; GP64-NEXT: move $2, $4
1078 ; MM32-LABEL: or_i8_256:
1079 ; MM32: # %bb.0: # %entry
1080 ; MM32-NEXT: move $2, $4
1081 ; MM32-NEXT: jrc $ra
1083 ; MM32R6-LABEL: or_i8_256:
1084 ; MM32R6: # %bb.0: # %entry
1085 ; MM32R6-NEXT: move $2, $4
1086 ; MM32R6-NEXT: jrc $ra
1092 define signext i16 @or_i16_256(i16 signext %b) {
1093 ; GP32-LABEL: or_i16_256:
1094 ; GP32: # %bb.0: # %entry
1096 ; GP32-NEXT: ori $2, $4, 256
1098 ; GP64-LABEL: or_i16_256:
1099 ; GP64: # %bb.0: # %entry
1101 ; GP64-NEXT: ori $2, $4, 256
1103 ; MM32-LABEL: or_i16_256:
1104 ; MM32: # %bb.0: # %entry
1106 ; MM32-NEXT: ori $2, $4, 256
1108 ; MM32R6-LABEL: or_i16_256:
1109 ; MM32R6: # %bb.0: # %entry
1110 ; MM32R6-NEXT: ori $2, $4, 256
1111 ; MM32R6-NEXT: jrc $ra
1117 define signext i32 @or_i32_256(i32 signext %b) {
1118 ; GP32-LABEL: or_i32_256:
1119 ; GP32: # %bb.0: # %entry
1121 ; GP32-NEXT: ori $2, $4, 256
1123 ; GP64-LABEL: or_i32_256:
1124 ; GP64: # %bb.0: # %entry
1125 ; GP64-NEXT: ori $1, $4, 256
1127 ; GP64-NEXT: sll $2, $1, 0
1129 ; MM32-LABEL: or_i32_256:
1130 ; MM32: # %bb.0: # %entry
1132 ; MM32-NEXT: ori $2, $4, 256
1134 ; MM32R6-LABEL: or_i32_256:
1135 ; MM32R6: # %bb.0: # %entry
1136 ; MM32R6-NEXT: ori $2, $4, 256
1137 ; MM32R6-NEXT: jrc $ra
1143 define signext i64 @or_i64_256(i64 signext %b) {
1144 ; GP32-LABEL: or_i64_256:
1145 ; GP32: # %bb.0: # %entry
1146 ; GP32-NEXT: ori $3, $5, 256
1148 ; GP32-NEXT: move $2, $4
1150 ; GP64-LABEL: or_i64_256:
1151 ; GP64: # %bb.0: # %entry
1153 ; GP64-NEXT: ori $2, $4, 256
1155 ; MM32-LABEL: or_i64_256:
1156 ; MM32: # %bb.0: # %entry
1157 ; MM32-NEXT: ori $3, $5, 256
1158 ; MM32-NEXT: move $2, $4
1159 ; MM32-NEXT: jrc $ra
1161 ; MM32R6-LABEL: or_i64_256:
1162 ; MM32R6: # %bb.0: # %entry
1163 ; MM32R6-NEXT: ori $3, $5, 256
1164 ; MM32R6-NEXT: move $2, $4
1165 ; MM32R6-NEXT: jrc $ra
1171 define signext i128 @or_i128_256(i128 signext %b) {
1172 ; GP32-LABEL: or_i128_256:
1173 ; GP32: # %bb.0: # %entry
1174 ; GP32-NEXT: ori $1, $7, 256
1175 ; GP32-NEXT: move $2, $4
1176 ; GP32-NEXT: move $3, $5
1177 ; GP32-NEXT: move $4, $6
1179 ; GP32-NEXT: move $5, $1
1181 ; GP64-LABEL: or_i128_256:
1182 ; GP64: # %bb.0: # %entry
1183 ; GP64-NEXT: ori $3, $5, 256
1185 ; GP64-NEXT: move $2, $4
1187 ; MM32-LABEL: or_i128_256:
1188 ; MM32: # %bb.0: # %entry
1189 ; MM32-NEXT: ori $1, $7, 256
1190 ; MM32-NEXT: move $2, $4
1191 ; MM32-NEXT: move $3, $5
1192 ; MM32-NEXT: move $4, $6
1193 ; MM32-NEXT: move $5, $1
1194 ; MM32-NEXT: jrc $ra
1196 ; MM32R6-LABEL: or_i128_256:
1197 ; MM32R6: # %bb.0: # %entry
1198 ; MM32R6-NEXT: ori $1, $7, 256
1199 ; MM32R6-NEXT: move $2, $4
1200 ; MM32R6-NEXT: move $3, $5
1201 ; MM32R6-NEXT: move $4, $6
1202 ; MM32R6-NEXT: move $5, $1
1203 ; MM32R6-NEXT: jrc $ra
1205 %r = or i128 256, %b