1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32
4 define i32 @outgoing_gpr(i32* %i32_ptr) {
5 ; MIPS32-LABEL: outgoing_gpr:
6 ; MIPS32: # %bb.0: # %entry
7 ; MIPS32-NEXT: lw $2, 0($4)
11 %0 = load i32, i32* %i32_ptr
15 define float @outgoing_fpr(float* %float_ptr) {
16 ; MIPS32-LABEL: outgoing_fpr:
17 ; MIPS32: # %bb.0: # %entry
18 ; MIPS32-NEXT: lwc1 $f0, 0($4)
22 %0 = load float, float* %float_ptr
26 define i32 @outgoing_gpr_instr(i32* %i32_ptr1, i32* %i32_ptr2) {
27 ; MIPS32-LABEL: outgoing_gpr_instr:
28 ; MIPS32: # %bb.0: # %entry
29 ; MIPS32-NEXT: lw $1, 0($4)
30 ; MIPS32-NEXT: lw $2, 0($5)
31 ; MIPS32-NEXT: addu $2, $2, $1
35 %0 = load i32, i32* %i32_ptr1
36 %1 = load i32, i32* %i32_ptr2
37 %outgoing_instr = add i32 %1, %0
38 ret i32 %outgoing_instr
41 define float @outgoing_fpr_instr(float* %float_ptr1, float* %float_ptr2) {
42 ; MIPS32-LABEL: outgoing_fpr_instr:
43 ; MIPS32: # %bb.0: # %entry
44 ; MIPS32-NEXT: lwc1 $f0, 0($4)
45 ; MIPS32-NEXT: lwc1 $f1, 0($5)
46 ; MIPS32-NEXT: add.s $f0, $f0, $f1
50 %0 = load float, float* %float_ptr1
51 %1 = load float, float* %float_ptr2
52 %outgoing_instr = fadd float %0, %1
53 ret float %outgoing_instr
56 define i32 @incoming_gpr(i32 %incoming_phys_reg, i1 %test, i32* %a) {
57 ; MIPS32-LABEL: incoming_gpr:
58 ; MIPS32: # %bb.0: # %entry
59 ; MIPS32-NEXT: lw $1, 0($6)
60 ; MIPS32-NEXT: ori $2, $zero, 1
61 ; MIPS32-NEXT: and $2, $5, $2
62 ; MIPS32-NEXT: movn $4, $1, $2
63 ; MIPS32-NEXT: move $2, $4
67 %0 = load i32, i32* %a
68 %cond = select i1 %test, i32 %0, i32 %incoming_phys_reg
72 define float @incoming_fpr(float %incoming_phys_reg, i1 %test, float* %a) {
73 ; MIPS32-LABEL: incoming_fpr:
74 ; MIPS32: # %bb.0: # %entry
75 ; MIPS32-NEXT: lwc1 $f0, 0($6)
76 ; MIPS32-NEXT: ori $1, $zero, 1
77 ; MIPS32-NEXT: and $1, $5, $1
78 ; MIPS32-NEXT: movn.s $f12, $f0, $1
79 ; MIPS32-NEXT: mov.s $f0, $f12
83 %0 = load float, float* %a
84 %cond = select i1 %test, float %0, float %incoming_phys_reg
89 define i32 @incoming_i32_instr(i32 %val1, i32 %val2, i32* %i32_ptr, i1 %test) {
90 ; MIPS32-LABEL: incoming_i32_instr:
91 ; MIPS32: # %bb.0: # %entry
92 ; MIPS32-NEXT: lw $1, 0($6)
93 ; MIPS32-NEXT: addu $2, $5, $4
94 ; MIPS32-NEXT: ori $3, $zero, 1
95 ; MIPS32-NEXT: and $3, $7, $3
96 ; MIPS32-NEXT: movn $2, $1, $3
100 %0 = load i32, i32* %i32_ptr
101 %incoming_instr = add i32 %val2, %val1
102 %cond = select i1 %test, i32 %0, i32 %incoming_instr
106 define float @incoming_float_instr(float %val1, float %val2, float* %float_ptr, i1 %test) {
107 ; MIPS32-LABEL: incoming_float_instr:
108 ; MIPS32: # %bb.0: # %entry
109 ; MIPS32-NEXT: lwc1 $f0, 0($6)
110 ; MIPS32-NEXT: add.s $f1, $f14, $f12
111 ; MIPS32-NEXT: ori $1, $zero, 1
112 ; MIPS32-NEXT: and $1, $7, $1
113 ; MIPS32-NEXT: movn.s $f1, $f0, $1
114 ; MIPS32-NEXT: mov.s $f0, $f1
115 ; MIPS32-NEXT: jr $ra
118 %0 = load float, float* %float_ptr
119 %incoming_instr = fadd float %val2, %val1
120 %cond = select i1 %test, float %0, float %incoming_instr