[MIPS GlobalISel] Select MSA vector generic and builtin add
[llvm-core.git] / test / CodeGen / Mips / GlobalISel / llvm-ir / float_args.ll
blobe46b7e64acd2826e70e62542d3ab8b24c3662efb
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,FP32
3 ; RUN: llc  -O0 -mtriple=mipsel-linux-gnu -mattr=+fp64,+mips32r2 -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32,FP64
5 define float @float_in_fpr(float %a, float %b) {
6 ; MIPS32-LABEL: float_in_fpr:
7 ; MIPS32:       # %bb.0: # %entry
8 ; MIPS32-NEXT:    mov.s $f0, $f14
9 ; MIPS32-NEXT:    jr $ra
10 ; MIPS32-NEXT:    nop
11 entry:
12   ret float %b
15 define double @double_in_fpr(double %a, double %b) {
16 ; MIPS32-LABEL: double_in_fpr:
17 ; MIPS32:       # %bb.0: # %entry
18 ; MIPS32-NEXT:    mov.d $f0, $f14
19 ; MIPS32-NEXT:    jr $ra
20 ; MIPS32-NEXT:    nop
21 entry:
22   ret double %b
25 define float @float_in_gpr(i32 %a, float %b) {
26 ; MIPS32-LABEL: float_in_gpr:
27 ; MIPS32:       # %bb.0: # %entry
28 ; MIPS32-NEXT:    mtc1 $5, $f0
29 ; MIPS32-NEXT:    jr $ra
30 ; MIPS32-NEXT:    nop
31 entry:
32   ret float %b
35 define double @double_in_gpr(i32 %a, double %b) {
36 ; FP32-LABEL: double_in_gpr:
37 ; FP32:       # %bb.0: # %entry
38 ; FP32-NEXT:    mtc1 $6, $f0
39 ; FP32-NEXT:    mtc1 $7, $f1
40 ; FP32-NEXT:    jr $ra
41 ; FP32-NEXT:    nop
43 ; FP64-LABEL: double_in_gpr:
44 ; FP64:       # %bb.0: # %entry
45 ; FP64-NEXT:    mtc1 $6, $f0
46 ; FP64-NEXT:    mthc1 $7, $f0
47 ; FP64-NEXT:    jr $ra
48 ; FP64-NEXT:    nop
49 entry:
50   ret double %b
53 define float @call_float_in_fpr(float %a, float %b) {
54 ; MIPS32-LABEL: call_float_in_fpr:
55 ; MIPS32:       # %bb.0: # %entry
56 ; MIPS32-NEXT:    addiu $sp, $sp, -24
57 ; MIPS32-NEXT:    .cfi_def_cfa_offset 24
58 ; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
59 ; MIPS32-NEXT:    .cfi_offset 31, -4
60 ; MIPS32-NEXT:    jal float_in_fpr
61 ; MIPS32-NEXT:    nop
62 ; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
63 ; MIPS32-NEXT:    addiu $sp, $sp, 24
64 ; MIPS32-NEXT:    jr $ra
65 ; MIPS32-NEXT:    nop
66 entry:
67   %call = call float @float_in_fpr(float %a, float %b)
68   ret float %call
71 define double @call_double_in_fpr(double %a, double %b) {
72 ; MIPS32-LABEL: call_double_in_fpr:
73 ; MIPS32:       # %bb.0: # %entry
74 ; MIPS32-NEXT:    addiu $sp, $sp, -24
75 ; MIPS32-NEXT:    .cfi_def_cfa_offset 24
76 ; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
77 ; MIPS32-NEXT:    .cfi_offset 31, -4
78 ; MIPS32-NEXT:    jal double_in_fpr
79 ; MIPS32-NEXT:    nop
80 ; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
81 ; MIPS32-NEXT:    addiu $sp, $sp, 24
82 ; MIPS32-NEXT:    jr $ra
83 ; MIPS32-NEXT:    nop
84 entry:
85   %call = call double @double_in_fpr(double %a, double %b)
86   ret double %call
89 define float @call_float_in_gpr(i32 %a, float %b) {
90 ; MIPS32-LABEL: call_float_in_gpr:
91 ; MIPS32:       # %bb.0: # %entry
92 ; MIPS32-NEXT:    addiu $sp, $sp, -24
93 ; MIPS32-NEXT:    .cfi_def_cfa_offset 24
94 ; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
95 ; MIPS32-NEXT:    .cfi_offset 31, -4
96 ; MIPS32-NEXT:    mtc1 $5, $f0
97 ; MIPS32-NEXT:    mfc1 $5, $f0
98 ; MIPS32-NEXT:    jal float_in_gpr
99 ; MIPS32-NEXT:    nop
100 ; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
101 ; MIPS32-NEXT:    addiu $sp, $sp, 24
102 ; MIPS32-NEXT:    jr $ra
103 ; MIPS32-NEXT:    nop
104 entry:
105   %call = call float @float_in_gpr(i32 %a, float %b)
106   ret float %call
110 define double @call_double_in_gpr(i32 %a, double %b) {
111 ; FP32-LABEL: call_double_in_gpr:
112 ; FP32:       # %bb.0: # %entry
113 ; FP32-NEXT:    addiu $sp, $sp, -24
114 ; FP32-NEXT:    .cfi_def_cfa_offset 24
115 ; FP32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
116 ; FP32-NEXT:    .cfi_offset 31, -4
117 ; FP32-NEXT:    mtc1 $6, $f0
118 ; FP32-NEXT:    mtc1 $7, $f1
119 ; FP32-NEXT:    mfc1 $7, $f1
120 ; FP32-NEXT:    mfc1 $6, $f0
121 ; FP32-NEXT:    jal double_in_gpr
122 ; FP32-NEXT:    nop
123 ; FP32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
124 ; FP32-NEXT:    addiu $sp, $sp, 24
125 ; FP32-NEXT:    jr $ra
126 ; FP32-NEXT:    nop
128 ; FP64-LABEL: call_double_in_gpr:
129 ; FP64:       # %bb.0: # %entry
130 ; FP64-NEXT:    addiu $sp, $sp, -24
131 ; FP64-NEXT:    .cfi_def_cfa_offset 24
132 ; FP64-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
133 ; FP64-NEXT:    .cfi_offset 31, -4
134 ; FP64-NEXT:    mtc1 $6, $f0
135 ; FP64-NEXT:    mthc1 $7, $f0
136 ; FP64-NEXT:    mfhc1 $7, $f0
137 ; FP64-NEXT:    mfc1 $6, $f0
138 ; FP64-NEXT:    jal double_in_gpr
139 ; FP64-NEXT:    nop
140 ; FP64-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
141 ; FP64-NEXT:    addiu $sp, $sp, 24
142 ; FP64-NEXT:    jr $ra
143 ; FP64-NEXT:    nop
144 entry:
145   %call = call double @double_in_gpr(i32 %a, double %b)
146   ret double %call