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