[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / RISCV / llvm.frexp.ll
blobf8a8cfc60f14d69f024a2adc1ca133df20e6bdca
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -mtriple=riscv32 -mattr=+d \
3 ; RUN:   -verify-machineinstrs -target-abi=ilp32d < %s \
4 ; RUN:   | FileCheck -check-prefix=RV32IFD %s
5 ; RUN: llc -mtriple=riscv64 -mattr=+d \
6 ; RUN:   -verify-machineinstrs -target-abi=lp64d < %s \
7 ; RUN:   | FileCheck -check-prefix=RV64IFD %s
8 ; RUN: llc -mtriple=riscv32 -mattr=+zdinx \
9 ; RUN:   -verify-machineinstrs -target-abi=ilp32 < %s \
10 ; RUN:   | FileCheck -check-prefix=RV32IZFINXZDINX %s
11 ; RUN: llc -mtriple=riscv64 -mattr=+zdinx \
12 ; RUN:   -verify-machineinstrs -target-abi=lp64 < %s \
13 ; RUN:   | FileCheck -check-prefix=RV64IZFINXZDINX %s
14 ; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
15 ; RUN:   | FileCheck -check-prefix=RV32I %s
16 ; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
17 ; RUN:   | FileCheck -check-prefix=RV64I %s
19 ; TODO: FIXMEs are copied blindly across from the X86 version of this test.
21 ; FIXME
22 ; define { half, i32 } @test_frexp_f16_i32(half %a) nounwind {
23 ;   %result = call { half, i32 } @llvm.frexp.f16.i32(half %a)
24 ;   ret { half, i32 } %result
25 ; }
27 ; define half @test_frexp_f16_i32_only_use_fract(half %a) nounwind {
28 ;   %result = call { half, i32 } @llvm.frexp.f16.i32(half %a)
29 ;   %result.0 = extractvalue { half, i32 } %result, 0
30 ;   ret half %result.0
31 ; }
33 ; define i32 @test_frexp_f16_i32_only_use_exp(half %a) nounwind {
34 ;   %result = call { half, i32 } @llvm.frexp.f16.i32(half %a)
35 ;   %result.0 = extractvalue { half, i32 } %result, 1
36 ;   ret i32 %result.0
37 ; }
39 ; define { <2 x half>, <2 x i32> } @test_frexp_v2f16_v2i32(<2 x half> %a) nounwind {
40 ;   %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)
41 ;   ret { <2 x half>, <2 x i32> } %result
42 ; }
44 ; define <2 x half> @test_frexp_v2f16_v2i32_only_use_fract(<2 x half> %a) nounwind {
45 ;   %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)
46 ;   %result.0 = extractvalue { <2 x half>, <2 x i32> } %result, 0
47 ;   ret <2 x half> %result.0
48 ; }
50 ; define <2 x i32> @test_frexp_v2f16_v2i32_only_use_exp(<2 x half> %a) nounwind {
51 ;   %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)
52 ;   %result.1 = extractvalue { <2 x half>, <2 x i32> } %result, 1
53 ;   ret <2 x i32> %result.1
54 ; }
56 define { float, i32 } @test_frexp_f32_i32(float %a) nounwind {
57 ; RV32IFD-LABEL: test_frexp_f32_i32:
58 ; RV32IFD:       # %bb.0:
59 ; RV32IFD-NEXT:    addi sp, sp, -16
60 ; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
61 ; RV32IFD-NEXT:    addi a0, sp, 8
62 ; RV32IFD-NEXT:    call frexpf@plt
63 ; RV32IFD-NEXT:    lw a0, 8(sp)
64 ; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
65 ; RV32IFD-NEXT:    addi sp, sp, 16
66 ; RV32IFD-NEXT:    ret
68 ; RV64IFD-LABEL: test_frexp_f32_i32:
69 ; RV64IFD:       # %bb.0:
70 ; RV64IFD-NEXT:    addi sp, sp, -16
71 ; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
72 ; RV64IFD-NEXT:    mv a0, sp
73 ; RV64IFD-NEXT:    call frexpf@plt
74 ; RV64IFD-NEXT:    ld a0, 0(sp)
75 ; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
76 ; RV64IFD-NEXT:    addi sp, sp, 16
77 ; RV64IFD-NEXT:    ret
79 ; RV32IZFINXZDINX-LABEL: test_frexp_f32_i32:
80 ; RV32IZFINXZDINX:       # %bb.0:
81 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
82 ; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
83 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
84 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
85 ; RV32IZFINXZDINX-NEXT:    lw a1, 8(sp)
86 ; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
87 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
88 ; RV32IZFINXZDINX-NEXT:    ret
90 ; RV64IZFINXZDINX-LABEL: test_frexp_f32_i32:
91 ; RV64IZFINXZDINX:       # %bb.0:
92 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
93 ; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
94 ; RV64IZFINXZDINX-NEXT:    mv a1, sp
95 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
96 ; RV64IZFINXZDINX-NEXT:    ld a1, 0(sp)
97 ; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
98 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
99 ; RV64IZFINXZDINX-NEXT:    ret
101 ; RV32I-LABEL: test_frexp_f32_i32:
102 ; RV32I:       # %bb.0:
103 ; RV32I-NEXT:    addi sp, sp, -16
104 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
105 ; RV32I-NEXT:    addi a1, sp, 8
106 ; RV32I-NEXT:    call frexpf@plt
107 ; RV32I-NEXT:    lw a1, 8(sp)
108 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
109 ; RV32I-NEXT:    addi sp, sp, 16
110 ; RV32I-NEXT:    ret
112 ; RV64I-LABEL: test_frexp_f32_i32:
113 ; RV64I:       # %bb.0:
114 ; RV64I-NEXT:    addi sp, sp, -16
115 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
116 ; RV64I-NEXT:    addi a1, sp, 4
117 ; RV64I-NEXT:    call frexpf@plt
118 ; RV64I-NEXT:    lw a1, 4(sp)
119 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
120 ; RV64I-NEXT:    addi sp, sp, 16
121 ; RV64I-NEXT:    ret
122   %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)
123   ret { float, i32 } %result
126 define float @test_frexp_f32_i32_only_use_fract(float %a) nounwind {
127 ; RV32IFD-LABEL: test_frexp_f32_i32_only_use_fract:
128 ; RV32IFD:       # %bb.0:
129 ; RV32IFD-NEXT:    addi sp, sp, -16
130 ; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
131 ; RV32IFD-NEXT:    addi a0, sp, 8
132 ; RV32IFD-NEXT:    call frexpf@plt
133 ; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
134 ; RV32IFD-NEXT:    addi sp, sp, 16
135 ; RV32IFD-NEXT:    ret
137 ; RV64IFD-LABEL: test_frexp_f32_i32_only_use_fract:
138 ; RV64IFD:       # %bb.0:
139 ; RV64IFD-NEXT:    addi sp, sp, -16
140 ; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
141 ; RV64IFD-NEXT:    mv a0, sp
142 ; RV64IFD-NEXT:    call frexpf@plt
143 ; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
144 ; RV64IFD-NEXT:    addi sp, sp, 16
145 ; RV64IFD-NEXT:    ret
147 ; RV32IZFINXZDINX-LABEL: test_frexp_f32_i32_only_use_fract:
148 ; RV32IZFINXZDINX:       # %bb.0:
149 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
150 ; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
151 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
152 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
153 ; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
154 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
155 ; RV32IZFINXZDINX-NEXT:    ret
157 ; RV64IZFINXZDINX-LABEL: test_frexp_f32_i32_only_use_fract:
158 ; RV64IZFINXZDINX:       # %bb.0:
159 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
160 ; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
161 ; RV64IZFINXZDINX-NEXT:    mv a1, sp
162 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
163 ; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
164 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
165 ; RV64IZFINXZDINX-NEXT:    ret
167 ; RV32I-LABEL: test_frexp_f32_i32_only_use_fract:
168 ; RV32I:       # %bb.0:
169 ; RV32I-NEXT:    addi sp, sp, -16
170 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
171 ; RV32I-NEXT:    addi a1, sp, 8
172 ; RV32I-NEXT:    call frexpf@plt
173 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
174 ; RV32I-NEXT:    addi sp, sp, 16
175 ; RV32I-NEXT:    ret
177 ; RV64I-LABEL: test_frexp_f32_i32_only_use_fract:
178 ; RV64I:       # %bb.0:
179 ; RV64I-NEXT:    addi sp, sp, -16
180 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
181 ; RV64I-NEXT:    addi a1, sp, 4
182 ; RV64I-NEXT:    call frexpf@plt
183 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
184 ; RV64I-NEXT:    addi sp, sp, 16
185 ; RV64I-NEXT:    ret
186   %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)
187   %result.0 = extractvalue { float, i32 } %result, 0
188   ret float %result.0
191 define i32 @test_frexp_f32_i32_only_use_exp(float %a) nounwind {
192 ; RV32IFD-LABEL: test_frexp_f32_i32_only_use_exp:
193 ; RV32IFD:       # %bb.0:
194 ; RV32IFD-NEXT:    addi sp, sp, -16
195 ; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
196 ; RV32IFD-NEXT:    addi a0, sp, 8
197 ; RV32IFD-NEXT:    call frexpf@plt
198 ; RV32IFD-NEXT:    lw a0, 8(sp)
199 ; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
200 ; RV32IFD-NEXT:    addi sp, sp, 16
201 ; RV32IFD-NEXT:    ret
203 ; RV64IFD-LABEL: test_frexp_f32_i32_only_use_exp:
204 ; RV64IFD:       # %bb.0:
205 ; RV64IFD-NEXT:    addi sp, sp, -16
206 ; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
207 ; RV64IFD-NEXT:    mv a0, sp
208 ; RV64IFD-NEXT:    call frexpf@plt
209 ; RV64IFD-NEXT:    ld a0, 0(sp)
210 ; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
211 ; RV64IFD-NEXT:    addi sp, sp, 16
212 ; RV64IFD-NEXT:    ret
214 ; RV32IZFINXZDINX-LABEL: test_frexp_f32_i32_only_use_exp:
215 ; RV32IZFINXZDINX:       # %bb.0:
216 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
217 ; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
218 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
219 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
220 ; RV32IZFINXZDINX-NEXT:    lw a0, 8(sp)
221 ; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
222 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
223 ; RV32IZFINXZDINX-NEXT:    ret
225 ; RV64IZFINXZDINX-LABEL: test_frexp_f32_i32_only_use_exp:
226 ; RV64IZFINXZDINX:       # %bb.0:
227 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
228 ; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
229 ; RV64IZFINXZDINX-NEXT:    mv a1, sp
230 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
231 ; RV64IZFINXZDINX-NEXT:    ld a0, 0(sp)
232 ; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
233 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
234 ; RV64IZFINXZDINX-NEXT:    ret
236 ; RV32I-LABEL: test_frexp_f32_i32_only_use_exp:
237 ; RV32I:       # %bb.0:
238 ; RV32I-NEXT:    addi sp, sp, -16
239 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
240 ; RV32I-NEXT:    addi a1, sp, 8
241 ; RV32I-NEXT:    call frexpf@plt
242 ; RV32I-NEXT:    lw a0, 8(sp)
243 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
244 ; RV32I-NEXT:    addi sp, sp, 16
245 ; RV32I-NEXT:    ret
247 ; RV64I-LABEL: test_frexp_f32_i32_only_use_exp:
248 ; RV64I:       # %bb.0:
249 ; RV64I-NEXT:    addi sp, sp, -16
250 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
251 ; RV64I-NEXT:    addi a1, sp, 4
252 ; RV64I-NEXT:    call frexpf@plt
253 ; RV64I-NEXT:    lw a0, 4(sp)
254 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
255 ; RV64I-NEXT:    addi sp, sp, 16
256 ; RV64I-NEXT:    ret
257   %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)
258   %result.0 = extractvalue { float, i32 } %result, 1
259   ret i32 %result.0
262 ; FIXME: Widen vector result
263 ; define { <2 x float>, <2 x i32> } @test_frexp_v2f32_v2i32(<2 x float> %a) nounwind {
264 ;   %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)
265 ;   ret { <2 x float>, <2 x i32> } %result
266 ; }
268 ; define <2 x float> @test_frexp_v2f32_v2i32_only_use_fract(<2 x float> %a) nounwind {
269 ;   %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)
270 ;   %result.0 = extractvalue { <2 x float>, <2 x i32> } %result, 0
271 ;   ret <2 x float> %result.0
272 ; }
274 ; define <2 x i32> @test_frexp_v2f32_v2i32_only_use_exp(<2 x float> %a) nounwind {
275 ;   %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)
276 ;   %result.1 = extractvalue { <2 x float>, <2 x i32> } %result, 1
277 ;   ret <2 x i32> %result.1
278 ; }
280 define { <4 x float>, <4 x i32> } @test_frexp_v4f32_v4i32(<4 x float> %a) nounwind {
281 ; RV32IFD-LABEL: test_frexp_v4f32_v4i32:
282 ; RV32IFD:       # %bb.0:
283 ; RV32IFD-NEXT:    addi sp, sp, -64
284 ; RV32IFD-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
285 ; RV32IFD-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill
286 ; RV32IFD-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill
287 ; RV32IFD-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill
288 ; RV32IFD-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill
289 ; RV32IFD-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill
290 ; RV32IFD-NEXT:    fmv.s fs0, fa3
291 ; RV32IFD-NEXT:    fmv.s fs1, fa2
292 ; RV32IFD-NEXT:    fmv.s fs2, fa1
293 ; RV32IFD-NEXT:    mv s0, a0
294 ; RV32IFD-NEXT:    addi a0, sp, 8
295 ; RV32IFD-NEXT:    call frexpf@plt
296 ; RV32IFD-NEXT:    fmv.s fs3, fa0
297 ; RV32IFD-NEXT:    addi a0, sp, 12
298 ; RV32IFD-NEXT:    fmv.s fa0, fs2
299 ; RV32IFD-NEXT:    call frexpf@plt
300 ; RV32IFD-NEXT:    fmv.s fs2, fa0
301 ; RV32IFD-NEXT:    addi a0, sp, 16
302 ; RV32IFD-NEXT:    fmv.s fa0, fs1
303 ; RV32IFD-NEXT:    call frexpf@plt
304 ; RV32IFD-NEXT:    fmv.s fs1, fa0
305 ; RV32IFD-NEXT:    addi a0, sp, 20
306 ; RV32IFD-NEXT:    fmv.s fa0, fs0
307 ; RV32IFD-NEXT:    call frexpf@plt
308 ; RV32IFD-NEXT:    lw a0, 20(sp)
309 ; RV32IFD-NEXT:    lw a1, 16(sp)
310 ; RV32IFD-NEXT:    lw a2, 12(sp)
311 ; RV32IFD-NEXT:    lw a3, 8(sp)
312 ; RV32IFD-NEXT:    sw a0, 28(s0)
313 ; RV32IFD-NEXT:    sw a1, 24(s0)
314 ; RV32IFD-NEXT:    sw a2, 20(s0)
315 ; RV32IFD-NEXT:    sw a3, 16(s0)
316 ; RV32IFD-NEXT:    fsw fa0, 12(s0)
317 ; RV32IFD-NEXT:    fsw fs1, 8(s0)
318 ; RV32IFD-NEXT:    fsw fs2, 4(s0)
319 ; RV32IFD-NEXT:    fsw fs3, 0(s0)
320 ; RV32IFD-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
321 ; RV32IFD-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload
322 ; RV32IFD-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload
323 ; RV32IFD-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload
324 ; RV32IFD-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload
325 ; RV32IFD-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload
326 ; RV32IFD-NEXT:    addi sp, sp, 64
327 ; RV32IFD-NEXT:    ret
329 ; RV64IFD-LABEL: test_frexp_v4f32_v4i32:
330 ; RV64IFD:       # %bb.0:
331 ; RV64IFD-NEXT:    addi sp, sp, -80
332 ; RV64IFD-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
333 ; RV64IFD-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
334 ; RV64IFD-NEXT:    fsd fs0, 56(sp) # 8-byte Folded Spill
335 ; RV64IFD-NEXT:    fsd fs1, 48(sp) # 8-byte Folded Spill
336 ; RV64IFD-NEXT:    fsd fs2, 40(sp) # 8-byte Folded Spill
337 ; RV64IFD-NEXT:    fsd fs3, 32(sp) # 8-byte Folded Spill
338 ; RV64IFD-NEXT:    fmv.s fs0, fa3
339 ; RV64IFD-NEXT:    fmv.s fs1, fa2
340 ; RV64IFD-NEXT:    fmv.s fs2, fa1
341 ; RV64IFD-NEXT:    mv s0, a0
342 ; RV64IFD-NEXT:    mv a0, sp
343 ; RV64IFD-NEXT:    call frexpf@plt
344 ; RV64IFD-NEXT:    fmv.s fs3, fa0
345 ; RV64IFD-NEXT:    addi a0, sp, 8
346 ; RV64IFD-NEXT:    fmv.s fa0, fs2
347 ; RV64IFD-NEXT:    call frexpf@plt
348 ; RV64IFD-NEXT:    fmv.s fs2, fa0
349 ; RV64IFD-NEXT:    addi a0, sp, 16
350 ; RV64IFD-NEXT:    fmv.s fa0, fs1
351 ; RV64IFD-NEXT:    call frexpf@plt
352 ; RV64IFD-NEXT:    fmv.s fs1, fa0
353 ; RV64IFD-NEXT:    addi a0, sp, 24
354 ; RV64IFD-NEXT:    fmv.s fa0, fs0
355 ; RV64IFD-NEXT:    call frexpf@plt
356 ; RV64IFD-NEXT:    ld a0, 24(sp)
357 ; RV64IFD-NEXT:    ld a1, 16(sp)
358 ; RV64IFD-NEXT:    ld a2, 8(sp)
359 ; RV64IFD-NEXT:    ld a3, 0(sp)
360 ; RV64IFD-NEXT:    sw a0, 28(s0)
361 ; RV64IFD-NEXT:    sw a1, 24(s0)
362 ; RV64IFD-NEXT:    sw a2, 20(s0)
363 ; RV64IFD-NEXT:    sw a3, 16(s0)
364 ; RV64IFD-NEXT:    fsw fa0, 12(s0)
365 ; RV64IFD-NEXT:    fsw fs1, 8(s0)
366 ; RV64IFD-NEXT:    fsw fs2, 4(s0)
367 ; RV64IFD-NEXT:    fsw fs3, 0(s0)
368 ; RV64IFD-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
369 ; RV64IFD-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
370 ; RV64IFD-NEXT:    fld fs0, 56(sp) # 8-byte Folded Reload
371 ; RV64IFD-NEXT:    fld fs1, 48(sp) # 8-byte Folded Reload
372 ; RV64IFD-NEXT:    fld fs2, 40(sp) # 8-byte Folded Reload
373 ; RV64IFD-NEXT:    fld fs3, 32(sp) # 8-byte Folded Reload
374 ; RV64IFD-NEXT:    addi sp, sp, 80
375 ; RV64IFD-NEXT:    ret
377 ; RV32IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32:
378 ; RV32IZFINXZDINX:       # %bb.0:
379 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, -48
380 ; RV32IZFINXZDINX-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
381 ; RV32IZFINXZDINX-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
382 ; RV32IZFINXZDINX-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
383 ; RV32IZFINXZDINX-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill
384 ; RV32IZFINXZDINX-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill
385 ; RV32IZFINXZDINX-NEXT:    sw s4, 24(sp) # 4-byte Folded Spill
386 ; RV32IZFINXZDINX-NEXT:    mv s0, a4
387 ; RV32IZFINXZDINX-NEXT:    mv s1, a3
388 ; RV32IZFINXZDINX-NEXT:    mv s2, a2
389 ; RV32IZFINXZDINX-NEXT:    mv a2, a1
390 ; RV32IZFINXZDINX-NEXT:    mv s3, a0
391 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
392 ; RV32IZFINXZDINX-NEXT:    mv a0, a2
393 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
394 ; RV32IZFINXZDINX-NEXT:    mv s4, a0
395 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 12
396 ; RV32IZFINXZDINX-NEXT:    mv a0, s2
397 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
398 ; RV32IZFINXZDINX-NEXT:    mv s2, a0
399 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 16
400 ; RV32IZFINXZDINX-NEXT:    mv a0, s1
401 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
402 ; RV32IZFINXZDINX-NEXT:    mv s1, a0
403 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 20
404 ; RV32IZFINXZDINX-NEXT:    mv a0, s0
405 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
406 ; RV32IZFINXZDINX-NEXT:    lw a1, 20(sp)
407 ; RV32IZFINXZDINX-NEXT:    lw a2, 16(sp)
408 ; RV32IZFINXZDINX-NEXT:    lw a3, 12(sp)
409 ; RV32IZFINXZDINX-NEXT:    lw a4, 8(sp)
410 ; RV32IZFINXZDINX-NEXT:    sw a1, 28(s3)
411 ; RV32IZFINXZDINX-NEXT:    sw a2, 24(s3)
412 ; RV32IZFINXZDINX-NEXT:    sw a3, 20(s3)
413 ; RV32IZFINXZDINX-NEXT:    sw a4, 16(s3)
414 ; RV32IZFINXZDINX-NEXT:    sw a0, 12(s3)
415 ; RV32IZFINXZDINX-NEXT:    sw s1, 8(s3)
416 ; RV32IZFINXZDINX-NEXT:    sw s2, 4(s3)
417 ; RV32IZFINXZDINX-NEXT:    sw s4, 0(s3)
418 ; RV32IZFINXZDINX-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
419 ; RV32IZFINXZDINX-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
420 ; RV32IZFINXZDINX-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
421 ; RV32IZFINXZDINX-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload
422 ; RV32IZFINXZDINX-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload
423 ; RV32IZFINXZDINX-NEXT:    lw s4, 24(sp) # 4-byte Folded Reload
424 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, 48
425 ; RV32IZFINXZDINX-NEXT:    ret
427 ; RV64IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32:
428 ; RV64IZFINXZDINX:       # %bb.0:
429 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, -80
430 ; RV64IZFINXZDINX-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
431 ; RV64IZFINXZDINX-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
432 ; RV64IZFINXZDINX-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill
433 ; RV64IZFINXZDINX-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill
434 ; RV64IZFINXZDINX-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill
435 ; RV64IZFINXZDINX-NEXT:    sd s4, 32(sp) # 8-byte Folded Spill
436 ; RV64IZFINXZDINX-NEXT:    mv s0, a4
437 ; RV64IZFINXZDINX-NEXT:    mv s1, a3
438 ; RV64IZFINXZDINX-NEXT:    mv s2, a2
439 ; RV64IZFINXZDINX-NEXT:    mv a2, a1
440 ; RV64IZFINXZDINX-NEXT:    mv s3, a0
441 ; RV64IZFINXZDINX-NEXT:    mv a1, sp
442 ; RV64IZFINXZDINX-NEXT:    mv a0, a2
443 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
444 ; RV64IZFINXZDINX-NEXT:    mv s4, a0
445 ; RV64IZFINXZDINX-NEXT:    addi a1, sp, 8
446 ; RV64IZFINXZDINX-NEXT:    mv a0, s2
447 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
448 ; RV64IZFINXZDINX-NEXT:    mv s2, a0
449 ; RV64IZFINXZDINX-NEXT:    addi a1, sp, 16
450 ; RV64IZFINXZDINX-NEXT:    mv a0, s1
451 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
452 ; RV64IZFINXZDINX-NEXT:    mv s1, a0
453 ; RV64IZFINXZDINX-NEXT:    addi a1, sp, 24
454 ; RV64IZFINXZDINX-NEXT:    mv a0, s0
455 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
456 ; RV64IZFINXZDINX-NEXT:    ld a1, 24(sp)
457 ; RV64IZFINXZDINX-NEXT:    ld a2, 16(sp)
458 ; RV64IZFINXZDINX-NEXT:    ld a3, 8(sp)
459 ; RV64IZFINXZDINX-NEXT:    ld a4, 0(sp)
460 ; RV64IZFINXZDINX-NEXT:    sw a1, 28(s3)
461 ; RV64IZFINXZDINX-NEXT:    sw a2, 24(s3)
462 ; RV64IZFINXZDINX-NEXT:    sw a3, 20(s3)
463 ; RV64IZFINXZDINX-NEXT:    sw a4, 16(s3)
464 ; RV64IZFINXZDINX-NEXT:    sw a0, 12(s3)
465 ; RV64IZFINXZDINX-NEXT:    sw s1, 8(s3)
466 ; RV64IZFINXZDINX-NEXT:    sw s2, 4(s3)
467 ; RV64IZFINXZDINX-NEXT:    sw s4, 0(s3)
468 ; RV64IZFINXZDINX-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
469 ; RV64IZFINXZDINX-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
470 ; RV64IZFINXZDINX-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload
471 ; RV64IZFINXZDINX-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload
472 ; RV64IZFINXZDINX-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload
473 ; RV64IZFINXZDINX-NEXT:    ld s4, 32(sp) # 8-byte Folded Reload
474 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, 80
475 ; RV64IZFINXZDINX-NEXT:    ret
477 ; RV32I-LABEL: test_frexp_v4f32_v4i32:
478 ; RV32I:       # %bb.0:
479 ; RV32I-NEXT:    addi sp, sp, -48
480 ; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
481 ; RV32I-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
482 ; RV32I-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
483 ; RV32I-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill
484 ; RV32I-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill
485 ; RV32I-NEXT:    sw s4, 24(sp) # 4-byte Folded Spill
486 ; RV32I-NEXT:    lw s0, 12(a1)
487 ; RV32I-NEXT:    lw s1, 8(a1)
488 ; RV32I-NEXT:    lw s2, 4(a1)
489 ; RV32I-NEXT:    lw a2, 0(a1)
490 ; RV32I-NEXT:    mv s3, a0
491 ; RV32I-NEXT:    addi a1, sp, 8
492 ; RV32I-NEXT:    mv a0, a2
493 ; RV32I-NEXT:    call frexpf@plt
494 ; RV32I-NEXT:    mv s4, a0
495 ; RV32I-NEXT:    addi a1, sp, 12
496 ; RV32I-NEXT:    mv a0, s2
497 ; RV32I-NEXT:    call frexpf@plt
498 ; RV32I-NEXT:    mv s2, a0
499 ; RV32I-NEXT:    addi a1, sp, 16
500 ; RV32I-NEXT:    mv a0, s1
501 ; RV32I-NEXT:    call frexpf@plt
502 ; RV32I-NEXT:    mv s1, a0
503 ; RV32I-NEXT:    addi a1, sp, 20
504 ; RV32I-NEXT:    mv a0, s0
505 ; RV32I-NEXT:    call frexpf@plt
506 ; RV32I-NEXT:    lw a1, 8(sp)
507 ; RV32I-NEXT:    lw a2, 12(sp)
508 ; RV32I-NEXT:    lw a3, 16(sp)
509 ; RV32I-NEXT:    lw a4, 20(sp)
510 ; RV32I-NEXT:    sw a0, 12(s3)
511 ; RV32I-NEXT:    sw s1, 8(s3)
512 ; RV32I-NEXT:    sw s2, 4(s3)
513 ; RV32I-NEXT:    sw s4, 0(s3)
514 ; RV32I-NEXT:    sw a4, 28(s3)
515 ; RV32I-NEXT:    sw a3, 24(s3)
516 ; RV32I-NEXT:    sw a2, 20(s3)
517 ; RV32I-NEXT:    sw a1, 16(s3)
518 ; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
519 ; RV32I-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
520 ; RV32I-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
521 ; RV32I-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload
522 ; RV32I-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload
523 ; RV32I-NEXT:    lw s4, 24(sp) # 4-byte Folded Reload
524 ; RV32I-NEXT:    addi sp, sp, 48
525 ; RV32I-NEXT:    ret
527 ; RV64I-LABEL: test_frexp_v4f32_v4i32:
528 ; RV64I:       # %bb.0:
529 ; RV64I-NEXT:    addi sp, sp, -64
530 ; RV64I-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
531 ; RV64I-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
532 ; RV64I-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
533 ; RV64I-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
534 ; RV64I-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
535 ; RV64I-NEXT:    sd s4, 16(sp) # 8-byte Folded Spill
536 ; RV64I-NEXT:    lw s0, 24(a1)
537 ; RV64I-NEXT:    lw s1, 16(a1)
538 ; RV64I-NEXT:    lw s2, 8(a1)
539 ; RV64I-NEXT:    lw a2, 0(a1)
540 ; RV64I-NEXT:    mv s3, a0
541 ; RV64I-NEXT:    mv a1, sp
542 ; RV64I-NEXT:    mv a0, a2
543 ; RV64I-NEXT:    call frexpf@plt
544 ; RV64I-NEXT:    mv s4, a0
545 ; RV64I-NEXT:    addi a1, sp, 4
546 ; RV64I-NEXT:    mv a0, s2
547 ; RV64I-NEXT:    call frexpf@plt
548 ; RV64I-NEXT:    mv s2, a0
549 ; RV64I-NEXT:    addi a1, sp, 8
550 ; RV64I-NEXT:    mv a0, s1
551 ; RV64I-NEXT:    call frexpf@plt
552 ; RV64I-NEXT:    mv s1, a0
553 ; RV64I-NEXT:    addi a1, sp, 12
554 ; RV64I-NEXT:    mv a0, s0
555 ; RV64I-NEXT:    call frexpf@plt
556 ; RV64I-NEXT:    lw a1, 0(sp)
557 ; RV64I-NEXT:    lw a2, 4(sp)
558 ; RV64I-NEXT:    lw a3, 8(sp)
559 ; RV64I-NEXT:    lw a4, 12(sp)
560 ; RV64I-NEXT:    sw a0, 12(s3)
561 ; RV64I-NEXT:    sw s1, 8(s3)
562 ; RV64I-NEXT:    sw s2, 4(s3)
563 ; RV64I-NEXT:    sw s4, 0(s3)
564 ; RV64I-NEXT:    sw a4, 28(s3)
565 ; RV64I-NEXT:    sw a3, 24(s3)
566 ; RV64I-NEXT:    sw a2, 20(s3)
567 ; RV64I-NEXT:    sw a1, 16(s3)
568 ; RV64I-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
569 ; RV64I-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
570 ; RV64I-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
571 ; RV64I-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
572 ; RV64I-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
573 ; RV64I-NEXT:    ld s4, 16(sp) # 8-byte Folded Reload
574 ; RV64I-NEXT:    addi sp, sp, 64
575 ; RV64I-NEXT:    ret
576   %result = call { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float> %a)
577   ret { <4 x float>, <4 x i32> } %result
580 define <4 x float> @test_frexp_v4f32_v4i32_only_use_fract(<4 x float> %a) nounwind {
581 ; RV32IFD-LABEL: test_frexp_v4f32_v4i32_only_use_fract:
582 ; RV32IFD:       # %bb.0:
583 ; RV32IFD-NEXT:    addi sp, sp, -64
584 ; RV32IFD-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
585 ; RV32IFD-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill
586 ; RV32IFD-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill
587 ; RV32IFD-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill
588 ; RV32IFD-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill
589 ; RV32IFD-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill
590 ; RV32IFD-NEXT:    fmv.s fs0, fa3
591 ; RV32IFD-NEXT:    fmv.s fs1, fa2
592 ; RV32IFD-NEXT:    fmv.s fs2, fa1
593 ; RV32IFD-NEXT:    mv s0, a0
594 ; RV32IFD-NEXT:    addi a0, sp, 8
595 ; RV32IFD-NEXT:    call frexpf@plt
596 ; RV32IFD-NEXT:    fmv.s fs3, fa0
597 ; RV32IFD-NEXT:    addi a0, sp, 12
598 ; RV32IFD-NEXT:    fmv.s fa0, fs2
599 ; RV32IFD-NEXT:    call frexpf@plt
600 ; RV32IFD-NEXT:    fmv.s fs2, fa0
601 ; RV32IFD-NEXT:    addi a0, sp, 16
602 ; RV32IFD-NEXT:    fmv.s fa0, fs1
603 ; RV32IFD-NEXT:    call frexpf@plt
604 ; RV32IFD-NEXT:    fmv.s fs1, fa0
605 ; RV32IFD-NEXT:    addi a0, sp, 20
606 ; RV32IFD-NEXT:    fmv.s fa0, fs0
607 ; RV32IFD-NEXT:    call frexpf@plt
608 ; RV32IFD-NEXT:    fsw fa0, 12(s0)
609 ; RV32IFD-NEXT:    fsw fs1, 8(s0)
610 ; RV32IFD-NEXT:    fsw fs2, 4(s0)
611 ; RV32IFD-NEXT:    fsw fs3, 0(s0)
612 ; RV32IFD-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
613 ; RV32IFD-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload
614 ; RV32IFD-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload
615 ; RV32IFD-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload
616 ; RV32IFD-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload
617 ; RV32IFD-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload
618 ; RV32IFD-NEXT:    addi sp, sp, 64
619 ; RV32IFD-NEXT:    ret
621 ; RV64IFD-LABEL: test_frexp_v4f32_v4i32_only_use_fract:
622 ; RV64IFD:       # %bb.0:
623 ; RV64IFD-NEXT:    addi sp, sp, -80
624 ; RV64IFD-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
625 ; RV64IFD-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
626 ; RV64IFD-NEXT:    fsd fs0, 56(sp) # 8-byte Folded Spill
627 ; RV64IFD-NEXT:    fsd fs1, 48(sp) # 8-byte Folded Spill
628 ; RV64IFD-NEXT:    fsd fs2, 40(sp) # 8-byte Folded Spill
629 ; RV64IFD-NEXT:    fsd fs3, 32(sp) # 8-byte Folded Spill
630 ; RV64IFD-NEXT:    fmv.s fs0, fa3
631 ; RV64IFD-NEXT:    fmv.s fs1, fa2
632 ; RV64IFD-NEXT:    fmv.s fs2, fa1
633 ; RV64IFD-NEXT:    mv s0, a0
634 ; RV64IFD-NEXT:    mv a0, sp
635 ; RV64IFD-NEXT:    call frexpf@plt
636 ; RV64IFD-NEXT:    fmv.s fs3, fa0
637 ; RV64IFD-NEXT:    addi a0, sp, 8
638 ; RV64IFD-NEXT:    fmv.s fa0, fs2
639 ; RV64IFD-NEXT:    call frexpf@plt
640 ; RV64IFD-NEXT:    fmv.s fs2, fa0
641 ; RV64IFD-NEXT:    addi a0, sp, 16
642 ; RV64IFD-NEXT:    fmv.s fa0, fs1
643 ; RV64IFD-NEXT:    call frexpf@plt
644 ; RV64IFD-NEXT:    fmv.s fs1, fa0
645 ; RV64IFD-NEXT:    addi a0, sp, 24
646 ; RV64IFD-NEXT:    fmv.s fa0, fs0
647 ; RV64IFD-NEXT:    call frexpf@plt
648 ; RV64IFD-NEXT:    fsw fa0, 12(s0)
649 ; RV64IFD-NEXT:    fsw fs1, 8(s0)
650 ; RV64IFD-NEXT:    fsw fs2, 4(s0)
651 ; RV64IFD-NEXT:    fsw fs3, 0(s0)
652 ; RV64IFD-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
653 ; RV64IFD-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
654 ; RV64IFD-NEXT:    fld fs0, 56(sp) # 8-byte Folded Reload
655 ; RV64IFD-NEXT:    fld fs1, 48(sp) # 8-byte Folded Reload
656 ; RV64IFD-NEXT:    fld fs2, 40(sp) # 8-byte Folded Reload
657 ; RV64IFD-NEXT:    fld fs3, 32(sp) # 8-byte Folded Reload
658 ; RV64IFD-NEXT:    addi sp, sp, 80
659 ; RV64IFD-NEXT:    ret
661 ; RV32IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32_only_use_fract:
662 ; RV32IZFINXZDINX:       # %bb.0:
663 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, -48
664 ; RV32IZFINXZDINX-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
665 ; RV32IZFINXZDINX-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
666 ; RV32IZFINXZDINX-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
667 ; RV32IZFINXZDINX-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill
668 ; RV32IZFINXZDINX-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill
669 ; RV32IZFINXZDINX-NEXT:    sw s4, 24(sp) # 4-byte Folded Spill
670 ; RV32IZFINXZDINX-NEXT:    mv s0, a4
671 ; RV32IZFINXZDINX-NEXT:    mv s1, a3
672 ; RV32IZFINXZDINX-NEXT:    mv s2, a2
673 ; RV32IZFINXZDINX-NEXT:    mv a2, a1
674 ; RV32IZFINXZDINX-NEXT:    mv s3, a0
675 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
676 ; RV32IZFINXZDINX-NEXT:    mv a0, a2
677 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
678 ; RV32IZFINXZDINX-NEXT:    mv s4, a0
679 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 12
680 ; RV32IZFINXZDINX-NEXT:    mv a0, s2
681 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
682 ; RV32IZFINXZDINX-NEXT:    mv s2, a0
683 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 16
684 ; RV32IZFINXZDINX-NEXT:    mv a0, s1
685 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
686 ; RV32IZFINXZDINX-NEXT:    mv s1, a0
687 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 20
688 ; RV32IZFINXZDINX-NEXT:    mv a0, s0
689 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
690 ; RV32IZFINXZDINX-NEXT:    sw a0, 12(s3)
691 ; RV32IZFINXZDINX-NEXT:    sw s1, 8(s3)
692 ; RV32IZFINXZDINX-NEXT:    sw s2, 4(s3)
693 ; RV32IZFINXZDINX-NEXT:    sw s4, 0(s3)
694 ; RV32IZFINXZDINX-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
695 ; RV32IZFINXZDINX-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
696 ; RV32IZFINXZDINX-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
697 ; RV32IZFINXZDINX-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload
698 ; RV32IZFINXZDINX-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload
699 ; RV32IZFINXZDINX-NEXT:    lw s4, 24(sp) # 4-byte Folded Reload
700 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, 48
701 ; RV32IZFINXZDINX-NEXT:    ret
703 ; RV64IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32_only_use_fract:
704 ; RV64IZFINXZDINX:       # %bb.0:
705 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, -80
706 ; RV64IZFINXZDINX-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
707 ; RV64IZFINXZDINX-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
708 ; RV64IZFINXZDINX-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill
709 ; RV64IZFINXZDINX-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill
710 ; RV64IZFINXZDINX-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill
711 ; RV64IZFINXZDINX-NEXT:    sd s4, 32(sp) # 8-byte Folded Spill
712 ; RV64IZFINXZDINX-NEXT:    mv s0, a4
713 ; RV64IZFINXZDINX-NEXT:    mv s1, a3
714 ; RV64IZFINXZDINX-NEXT:    mv s2, a2
715 ; RV64IZFINXZDINX-NEXT:    mv a2, a1
716 ; RV64IZFINXZDINX-NEXT:    mv s3, a0
717 ; RV64IZFINXZDINX-NEXT:    mv a1, sp
718 ; RV64IZFINXZDINX-NEXT:    mv a0, a2
719 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
720 ; RV64IZFINXZDINX-NEXT:    mv s4, a0
721 ; RV64IZFINXZDINX-NEXT:    addi a1, sp, 8
722 ; RV64IZFINXZDINX-NEXT:    mv a0, s2
723 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
724 ; RV64IZFINXZDINX-NEXT:    mv s2, a0
725 ; RV64IZFINXZDINX-NEXT:    addi a1, sp, 16
726 ; RV64IZFINXZDINX-NEXT:    mv a0, s1
727 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
728 ; RV64IZFINXZDINX-NEXT:    mv s1, a0
729 ; RV64IZFINXZDINX-NEXT:    addi a1, sp, 24
730 ; RV64IZFINXZDINX-NEXT:    mv a0, s0
731 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
732 ; RV64IZFINXZDINX-NEXT:    sw a0, 12(s3)
733 ; RV64IZFINXZDINX-NEXT:    sw s1, 8(s3)
734 ; RV64IZFINXZDINX-NEXT:    sw s2, 4(s3)
735 ; RV64IZFINXZDINX-NEXT:    sw s4, 0(s3)
736 ; RV64IZFINXZDINX-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
737 ; RV64IZFINXZDINX-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
738 ; RV64IZFINXZDINX-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload
739 ; RV64IZFINXZDINX-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload
740 ; RV64IZFINXZDINX-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload
741 ; RV64IZFINXZDINX-NEXT:    ld s4, 32(sp) # 8-byte Folded Reload
742 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, 80
743 ; RV64IZFINXZDINX-NEXT:    ret
745 ; RV32I-LABEL: test_frexp_v4f32_v4i32_only_use_fract:
746 ; RV32I:       # %bb.0:
747 ; RV32I-NEXT:    addi sp, sp, -48
748 ; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
749 ; RV32I-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
750 ; RV32I-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
751 ; RV32I-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill
752 ; RV32I-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill
753 ; RV32I-NEXT:    sw s4, 24(sp) # 4-byte Folded Spill
754 ; RV32I-NEXT:    lw s0, 12(a1)
755 ; RV32I-NEXT:    lw s1, 8(a1)
756 ; RV32I-NEXT:    lw s2, 4(a1)
757 ; RV32I-NEXT:    lw a2, 0(a1)
758 ; RV32I-NEXT:    mv s3, a0
759 ; RV32I-NEXT:    addi a1, sp, 8
760 ; RV32I-NEXT:    mv a0, a2
761 ; RV32I-NEXT:    call frexpf@plt
762 ; RV32I-NEXT:    mv s4, a0
763 ; RV32I-NEXT:    addi a1, sp, 12
764 ; RV32I-NEXT:    mv a0, s2
765 ; RV32I-NEXT:    call frexpf@plt
766 ; RV32I-NEXT:    mv s2, a0
767 ; RV32I-NEXT:    addi a1, sp, 16
768 ; RV32I-NEXT:    mv a0, s1
769 ; RV32I-NEXT:    call frexpf@plt
770 ; RV32I-NEXT:    mv s1, a0
771 ; RV32I-NEXT:    addi a1, sp, 20
772 ; RV32I-NEXT:    mv a0, s0
773 ; RV32I-NEXT:    call frexpf@plt
774 ; RV32I-NEXT:    sw a0, 12(s3)
775 ; RV32I-NEXT:    sw s1, 8(s3)
776 ; RV32I-NEXT:    sw s2, 4(s3)
777 ; RV32I-NEXT:    sw s4, 0(s3)
778 ; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
779 ; RV32I-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
780 ; RV32I-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
781 ; RV32I-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload
782 ; RV32I-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload
783 ; RV32I-NEXT:    lw s4, 24(sp) # 4-byte Folded Reload
784 ; RV32I-NEXT:    addi sp, sp, 48
785 ; RV32I-NEXT:    ret
787 ; RV64I-LABEL: test_frexp_v4f32_v4i32_only_use_fract:
788 ; RV64I:       # %bb.0:
789 ; RV64I-NEXT:    addi sp, sp, -64
790 ; RV64I-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
791 ; RV64I-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
792 ; RV64I-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
793 ; RV64I-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
794 ; RV64I-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
795 ; RV64I-NEXT:    sd s4, 16(sp) # 8-byte Folded Spill
796 ; RV64I-NEXT:    lw s0, 24(a1)
797 ; RV64I-NEXT:    lw s1, 16(a1)
798 ; RV64I-NEXT:    lw s2, 8(a1)
799 ; RV64I-NEXT:    lw a2, 0(a1)
800 ; RV64I-NEXT:    mv s3, a0
801 ; RV64I-NEXT:    mv a1, sp
802 ; RV64I-NEXT:    mv a0, a2
803 ; RV64I-NEXT:    call frexpf@plt
804 ; RV64I-NEXT:    mv s4, a0
805 ; RV64I-NEXT:    addi a1, sp, 4
806 ; RV64I-NEXT:    mv a0, s2
807 ; RV64I-NEXT:    call frexpf@plt
808 ; RV64I-NEXT:    mv s2, a0
809 ; RV64I-NEXT:    addi a1, sp, 8
810 ; RV64I-NEXT:    mv a0, s1
811 ; RV64I-NEXT:    call frexpf@plt
812 ; RV64I-NEXT:    mv s1, a0
813 ; RV64I-NEXT:    addi a1, sp, 12
814 ; RV64I-NEXT:    mv a0, s0
815 ; RV64I-NEXT:    call frexpf@plt
816 ; RV64I-NEXT:    sw a0, 12(s3)
817 ; RV64I-NEXT:    sw s1, 8(s3)
818 ; RV64I-NEXT:    sw s2, 4(s3)
819 ; RV64I-NEXT:    sw s4, 0(s3)
820 ; RV64I-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
821 ; RV64I-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
822 ; RV64I-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
823 ; RV64I-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
824 ; RV64I-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
825 ; RV64I-NEXT:    ld s4, 16(sp) # 8-byte Folded Reload
826 ; RV64I-NEXT:    addi sp, sp, 64
827 ; RV64I-NEXT:    ret
828   %result = call { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float> %a)
829   %result.0 = extractvalue { <4 x float>, <4 x i32> } %result, 0
830   ret <4 x float> %result.0
833 define <4 x i32> @test_frexp_v4f32_v4i32_only_use_exp(<4 x float> %a) nounwind {
834 ; RV32IFD-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
835 ; RV32IFD:       # %bb.0:
836 ; RV32IFD-NEXT:    addi sp, sp, -48
837 ; RV32IFD-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
838 ; RV32IFD-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
839 ; RV32IFD-NEXT:    fsd fs0, 32(sp) # 8-byte Folded Spill
840 ; RV32IFD-NEXT:    fsd fs1, 24(sp) # 8-byte Folded Spill
841 ; RV32IFD-NEXT:    fsd fs2, 16(sp) # 8-byte Folded Spill
842 ; RV32IFD-NEXT:    fmv.s fs0, fa3
843 ; RV32IFD-NEXT:    fmv.s fs1, fa2
844 ; RV32IFD-NEXT:    fmv.s fs2, fa1
845 ; RV32IFD-NEXT:    mv s0, a0
846 ; RV32IFD-NEXT:    mv a0, sp
847 ; RV32IFD-NEXT:    call frexpf@plt
848 ; RV32IFD-NEXT:    addi a0, sp, 4
849 ; RV32IFD-NEXT:    fmv.s fa0, fs2
850 ; RV32IFD-NEXT:    call frexpf@plt
851 ; RV32IFD-NEXT:    addi a0, sp, 8
852 ; RV32IFD-NEXT:    fmv.s fa0, fs1
853 ; RV32IFD-NEXT:    call frexpf@plt
854 ; RV32IFD-NEXT:    addi a0, sp, 12
855 ; RV32IFD-NEXT:    fmv.s fa0, fs0
856 ; RV32IFD-NEXT:    call frexpf@plt
857 ; RV32IFD-NEXT:    lw a0, 12(sp)
858 ; RV32IFD-NEXT:    lw a1, 8(sp)
859 ; RV32IFD-NEXT:    lw a2, 4(sp)
860 ; RV32IFD-NEXT:    lw a3, 0(sp)
861 ; RV32IFD-NEXT:    sw a0, 12(s0)
862 ; RV32IFD-NEXT:    sw a1, 8(s0)
863 ; RV32IFD-NEXT:    sw a2, 4(s0)
864 ; RV32IFD-NEXT:    sw a3, 0(s0)
865 ; RV32IFD-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
866 ; RV32IFD-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
867 ; RV32IFD-NEXT:    fld fs0, 32(sp) # 8-byte Folded Reload
868 ; RV32IFD-NEXT:    fld fs1, 24(sp) # 8-byte Folded Reload
869 ; RV32IFD-NEXT:    fld fs2, 16(sp) # 8-byte Folded Reload
870 ; RV32IFD-NEXT:    addi sp, sp, 48
871 ; RV32IFD-NEXT:    ret
873 ; RV64IFD-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
874 ; RV64IFD:       # %bb.0:
875 ; RV64IFD-NEXT:    addi sp, sp, -80
876 ; RV64IFD-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
877 ; RV64IFD-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
878 ; RV64IFD-NEXT:    fsd fs0, 56(sp) # 8-byte Folded Spill
879 ; RV64IFD-NEXT:    fsd fs1, 48(sp) # 8-byte Folded Spill
880 ; RV64IFD-NEXT:    fsd fs2, 40(sp) # 8-byte Folded Spill
881 ; RV64IFD-NEXT:    fmv.s fs0, fa3
882 ; RV64IFD-NEXT:    fmv.s fs1, fa2
883 ; RV64IFD-NEXT:    fmv.s fs2, fa1
884 ; RV64IFD-NEXT:    mv s0, a0
885 ; RV64IFD-NEXT:    addi a0, sp, 8
886 ; RV64IFD-NEXT:    call frexpf@plt
887 ; RV64IFD-NEXT:    addi a0, sp, 16
888 ; RV64IFD-NEXT:    fmv.s fa0, fs2
889 ; RV64IFD-NEXT:    call frexpf@plt
890 ; RV64IFD-NEXT:    addi a0, sp, 24
891 ; RV64IFD-NEXT:    fmv.s fa0, fs1
892 ; RV64IFD-NEXT:    call frexpf@plt
893 ; RV64IFD-NEXT:    addi a0, sp, 32
894 ; RV64IFD-NEXT:    fmv.s fa0, fs0
895 ; RV64IFD-NEXT:    call frexpf@plt
896 ; RV64IFD-NEXT:    ld a0, 32(sp)
897 ; RV64IFD-NEXT:    ld a1, 24(sp)
898 ; RV64IFD-NEXT:    ld a2, 16(sp)
899 ; RV64IFD-NEXT:    ld a3, 8(sp)
900 ; RV64IFD-NEXT:    sw a0, 12(s0)
901 ; RV64IFD-NEXT:    sw a1, 8(s0)
902 ; RV64IFD-NEXT:    sw a2, 4(s0)
903 ; RV64IFD-NEXT:    sw a3, 0(s0)
904 ; RV64IFD-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
905 ; RV64IFD-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
906 ; RV64IFD-NEXT:    fld fs0, 56(sp) # 8-byte Folded Reload
907 ; RV64IFD-NEXT:    fld fs1, 48(sp) # 8-byte Folded Reload
908 ; RV64IFD-NEXT:    fld fs2, 40(sp) # 8-byte Folded Reload
909 ; RV64IFD-NEXT:    addi sp, sp, 80
910 ; RV64IFD-NEXT:    ret
912 ; RV32IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
913 ; RV32IZFINXZDINX:       # %bb.0:
914 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, -48
915 ; RV32IZFINXZDINX-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
916 ; RV32IZFINXZDINX-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
917 ; RV32IZFINXZDINX-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
918 ; RV32IZFINXZDINX-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill
919 ; RV32IZFINXZDINX-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill
920 ; RV32IZFINXZDINX-NEXT:    mv s0, a4
921 ; RV32IZFINXZDINX-NEXT:    mv s1, a3
922 ; RV32IZFINXZDINX-NEXT:    mv s2, a2
923 ; RV32IZFINXZDINX-NEXT:    mv a2, a1
924 ; RV32IZFINXZDINX-NEXT:    mv s3, a0
925 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 12
926 ; RV32IZFINXZDINX-NEXT:    mv a0, a2
927 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
928 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 16
929 ; RV32IZFINXZDINX-NEXT:    mv a0, s2
930 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
931 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 20
932 ; RV32IZFINXZDINX-NEXT:    mv a0, s1
933 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
934 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 24
935 ; RV32IZFINXZDINX-NEXT:    mv a0, s0
936 ; RV32IZFINXZDINX-NEXT:    call frexpf@plt
937 ; RV32IZFINXZDINX-NEXT:    lw a0, 24(sp)
938 ; RV32IZFINXZDINX-NEXT:    lw a1, 20(sp)
939 ; RV32IZFINXZDINX-NEXT:    lw a2, 16(sp)
940 ; RV32IZFINXZDINX-NEXT:    lw a3, 12(sp)
941 ; RV32IZFINXZDINX-NEXT:    sw a0, 12(s3)
942 ; RV32IZFINXZDINX-NEXT:    sw a1, 8(s3)
943 ; RV32IZFINXZDINX-NEXT:    sw a2, 4(s3)
944 ; RV32IZFINXZDINX-NEXT:    sw a3, 0(s3)
945 ; RV32IZFINXZDINX-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
946 ; RV32IZFINXZDINX-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
947 ; RV32IZFINXZDINX-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
948 ; RV32IZFINXZDINX-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload
949 ; RV32IZFINXZDINX-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload
950 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, 48
951 ; RV32IZFINXZDINX-NEXT:    ret
953 ; RV64IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
954 ; RV64IZFINXZDINX:       # %bb.0:
955 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, -80
956 ; RV64IZFINXZDINX-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
957 ; RV64IZFINXZDINX-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
958 ; RV64IZFINXZDINX-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill
959 ; RV64IZFINXZDINX-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill
960 ; RV64IZFINXZDINX-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill
961 ; RV64IZFINXZDINX-NEXT:    mv s0, a4
962 ; RV64IZFINXZDINX-NEXT:    mv s1, a3
963 ; RV64IZFINXZDINX-NEXT:    mv s2, a2
964 ; RV64IZFINXZDINX-NEXT:    mv a2, a1
965 ; RV64IZFINXZDINX-NEXT:    mv s3, a0
966 ; RV64IZFINXZDINX-NEXT:    addi a1, sp, 8
967 ; RV64IZFINXZDINX-NEXT:    mv a0, a2
968 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
969 ; RV64IZFINXZDINX-NEXT:    addi a1, sp, 16
970 ; RV64IZFINXZDINX-NEXT:    mv a0, s2
971 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
972 ; RV64IZFINXZDINX-NEXT:    addi a1, sp, 24
973 ; RV64IZFINXZDINX-NEXT:    mv a0, s1
974 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
975 ; RV64IZFINXZDINX-NEXT:    addi a1, sp, 32
976 ; RV64IZFINXZDINX-NEXT:    mv a0, s0
977 ; RV64IZFINXZDINX-NEXT:    call frexpf@plt
978 ; RV64IZFINXZDINX-NEXT:    ld a0, 32(sp)
979 ; RV64IZFINXZDINX-NEXT:    ld a1, 24(sp)
980 ; RV64IZFINXZDINX-NEXT:    ld a2, 16(sp)
981 ; RV64IZFINXZDINX-NEXT:    ld a3, 8(sp)
982 ; RV64IZFINXZDINX-NEXT:    sw a0, 12(s3)
983 ; RV64IZFINXZDINX-NEXT:    sw a1, 8(s3)
984 ; RV64IZFINXZDINX-NEXT:    sw a2, 4(s3)
985 ; RV64IZFINXZDINX-NEXT:    sw a3, 0(s3)
986 ; RV64IZFINXZDINX-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
987 ; RV64IZFINXZDINX-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
988 ; RV64IZFINXZDINX-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload
989 ; RV64IZFINXZDINX-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload
990 ; RV64IZFINXZDINX-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload
991 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, 80
992 ; RV64IZFINXZDINX-NEXT:    ret
994 ; RV32I-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
995 ; RV32I:       # %bb.0:
996 ; RV32I-NEXT:    addi sp, sp, -48
997 ; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
998 ; RV32I-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
999 ; RV32I-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
1000 ; RV32I-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill
1001 ; RV32I-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill
1002 ; RV32I-NEXT:    lw s0, 12(a1)
1003 ; RV32I-NEXT:    lw s1, 8(a1)
1004 ; RV32I-NEXT:    lw s2, 4(a1)
1005 ; RV32I-NEXT:    lw a2, 0(a1)
1006 ; RV32I-NEXT:    mv s3, a0
1007 ; RV32I-NEXT:    addi a1, sp, 12
1008 ; RV32I-NEXT:    mv a0, a2
1009 ; RV32I-NEXT:    call frexpf@plt
1010 ; RV32I-NEXT:    addi a1, sp, 16
1011 ; RV32I-NEXT:    mv a0, s2
1012 ; RV32I-NEXT:    call frexpf@plt
1013 ; RV32I-NEXT:    addi a1, sp, 20
1014 ; RV32I-NEXT:    mv a0, s1
1015 ; RV32I-NEXT:    call frexpf@plt
1016 ; RV32I-NEXT:    addi a1, sp, 24
1017 ; RV32I-NEXT:    mv a0, s0
1018 ; RV32I-NEXT:    call frexpf@plt
1019 ; RV32I-NEXT:    lw a0, 24(sp)
1020 ; RV32I-NEXT:    lw a1, 20(sp)
1021 ; RV32I-NEXT:    lw a2, 16(sp)
1022 ; RV32I-NEXT:    lw a3, 12(sp)
1023 ; RV32I-NEXT:    sw a0, 12(s3)
1024 ; RV32I-NEXT:    sw a1, 8(s3)
1025 ; RV32I-NEXT:    sw a2, 4(s3)
1026 ; RV32I-NEXT:    sw a3, 0(s3)
1027 ; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1028 ; RV32I-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1029 ; RV32I-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
1030 ; RV32I-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload
1031 ; RV32I-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload
1032 ; RV32I-NEXT:    addi sp, sp, 48
1033 ; RV32I-NEXT:    ret
1035 ; RV64I-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
1036 ; RV64I:       # %bb.0:
1037 ; RV64I-NEXT:    addi sp, sp, -64
1038 ; RV64I-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
1039 ; RV64I-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
1040 ; RV64I-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
1041 ; RV64I-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
1042 ; RV64I-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
1043 ; RV64I-NEXT:    lw s0, 24(a1)
1044 ; RV64I-NEXT:    lw s1, 16(a1)
1045 ; RV64I-NEXT:    lw s2, 8(a1)
1046 ; RV64I-NEXT:    lw a2, 0(a1)
1047 ; RV64I-NEXT:    mv s3, a0
1048 ; RV64I-NEXT:    addi a1, sp, 8
1049 ; RV64I-NEXT:    mv a0, a2
1050 ; RV64I-NEXT:    call frexpf@plt
1051 ; RV64I-NEXT:    addi a1, sp, 12
1052 ; RV64I-NEXT:    mv a0, s2
1053 ; RV64I-NEXT:    call frexpf@plt
1054 ; RV64I-NEXT:    addi a1, sp, 16
1055 ; RV64I-NEXT:    mv a0, s1
1056 ; RV64I-NEXT:    call frexpf@plt
1057 ; RV64I-NEXT:    addi a1, sp, 20
1058 ; RV64I-NEXT:    mv a0, s0
1059 ; RV64I-NEXT:    call frexpf@plt
1060 ; RV64I-NEXT:    lw a0, 20(sp)
1061 ; RV64I-NEXT:    lw a1, 16(sp)
1062 ; RV64I-NEXT:    lw a2, 12(sp)
1063 ; RV64I-NEXT:    lw a3, 8(sp)
1064 ; RV64I-NEXT:    sw a0, 12(s3)
1065 ; RV64I-NEXT:    sw a1, 8(s3)
1066 ; RV64I-NEXT:    sw a2, 4(s3)
1067 ; RV64I-NEXT:    sw a3, 0(s3)
1068 ; RV64I-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
1069 ; RV64I-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
1070 ; RV64I-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
1071 ; RV64I-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
1072 ; RV64I-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
1073 ; RV64I-NEXT:    addi sp, sp, 64
1074 ; RV64I-NEXT:    ret
1075   %result = call { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float> %a)
1076   %result.1 = extractvalue { <4 x float>, <4 x i32> } %result, 1
1077   ret <4 x i32> %result.1
1080 define { double, i32 } @test_frexp_f64_i32(double %a) nounwind {
1081 ; RV32IFD-LABEL: test_frexp_f64_i32:
1082 ; RV32IFD:       # %bb.0:
1083 ; RV32IFD-NEXT:    addi sp, sp, -16
1084 ; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1085 ; RV32IFD-NEXT:    addi a0, sp, 8
1086 ; RV32IFD-NEXT:    call frexp@plt
1087 ; RV32IFD-NEXT:    lw a0, 8(sp)
1088 ; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1089 ; RV32IFD-NEXT:    addi sp, sp, 16
1090 ; RV32IFD-NEXT:    ret
1092 ; RV64IFD-LABEL: test_frexp_f64_i32:
1093 ; RV64IFD:       # %bb.0:
1094 ; RV64IFD-NEXT:    addi sp, sp, -16
1095 ; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1096 ; RV64IFD-NEXT:    mv a0, sp
1097 ; RV64IFD-NEXT:    call frexp@plt
1098 ; RV64IFD-NEXT:    ld a0, 0(sp)
1099 ; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1100 ; RV64IFD-NEXT:    addi sp, sp, 16
1101 ; RV64IFD-NEXT:    ret
1103 ; RV32IZFINXZDINX-LABEL: test_frexp_f64_i32:
1104 ; RV32IZFINXZDINX:       # %bb.0:
1105 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
1106 ; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1107 ; RV32IZFINXZDINX-NEXT:    addi a2, sp, 8
1108 ; RV32IZFINXZDINX-NEXT:    call frexp@plt
1109 ; RV32IZFINXZDINX-NEXT:    lw a2, 8(sp)
1110 ; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1111 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
1112 ; RV32IZFINXZDINX-NEXT:    ret
1114 ; RV64IZFINXZDINX-LABEL: test_frexp_f64_i32:
1115 ; RV64IZFINXZDINX:       # %bb.0:
1116 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
1117 ; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1118 ; RV64IZFINXZDINX-NEXT:    mv a1, sp
1119 ; RV64IZFINXZDINX-NEXT:    call frexp@plt
1120 ; RV64IZFINXZDINX-NEXT:    ld a1, 0(sp)
1121 ; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1122 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
1123 ; RV64IZFINXZDINX-NEXT:    ret
1125 ; RV32I-LABEL: test_frexp_f64_i32:
1126 ; RV32I:       # %bb.0:
1127 ; RV32I-NEXT:    addi sp, sp, -16
1128 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1129 ; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
1130 ; RV32I-NEXT:    mv a3, a2
1131 ; RV32I-NEXT:    mv s0, a0
1132 ; RV32I-NEXT:    addi a2, sp, 4
1133 ; RV32I-NEXT:    mv a0, a1
1134 ; RV32I-NEXT:    mv a1, a3
1135 ; RV32I-NEXT:    call frexp@plt
1136 ; RV32I-NEXT:    lw a2, 4(sp)
1137 ; RV32I-NEXT:    sw a1, 4(s0)
1138 ; RV32I-NEXT:    sw a0, 0(s0)
1139 ; RV32I-NEXT:    sw a2, 8(s0)
1140 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1141 ; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
1142 ; RV32I-NEXT:    addi sp, sp, 16
1143 ; RV32I-NEXT:    ret
1145 ; RV64I-LABEL: test_frexp_f64_i32:
1146 ; RV64I:       # %bb.0:
1147 ; RV64I-NEXT:    addi sp, sp, -16
1148 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1149 ; RV64I-NEXT:    addi a1, sp, 4
1150 ; RV64I-NEXT:    call frexp@plt
1151 ; RV64I-NEXT:    lw a1, 4(sp)
1152 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1153 ; RV64I-NEXT:    addi sp, sp, 16
1154 ; RV64I-NEXT:    ret
1155   %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)
1156   ret { double, i32 } %result
1159 define double @test_frexp_f64_i32_only_use_fract(double %a) nounwind {
1160 ; RV32IFD-LABEL: test_frexp_f64_i32_only_use_fract:
1161 ; RV32IFD:       # %bb.0:
1162 ; RV32IFD-NEXT:    addi sp, sp, -16
1163 ; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1164 ; RV32IFD-NEXT:    addi a0, sp, 8
1165 ; RV32IFD-NEXT:    call frexp@plt
1166 ; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1167 ; RV32IFD-NEXT:    addi sp, sp, 16
1168 ; RV32IFD-NEXT:    ret
1170 ; RV64IFD-LABEL: test_frexp_f64_i32_only_use_fract:
1171 ; RV64IFD:       # %bb.0:
1172 ; RV64IFD-NEXT:    addi sp, sp, -16
1173 ; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1174 ; RV64IFD-NEXT:    mv a0, sp
1175 ; RV64IFD-NEXT:    call frexp@plt
1176 ; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1177 ; RV64IFD-NEXT:    addi sp, sp, 16
1178 ; RV64IFD-NEXT:    ret
1180 ; RV32IZFINXZDINX-LABEL: test_frexp_f64_i32_only_use_fract:
1181 ; RV32IZFINXZDINX:       # %bb.0:
1182 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
1183 ; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1184 ; RV32IZFINXZDINX-NEXT:    addi a2, sp, 8
1185 ; RV32IZFINXZDINX-NEXT:    call frexp@plt
1186 ; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1187 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
1188 ; RV32IZFINXZDINX-NEXT:    ret
1190 ; RV64IZFINXZDINX-LABEL: test_frexp_f64_i32_only_use_fract:
1191 ; RV64IZFINXZDINX:       # %bb.0:
1192 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
1193 ; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1194 ; RV64IZFINXZDINX-NEXT:    mv a1, sp
1195 ; RV64IZFINXZDINX-NEXT:    call frexp@plt
1196 ; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1197 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
1198 ; RV64IZFINXZDINX-NEXT:    ret
1200 ; RV32I-LABEL: test_frexp_f64_i32_only_use_fract:
1201 ; RV32I:       # %bb.0:
1202 ; RV32I-NEXT:    addi sp, sp, -16
1203 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1204 ; RV32I-NEXT:    addi a2, sp, 8
1205 ; RV32I-NEXT:    call frexp@plt
1206 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1207 ; RV32I-NEXT:    addi sp, sp, 16
1208 ; RV32I-NEXT:    ret
1210 ; RV64I-LABEL: test_frexp_f64_i32_only_use_fract:
1211 ; RV64I:       # %bb.0:
1212 ; RV64I-NEXT:    addi sp, sp, -16
1213 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1214 ; RV64I-NEXT:    addi a1, sp, 4
1215 ; RV64I-NEXT:    call frexp@plt
1216 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1217 ; RV64I-NEXT:    addi sp, sp, 16
1218 ; RV64I-NEXT:    ret
1219   %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)
1220   %result.0 = extractvalue { double, i32 } %result, 0
1221   ret double %result.0
1224 define i32 @test_frexp_f64_i32_only_use_exp(double %a) nounwind {
1225 ; RV32IFD-LABEL: test_frexp_f64_i32_only_use_exp:
1226 ; RV32IFD:       # %bb.0:
1227 ; RV32IFD-NEXT:    addi sp, sp, -16
1228 ; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1229 ; RV32IFD-NEXT:    addi a0, sp, 8
1230 ; RV32IFD-NEXT:    call frexp@plt
1231 ; RV32IFD-NEXT:    lw a0, 8(sp)
1232 ; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1233 ; RV32IFD-NEXT:    addi sp, sp, 16
1234 ; RV32IFD-NEXT:    ret
1236 ; RV64IFD-LABEL: test_frexp_f64_i32_only_use_exp:
1237 ; RV64IFD:       # %bb.0:
1238 ; RV64IFD-NEXT:    addi sp, sp, -16
1239 ; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1240 ; RV64IFD-NEXT:    mv a0, sp
1241 ; RV64IFD-NEXT:    call frexp@plt
1242 ; RV64IFD-NEXT:    ld a0, 0(sp)
1243 ; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1244 ; RV64IFD-NEXT:    addi sp, sp, 16
1245 ; RV64IFD-NEXT:    ret
1247 ; RV32IZFINXZDINX-LABEL: test_frexp_f64_i32_only_use_exp:
1248 ; RV32IZFINXZDINX:       # %bb.0:
1249 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
1250 ; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1251 ; RV32IZFINXZDINX-NEXT:    addi a2, sp, 8
1252 ; RV32IZFINXZDINX-NEXT:    call frexp@plt
1253 ; RV32IZFINXZDINX-NEXT:    lw a0, 8(sp)
1254 ; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1255 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
1256 ; RV32IZFINXZDINX-NEXT:    ret
1258 ; RV64IZFINXZDINX-LABEL: test_frexp_f64_i32_only_use_exp:
1259 ; RV64IZFINXZDINX:       # %bb.0:
1260 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
1261 ; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1262 ; RV64IZFINXZDINX-NEXT:    mv a1, sp
1263 ; RV64IZFINXZDINX-NEXT:    call frexp@plt
1264 ; RV64IZFINXZDINX-NEXT:    ld a0, 0(sp)
1265 ; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1266 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
1267 ; RV64IZFINXZDINX-NEXT:    ret
1269 ; RV32I-LABEL: test_frexp_f64_i32_only_use_exp:
1270 ; RV32I:       # %bb.0:
1271 ; RV32I-NEXT:    addi sp, sp, -16
1272 ; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1273 ; RV32I-NEXT:    addi a2, sp, 8
1274 ; RV32I-NEXT:    call frexp@plt
1275 ; RV32I-NEXT:    lw a0, 8(sp)
1276 ; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1277 ; RV32I-NEXT:    addi sp, sp, 16
1278 ; RV32I-NEXT:    ret
1280 ; RV64I-LABEL: test_frexp_f64_i32_only_use_exp:
1281 ; RV64I:       # %bb.0:
1282 ; RV64I-NEXT:    addi sp, sp, -16
1283 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1284 ; RV64I-NEXT:    addi a1, sp, 4
1285 ; RV64I-NEXT:    call frexp@plt
1286 ; RV64I-NEXT:    lw a0, 4(sp)
1287 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1288 ; RV64I-NEXT:    addi sp, sp, 16
1289 ; RV64I-NEXT:    ret
1290   %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)
1291   %result.0 = extractvalue { double, i32 } %result, 1
1292   ret i32 %result.0
1295 ; FIXME: Widen vector result
1296 ; define { <2 x double>, <2 x i32> } @test_frexp_v2f64_v2i32(<2 x double> %a) nounwind {
1297 ;   %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)
1298 ;   ret { <2 x double>, <2 x i32> } %result
1299 ; }
1301 ; define <2 x double> @test_frexp_v2f64_v2i32_only_use_fract(<2 x double> %a) nounwind {
1302 ;   %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)
1303 ;   %result.0 = extractvalue { <2 x double>, <2 x i32> } %result, 0
1304 ;   ret <2 x double> %result.0
1305 ; }
1307 ; define <2 x i32> @test_frexp_v2f64_v2i32_only_use_exp(<2 x double> %a) nounwind {
1308 ;   %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)
1309 ;   %result.1 = extractvalue { <2 x double>, <2 x i32> } %result, 1
1310 ;   ret <2 x i32> %result.1
1311 ; }
1313 define { fp128, i32 } @test_frexp_f128_i32(fp128 %a) nounwind {
1314 ; RV32IFD-LABEL: test_frexp_f128_i32:
1315 ; RV32IFD:       # %bb.0:
1316 ; RV32IFD-NEXT:    addi sp, sp, -48
1317 ; RV32IFD-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1318 ; RV32IFD-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1319 ; RV32IFD-NEXT:    lw a3, 0(a1)
1320 ; RV32IFD-NEXT:    lw a2, 4(a1)
1321 ; RV32IFD-NEXT:    lw a4, 8(a1)
1322 ; RV32IFD-NEXT:    lw a1, 12(a1)
1323 ; RV32IFD-NEXT:    mv s0, a0
1324 ; RV32IFD-NEXT:    sw a1, 12(sp)
1325 ; RV32IFD-NEXT:    sw a4, 8(sp)
1326 ; RV32IFD-NEXT:    sw a2, 4(sp)
1327 ; RV32IFD-NEXT:    addi a0, sp, 16
1328 ; RV32IFD-NEXT:    mv a1, sp
1329 ; RV32IFD-NEXT:    addi a2, sp, 36
1330 ; RV32IFD-NEXT:    sw a3, 0(sp)
1331 ; RV32IFD-NEXT:    call frexpl@plt
1332 ; RV32IFD-NEXT:    lw a0, 36(sp)
1333 ; RV32IFD-NEXT:    lw a1, 28(sp)
1334 ; RV32IFD-NEXT:    lw a2, 24(sp)
1335 ; RV32IFD-NEXT:    lw a3, 20(sp)
1336 ; RV32IFD-NEXT:    lw a4, 16(sp)
1337 ; RV32IFD-NEXT:    sw a1, 12(s0)
1338 ; RV32IFD-NEXT:    sw a2, 8(s0)
1339 ; RV32IFD-NEXT:    sw a3, 4(s0)
1340 ; RV32IFD-NEXT:    sw a4, 0(s0)
1341 ; RV32IFD-NEXT:    sw a0, 16(s0)
1342 ; RV32IFD-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1343 ; RV32IFD-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1344 ; RV32IFD-NEXT:    addi sp, sp, 48
1345 ; RV32IFD-NEXT:    ret
1347 ; RV64IFD-LABEL: test_frexp_f128_i32:
1348 ; RV64IFD:       # %bb.0:
1349 ; RV64IFD-NEXT:    addi sp, sp, -32
1350 ; RV64IFD-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
1351 ; RV64IFD-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
1352 ; RV64IFD-NEXT:    mv a3, a2
1353 ; RV64IFD-NEXT:    mv s0, a0
1354 ; RV64IFD-NEXT:    addi a2, sp, 12
1355 ; RV64IFD-NEXT:    mv a0, a1
1356 ; RV64IFD-NEXT:    mv a1, a3
1357 ; RV64IFD-NEXT:    call frexpl@plt
1358 ; RV64IFD-NEXT:    lw a2, 12(sp)
1359 ; RV64IFD-NEXT:    sd a1, 8(s0)
1360 ; RV64IFD-NEXT:    sd a0, 0(s0)
1361 ; RV64IFD-NEXT:    sw a2, 16(s0)
1362 ; RV64IFD-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
1363 ; RV64IFD-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
1364 ; RV64IFD-NEXT:    addi sp, sp, 32
1365 ; RV64IFD-NEXT:    ret
1367 ; RV32IZFINXZDINX-LABEL: test_frexp_f128_i32:
1368 ; RV32IZFINXZDINX:       # %bb.0:
1369 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, -48
1370 ; RV32IZFINXZDINX-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1371 ; RV32IZFINXZDINX-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1372 ; RV32IZFINXZDINX-NEXT:    lw a3, 0(a1)
1373 ; RV32IZFINXZDINX-NEXT:    lw a2, 4(a1)
1374 ; RV32IZFINXZDINX-NEXT:    lw a4, 8(a1)
1375 ; RV32IZFINXZDINX-NEXT:    lw a1, 12(a1)
1376 ; RV32IZFINXZDINX-NEXT:    mv s0, a0
1377 ; RV32IZFINXZDINX-NEXT:    sw a1, 12(sp)
1378 ; RV32IZFINXZDINX-NEXT:    sw a4, 8(sp)
1379 ; RV32IZFINXZDINX-NEXT:    sw a2, 4(sp)
1380 ; RV32IZFINXZDINX-NEXT:    addi a0, sp, 16
1381 ; RV32IZFINXZDINX-NEXT:    mv a1, sp
1382 ; RV32IZFINXZDINX-NEXT:    addi a2, sp, 36
1383 ; RV32IZFINXZDINX-NEXT:    sw a3, 0(sp)
1384 ; RV32IZFINXZDINX-NEXT:    call frexpl@plt
1385 ; RV32IZFINXZDINX-NEXT:    lw a0, 36(sp)
1386 ; RV32IZFINXZDINX-NEXT:    lw a1, 28(sp)
1387 ; RV32IZFINXZDINX-NEXT:    lw a2, 24(sp)
1388 ; RV32IZFINXZDINX-NEXT:    lw a3, 20(sp)
1389 ; RV32IZFINXZDINX-NEXT:    lw a4, 16(sp)
1390 ; RV32IZFINXZDINX-NEXT:    sw a1, 12(s0)
1391 ; RV32IZFINXZDINX-NEXT:    sw a2, 8(s0)
1392 ; RV32IZFINXZDINX-NEXT:    sw a3, 4(s0)
1393 ; RV32IZFINXZDINX-NEXT:    sw a4, 0(s0)
1394 ; RV32IZFINXZDINX-NEXT:    sw a0, 16(s0)
1395 ; RV32IZFINXZDINX-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1396 ; RV32IZFINXZDINX-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1397 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, 48
1398 ; RV32IZFINXZDINX-NEXT:    ret
1400 ; RV64IZFINXZDINX-LABEL: test_frexp_f128_i32:
1401 ; RV64IZFINXZDINX:       # %bb.0:
1402 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, -32
1403 ; RV64IZFINXZDINX-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
1404 ; RV64IZFINXZDINX-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
1405 ; RV64IZFINXZDINX-NEXT:    mv a3, a2
1406 ; RV64IZFINXZDINX-NEXT:    mv s0, a0
1407 ; RV64IZFINXZDINX-NEXT:    addi a2, sp, 12
1408 ; RV64IZFINXZDINX-NEXT:    mv a0, a1
1409 ; RV64IZFINXZDINX-NEXT:    mv a1, a3
1410 ; RV64IZFINXZDINX-NEXT:    call frexpl@plt
1411 ; RV64IZFINXZDINX-NEXT:    lw a2, 12(sp)
1412 ; RV64IZFINXZDINX-NEXT:    sd a1, 8(s0)
1413 ; RV64IZFINXZDINX-NEXT:    sd a0, 0(s0)
1414 ; RV64IZFINXZDINX-NEXT:    sw a2, 16(s0)
1415 ; RV64IZFINXZDINX-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
1416 ; RV64IZFINXZDINX-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
1417 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, 32
1418 ; RV64IZFINXZDINX-NEXT:    ret
1420 ; RV32I-LABEL: test_frexp_f128_i32:
1421 ; RV32I:       # %bb.0:
1422 ; RV32I-NEXT:    addi sp, sp, -48
1423 ; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1424 ; RV32I-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1425 ; RV32I-NEXT:    lw a3, 0(a1)
1426 ; RV32I-NEXT:    lw a2, 4(a1)
1427 ; RV32I-NEXT:    lw a4, 8(a1)
1428 ; RV32I-NEXT:    lw a1, 12(a1)
1429 ; RV32I-NEXT:    mv s0, a0
1430 ; RV32I-NEXT:    sw a1, 12(sp)
1431 ; RV32I-NEXT:    sw a4, 8(sp)
1432 ; RV32I-NEXT:    sw a2, 4(sp)
1433 ; RV32I-NEXT:    addi a0, sp, 16
1434 ; RV32I-NEXT:    mv a1, sp
1435 ; RV32I-NEXT:    addi a2, sp, 36
1436 ; RV32I-NEXT:    sw a3, 0(sp)
1437 ; RV32I-NEXT:    call frexpl@plt
1438 ; RV32I-NEXT:    lw a0, 36(sp)
1439 ; RV32I-NEXT:    lw a1, 28(sp)
1440 ; RV32I-NEXT:    lw a2, 24(sp)
1441 ; RV32I-NEXT:    lw a3, 20(sp)
1442 ; RV32I-NEXT:    lw a4, 16(sp)
1443 ; RV32I-NEXT:    sw a1, 12(s0)
1444 ; RV32I-NEXT:    sw a2, 8(s0)
1445 ; RV32I-NEXT:    sw a3, 4(s0)
1446 ; RV32I-NEXT:    sw a4, 0(s0)
1447 ; RV32I-NEXT:    sw a0, 16(s0)
1448 ; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1449 ; RV32I-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1450 ; RV32I-NEXT:    addi sp, sp, 48
1451 ; RV32I-NEXT:    ret
1453 ; RV64I-LABEL: test_frexp_f128_i32:
1454 ; RV64I:       # %bb.0:
1455 ; RV64I-NEXT:    addi sp, sp, -32
1456 ; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
1457 ; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
1458 ; RV64I-NEXT:    mv a3, a2
1459 ; RV64I-NEXT:    mv s0, a0
1460 ; RV64I-NEXT:    addi a2, sp, 12
1461 ; RV64I-NEXT:    mv a0, a1
1462 ; RV64I-NEXT:    mv a1, a3
1463 ; RV64I-NEXT:    call frexpl@plt
1464 ; RV64I-NEXT:    lw a2, 12(sp)
1465 ; RV64I-NEXT:    sd a1, 8(s0)
1466 ; RV64I-NEXT:    sd a0, 0(s0)
1467 ; RV64I-NEXT:    sw a2, 16(s0)
1468 ; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
1469 ; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
1470 ; RV64I-NEXT:    addi sp, sp, 32
1471 ; RV64I-NEXT:    ret
1472   %result = call { fp128, i32 } @llvm.frexp.f128.i32(fp128 %a)
1473   ret { fp128, i32 } %result
1476 define fp128 @test_frexp_f128_i32_only_use_fract(fp128 %a) nounwind {
1477 ; RV32IFD-LABEL: test_frexp_f128_i32_only_use_fract:
1478 ; RV32IFD:       # %bb.0:
1479 ; RV32IFD-NEXT:    addi sp, sp, -48
1480 ; RV32IFD-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1481 ; RV32IFD-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1482 ; RV32IFD-NEXT:    lw a3, 0(a1)
1483 ; RV32IFD-NEXT:    lw a2, 4(a1)
1484 ; RV32IFD-NEXT:    lw a4, 8(a1)
1485 ; RV32IFD-NEXT:    lw a1, 12(a1)
1486 ; RV32IFD-NEXT:    mv s0, a0
1487 ; RV32IFD-NEXT:    sw a1, 12(sp)
1488 ; RV32IFD-NEXT:    sw a4, 8(sp)
1489 ; RV32IFD-NEXT:    sw a2, 4(sp)
1490 ; RV32IFD-NEXT:    addi a0, sp, 16
1491 ; RV32IFD-NEXT:    mv a1, sp
1492 ; RV32IFD-NEXT:    addi a2, sp, 36
1493 ; RV32IFD-NEXT:    sw a3, 0(sp)
1494 ; RV32IFD-NEXT:    call frexpl@plt
1495 ; RV32IFD-NEXT:    lw a0, 28(sp)
1496 ; RV32IFD-NEXT:    lw a1, 24(sp)
1497 ; RV32IFD-NEXT:    lw a2, 20(sp)
1498 ; RV32IFD-NEXT:    lw a3, 16(sp)
1499 ; RV32IFD-NEXT:    sw a0, 12(s0)
1500 ; RV32IFD-NEXT:    sw a1, 8(s0)
1501 ; RV32IFD-NEXT:    sw a2, 4(s0)
1502 ; RV32IFD-NEXT:    sw a3, 0(s0)
1503 ; RV32IFD-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1504 ; RV32IFD-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1505 ; RV32IFD-NEXT:    addi sp, sp, 48
1506 ; RV32IFD-NEXT:    ret
1508 ; RV64IFD-LABEL: test_frexp_f128_i32_only_use_fract:
1509 ; RV64IFD:       # %bb.0:
1510 ; RV64IFD-NEXT:    addi sp, sp, -16
1511 ; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1512 ; RV64IFD-NEXT:    addi a2, sp, 4
1513 ; RV64IFD-NEXT:    call frexpl@plt
1514 ; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1515 ; RV64IFD-NEXT:    addi sp, sp, 16
1516 ; RV64IFD-NEXT:    ret
1518 ; RV32IZFINXZDINX-LABEL: test_frexp_f128_i32_only_use_fract:
1519 ; RV32IZFINXZDINX:       # %bb.0:
1520 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, -48
1521 ; RV32IZFINXZDINX-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1522 ; RV32IZFINXZDINX-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1523 ; RV32IZFINXZDINX-NEXT:    lw a3, 0(a1)
1524 ; RV32IZFINXZDINX-NEXT:    lw a2, 4(a1)
1525 ; RV32IZFINXZDINX-NEXT:    lw a4, 8(a1)
1526 ; RV32IZFINXZDINX-NEXT:    lw a1, 12(a1)
1527 ; RV32IZFINXZDINX-NEXT:    mv s0, a0
1528 ; RV32IZFINXZDINX-NEXT:    sw a1, 12(sp)
1529 ; RV32IZFINXZDINX-NEXT:    sw a4, 8(sp)
1530 ; RV32IZFINXZDINX-NEXT:    sw a2, 4(sp)
1531 ; RV32IZFINXZDINX-NEXT:    addi a0, sp, 16
1532 ; RV32IZFINXZDINX-NEXT:    mv a1, sp
1533 ; RV32IZFINXZDINX-NEXT:    addi a2, sp, 36
1534 ; RV32IZFINXZDINX-NEXT:    sw a3, 0(sp)
1535 ; RV32IZFINXZDINX-NEXT:    call frexpl@plt
1536 ; RV32IZFINXZDINX-NEXT:    lw a0, 28(sp)
1537 ; RV32IZFINXZDINX-NEXT:    lw a1, 24(sp)
1538 ; RV32IZFINXZDINX-NEXT:    lw a2, 20(sp)
1539 ; RV32IZFINXZDINX-NEXT:    lw a3, 16(sp)
1540 ; RV32IZFINXZDINX-NEXT:    sw a0, 12(s0)
1541 ; RV32IZFINXZDINX-NEXT:    sw a1, 8(s0)
1542 ; RV32IZFINXZDINX-NEXT:    sw a2, 4(s0)
1543 ; RV32IZFINXZDINX-NEXT:    sw a3, 0(s0)
1544 ; RV32IZFINXZDINX-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1545 ; RV32IZFINXZDINX-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1546 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, 48
1547 ; RV32IZFINXZDINX-NEXT:    ret
1549 ; RV64IZFINXZDINX-LABEL: test_frexp_f128_i32_only_use_fract:
1550 ; RV64IZFINXZDINX:       # %bb.0:
1551 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
1552 ; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1553 ; RV64IZFINXZDINX-NEXT:    addi a2, sp, 4
1554 ; RV64IZFINXZDINX-NEXT:    call frexpl@plt
1555 ; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1556 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
1557 ; RV64IZFINXZDINX-NEXT:    ret
1559 ; RV32I-LABEL: test_frexp_f128_i32_only_use_fract:
1560 ; RV32I:       # %bb.0:
1561 ; RV32I-NEXT:    addi sp, sp, -48
1562 ; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1563 ; RV32I-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1564 ; RV32I-NEXT:    lw a3, 0(a1)
1565 ; RV32I-NEXT:    lw a2, 4(a1)
1566 ; RV32I-NEXT:    lw a4, 8(a1)
1567 ; RV32I-NEXT:    lw a1, 12(a1)
1568 ; RV32I-NEXT:    mv s0, a0
1569 ; RV32I-NEXT:    sw a1, 12(sp)
1570 ; RV32I-NEXT:    sw a4, 8(sp)
1571 ; RV32I-NEXT:    sw a2, 4(sp)
1572 ; RV32I-NEXT:    addi a0, sp, 16
1573 ; RV32I-NEXT:    mv a1, sp
1574 ; RV32I-NEXT:    addi a2, sp, 36
1575 ; RV32I-NEXT:    sw a3, 0(sp)
1576 ; RV32I-NEXT:    call frexpl@plt
1577 ; RV32I-NEXT:    lw a0, 28(sp)
1578 ; RV32I-NEXT:    lw a1, 24(sp)
1579 ; RV32I-NEXT:    lw a2, 20(sp)
1580 ; RV32I-NEXT:    lw a3, 16(sp)
1581 ; RV32I-NEXT:    sw a0, 12(s0)
1582 ; RV32I-NEXT:    sw a1, 8(s0)
1583 ; RV32I-NEXT:    sw a2, 4(s0)
1584 ; RV32I-NEXT:    sw a3, 0(s0)
1585 ; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1586 ; RV32I-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1587 ; RV32I-NEXT:    addi sp, sp, 48
1588 ; RV32I-NEXT:    ret
1590 ; RV64I-LABEL: test_frexp_f128_i32_only_use_fract:
1591 ; RV64I:       # %bb.0:
1592 ; RV64I-NEXT:    addi sp, sp, -16
1593 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1594 ; RV64I-NEXT:    addi a2, sp, 4
1595 ; RV64I-NEXT:    call frexpl@plt
1596 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1597 ; RV64I-NEXT:    addi sp, sp, 16
1598 ; RV64I-NEXT:    ret
1599   %result = call { fp128, i32 } @llvm.frexp.f128.i32(fp128 %a)
1600   %result.0 = extractvalue { fp128, i32 } %result, 0
1601   ret fp128 %result.0
1604 define i32 @test_frexp_f128_i32_only_use_exp(fp128 %a) nounwind {
1605 ; RV32IFD-LABEL: test_frexp_f128_i32_only_use_exp:
1606 ; RV32IFD:       # %bb.0:
1607 ; RV32IFD-NEXT:    addi sp, sp, -48
1608 ; RV32IFD-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1609 ; RV32IFD-NEXT:    lw a3, 0(a0)
1610 ; RV32IFD-NEXT:    lw a1, 4(a0)
1611 ; RV32IFD-NEXT:    lw a2, 8(a0)
1612 ; RV32IFD-NEXT:    lw a0, 12(a0)
1613 ; RV32IFD-NEXT:    sw a0, 20(sp)
1614 ; RV32IFD-NEXT:    sw a2, 16(sp)
1615 ; RV32IFD-NEXT:    sw a1, 12(sp)
1616 ; RV32IFD-NEXT:    addi a0, sp, 24
1617 ; RV32IFD-NEXT:    addi a1, sp, 8
1618 ; RV32IFD-NEXT:    addi a2, sp, 40
1619 ; RV32IFD-NEXT:    sw a3, 8(sp)
1620 ; RV32IFD-NEXT:    call frexpl@plt
1621 ; RV32IFD-NEXT:    lw a0, 40(sp)
1622 ; RV32IFD-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1623 ; RV32IFD-NEXT:    addi sp, sp, 48
1624 ; RV32IFD-NEXT:    ret
1626 ; RV64IFD-LABEL: test_frexp_f128_i32_only_use_exp:
1627 ; RV64IFD:       # %bb.0:
1628 ; RV64IFD-NEXT:    addi sp, sp, -16
1629 ; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1630 ; RV64IFD-NEXT:    addi a2, sp, 4
1631 ; RV64IFD-NEXT:    call frexpl@plt
1632 ; RV64IFD-NEXT:    lw a0, 4(sp)
1633 ; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1634 ; RV64IFD-NEXT:    addi sp, sp, 16
1635 ; RV64IFD-NEXT:    ret
1637 ; RV32IZFINXZDINX-LABEL: test_frexp_f128_i32_only_use_exp:
1638 ; RV32IZFINXZDINX:       # %bb.0:
1639 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, -48
1640 ; RV32IZFINXZDINX-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1641 ; RV32IZFINXZDINX-NEXT:    lw a3, 0(a0)
1642 ; RV32IZFINXZDINX-NEXT:    lw a1, 4(a0)
1643 ; RV32IZFINXZDINX-NEXT:    lw a2, 8(a0)
1644 ; RV32IZFINXZDINX-NEXT:    lw a0, 12(a0)
1645 ; RV32IZFINXZDINX-NEXT:    sw a0, 20(sp)
1646 ; RV32IZFINXZDINX-NEXT:    sw a2, 16(sp)
1647 ; RV32IZFINXZDINX-NEXT:    sw a1, 12(sp)
1648 ; RV32IZFINXZDINX-NEXT:    addi a0, sp, 24
1649 ; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
1650 ; RV32IZFINXZDINX-NEXT:    addi a2, sp, 40
1651 ; RV32IZFINXZDINX-NEXT:    sw a3, 8(sp)
1652 ; RV32IZFINXZDINX-NEXT:    call frexpl@plt
1653 ; RV32IZFINXZDINX-NEXT:    lw a0, 40(sp)
1654 ; RV32IZFINXZDINX-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1655 ; RV32IZFINXZDINX-NEXT:    addi sp, sp, 48
1656 ; RV32IZFINXZDINX-NEXT:    ret
1658 ; RV64IZFINXZDINX-LABEL: test_frexp_f128_i32_only_use_exp:
1659 ; RV64IZFINXZDINX:       # %bb.0:
1660 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
1661 ; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1662 ; RV64IZFINXZDINX-NEXT:    addi a2, sp, 4
1663 ; RV64IZFINXZDINX-NEXT:    call frexpl@plt
1664 ; RV64IZFINXZDINX-NEXT:    lw a0, 4(sp)
1665 ; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1666 ; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
1667 ; RV64IZFINXZDINX-NEXT:    ret
1669 ; RV32I-LABEL: test_frexp_f128_i32_only_use_exp:
1670 ; RV32I:       # %bb.0:
1671 ; RV32I-NEXT:    addi sp, sp, -48
1672 ; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1673 ; RV32I-NEXT:    lw a3, 0(a0)
1674 ; RV32I-NEXT:    lw a1, 4(a0)
1675 ; RV32I-NEXT:    lw a2, 8(a0)
1676 ; RV32I-NEXT:    lw a0, 12(a0)
1677 ; RV32I-NEXT:    sw a0, 20(sp)
1678 ; RV32I-NEXT:    sw a2, 16(sp)
1679 ; RV32I-NEXT:    sw a1, 12(sp)
1680 ; RV32I-NEXT:    addi a0, sp, 24
1681 ; RV32I-NEXT:    addi a1, sp, 8
1682 ; RV32I-NEXT:    addi a2, sp, 40
1683 ; RV32I-NEXT:    sw a3, 8(sp)
1684 ; RV32I-NEXT:    call frexpl@plt
1685 ; RV32I-NEXT:    lw a0, 40(sp)
1686 ; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1687 ; RV32I-NEXT:    addi sp, sp, 48
1688 ; RV32I-NEXT:    ret
1690 ; RV64I-LABEL: test_frexp_f128_i32_only_use_exp:
1691 ; RV64I:       # %bb.0:
1692 ; RV64I-NEXT:    addi sp, sp, -16
1693 ; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1694 ; RV64I-NEXT:    addi a2, sp, 4
1695 ; RV64I-NEXT:    call frexpl@plt
1696 ; RV64I-NEXT:    lw a0, 4(sp)
1697 ; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1698 ; RV64I-NEXT:    addi sp, sp, 16
1699 ; RV64I-NEXT:    ret
1700   %result = call { fp128, i32 } @llvm.frexp.f128.i32(fp128 %a)
1701   %result.0 = extractvalue { fp128, i32 } %result, 1
1702   ret i32 %result.0
1705 declare { float, i32 } @llvm.frexp.f32.i32(float) #0
1706 declare { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float>) #0
1707 declare { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float>) #0
1709 declare { half, i32 } @llvm.frexp.f16.i32(half) #0
1710 declare { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half>) #0
1712 declare { double, i32 } @llvm.frexp.f64.i32(double) #0
1713 declare { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double>) #0
1715 declare { half, i16 } @llvm.frexp.f16.i16(half) #0
1716 declare { <2 x half>, <2 x i16> } @llvm.frexp.v2f16.v2i16(<2 x half>) #0
1718 declare { fp128, i32 } @llvm.frexp.f128.i32(fp128) #0
1720 attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }