xref: /llvm-project/llvm/test/CodeGen/Mips/GlobalISel/instruction-select/float_args.mir (revision 92c80529ddb3ae147e9e58aed8d68b4aa2ea2379)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=FP32
3# RUN: llc -O0 -mtriple=mipsel-linux-gnu -mattr=+fp64,+mips32r2 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=FP64
4--- |
5
6  define void @float_in_fpr() {entry: ret void}
7  define void @double_in_fpr() {entry: ret void}
8  define void @float_in_gpr() {entry: ret void}
9  define void @double_in_gpr() {entry: ret void}
10  define void @call_float_in_fpr() {entry: ret void}
11  define void @call_double_in_fpr() {entry: ret void}
12  define void @call_float_in_gpr() {entry: ret void}
13  define void @call_double_in_gpr() {entry: ret void}
14
15...
16---
17name:            float_in_fpr
18alignment:       4
19legalized:       true
20regBankSelected: true
21tracksRegLiveness: true
22body:             |
23  bb.1.entry:
24    liveins: $f12, $f14
25
26    ; FP32-LABEL: name: float_in_fpr
27    ; FP32: liveins: $f12, $f14
28    ; FP32: [[COPY:%[0-9]+]]:fgr32 = COPY $f14
29    ; FP32: $f0 = COPY [[COPY]]
30    ; FP32: RetRA implicit $f0
31    ; FP64-LABEL: name: float_in_fpr
32    ; FP64: liveins: $f12, $f14
33    ; FP64: [[COPY:%[0-9]+]]:fgr32 = COPY $f14
34    ; FP64: $f0 = COPY [[COPY]]
35    ; FP64: RetRA implicit $f0
36    %1:fprb(s32) = COPY $f14
37    $f0 = COPY %1(s32)
38    RetRA implicit $f0
39
40...
41---
42name:            double_in_fpr
43alignment:       4
44legalized:       true
45regBankSelected: true
46tracksRegLiveness: true
47body:             |
48  bb.1.entry:
49    liveins: $d6, $d7
50
51    ; FP32-LABEL: name: double_in_fpr
52    ; FP32: liveins: $d6, $d7
53    ; FP32: [[COPY:%[0-9]+]]:afgr64 = COPY $d7
54    ; FP32: $d0 = COPY [[COPY]]
55    ; FP32: RetRA implicit $d0
56    ; FP64-LABEL: name: double_in_fpr
57    ; FP64: liveins: $d6, $d7
58    ; FP64: [[COPY:%[0-9]+]]:fgr64 = COPY $d7
59    ; FP64: $d0 = COPY [[COPY]]
60    ; FP64: RetRA implicit $d0
61    %1:fprb(s64) = COPY $d7
62    $d0 = COPY %1(s64)
63    RetRA implicit $d0
64
65...
66---
67name:            float_in_gpr
68alignment:       4
69legalized:       true
70regBankSelected: true
71tracksRegLiveness: true
72body:             |
73  bb.1.entry:
74    liveins: $a0, $a1
75
76    ; FP32-LABEL: name: float_in_gpr
77    ; FP32: liveins: $a0, $a1
78    ; FP32: [[COPY:%[0-9]+]]:gpr32 = COPY $a1
79    ; FP32: $f0 = COPY [[COPY]]
80    ; FP32: RetRA implicit $f0
81    ; FP64-LABEL: name: float_in_gpr
82    ; FP64: liveins: $a0, $a1
83    ; FP64: [[COPY:%[0-9]+]]:gpr32 = COPY $a1
84    ; FP64: $f0 = COPY [[COPY]]
85    ; FP64: RetRA implicit $f0
86    %1:gprb(s32) = COPY $a1
87    $f0 = COPY %1(s32)
88    RetRA implicit $f0
89
90...
91---
92name:            double_in_gpr
93alignment:       4
94legalized:       true
95regBankSelected: true
96tracksRegLiveness: true
97body:             |
98  bb.1.entry:
99    liveins: $a0, $a2, $a3
100
101    ; FP32-LABEL: name: double_in_gpr
102    ; FP32: liveins: $a0, $a2, $a3
103    ; FP32: [[COPY:%[0-9]+]]:gpr32 = COPY $a2
104    ; FP32: [[COPY1:%[0-9]+]]:gpr32 = COPY $a3
105    ; FP32: [[BuildPairF64_:%[0-9]+]]:afgr64 = BuildPairF64 [[COPY]], [[COPY1]]
106    ; FP32: $d0 = COPY [[BuildPairF64_]]
107    ; FP32: RetRA implicit $d0
108    ; FP64-LABEL: name: double_in_gpr
109    ; FP64: liveins: $a0, $a2, $a3
110    ; FP64: [[COPY:%[0-9]+]]:gpr32 = COPY $a2
111    ; FP64: [[COPY1:%[0-9]+]]:gpr32 = COPY $a3
112    ; FP64: [[BuildPairF64_64_:%[0-9]+]]:fgr64 = BuildPairF64_64 [[COPY]], [[COPY1]]
113    ; FP64: $d0 = COPY [[BuildPairF64_64_]]
114    ; FP64: RetRA implicit $d0
115    %2:gprb(s32) = COPY $a2
116    %3:gprb(s32) = COPY $a3
117    %1:fprb(s64) = G_MERGE_VALUES %2(s32), %3(s32)
118    $d0 = COPY %1(s64)
119    RetRA implicit $d0
120
121...
122---
123name:            call_float_in_fpr
124alignment:       4
125legalized:       true
126regBankSelected: true
127tracksRegLiveness: true
128body:             |
129  bb.1.entry:
130    liveins: $f12, $f14
131
132    ; FP32-LABEL: name: call_float_in_fpr
133    ; FP32: liveins: $f12, $f14
134    ; FP32: [[COPY:%[0-9]+]]:fgr32 = COPY $f12
135    ; FP32: [[COPY1:%[0-9]+]]:fgr32 = COPY $f14
136    ; FP32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
137    ; FP32: $f12 = COPY [[COPY]]
138    ; FP32: $f14 = COPY [[COPY1]]
139    ; FP32: JAL @float_in_fpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $f12, implicit $f14, implicit-def $f0
140    ; FP32: [[COPY2:%[0-9]+]]:fgr32 = COPY $f0
141    ; FP32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
142    ; FP32: $f0 = COPY [[COPY2]]
143    ; FP32: RetRA implicit $f0
144    ; FP64-LABEL: name: call_float_in_fpr
145    ; FP64: liveins: $f12, $f14
146    ; FP64: [[COPY:%[0-9]+]]:fgr32 = COPY $f12
147    ; FP64: [[COPY1:%[0-9]+]]:fgr32 = COPY $f14
148    ; FP64: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
149    ; FP64: $f12 = COPY [[COPY]]
150    ; FP64: $f14 = COPY [[COPY1]]
151    ; FP64: JAL @float_in_fpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $f12, implicit $f14, implicit-def $f0
152    ; FP64: [[COPY2:%[0-9]+]]:fgr32 = COPY $f0
153    ; FP64: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
154    ; FP64: $f0 = COPY [[COPY2]]
155    ; FP64: RetRA implicit $f0
156    %0:fprb(s32) = COPY $f12
157    %1:fprb(s32) = COPY $f14
158    ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
159    $f12 = COPY %0(s32)
160    $f14 = COPY %1(s32)
161    JAL @float_in_fpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $f12, implicit $f14, implicit-def $f0
162    %2:fprb(s32) = COPY $f0
163    ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
164    $f0 = COPY %2(s32)
165    RetRA implicit $f0
166
167...
168---
169name:            call_double_in_fpr
170alignment:       4
171legalized:       true
172regBankSelected: true
173tracksRegLiveness: true
174body:             |
175  bb.1.entry:
176    liveins: $d6, $d7
177
178    ; FP32-LABEL: name: call_double_in_fpr
179    ; FP32: liveins: $d6, $d7
180    ; FP32: [[COPY:%[0-9]+]]:afgr64 = COPY $d6
181    ; FP32: [[COPY1:%[0-9]+]]:afgr64 = COPY $d7
182    ; FP32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
183    ; FP32: $d6 = COPY [[COPY]]
184    ; FP32: $d7 = COPY [[COPY1]]
185    ; FP32: JAL @double_in_fpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $d6, implicit $d7, implicit-def $d0
186    ; FP32: [[COPY2:%[0-9]+]]:afgr64 = COPY $d0
187    ; FP32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
188    ; FP32: $d0 = COPY [[COPY2]]
189    ; FP32: RetRA implicit $d0
190    ; FP64-LABEL: name: call_double_in_fpr
191    ; FP64: liveins: $d6, $d7
192    ; FP64: [[COPY:%[0-9]+]]:fgr64 = COPY $d6
193    ; FP64: [[COPY1:%[0-9]+]]:fgr64 = COPY $d7
194    ; FP64: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
195    ; FP64: $d6 = COPY [[COPY]]
196    ; FP64: $d7 = COPY [[COPY1]]
197    ; FP64: JAL @double_in_fpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $d6, implicit $d7, implicit-def $d0
198    ; FP64: [[COPY2:%[0-9]+]]:fgr64 = COPY $d0
199    ; FP64: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
200    ; FP64: $d0 = COPY [[COPY2]]
201    ; FP64: RetRA implicit $d0
202    %0:fprb(s64) = COPY $d6
203    %1:fprb(s64) = COPY $d7
204    ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
205    $d6 = COPY %0(s64)
206    $d7 = COPY %1(s64)
207    JAL @double_in_fpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $d6, implicit $d7, implicit-def $d0
208    %2:fprb(s64) = COPY $d0
209    ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
210    $d0 = COPY %2(s64)
211    RetRA implicit $d0
212
213...
214---
215name:            call_float_in_gpr
216alignment:       4
217legalized:       true
218regBankSelected: true
219tracksRegLiveness: true
220body:             |
221  bb.1.entry:
222    liveins: $a0, $a1
223
224    ; FP32-LABEL: name: call_float_in_gpr
225    ; FP32: liveins: $a0, $a1
226    ; FP32: [[COPY:%[0-9]+]]:gpr32 = COPY $a0
227    ; FP32: [[COPY1:%[0-9]+]]:gpr32 = COPY $a1
228    ; FP32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
229    ; FP32: $a0 = COPY [[COPY]]
230    ; FP32: $a1 = COPY [[COPY1]]
231    ; FP32: JAL @float_in_gpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit-def $f0
232    ; FP32: [[COPY2:%[0-9]+]]:fgr32 = COPY $f0
233    ; FP32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
234    ; FP32: $f0 = COPY [[COPY2]]
235    ; FP32: RetRA implicit $f0
236    ; FP64-LABEL: name: call_float_in_gpr
237    ; FP64: liveins: $a0, $a1
238    ; FP64: [[COPY:%[0-9]+]]:gpr32 = COPY $a0
239    ; FP64: [[COPY1:%[0-9]+]]:gpr32 = COPY $a1
240    ; FP64: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
241    ; FP64: $a0 = COPY [[COPY]]
242    ; FP64: $a1 = COPY [[COPY1]]
243    ; FP64: JAL @float_in_gpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit-def $f0
244    ; FP64: [[COPY2:%[0-9]+]]:fgr32 = COPY $f0
245    ; FP64: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
246    ; FP64: $f0 = COPY [[COPY2]]
247    ; FP64: RetRA implicit $f0
248    %0:gprb(s32) = COPY $a0
249    %1:gprb(s32) = COPY $a1
250    ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
251    $a0 = COPY %0(s32)
252    $a1 = COPY %1(s32)
253    JAL @float_in_gpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit-def $f0
254    %2:fprb(s32) = COPY $f0
255    ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
256    $f0 = COPY %2(s32)
257    RetRA implicit $f0
258
259...
260---
261name:            call_double_in_gpr
262alignment:       4
263legalized:       true
264regBankSelected: true
265tracksRegLiveness: true
266body:             |
267  bb.1.entry:
268    liveins: $a0, $a2, $a3
269
270    ; FP32-LABEL: name: call_double_in_gpr
271    ; FP32: liveins: $a0, $a2, $a3
272    ; FP32: [[COPY:%[0-9]+]]:gpr32 = COPY $a0
273    ; FP32: [[COPY1:%[0-9]+]]:gpr32 = COPY $a2
274    ; FP32: [[COPY2:%[0-9]+]]:gpr32 = COPY $a3
275    ; FP32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
276    ; FP32: $a0 = COPY [[COPY]]
277    ; FP32: $a2 = COPY [[COPY1]]
278    ; FP32: $a3 = COPY [[COPY2]]
279    ; FP32: JAL @double_in_gpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit-def $d0
280    ; FP32: [[COPY3:%[0-9]+]]:afgr64 = COPY $d0
281    ; FP32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
282    ; FP32: $d0 = COPY [[COPY3]]
283    ; FP32: RetRA implicit $d0
284    ; FP64-LABEL: name: call_double_in_gpr
285    ; FP64: liveins: $a0, $a2, $a3
286    ; FP64: [[COPY:%[0-9]+]]:gpr32 = COPY $a0
287    ; FP64: [[COPY1:%[0-9]+]]:gpr32 = COPY $a2
288    ; FP64: [[COPY2:%[0-9]+]]:gpr32 = COPY $a3
289    ; FP64: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
290    ; FP64: $a0 = COPY [[COPY]]
291    ; FP64: $a2 = COPY [[COPY1]]
292    ; FP64: $a3 = COPY [[COPY2]]
293    ; FP64: JAL @double_in_gpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit-def $d0
294    ; FP64: [[COPY3:%[0-9]+]]:fgr64 = COPY $d0
295    ; FP64: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
296    ; FP64: $d0 = COPY [[COPY3]]
297    ; FP64: RetRA implicit $d0
298    %0:gprb(s32) = COPY $a0
299    %2:gprb(s32) = COPY $a2
300    %3:gprb(s32) = COPY $a3
301    ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp
302    $a0 = COPY %0(s32)
303    $a2 = COPY %2(s32)
304    $a3 = COPY %3(s32)
305    JAL @double_in_gpr, csr_o32, implicit-def $ra, implicit-def $sp, implicit $a0, implicit-def $d0
306    %4:fprb(s64) = COPY $d0
307    ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp
308    $d0 = COPY %4(s64)
309    RetRA implicit $d0
310
311...
312