Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / GlobalISel / irtranslator / calling-conv-ilp32f-ilp32d-common.ll
blob31c759adefc5344ef43ba7fa846ee1bf7c07532e
1 ; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 3
2 ; RUN: llc -mtriple=riscv32 -mattr=+f -target-abi ilp32f \
3 ; RUN:    -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \
4 ; RUN:   | FileCheck -check-prefix=RV32-ILP32FD %s
5 ; RUN: llc -mtriple=riscv32 -mattr=+d -target-abi ilp32d \
6 ; RUN:    -global-isel -stop-after=irtranslator -verify-machineinstrs < %s \
7 ; RUN:   | FileCheck -check-prefix=RV32-ILP32FD %s
9 ; This file contains tests that should have identical output for the ilp32f
10 ; and ilp32d ABIs.
12 define i32 @callee_float_in_fpr(i32 %a, float %b) nounwind {
13   ; RV32-ILP32FD-LABEL: name: callee_float_in_fpr
14   ; RV32-ILP32FD: bb.1 (%ir-block.0):
15   ; RV32-ILP32FD-NEXT:   liveins: $x10, $f10_f
16   ; RV32-ILP32FD-NEXT: {{  $}}
17   ; RV32-ILP32FD-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
18   ; RV32-ILP32FD-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $f10_f
19   ; RV32-ILP32FD-NEXT:   [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY1]](s32)
20   ; RV32-ILP32FD-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[COPY]], [[FPTOSI]]
21   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[ADD]](s32)
22   ; RV32-ILP32FD-NEXT:   PseudoRET implicit $x10
23   %b_fptosi = fptosi float %b to i32
24   %1 = add i32 %a, %b_fptosi
25   ret i32 %1
28 define i32 @caller_float_in_fpr() nounwind {
29   ; RV32-ILP32FD-LABEL: name: caller_float_in_fpr
30   ; RV32-ILP32FD: bb.1 (%ir-block.0):
31   ; RV32-ILP32FD-NEXT:   [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
32   ; RV32-ILP32FD-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_FCONSTANT float 2.000000e+00
33   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[C]](s32)
34   ; RV32-ILP32FD-NEXT:   $f10_f = COPY [[C1]](s32)
35   ; RV32-ILP32FD-NEXT:   PseudoCALL target-flags(riscv-call) @callee_float_in_fpr, implicit-def $x1, implicit $x10, implicit $f10_f, implicit-def $x10
36   ; RV32-ILP32FD-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
37   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[COPY]](s32)
38   ; RV32-ILP32FD-NEXT:   PseudoRET implicit $x10
39   %1 = call i32 @callee_float_in_fpr(i32 1, float 2.0)
40   ret i32 %1
43 ; Must keep define on a single line due to an update_llc_test_checks.py limitation
44 define i32 @callee_float_in_fpr_exhausted_gprs(i64 %a, i64 %b, i64 %c, i64 %d, i32 %e, float %f) nounwind {
45   ; RV32-ILP32FD-LABEL: name: callee_float_in_fpr_exhausted_gprs
46   ; RV32-ILP32FD: bb.1 (%ir-block.0):
47   ; RV32-ILP32FD-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17, $f10_f
48   ; RV32-ILP32FD-NEXT: {{  $}}
49   ; RV32-ILP32FD-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
50   ; RV32-ILP32FD-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
51   ; RV32-ILP32FD-NEXT:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
52   ; RV32-ILP32FD-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
53   ; RV32-ILP32FD-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $x13
54   ; RV32-ILP32FD-NEXT:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
55   ; RV32-ILP32FD-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $x14
56   ; RV32-ILP32FD-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $x15
57   ; RV32-ILP32FD-NEXT:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY5]](s32)
58   ; RV32-ILP32FD-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $x16
59   ; RV32-ILP32FD-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $x17
60   ; RV32-ILP32FD-NEXT:   [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)
61   ; RV32-ILP32FD-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
62   ; RV32-ILP32FD-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %fixed-stack.0, align 16)
63   ; RV32-ILP32FD-NEXT:   [[COPY8:%[0-9]+]]:_(s32) = COPY $f10_f
64   ; RV32-ILP32FD-NEXT:   [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY8]](s32)
65   ; RV32-ILP32FD-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[LOAD]], [[FPTOSI]]
66   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[ADD]](s32)
67   ; RV32-ILP32FD-NEXT:   PseudoRET implicit $x10
68   %f_fptosi = fptosi float %f to i32
69   %1 = add i32 %e, %f_fptosi
70   ret i32 %1
73 define i32 @caller_float_in_fpr_exhausted_gprs() nounwind {
74   ; RV32-ILP32FD-LABEL: name: caller_float_in_fpr_exhausted_gprs
75   ; RV32-ILP32FD: bb.1 (%ir-block.0):
76   ; RV32-ILP32FD-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
77   ; RV32-ILP32FD-NEXT:   [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
78   ; RV32-ILP32FD-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 3
79   ; RV32-ILP32FD-NEXT:   [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
80   ; RV32-ILP32FD-NEXT:   [[C4:%[0-9]+]]:_(s32) = G_CONSTANT i32 5
81   ; RV32-ILP32FD-NEXT:   [[C5:%[0-9]+]]:_(s32) = G_FCONSTANT float 6.000000e+00
82   ; RV32-ILP32FD-NEXT:   [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C]](s64)
83   ; RV32-ILP32FD-NEXT:   [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C1]](s64)
84   ; RV32-ILP32FD-NEXT:   [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C2]](s64)
85   ; RV32-ILP32FD-NEXT:   [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C3]](s64)
86   ; RV32-ILP32FD-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x2
87   ; RV32-ILP32FD-NEXT:   [[C6:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
88   ; RV32-ILP32FD-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C6]](s32)
89   ; RV32-ILP32FD-NEXT:   G_STORE [[C4]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack, align 16)
90   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[UV]](s32)
91   ; RV32-ILP32FD-NEXT:   $x11 = COPY [[UV1]](s32)
92   ; RV32-ILP32FD-NEXT:   $x12 = COPY [[UV2]](s32)
93   ; RV32-ILP32FD-NEXT:   $x13 = COPY [[UV3]](s32)
94   ; RV32-ILP32FD-NEXT:   $x14 = COPY [[UV4]](s32)
95   ; RV32-ILP32FD-NEXT:   $x15 = COPY [[UV5]](s32)
96   ; RV32-ILP32FD-NEXT:   $x16 = COPY [[UV6]](s32)
97   ; RV32-ILP32FD-NEXT:   $x17 = COPY [[UV7]](s32)
98   ; RV32-ILP32FD-NEXT:   $f10_f = COPY [[C5]](s32)
99   ; RV32-ILP32FD-NEXT:   PseudoCALL target-flags(riscv-call) @callee_float_in_fpr_exhausted_gprs, implicit-def $x1, implicit $x10, implicit $x11, implicit $x12, implicit $x13, implicit $x14, implicit $x15, implicit $x16, implicit $x17, implicit $f10_f, implicit-def $x10
100   ; RV32-ILP32FD-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x10
101   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[COPY1]](s32)
102   ; RV32-ILP32FD-NEXT:   PseudoRET implicit $x10
103   %1 = call i32 @callee_float_in_fpr_exhausted_gprs(
104       i64 1, i64 2, i64 3, i64 4, i32 5, float 6.0)
105   ret i32 %1
108 ; Must keep define on a single line due to an update_llc_test_checks.py limitation
109 define i32 @callee_float_in_gpr_exhausted_fprs(float %a, float %b, float %c, float %d, float %e, float %f, float %g, float %h, float %i) nounwind {
110   ; RV32-ILP32FD-LABEL: name: callee_float_in_gpr_exhausted_fprs
111   ; RV32-ILP32FD: bb.1 (%ir-block.0):
112   ; RV32-ILP32FD-NEXT:   liveins: $x10, $f10_f, $f11_f, $f12_f, $f13_f, $f14_f, $f15_f, $f16_f, $f17_f
113   ; RV32-ILP32FD-NEXT: {{  $}}
114   ; RV32-ILP32FD-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f
115   ; RV32-ILP32FD-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $f11_f
116   ; RV32-ILP32FD-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $f12_f
117   ; RV32-ILP32FD-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $f13_f
118   ; RV32-ILP32FD-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $f14_f
119   ; RV32-ILP32FD-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $f15_f
120   ; RV32-ILP32FD-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $f16_f
121   ; RV32-ILP32FD-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $f17_f
122   ; RV32-ILP32FD-NEXT:   [[COPY8:%[0-9]+]]:_(s32) = COPY $x10
123   ; RV32-ILP32FD-NEXT:   [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY7]](s32)
124   ; RV32-ILP32FD-NEXT:   [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY8]](s32)
125   ; RV32-ILP32FD-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[FPTOSI]], [[FPTOSI1]]
126   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[ADD]](s32)
127   ; RV32-ILP32FD-NEXT:   PseudoRET implicit $x10
128   %h_fptosi = fptosi float %h to i32
129   %i_fptosi = fptosi float %i to i32
130   %1 = add i32 %h_fptosi, %i_fptosi
131   ret i32 %1
134 define i32 @caller_float_in_gpr_exhausted_fprs() nounwind {
135   ; RV32-ILP32FD-LABEL: name: caller_float_in_gpr_exhausted_fprs
136   ; RV32-ILP32FD: bb.1 (%ir-block.0):
137   ; RV32-ILP32FD-NEXT:   [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.000000e+00
138   ; RV32-ILP32FD-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_FCONSTANT float 2.000000e+00
139   ; RV32-ILP32FD-NEXT:   [[C2:%[0-9]+]]:_(s32) = G_FCONSTANT float 3.000000e+00
140   ; RV32-ILP32FD-NEXT:   [[C3:%[0-9]+]]:_(s32) = G_FCONSTANT float 4.000000e+00
141   ; RV32-ILP32FD-NEXT:   [[C4:%[0-9]+]]:_(s32) = G_FCONSTANT float 5.000000e+00
142   ; RV32-ILP32FD-NEXT:   [[C5:%[0-9]+]]:_(s32) = G_FCONSTANT float 6.000000e+00
143   ; RV32-ILP32FD-NEXT:   [[C6:%[0-9]+]]:_(s32) = G_FCONSTANT float 7.000000e+00
144   ; RV32-ILP32FD-NEXT:   [[C7:%[0-9]+]]:_(s32) = G_FCONSTANT float 8.000000e+00
145   ; RV32-ILP32FD-NEXT:   [[C8:%[0-9]+]]:_(s32) = G_FCONSTANT float 9.000000e+00
146   ; RV32-ILP32FD-NEXT:   $f10_f = COPY [[C]](s32)
147   ; RV32-ILP32FD-NEXT:   $f11_f = COPY [[C1]](s32)
148   ; RV32-ILP32FD-NEXT:   $f12_f = COPY [[C2]](s32)
149   ; RV32-ILP32FD-NEXT:   $f13_f = COPY [[C3]](s32)
150   ; RV32-ILP32FD-NEXT:   $f14_f = COPY [[C4]](s32)
151   ; RV32-ILP32FD-NEXT:   $f15_f = COPY [[C5]](s32)
152   ; RV32-ILP32FD-NEXT:   $f16_f = COPY [[C6]](s32)
153   ; RV32-ILP32FD-NEXT:   $f17_f = COPY [[C7]](s32)
154   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[C8]](s32)
155   ; RV32-ILP32FD-NEXT:   PseudoCALL target-flags(riscv-call) @callee_float_in_gpr_exhausted_fprs, implicit-def $x1, implicit $f10_f, implicit $f11_f, implicit $f12_f, implicit $f13_f, implicit $f14_f, implicit $f15_f, implicit $f16_f, implicit $f17_f, implicit $x10, implicit-def $x10
156   ; RV32-ILP32FD-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
157   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[COPY]](s32)
158   ; RV32-ILP32FD-NEXT:   PseudoRET implicit $x10
159   %1 = call i32 @callee_float_in_gpr_exhausted_fprs(
160       float 1.0, float 2.0, float 3.0, float 4.0, float 5.0, float 6.0,
161       float 7.0, float 8.0, float 9.0)
162   ret i32 %1
165 ; Must keep define on a single line due to an update_llc_test_checks.py limitation
166 define i32 @callee_float_on_stack_exhausted_gprs_fprs(i64 %a, float %b, i64 %c, float %d, i64 %e, float %f, i64 %g, float %h, float %i, float %j, float %k, float %l, float %m) nounwind {
167   ; RV32-ILP32FD-LABEL: name: callee_float_on_stack_exhausted_gprs_fprs
168   ; RV32-ILP32FD: bb.1 (%ir-block.0):
169   ; RV32-ILP32FD-NEXT:   liveins: $x10, $x11, $x12, $x13, $x14, $x15, $x16, $x17, $f10_f, $f11_f, $f12_f, $f13_f, $f14_f, $f15_f, $f16_f, $f17_f
170   ; RV32-ILP32FD-NEXT: {{  $}}
171   ; RV32-ILP32FD-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $x10
172   ; RV32-ILP32FD-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
173   ; RV32-ILP32FD-NEXT:   [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
174   ; RV32-ILP32FD-NEXT:   [[COPY2:%[0-9]+]]:_(s32) = COPY $f10_f
175   ; RV32-ILP32FD-NEXT:   [[COPY3:%[0-9]+]]:_(s32) = COPY $x12
176   ; RV32-ILP32FD-NEXT:   [[COPY4:%[0-9]+]]:_(s32) = COPY $x13
177   ; RV32-ILP32FD-NEXT:   [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY3]](s32), [[COPY4]](s32)
178   ; RV32-ILP32FD-NEXT:   [[COPY5:%[0-9]+]]:_(s32) = COPY $f11_f
179   ; RV32-ILP32FD-NEXT:   [[COPY6:%[0-9]+]]:_(s32) = COPY $x14
180   ; RV32-ILP32FD-NEXT:   [[COPY7:%[0-9]+]]:_(s32) = COPY $x15
181   ; RV32-ILP32FD-NEXT:   [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY6]](s32), [[COPY7]](s32)
182   ; RV32-ILP32FD-NEXT:   [[COPY8:%[0-9]+]]:_(s32) = COPY $f12_f
183   ; RV32-ILP32FD-NEXT:   [[COPY9:%[0-9]+]]:_(s32) = COPY $x16
184   ; RV32-ILP32FD-NEXT:   [[COPY10:%[0-9]+]]:_(s32) = COPY $x17
185   ; RV32-ILP32FD-NEXT:   [[MV3:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY9]](s32), [[COPY10]](s32)
186   ; RV32-ILP32FD-NEXT:   [[COPY11:%[0-9]+]]:_(s32) = COPY $f13_f
187   ; RV32-ILP32FD-NEXT:   [[COPY12:%[0-9]+]]:_(s32) = COPY $f14_f
188   ; RV32-ILP32FD-NEXT:   [[COPY13:%[0-9]+]]:_(s32) = COPY $f15_f
189   ; RV32-ILP32FD-NEXT:   [[COPY14:%[0-9]+]]:_(s32) = COPY $f16_f
190   ; RV32-ILP32FD-NEXT:   [[COPY15:%[0-9]+]]:_(s32) = COPY $f17_f
191   ; RV32-ILP32FD-NEXT:   [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
192   ; RV32-ILP32FD-NEXT:   [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (load (s32) from %fixed-stack.0, align 16)
193   ; RV32-ILP32FD-NEXT:   [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[MV3]](s64)
194   ; RV32-ILP32FD-NEXT:   [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[LOAD]](s32)
195   ; RV32-ILP32FD-NEXT:   [[ADD:%[0-9]+]]:_(s32) = G_ADD [[TRUNC]], [[FPTOSI]]
196   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[ADD]](s32)
197   ; RV32-ILP32FD-NEXT:   PseudoRET implicit $x10
198   %g_trunc = trunc i64 %g to i32
199   %m_fptosi = fptosi float %m to i32
200   %1 = add i32 %g_trunc, %m_fptosi
201   ret i32 %1
204 define i32 @caller_float_on_stack_exhausted_gprs_fprs() nounwind {
205   ; RV32-ILP32FD-LABEL: name: caller_float_on_stack_exhausted_gprs_fprs
206   ; RV32-ILP32FD: bb.1 (%ir-block.0):
207   ; RV32-ILP32FD-NEXT:   [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
208   ; RV32-ILP32FD-NEXT:   [[C1:%[0-9]+]]:_(s32) = G_FCONSTANT float 2.000000e+00
209   ; RV32-ILP32FD-NEXT:   [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 3
210   ; RV32-ILP32FD-NEXT:   [[C3:%[0-9]+]]:_(s32) = G_FCONSTANT float 4.000000e+00
211   ; RV32-ILP32FD-NEXT:   [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 5
212   ; RV32-ILP32FD-NEXT:   [[C5:%[0-9]+]]:_(s32) = G_FCONSTANT float 6.000000e+00
213   ; RV32-ILP32FD-NEXT:   [[C6:%[0-9]+]]:_(s64) = G_CONSTANT i64 7
214   ; RV32-ILP32FD-NEXT:   [[C7:%[0-9]+]]:_(s32) = G_FCONSTANT float 8.000000e+00
215   ; RV32-ILP32FD-NEXT:   [[C8:%[0-9]+]]:_(s32) = G_FCONSTANT float 9.000000e+00
216   ; RV32-ILP32FD-NEXT:   [[C9:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.000000e+01
217   ; RV32-ILP32FD-NEXT:   [[C10:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.100000e+01
218   ; RV32-ILP32FD-NEXT:   [[C11:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.200000e+01
219   ; RV32-ILP32FD-NEXT:   [[C12:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.300000e+01
220   ; RV32-ILP32FD-NEXT:   [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C]](s64)
221   ; RV32-ILP32FD-NEXT:   [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C2]](s64)
222   ; RV32-ILP32FD-NEXT:   [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C4]](s64)
223   ; RV32-ILP32FD-NEXT:   [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C6]](s64)
224   ; RV32-ILP32FD-NEXT:   [[COPY:%[0-9]+]]:_(p0) = COPY $x2
225   ; RV32-ILP32FD-NEXT:   [[C13:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
226   ; RV32-ILP32FD-NEXT:   [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C13]](s32)
227   ; RV32-ILP32FD-NEXT:   G_STORE [[C12]](s32), [[PTR_ADD]](p0) :: (store (s32) into stack, align 16)
228   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[UV]](s32)
229   ; RV32-ILP32FD-NEXT:   $x11 = COPY [[UV1]](s32)
230   ; RV32-ILP32FD-NEXT:   $f10_f = COPY [[C1]](s32)
231   ; RV32-ILP32FD-NEXT:   $x12 = COPY [[UV2]](s32)
232   ; RV32-ILP32FD-NEXT:   $x13 = COPY [[UV3]](s32)
233   ; RV32-ILP32FD-NEXT:   $f11_f = COPY [[C3]](s32)
234   ; RV32-ILP32FD-NEXT:   $x14 = COPY [[UV4]](s32)
235   ; RV32-ILP32FD-NEXT:   $x15 = COPY [[UV5]](s32)
236   ; RV32-ILP32FD-NEXT:   $f12_f = COPY [[C5]](s32)
237   ; RV32-ILP32FD-NEXT:   $x16 = COPY [[UV6]](s32)
238   ; RV32-ILP32FD-NEXT:   $x17 = COPY [[UV7]](s32)
239   ; RV32-ILP32FD-NEXT:   $f13_f = COPY [[C7]](s32)
240   ; RV32-ILP32FD-NEXT:   $f14_f = COPY [[C8]](s32)
241   ; RV32-ILP32FD-NEXT:   $f15_f = COPY [[C9]](s32)
242   ; RV32-ILP32FD-NEXT:   $f16_f = COPY [[C10]](s32)
243   ; RV32-ILP32FD-NEXT:   $f17_f = COPY [[C11]](s32)
244   ; RV32-ILP32FD-NEXT:   PseudoCALL target-flags(riscv-call) @callee_float_on_stack_exhausted_gprs_fprs, implicit-def $x1, implicit $x10, implicit $x11, implicit $f10_f, implicit $x12, implicit $x13, implicit $f11_f, implicit $x14, implicit $x15, implicit $f12_f, implicit $x16, implicit $x17, implicit $f13_f, implicit $f14_f, implicit $f15_f, implicit $f16_f, implicit $f17_f, implicit-def $x10
245   ; RV32-ILP32FD-NEXT:   [[COPY1:%[0-9]+]]:_(s32) = COPY $x10
246   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[COPY1]](s32)
247   ; RV32-ILP32FD-NEXT:   PseudoRET implicit $x10
248   %1 = call i32 @callee_float_on_stack_exhausted_gprs_fprs(
249       i64 1, float 2.0, i64 3, float 4.0, i64 5, float 6.0, i64 7, float 8.0,
250       float 9.0, float 10.0, float 11.0, float 12.0, float 13.0)
251   ret i32 %1
254 define float @callee_float_ret() nounwind {
255   ; RV32-ILP32FD-LABEL: name: callee_float_ret
256   ; RV32-ILP32FD: bb.1 (%ir-block.0):
257   ; RV32-ILP32FD-NEXT:   [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 1.000000e+00
258   ; RV32-ILP32FD-NEXT:   $f10_f = COPY [[C]](s32)
259   ; RV32-ILP32FD-NEXT:   PseudoRET implicit $f10_f
260   ret float 1.0
263 define i32 @caller_float_ret() nounwind {
264   ; RV32-ILP32FD-LABEL: name: caller_float_ret
265   ; RV32-ILP32FD: bb.1 (%ir-block.0):
266   ; RV32-ILP32FD-NEXT:   PseudoCALL target-flags(riscv-call) @callee_float_ret, implicit-def $x1, implicit-def $f10_f
267   ; RV32-ILP32FD-NEXT:   [[COPY:%[0-9]+]]:_(s32) = COPY $f10_f
268   ; RV32-ILP32FD-NEXT:   $x10 = COPY [[COPY]](s32)
269   ; RV32-ILP32FD-NEXT:   PseudoRET implicit $x10
270   %1 = call float @callee_float_ret()
271   %2 = bitcast float %1 to i32
272   ret i32 %2