xref: /llvm-project/llvm/test/CodeGen/RISCV/llvm.frexp.ll (revision a7dafea384a519342b2fbe210ed101c1e67f3be7)
17de4c6f8SAlex Bradbury; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
27de4c6f8SAlex Bradbury; RUN: llc -mtriple=riscv32 -mattr=+d \
37de4c6f8SAlex Bradbury; RUN:   -verify-machineinstrs -target-abi=ilp32d < %s \
47de4c6f8SAlex Bradbury; RUN:   | FileCheck -check-prefix=RV32IFD %s
57de4c6f8SAlex Bradbury; RUN: llc -mtriple=riscv64 -mattr=+d \
67de4c6f8SAlex Bradbury; RUN:   -verify-machineinstrs -target-abi=lp64d < %s \
77de4c6f8SAlex Bradbury; RUN:   | FileCheck -check-prefix=RV64IFD %s
87de4c6f8SAlex Bradbury; RUN: llc -mtriple=riscv32 -mattr=+zdinx \
97de4c6f8SAlex Bradbury; RUN:   -verify-machineinstrs -target-abi=ilp32 < %s \
107de4c6f8SAlex Bradbury; RUN:   | FileCheck -check-prefix=RV32IZFINXZDINX %s
117de4c6f8SAlex Bradbury; RUN: llc -mtriple=riscv64 -mattr=+zdinx \
127de4c6f8SAlex Bradbury; RUN:   -verify-machineinstrs -target-abi=lp64 < %s \
137de4c6f8SAlex Bradbury; RUN:   | FileCheck -check-prefix=RV64IZFINXZDINX %s
14619c6c0eSAlex Bradbury; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \
15619c6c0eSAlex Bradbury; RUN:   | FileCheck -check-prefix=RV32I %s
16619c6c0eSAlex Bradbury; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
17619c6c0eSAlex Bradbury; RUN:   | FileCheck -check-prefix=RV64I %s
187de4c6f8SAlex Bradbury
197de4c6f8SAlex Bradbury; TODO: FIXMEs are copied blindly across from the X86 version of this test.
207de4c6f8SAlex Bradbury
2103edfe61SHarald van Dijkdefine { half, i32 } @test_frexp_f16_i32(half %a) nounwind {
2203edfe61SHarald van Dijk; RV32IFD-LABEL: test_frexp_f16_i32:
2303edfe61SHarald van Dijk; RV32IFD:       # %bb.0:
2403edfe61SHarald van Dijk; RV32IFD-NEXT:    addi sp, sp, -16
2503edfe61SHarald van Dijk; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
26eabaee0cSFangrui Song; RV32IFD-NEXT:    call __extendhfsf2
2703edfe61SHarald van Dijk; RV32IFD-NEXT:    addi a0, sp, 8
28eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
29eabaee0cSFangrui Song; RV32IFD-NEXT:    call __truncsfhf2
3003edfe61SHarald van Dijk; RV32IFD-NEXT:    fmv.x.w a1, fa0
3103edfe61SHarald van Dijk; RV32IFD-NEXT:    lw a0, 8(sp)
3203edfe61SHarald van Dijk; RV32IFD-NEXT:    lui a2, 1048560
3303edfe61SHarald van Dijk; RV32IFD-NEXT:    or a1, a1, a2
3403edfe61SHarald van Dijk; RV32IFD-NEXT:    fmv.w.x fa0, a1
3503edfe61SHarald van Dijk; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
3603edfe61SHarald van Dijk; RV32IFD-NEXT:    addi sp, sp, 16
3703edfe61SHarald van Dijk; RV32IFD-NEXT:    ret
3803edfe61SHarald van Dijk;
3903edfe61SHarald van Dijk; RV64IFD-LABEL: test_frexp_f16_i32:
4003edfe61SHarald van Dijk; RV64IFD:       # %bb.0:
4103edfe61SHarald van Dijk; RV64IFD-NEXT:    addi sp, sp, -16
4203edfe61SHarald van Dijk; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
43eabaee0cSFangrui Song; RV64IFD-NEXT:    call __extendhfsf2
4403edfe61SHarald van Dijk; RV64IFD-NEXT:    mv a0, sp
45eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
46eabaee0cSFangrui Song; RV64IFD-NEXT:    call __truncsfhf2
4703edfe61SHarald van Dijk; RV64IFD-NEXT:    fmv.x.w a1, fa0
4803edfe61SHarald van Dijk; RV64IFD-NEXT:    ld a0, 0(sp)
4903edfe61SHarald van Dijk; RV64IFD-NEXT:    lui a2, 1048560
5003edfe61SHarald van Dijk; RV64IFD-NEXT:    or a1, a1, a2
5103edfe61SHarald van Dijk; RV64IFD-NEXT:    fmv.w.x fa0, a1
5203edfe61SHarald van Dijk; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
5303edfe61SHarald van Dijk; RV64IFD-NEXT:    addi sp, sp, 16
5403edfe61SHarald van Dijk; RV64IFD-NEXT:    ret
5503edfe61SHarald van Dijk;
5603edfe61SHarald van Dijk; RV32IZFINXZDINX-LABEL: test_frexp_f16_i32:
5703edfe61SHarald van Dijk; RV32IZFINXZDINX:       # %bb.0:
5803edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
5903edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
60eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __extendhfsf2
6103edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
62eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
63eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __truncsfhf2
64bc91f3cdSCraig Topper; RV32IZFINXZDINX-NEXT:    # kill: def $x10_w killed $x10_w def $x10
659122c523SPengcheng Wang; RV32IZFINXZDINX-NEXT:    lw a1, 8(sp)
6603edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    lui a2, 1048560
6703edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    or a0, a0, a2
68bc91f3cdSCraig Topper; RV32IZFINXZDINX-NEXT:    # kill: def $x10_w killed $x10_w killed $x10
6903edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
7003edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
7103edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    ret
7203edfe61SHarald van Dijk;
7303edfe61SHarald van Dijk; RV64IZFINXZDINX-LABEL: test_frexp_f16_i32:
7403edfe61SHarald van Dijk; RV64IZFINXZDINX:       # %bb.0:
7503edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
7603edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
77eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call __extendhfsf2
7803edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    mv a1, sp
79eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
80eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call __truncsfhf2
81bc91f3cdSCraig Topper; RV64IZFINXZDINX-NEXT:    # kill: def $x10_w killed $x10_w def $x10
829122c523SPengcheng Wang; RV64IZFINXZDINX-NEXT:    ld a1, 0(sp)
8303edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    lui a2, 1048560
8403edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    or a0, a0, a2
85bc91f3cdSCraig Topper; RV64IZFINXZDINX-NEXT:    # kill: def $x10_w killed $x10_w killed $x10
8603edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
8703edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
8803edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    ret
8903edfe61SHarald van Dijk;
9003edfe61SHarald van Dijk; RV32I-LABEL: test_frexp_f16_i32:
9103edfe61SHarald van Dijk; RV32I:       # %bb.0:
9203edfe61SHarald van Dijk; RV32I-NEXT:    addi sp, sp, -16
9303edfe61SHarald van Dijk; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
9403edfe61SHarald van Dijk; RV32I-NEXT:    slli a0, a0, 16
9503edfe61SHarald van Dijk; RV32I-NEXT:    srli a0, a0, 16
96eabaee0cSFangrui Song; RV32I-NEXT:    call __extendhfsf2
9703edfe61SHarald van Dijk; RV32I-NEXT:    addi a1, sp, 8
98eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
99eabaee0cSFangrui Song; RV32I-NEXT:    call __truncsfhf2
10003edfe61SHarald van Dijk; RV32I-NEXT:    lw a1, 8(sp)
10103edfe61SHarald van Dijk; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
10203edfe61SHarald van Dijk; RV32I-NEXT:    addi sp, sp, 16
10303edfe61SHarald van Dijk; RV32I-NEXT:    ret
10403edfe61SHarald van Dijk;
10503edfe61SHarald van Dijk; RV64I-LABEL: test_frexp_f16_i32:
10603edfe61SHarald van Dijk; RV64I:       # %bb.0:
10703edfe61SHarald van Dijk; RV64I-NEXT:    addi sp, sp, -16
10803edfe61SHarald van Dijk; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
10903edfe61SHarald van Dijk; RV64I-NEXT:    slli a0, a0, 48
11003edfe61SHarald van Dijk; RV64I-NEXT:    srli a0, a0, 48
111eabaee0cSFangrui Song; RV64I-NEXT:    call __extendhfsf2
11203edfe61SHarald van Dijk; RV64I-NEXT:    addi a1, sp, 4
113eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
114eabaee0cSFangrui Song; RV64I-NEXT:    call __truncsfhf2
11503edfe61SHarald van Dijk; RV64I-NEXT:    lw a1, 4(sp)
11603edfe61SHarald van Dijk; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
11703edfe61SHarald van Dijk; RV64I-NEXT:    addi sp, sp, 16
11803edfe61SHarald van Dijk; RV64I-NEXT:    ret
11903edfe61SHarald van Dijk  %result = call { half, i32 } @llvm.frexp.f16.i32(half %a)
12003edfe61SHarald van Dijk  ret { half, i32 } %result
12103edfe61SHarald van Dijk}
12203edfe61SHarald van Dijk
12303edfe61SHarald van Dijkdefine half @test_frexp_f16_i32_only_use_fract(half %a) nounwind {
12403edfe61SHarald van Dijk; RV32IFD-LABEL: test_frexp_f16_i32_only_use_fract:
12503edfe61SHarald van Dijk; RV32IFD:       # %bb.0:
12603edfe61SHarald van Dijk; RV32IFD-NEXT:    addi sp, sp, -16
12703edfe61SHarald van Dijk; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
128eabaee0cSFangrui Song; RV32IFD-NEXT:    call __extendhfsf2
12903edfe61SHarald van Dijk; RV32IFD-NEXT:    addi a0, sp, 8
130eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
131eabaee0cSFangrui Song; RV32IFD-NEXT:    call __truncsfhf2
13203edfe61SHarald van Dijk; RV32IFD-NEXT:    fmv.x.w a0, fa0
13303edfe61SHarald van Dijk; RV32IFD-NEXT:    lui a1, 1048560
13403edfe61SHarald van Dijk; RV32IFD-NEXT:    or a0, a0, a1
13503edfe61SHarald van Dijk; RV32IFD-NEXT:    fmv.w.x fa0, a0
13603edfe61SHarald van Dijk; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
13703edfe61SHarald van Dijk; RV32IFD-NEXT:    addi sp, sp, 16
13803edfe61SHarald van Dijk; RV32IFD-NEXT:    ret
13903edfe61SHarald van Dijk;
14003edfe61SHarald van Dijk; RV64IFD-LABEL: test_frexp_f16_i32_only_use_fract:
14103edfe61SHarald van Dijk; RV64IFD:       # %bb.0:
14203edfe61SHarald van Dijk; RV64IFD-NEXT:    addi sp, sp, -16
14303edfe61SHarald van Dijk; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
144eabaee0cSFangrui Song; RV64IFD-NEXT:    call __extendhfsf2
14503edfe61SHarald van Dijk; RV64IFD-NEXT:    mv a0, sp
146eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
147eabaee0cSFangrui Song; RV64IFD-NEXT:    call __truncsfhf2
14803edfe61SHarald van Dijk; RV64IFD-NEXT:    fmv.x.w a0, fa0
14903edfe61SHarald van Dijk; RV64IFD-NEXT:    lui a1, 1048560
15003edfe61SHarald van Dijk; RV64IFD-NEXT:    or a0, a0, a1
15103edfe61SHarald van Dijk; RV64IFD-NEXT:    fmv.w.x fa0, a0
15203edfe61SHarald van Dijk; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
15303edfe61SHarald van Dijk; RV64IFD-NEXT:    addi sp, sp, 16
15403edfe61SHarald van Dijk; RV64IFD-NEXT:    ret
15503edfe61SHarald van Dijk;
15603edfe61SHarald van Dijk; RV32IZFINXZDINX-LABEL: test_frexp_f16_i32_only_use_fract:
15703edfe61SHarald van Dijk; RV32IZFINXZDINX:       # %bb.0:
15803edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
15903edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
160eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __extendhfsf2
16103edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
162eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
163eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __truncsfhf2
164bc91f3cdSCraig Topper; RV32IZFINXZDINX-NEXT:    # kill: def $x10_w killed $x10_w def $x10
16503edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    lui a1, 1048560
16603edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    or a0, a0, a1
167bc91f3cdSCraig Topper; RV32IZFINXZDINX-NEXT:    # kill: def $x10_w killed $x10_w killed $x10
16803edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
16903edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
17003edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    ret
17103edfe61SHarald van Dijk;
17203edfe61SHarald van Dijk; RV64IZFINXZDINX-LABEL: test_frexp_f16_i32_only_use_fract:
17303edfe61SHarald van Dijk; RV64IZFINXZDINX:       # %bb.0:
17403edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
17503edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
176eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call __extendhfsf2
17703edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    mv a1, sp
178eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
179eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call __truncsfhf2
180bc91f3cdSCraig Topper; RV64IZFINXZDINX-NEXT:    # kill: def $x10_w killed $x10_w def $x10
18103edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    lui a1, 1048560
18203edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    or a0, a0, a1
183bc91f3cdSCraig Topper; RV64IZFINXZDINX-NEXT:    # kill: def $x10_w killed $x10_w killed $x10
18403edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
18503edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
18603edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    ret
18703edfe61SHarald van Dijk;
18803edfe61SHarald van Dijk; RV32I-LABEL: test_frexp_f16_i32_only_use_fract:
18903edfe61SHarald van Dijk; RV32I:       # %bb.0:
19003edfe61SHarald van Dijk; RV32I-NEXT:    addi sp, sp, -16
19103edfe61SHarald van Dijk; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
19203edfe61SHarald van Dijk; RV32I-NEXT:    slli a0, a0, 16
19303edfe61SHarald van Dijk; RV32I-NEXT:    srli a0, a0, 16
194eabaee0cSFangrui Song; RV32I-NEXT:    call __extendhfsf2
19503edfe61SHarald van Dijk; RV32I-NEXT:    addi a1, sp, 8
196eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
197eabaee0cSFangrui Song; RV32I-NEXT:    call __truncsfhf2
19803edfe61SHarald van Dijk; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
19903edfe61SHarald van Dijk; RV32I-NEXT:    addi sp, sp, 16
20003edfe61SHarald van Dijk; RV32I-NEXT:    ret
20103edfe61SHarald van Dijk;
20203edfe61SHarald van Dijk; RV64I-LABEL: test_frexp_f16_i32_only_use_fract:
20303edfe61SHarald van Dijk; RV64I:       # %bb.0:
20403edfe61SHarald van Dijk; RV64I-NEXT:    addi sp, sp, -16
20503edfe61SHarald van Dijk; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
20603edfe61SHarald van Dijk; RV64I-NEXT:    slli a0, a0, 48
20703edfe61SHarald van Dijk; RV64I-NEXT:    srli a0, a0, 48
208eabaee0cSFangrui Song; RV64I-NEXT:    call __extendhfsf2
20903edfe61SHarald van Dijk; RV64I-NEXT:    addi a1, sp, 4
210eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
211eabaee0cSFangrui Song; RV64I-NEXT:    call __truncsfhf2
21203edfe61SHarald van Dijk; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
21303edfe61SHarald van Dijk; RV64I-NEXT:    addi sp, sp, 16
21403edfe61SHarald van Dijk; RV64I-NEXT:    ret
21503edfe61SHarald van Dijk  %result = call { half, i32 } @llvm.frexp.f16.i32(half %a)
21603edfe61SHarald van Dijk  %result.0 = extractvalue { half, i32 } %result, 0
21703edfe61SHarald van Dijk  ret half %result.0
21803edfe61SHarald van Dijk}
21903edfe61SHarald van Dijk
22003edfe61SHarald van Dijkdefine i32 @test_frexp_f16_i32_only_use_exp(half %a) nounwind {
22103edfe61SHarald van Dijk; RV32IFD-LABEL: test_frexp_f16_i32_only_use_exp:
22203edfe61SHarald van Dijk; RV32IFD:       # %bb.0:
22303edfe61SHarald van Dijk; RV32IFD-NEXT:    addi sp, sp, -16
22403edfe61SHarald van Dijk; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
225eabaee0cSFangrui Song; RV32IFD-NEXT:    call __extendhfsf2
22603edfe61SHarald van Dijk; RV32IFD-NEXT:    addi a0, sp, 8
227eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
22803edfe61SHarald van Dijk; RV32IFD-NEXT:    lw a0, 8(sp)
22903edfe61SHarald van Dijk; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
23003edfe61SHarald van Dijk; RV32IFD-NEXT:    addi sp, sp, 16
23103edfe61SHarald van Dijk; RV32IFD-NEXT:    ret
23203edfe61SHarald van Dijk;
23303edfe61SHarald van Dijk; RV64IFD-LABEL: test_frexp_f16_i32_only_use_exp:
23403edfe61SHarald van Dijk; RV64IFD:       # %bb.0:
23503edfe61SHarald van Dijk; RV64IFD-NEXT:    addi sp, sp, -16
23603edfe61SHarald van Dijk; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
237eabaee0cSFangrui Song; RV64IFD-NEXT:    call __extendhfsf2
23803edfe61SHarald van Dijk; RV64IFD-NEXT:    mv a0, sp
239eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
24003edfe61SHarald van Dijk; RV64IFD-NEXT:    ld a0, 0(sp)
24103edfe61SHarald van Dijk; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
24203edfe61SHarald van Dijk; RV64IFD-NEXT:    addi sp, sp, 16
24303edfe61SHarald van Dijk; RV64IFD-NEXT:    ret
24403edfe61SHarald van Dijk;
24503edfe61SHarald van Dijk; RV32IZFINXZDINX-LABEL: test_frexp_f16_i32_only_use_exp:
24603edfe61SHarald van Dijk; RV32IZFINXZDINX:       # %bb.0:
24703edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
24803edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
249eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call __extendhfsf2
25003edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
251eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
25203edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    lw a0, 8(sp)
25303edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
25403edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
25503edfe61SHarald van Dijk; RV32IZFINXZDINX-NEXT:    ret
25603edfe61SHarald van Dijk;
25703edfe61SHarald van Dijk; RV64IZFINXZDINX-LABEL: test_frexp_f16_i32_only_use_exp:
25803edfe61SHarald van Dijk; RV64IZFINXZDINX:       # %bb.0:
25903edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
26003edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
261eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call __extendhfsf2
26203edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    mv a1, sp
263eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
26403edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    ld a0, 0(sp)
26503edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
26603edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
26703edfe61SHarald van Dijk; RV64IZFINXZDINX-NEXT:    ret
26803edfe61SHarald van Dijk;
26903edfe61SHarald van Dijk; RV32I-LABEL: test_frexp_f16_i32_only_use_exp:
27003edfe61SHarald van Dijk; RV32I:       # %bb.0:
27103edfe61SHarald van Dijk; RV32I-NEXT:    addi sp, sp, -16
27203edfe61SHarald van Dijk; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
27303edfe61SHarald van Dijk; RV32I-NEXT:    slli a0, a0, 16
27403edfe61SHarald van Dijk; RV32I-NEXT:    srli a0, a0, 16
275eabaee0cSFangrui Song; RV32I-NEXT:    call __extendhfsf2
27603edfe61SHarald van Dijk; RV32I-NEXT:    addi a1, sp, 8
277eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
27803edfe61SHarald van Dijk; RV32I-NEXT:    lw a0, 8(sp)
27903edfe61SHarald van Dijk; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
28003edfe61SHarald van Dijk; RV32I-NEXT:    addi sp, sp, 16
28103edfe61SHarald van Dijk; RV32I-NEXT:    ret
28203edfe61SHarald van Dijk;
28303edfe61SHarald van Dijk; RV64I-LABEL: test_frexp_f16_i32_only_use_exp:
28403edfe61SHarald van Dijk; RV64I:       # %bb.0:
28503edfe61SHarald van Dijk; RV64I-NEXT:    addi sp, sp, -16
28603edfe61SHarald van Dijk; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
28703edfe61SHarald van Dijk; RV64I-NEXT:    slli a0, a0, 48
28803edfe61SHarald van Dijk; RV64I-NEXT:    srli a0, a0, 48
289eabaee0cSFangrui Song; RV64I-NEXT:    call __extendhfsf2
29003edfe61SHarald van Dijk; RV64I-NEXT:    addi a1, sp, 4
291eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
29203edfe61SHarald van Dijk; RV64I-NEXT:    lw a0, 4(sp)
29303edfe61SHarald van Dijk; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
29403edfe61SHarald van Dijk; RV64I-NEXT:    addi sp, sp, 16
29503edfe61SHarald van Dijk; RV64I-NEXT:    ret
29603edfe61SHarald van Dijk  %result = call { half, i32 } @llvm.frexp.f16.i32(half %a)
29703edfe61SHarald van Dijk  %result.0 = extractvalue { half, i32 } %result, 1
29803edfe61SHarald van Dijk  ret i32 %result.0
29903edfe61SHarald van Dijk}
30003edfe61SHarald van Dijk
3017de4c6f8SAlex Bradbury; FIXME
3027de4c6f8SAlex Bradbury; define { <2 x half>, <2 x i32> } @test_frexp_v2f16_v2i32(<2 x half> %a) nounwind {
3037de4c6f8SAlex Bradbury;   %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)
3047de4c6f8SAlex Bradbury;   ret { <2 x half>, <2 x i32> } %result
3057de4c6f8SAlex Bradbury; }
3067de4c6f8SAlex Bradbury
3077de4c6f8SAlex Bradbury; define <2 x half> @test_frexp_v2f16_v2i32_only_use_fract(<2 x half> %a) nounwind {
3087de4c6f8SAlex Bradbury;   %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)
3097de4c6f8SAlex Bradbury;   %result.0 = extractvalue { <2 x half>, <2 x i32> } %result, 0
3107de4c6f8SAlex Bradbury;   ret <2 x half> %result.0
3117de4c6f8SAlex Bradbury; }
3127de4c6f8SAlex Bradbury
3137de4c6f8SAlex Bradbury; define <2 x i32> @test_frexp_v2f16_v2i32_only_use_exp(<2 x half> %a) nounwind {
3147de4c6f8SAlex Bradbury;   %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)
3157de4c6f8SAlex Bradbury;   %result.1 = extractvalue { <2 x half>, <2 x i32> } %result, 1
3167de4c6f8SAlex Bradbury;   ret <2 x i32> %result.1
3177de4c6f8SAlex Bradbury; }
3187de4c6f8SAlex Bradbury
3197de4c6f8SAlex Bradburydefine { float, i32 } @test_frexp_f32_i32(float %a) nounwind {
3207de4c6f8SAlex Bradbury; RV32IFD-LABEL: test_frexp_f32_i32:
3217de4c6f8SAlex Bradbury; RV32IFD:       # %bb.0:
3227de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, -16
3237de4c6f8SAlex Bradbury; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
3247de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi a0, sp, 8
325eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
3267de4c6f8SAlex Bradbury; RV32IFD-NEXT:    lw a0, 8(sp)
3277de4c6f8SAlex Bradbury; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
3287de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, 16
3297de4c6f8SAlex Bradbury; RV32IFD-NEXT:    ret
3307de4c6f8SAlex Bradbury;
3317de4c6f8SAlex Bradbury; RV64IFD-LABEL: test_frexp_f32_i32:
3327de4c6f8SAlex Bradbury; RV64IFD:       # %bb.0:
3337de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, -16
3347de4c6f8SAlex Bradbury; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3357de4c6f8SAlex Bradbury; RV64IFD-NEXT:    mv a0, sp
336eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
3377de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld a0, 0(sp)
3387de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3397de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, 16
3407de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ret
3417de4c6f8SAlex Bradbury;
3427de4c6f8SAlex Bradbury; RV32IZFINXZDINX-LABEL: test_frexp_f32_i32:
3437de4c6f8SAlex Bradbury; RV32IZFINXZDINX:       # %bb.0:
3447de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
3457de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
3467de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
347eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
3487de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a1, 8(sp)
3497de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
3507de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
3517de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    ret
3527de4c6f8SAlex Bradbury;
3537de4c6f8SAlex Bradbury; RV64IZFINXZDINX-LABEL: test_frexp_f32_i32:
3547de4c6f8SAlex Bradbury; RV64IZFINXZDINX:       # %bb.0:
3557de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
3567de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
3577de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a1, sp
358eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
3597de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld a1, 0(sp)
3607de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
3617de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
3627de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ret
363619c6c0eSAlex Bradbury;
364619c6c0eSAlex Bradbury; RV32I-LABEL: test_frexp_f32_i32:
365619c6c0eSAlex Bradbury; RV32I:       # %bb.0:
366619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -16
367619c6c0eSAlex Bradbury; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
368619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 8
369eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
370619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a1, 8(sp)
371619c6c0eSAlex Bradbury; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
372619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 16
373619c6c0eSAlex Bradbury; RV32I-NEXT:    ret
374619c6c0eSAlex Bradbury;
375619c6c0eSAlex Bradbury; RV64I-LABEL: test_frexp_f32_i32:
376619c6c0eSAlex Bradbury; RV64I:       # %bb.0:
377619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -16
378619c6c0eSAlex Bradbury; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
379619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 4
380eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
381619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a1, 4(sp)
382619c6c0eSAlex Bradbury; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
383619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 16
384619c6c0eSAlex Bradbury; RV64I-NEXT:    ret
3857de4c6f8SAlex Bradbury  %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)
3867de4c6f8SAlex Bradbury  ret { float, i32 } %result
3877de4c6f8SAlex Bradbury}
3887de4c6f8SAlex Bradbury
3897de4c6f8SAlex Bradburydefine float @test_frexp_f32_i32_only_use_fract(float %a) nounwind {
3907de4c6f8SAlex Bradbury; RV32IFD-LABEL: test_frexp_f32_i32_only_use_fract:
3917de4c6f8SAlex Bradbury; RV32IFD:       # %bb.0:
3927de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, -16
3937de4c6f8SAlex Bradbury; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
3947de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi a0, sp, 8
395eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
3967de4c6f8SAlex Bradbury; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
3977de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, 16
3987de4c6f8SAlex Bradbury; RV32IFD-NEXT:    ret
3997de4c6f8SAlex Bradbury;
4007de4c6f8SAlex Bradbury; RV64IFD-LABEL: test_frexp_f32_i32_only_use_fract:
4017de4c6f8SAlex Bradbury; RV64IFD:       # %bb.0:
4027de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, -16
4037de4c6f8SAlex Bradbury; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4047de4c6f8SAlex Bradbury; RV64IFD-NEXT:    mv a0, sp
405eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
4067de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4077de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, 16
4087de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ret
4097de4c6f8SAlex Bradbury;
4107de4c6f8SAlex Bradbury; RV32IZFINXZDINX-LABEL: test_frexp_f32_i32_only_use_fract:
4117de4c6f8SAlex Bradbury; RV32IZFINXZDINX:       # %bb.0:
4127de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
4137de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
4147de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
415eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
4167de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
4177de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
4187de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    ret
4197de4c6f8SAlex Bradbury;
4207de4c6f8SAlex Bradbury; RV64IZFINXZDINX-LABEL: test_frexp_f32_i32_only_use_fract:
4217de4c6f8SAlex Bradbury; RV64IZFINXZDINX:       # %bb.0:
4227de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
4237de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4247de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a1, sp
425eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
4267de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4277de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
4287de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ret
429619c6c0eSAlex Bradbury;
430619c6c0eSAlex Bradbury; RV32I-LABEL: test_frexp_f32_i32_only_use_fract:
431619c6c0eSAlex Bradbury; RV32I:       # %bb.0:
432619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -16
433619c6c0eSAlex Bradbury; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
434619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 8
435eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
436619c6c0eSAlex Bradbury; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
437619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 16
438619c6c0eSAlex Bradbury; RV32I-NEXT:    ret
439619c6c0eSAlex Bradbury;
440619c6c0eSAlex Bradbury; RV64I-LABEL: test_frexp_f32_i32_only_use_fract:
441619c6c0eSAlex Bradbury; RV64I:       # %bb.0:
442619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -16
443619c6c0eSAlex Bradbury; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
444619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 4
445eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
446619c6c0eSAlex Bradbury; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
447619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 16
448619c6c0eSAlex Bradbury; RV64I-NEXT:    ret
4497de4c6f8SAlex Bradbury  %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)
4507de4c6f8SAlex Bradbury  %result.0 = extractvalue { float, i32 } %result, 0
4517de4c6f8SAlex Bradbury  ret float %result.0
4527de4c6f8SAlex Bradbury}
4537de4c6f8SAlex Bradbury
4547de4c6f8SAlex Bradburydefine i32 @test_frexp_f32_i32_only_use_exp(float %a) nounwind {
4557de4c6f8SAlex Bradbury; RV32IFD-LABEL: test_frexp_f32_i32_only_use_exp:
4567de4c6f8SAlex Bradbury; RV32IFD:       # %bb.0:
4577de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, -16
4587de4c6f8SAlex Bradbury; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
4597de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi a0, sp, 8
460eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
4617de4c6f8SAlex Bradbury; RV32IFD-NEXT:    lw a0, 8(sp)
4627de4c6f8SAlex Bradbury; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
4637de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, 16
4647de4c6f8SAlex Bradbury; RV32IFD-NEXT:    ret
4657de4c6f8SAlex Bradbury;
4667de4c6f8SAlex Bradbury; RV64IFD-LABEL: test_frexp_f32_i32_only_use_exp:
4677de4c6f8SAlex Bradbury; RV64IFD:       # %bb.0:
4687de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, -16
4697de4c6f8SAlex Bradbury; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4707de4c6f8SAlex Bradbury; RV64IFD-NEXT:    mv a0, sp
471eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
4727de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld a0, 0(sp)
4737de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4747de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, 16
4757de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ret
4767de4c6f8SAlex Bradbury;
4777de4c6f8SAlex Bradbury; RV32IZFINXZDINX-LABEL: test_frexp_f32_i32_only_use_exp:
4787de4c6f8SAlex Bradbury; RV32IZFINXZDINX:       # %bb.0:
4797de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
4807de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
4817de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
482eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
4837de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a0, 8(sp)
4847de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
4857de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
4867de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    ret
4877de4c6f8SAlex Bradbury;
4887de4c6f8SAlex Bradbury; RV64IZFINXZDINX-LABEL: test_frexp_f32_i32_only_use_exp:
4897de4c6f8SAlex Bradbury; RV64IZFINXZDINX:       # %bb.0:
4907de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
4917de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
4927de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a1, sp
493eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
4947de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld a0, 0(sp)
4957de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
4967de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
4977de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ret
498619c6c0eSAlex Bradbury;
499619c6c0eSAlex Bradbury; RV32I-LABEL: test_frexp_f32_i32_only_use_exp:
500619c6c0eSAlex Bradbury; RV32I:       # %bb.0:
501619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -16
502619c6c0eSAlex Bradbury; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
503619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 8
504eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
505619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a0, 8(sp)
506619c6c0eSAlex Bradbury; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
507619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 16
508619c6c0eSAlex Bradbury; RV32I-NEXT:    ret
509619c6c0eSAlex Bradbury;
510619c6c0eSAlex Bradbury; RV64I-LABEL: test_frexp_f32_i32_only_use_exp:
511619c6c0eSAlex Bradbury; RV64I:       # %bb.0:
512619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -16
513619c6c0eSAlex Bradbury; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
514619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 4
515eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
516619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a0, 4(sp)
517619c6c0eSAlex Bradbury; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
518619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 16
519619c6c0eSAlex Bradbury; RV64I-NEXT:    ret
5207de4c6f8SAlex Bradbury  %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)
5217de4c6f8SAlex Bradbury  %result.0 = extractvalue { float, i32 } %result, 1
5227de4c6f8SAlex Bradbury  ret i32 %result.0
5237de4c6f8SAlex Bradbury}
5247de4c6f8SAlex Bradbury
5257de4c6f8SAlex Bradbury; FIXME: Widen vector result
5267de4c6f8SAlex Bradbury; define { <2 x float>, <2 x i32> } @test_frexp_v2f32_v2i32(<2 x float> %a) nounwind {
5277de4c6f8SAlex Bradbury;   %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)
5287de4c6f8SAlex Bradbury;   ret { <2 x float>, <2 x i32> } %result
5297de4c6f8SAlex Bradbury; }
5307de4c6f8SAlex Bradbury
5317de4c6f8SAlex Bradbury; define <2 x float> @test_frexp_v2f32_v2i32_only_use_fract(<2 x float> %a) nounwind {
5327de4c6f8SAlex Bradbury;   %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)
5337de4c6f8SAlex Bradbury;   %result.0 = extractvalue { <2 x float>, <2 x i32> } %result, 0
5347de4c6f8SAlex Bradbury;   ret <2 x float> %result.0
5357de4c6f8SAlex Bradbury; }
5367de4c6f8SAlex Bradbury
5377de4c6f8SAlex Bradbury; define <2 x i32> @test_frexp_v2f32_v2i32_only_use_exp(<2 x float> %a) nounwind {
5387de4c6f8SAlex Bradbury;   %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)
5397de4c6f8SAlex Bradbury;   %result.1 = extractvalue { <2 x float>, <2 x i32> } %result, 1
5407de4c6f8SAlex Bradbury;   ret <2 x i32> %result.1
5417de4c6f8SAlex Bradbury; }
5427de4c6f8SAlex Bradbury
5437de4c6f8SAlex Bradburydefine { <4 x float>, <4 x i32> } @test_frexp_v4f32_v4i32(<4 x float> %a) nounwind {
5447de4c6f8SAlex Bradbury; RV32IFD-LABEL: test_frexp_v4f32_v4i32:
5457de4c6f8SAlex Bradbury; RV32IFD:       # %bb.0:
546*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    addi sp, sp, -48
547*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
548*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
549*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fsd fs0, 32(sp) # 8-byte Folded Spill
550*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fsd fs1, 24(sp) # 8-byte Folded Spill
551*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fsd fs2, 16(sp) # 8-byte Folded Spill
552*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fsd fs3, 8(sp) # 8-byte Folded Spill
5537de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fs0, fa3
5547de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fs1, fa2
5557de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fs2, fa1
5567de4c6f8SAlex Bradbury; RV32IFD-NEXT:    mv s0, a0
557*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    addi a0, a0, 16
558eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
5597de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fs3, fa0
560*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    addi a0, s0, 20
5617de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fa0, fs2
562eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
5637de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fs2, fa0
564*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    addi a0, s0, 24
5657de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fa0, fs1
566eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
5677de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fs1, fa0
568*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    addi a0, s0, 28
5697de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fa0, fs0
570eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
5717de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fsw fs3, 0(s0)
5722967e5f8SAlex Bradbury; RV32IFD-NEXT:    fsw fs2, 4(s0)
5732967e5f8SAlex Bradbury; RV32IFD-NEXT:    fsw fs1, 8(s0)
5742967e5f8SAlex Bradbury; RV32IFD-NEXT:    fsw fa0, 12(s0)
575*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
576*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
577*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fld fs0, 32(sp) # 8-byte Folded Reload
578*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fld fs1, 24(sp) # 8-byte Folded Reload
579*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fld fs2, 16(sp) # 8-byte Folded Reload
580*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fld fs3, 8(sp) # 8-byte Folded Reload
581*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    addi sp, sp, 48
5827de4c6f8SAlex Bradbury; RV32IFD-NEXT:    ret
5837de4c6f8SAlex Bradbury;
5847de4c6f8SAlex Bradbury; RV64IFD-LABEL: test_frexp_v4f32_v4i32:
5857de4c6f8SAlex Bradbury; RV64IFD:       # %bb.0:
5867de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, -80
5877de4c6f8SAlex Bradbury; RV64IFD-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
5887de4c6f8SAlex Bradbury; RV64IFD-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
5897de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsd fs0, 56(sp) # 8-byte Folded Spill
5907de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsd fs1, 48(sp) # 8-byte Folded Spill
5917de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsd fs2, 40(sp) # 8-byte Folded Spill
5927de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsd fs3, 32(sp) # 8-byte Folded Spill
5937de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs0, fa3
5947de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs1, fa2
5957de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs2, fa1
5967de4c6f8SAlex Bradbury; RV64IFD-NEXT:    mv s0, a0
5977de4c6f8SAlex Bradbury; RV64IFD-NEXT:    mv a0, sp
598eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
5997de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs3, fa0
6007de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi a0, sp, 8
6017de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fa0, fs2
602eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
6037de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs2, fa0
6047de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi a0, sp, 16
6057de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fa0, fs1
606eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
6077de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs1, fa0
6087de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi a0, sp, 24
6097de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fa0, fs0
610eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
6112967e5f8SAlex Bradbury; RV64IFD-NEXT:    ld a0, 0(sp)
6122967e5f8SAlex Bradbury; RV64IFD-NEXT:    ld a1, 8(sp)
6132967e5f8SAlex Bradbury; RV64IFD-NEXT:    ld a2, 16(sp)
6142967e5f8SAlex Bradbury; RV64IFD-NEXT:    ld a3, 24(sp)
6152967e5f8SAlex Bradbury; RV64IFD-NEXT:    sw a0, 16(s0)
6162967e5f8SAlex Bradbury; RV64IFD-NEXT:    sw a1, 20(s0)
6172967e5f8SAlex Bradbury; RV64IFD-NEXT:    sw a2, 24(s0)
6182967e5f8SAlex Bradbury; RV64IFD-NEXT:    sw a3, 28(s0)
6197de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsw fs3, 0(s0)
6202967e5f8SAlex Bradbury; RV64IFD-NEXT:    fsw fs2, 4(s0)
6212967e5f8SAlex Bradbury; RV64IFD-NEXT:    fsw fs1, 8(s0)
6222967e5f8SAlex Bradbury; RV64IFD-NEXT:    fsw fa0, 12(s0)
6237de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
6247de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
6257de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fld fs0, 56(sp) # 8-byte Folded Reload
6267de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fld fs1, 48(sp) # 8-byte Folded Reload
6277de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fld fs2, 40(sp) # 8-byte Folded Reload
6287de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fld fs3, 32(sp) # 8-byte Folded Reload
6297de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, 80
6307de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ret
6317de4c6f8SAlex Bradbury;
6327de4c6f8SAlex Bradbury; RV32IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32:
6337de4c6f8SAlex Bradbury; RV32IZFINXZDINX:       # %bb.0:
634*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    addi sp, sp, -32
635*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
636*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
637*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
638*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
639*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
640*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill
6417de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s0, a4
6427de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s1, a3
6437de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s2, a2
6447de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv a2, a1
6457de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s3, a0
646*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    addi a1, a0, 16
6477de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv a0, a2
648eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
6497de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s4, a0
650*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    addi a1, s3, 20
6517de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv a0, s2
652eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
6537de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s2, a0
654*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    addi a1, s3, 24
6557de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv a0, s1
656eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
6577de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s1, a0
658*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    addi a1, s3, 28
6597de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv a0, s0
660eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
6617de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw s4, 0(s3)
6622967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw s2, 4(s3)
6632967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw s1, 8(s3)
6642967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a0, 12(s3)
665*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
666*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
667*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
668*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
669*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
670*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload
671*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    addi sp, sp, 32
6727de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    ret
6737de4c6f8SAlex Bradbury;
6747de4c6f8SAlex Bradbury; RV64IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32:
6757de4c6f8SAlex Bradbury; RV64IZFINXZDINX:       # %bb.0:
6767de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, -80
6777de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
6787de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
6797de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill
6807de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill
6817de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill
6827de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s4, 32(sp) # 8-byte Folded Spill
6837de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s0, a4
6847de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s1, a3
6857de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s2, a2
6867de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a2, a1
6877de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s3, a0
6887de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a1, sp
6897de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a0, a2
690eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
6917de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s4, a0
6927de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi a1, sp, 8
6937de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a0, s2
694eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
6957de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s2, a0
6967de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi a1, sp, 16
6977de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a0, s1
698eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
6997de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s1, a0
7007de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi a1, sp, 24
7017de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a0, s0
702eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
7032967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld a1, 0(sp)
7042967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld a2, 8(sp)
7052967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld a3, 16(sp)
7062967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld a4, 24(sp)
7072967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw a1, 16(s3)
7082967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw a2, 20(s3)
7092967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw a3, 24(s3)
7102967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw a4, 28(s3)
7117de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw s4, 0(s3)
7122967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw s2, 4(s3)
7132967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw s1, 8(s3)
7142967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw a0, 12(s3)
7157de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
7167de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
7177de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload
7187de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload
7197de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload
7207de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s4, 32(sp) # 8-byte Folded Reload
7217de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, 80
7227de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ret
723619c6c0eSAlex Bradbury;
724619c6c0eSAlex Bradbury; RV32I-LABEL: test_frexp_v4f32_v4i32:
725619c6c0eSAlex Bradbury; RV32I:       # %bb.0:
726619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -48
727619c6c0eSAlex Bradbury; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
728619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
729619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
730619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill
731619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill
732619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s4, 24(sp) # 4-byte Folded Spill
733619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a2, 0(a1)
73414c4f28eSAlex Bradbury; RV32I-NEXT:    lw s0, 4(a1)
73514c4f28eSAlex Bradbury; RV32I-NEXT:    lw s1, 8(a1)
73614c4f28eSAlex Bradbury; RV32I-NEXT:    lw s2, 12(a1)
737619c6c0eSAlex Bradbury; RV32I-NEXT:    mv s3, a0
738619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 8
739619c6c0eSAlex Bradbury; RV32I-NEXT:    mv a0, a2
740eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
741619c6c0eSAlex Bradbury; RV32I-NEXT:    mv s4, a0
742619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 12
74314c4f28eSAlex Bradbury; RV32I-NEXT:    mv a0, s0
744eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
74514c4f28eSAlex Bradbury; RV32I-NEXT:    mv s0, a0
746619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 16
747619c6c0eSAlex Bradbury; RV32I-NEXT:    mv a0, s1
748eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
749619c6c0eSAlex Bradbury; RV32I-NEXT:    mv s1, a0
750619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 20
75114c4f28eSAlex Bradbury; RV32I-NEXT:    mv a0, s2
752eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
753619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a1, 8(sp)
754619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a2, 12(sp)
755619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a3, 16(sp)
756619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a4, 20(sp)
757619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s4, 0(s3)
7582967e5f8SAlex Bradbury; RV32I-NEXT:    sw s0, 4(s3)
7592967e5f8SAlex Bradbury; RV32I-NEXT:    sw s1, 8(s3)
7602967e5f8SAlex Bradbury; RV32I-NEXT:    sw a0, 12(s3)
761619c6c0eSAlex Bradbury; RV32I-NEXT:    sw a1, 16(s3)
7622967e5f8SAlex Bradbury; RV32I-NEXT:    sw a2, 20(s3)
7632967e5f8SAlex Bradbury; RV32I-NEXT:    sw a3, 24(s3)
7642967e5f8SAlex Bradbury; RV32I-NEXT:    sw a4, 28(s3)
765619c6c0eSAlex Bradbury; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
766619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
767619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
768619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload
769619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload
770619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s4, 24(sp) # 4-byte Folded Reload
771619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 48
772619c6c0eSAlex Bradbury; RV32I-NEXT:    ret
773619c6c0eSAlex Bradbury;
774619c6c0eSAlex Bradbury; RV64I-LABEL: test_frexp_v4f32_v4i32:
775619c6c0eSAlex Bradbury; RV64I:       # %bb.0:
776619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -64
777619c6c0eSAlex Bradbury; RV64I-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
778619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
779619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
780619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
781619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
782619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s4, 16(sp) # 8-byte Folded Spill
783619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a2, 0(a1)
78414c4f28eSAlex Bradbury; RV64I-NEXT:    lw s0, 8(a1)
78514c4f28eSAlex Bradbury; RV64I-NEXT:    lw s1, 16(a1)
78614c4f28eSAlex Bradbury; RV64I-NEXT:    lw s2, 24(a1)
787619c6c0eSAlex Bradbury; RV64I-NEXT:    mv s3, a0
788619c6c0eSAlex Bradbury; RV64I-NEXT:    mv a1, sp
789619c6c0eSAlex Bradbury; RV64I-NEXT:    mv a0, a2
790eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
791619c6c0eSAlex Bradbury; RV64I-NEXT:    mv s4, a0
792619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 4
79314c4f28eSAlex Bradbury; RV64I-NEXT:    mv a0, s0
794eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
79514c4f28eSAlex Bradbury; RV64I-NEXT:    mv s0, a0
796619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 8
797619c6c0eSAlex Bradbury; RV64I-NEXT:    mv a0, s1
798eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
799619c6c0eSAlex Bradbury; RV64I-NEXT:    mv s1, a0
800619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 12
80114c4f28eSAlex Bradbury; RV64I-NEXT:    mv a0, s2
802eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
803619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a1, 0(sp)
804619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a2, 4(sp)
805619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a3, 8(sp)
806619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a4, 12(sp)
807619c6c0eSAlex Bradbury; RV64I-NEXT:    sw s4, 0(s3)
8082967e5f8SAlex Bradbury; RV64I-NEXT:    sw s0, 4(s3)
8092967e5f8SAlex Bradbury; RV64I-NEXT:    sw s1, 8(s3)
8102967e5f8SAlex Bradbury; RV64I-NEXT:    sw a0, 12(s3)
811619c6c0eSAlex Bradbury; RV64I-NEXT:    sw a1, 16(s3)
8122967e5f8SAlex Bradbury; RV64I-NEXT:    sw a2, 20(s3)
8132967e5f8SAlex Bradbury; RV64I-NEXT:    sw a3, 24(s3)
8142967e5f8SAlex Bradbury; RV64I-NEXT:    sw a4, 28(s3)
815619c6c0eSAlex Bradbury; RV64I-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
816619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
817619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
818619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
819619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
820619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s4, 16(sp) # 8-byte Folded Reload
821619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 64
822619c6c0eSAlex Bradbury; RV64I-NEXT:    ret
8237de4c6f8SAlex Bradbury  %result = call { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float> %a)
8247de4c6f8SAlex Bradbury  ret { <4 x float>, <4 x i32> } %result
8257de4c6f8SAlex Bradbury}
8267de4c6f8SAlex Bradbury
8277de4c6f8SAlex Bradburydefine <4 x float> @test_frexp_v4f32_v4i32_only_use_fract(<4 x float> %a) nounwind {
8287de4c6f8SAlex Bradbury; RV32IFD-LABEL: test_frexp_v4f32_v4i32_only_use_fract:
8297de4c6f8SAlex Bradbury; RV32IFD:       # %bb.0:
8307de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, -64
8317de4c6f8SAlex Bradbury; RV32IFD-NEXT:    sw ra, 60(sp) # 4-byte Folded Spill
8327de4c6f8SAlex Bradbury; RV32IFD-NEXT:    sw s0, 56(sp) # 4-byte Folded Spill
8337de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fsd fs0, 48(sp) # 8-byte Folded Spill
8347de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fsd fs1, 40(sp) # 8-byte Folded Spill
8357de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fsd fs2, 32(sp) # 8-byte Folded Spill
8367de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fsd fs3, 24(sp) # 8-byte Folded Spill
8377de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fs0, fa3
8387de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fs1, fa2
8397de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fs2, fa1
8407de4c6f8SAlex Bradbury; RV32IFD-NEXT:    mv s0, a0
8417de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi a0, sp, 8
842eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
8437de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fs3, fa0
8447de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi a0, sp, 12
8457de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fa0, fs2
846eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
8477de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fs2, fa0
8487de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi a0, sp, 16
8497de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fa0, fs1
850eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
8517de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fs1, fa0
8527de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi a0, sp, 20
8537de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fmv.s fa0, fs0
854eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
8557de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fsw fs3, 0(s0)
8562967e5f8SAlex Bradbury; RV32IFD-NEXT:    fsw fs2, 4(s0)
8572967e5f8SAlex Bradbury; RV32IFD-NEXT:    fsw fs1, 8(s0)
8582967e5f8SAlex Bradbury; RV32IFD-NEXT:    fsw fa0, 12(s0)
8597de4c6f8SAlex Bradbury; RV32IFD-NEXT:    lw ra, 60(sp) # 4-byte Folded Reload
8607de4c6f8SAlex Bradbury; RV32IFD-NEXT:    lw s0, 56(sp) # 4-byte Folded Reload
8617de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fld fs0, 48(sp) # 8-byte Folded Reload
8627de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fld fs1, 40(sp) # 8-byte Folded Reload
8637de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fld fs2, 32(sp) # 8-byte Folded Reload
8647de4c6f8SAlex Bradbury; RV32IFD-NEXT:    fld fs3, 24(sp) # 8-byte Folded Reload
8657de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, 64
8667de4c6f8SAlex Bradbury; RV32IFD-NEXT:    ret
8677de4c6f8SAlex Bradbury;
8687de4c6f8SAlex Bradbury; RV64IFD-LABEL: test_frexp_v4f32_v4i32_only_use_fract:
8697de4c6f8SAlex Bradbury; RV64IFD:       # %bb.0:
8707de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, -80
8717de4c6f8SAlex Bradbury; RV64IFD-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
8727de4c6f8SAlex Bradbury; RV64IFD-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
8737de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsd fs0, 56(sp) # 8-byte Folded Spill
8747de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsd fs1, 48(sp) # 8-byte Folded Spill
8757de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsd fs2, 40(sp) # 8-byte Folded Spill
8767de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsd fs3, 32(sp) # 8-byte Folded Spill
8777de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs0, fa3
8787de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs1, fa2
8797de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs2, fa1
8807de4c6f8SAlex Bradbury; RV64IFD-NEXT:    mv s0, a0
8817de4c6f8SAlex Bradbury; RV64IFD-NEXT:    mv a0, sp
882eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
8837de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs3, fa0
8847de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi a0, sp, 8
8857de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fa0, fs2
886eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
8877de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs2, fa0
8887de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi a0, sp, 16
8897de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fa0, fs1
890eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
8917de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs1, fa0
8927de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi a0, sp, 24
8937de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fa0, fs0
894eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
8957de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsw fs3, 0(s0)
8962967e5f8SAlex Bradbury; RV64IFD-NEXT:    fsw fs2, 4(s0)
8972967e5f8SAlex Bradbury; RV64IFD-NEXT:    fsw fs1, 8(s0)
8982967e5f8SAlex Bradbury; RV64IFD-NEXT:    fsw fa0, 12(s0)
8997de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
9007de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
9017de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fld fs0, 56(sp) # 8-byte Folded Reload
9027de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fld fs1, 48(sp) # 8-byte Folded Reload
9037de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fld fs2, 40(sp) # 8-byte Folded Reload
9047de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fld fs3, 32(sp) # 8-byte Folded Reload
9057de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, 80
9067de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ret
9077de4c6f8SAlex Bradbury;
9087de4c6f8SAlex Bradbury; RV32IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32_only_use_fract:
9097de4c6f8SAlex Bradbury; RV32IZFINXZDINX:       # %bb.0:
9107de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, -48
9117de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
9127de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
9137de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
9147de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill
9157de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill
9167de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw s4, 24(sp) # 4-byte Folded Spill
9177de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s0, a4
9187de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s1, a3
9197de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s2, a2
9207de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv a2, a1
9217de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s3, a0
9227de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
9237de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv a0, a2
924eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
9257de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s4, a0
9267de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi a1, sp, 12
9277de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv a0, s2
928eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
9297de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s2, a0
9307de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi a1, sp, 16
9317de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv a0, s1
932eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
9337de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s1, a0
9347de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi a1, sp, 20
9357de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv a0, s0
936eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
9377de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw s4, 0(s3)
9382967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw s2, 4(s3)
9392967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw s1, 8(s3)
9402967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a0, 12(s3)
9417de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
9427de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
9437de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
9447de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload
9457de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload
9467de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw s4, 24(sp) # 4-byte Folded Reload
9477de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, 48
9487de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    ret
9497de4c6f8SAlex Bradbury;
9507de4c6f8SAlex Bradbury; RV64IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32_only_use_fract:
9517de4c6f8SAlex Bradbury; RV64IZFINXZDINX:       # %bb.0:
9527de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, -80
9537de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
9547de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
9557de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill
9567de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill
9577de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill
9587de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s4, 32(sp) # 8-byte Folded Spill
9597de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s0, a4
9607de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s1, a3
9617de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s2, a2
9627de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a2, a1
9637de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s3, a0
9647de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a1, sp
9657de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a0, a2
966eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
9677de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s4, a0
9687de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi a1, sp, 8
9697de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a0, s2
970eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
9717de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s2, a0
9727de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi a1, sp, 16
9737de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a0, s1
974eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
9757de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s1, a0
9767de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi a1, sp, 24
9777de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a0, s0
978eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
9797de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw s4, 0(s3)
9802967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw s2, 4(s3)
9812967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw s1, 8(s3)
9822967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw a0, 12(s3)
9837de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
9847de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
9857de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload
9867de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload
9877de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload
9887de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s4, 32(sp) # 8-byte Folded Reload
9897de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, 80
9907de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ret
991619c6c0eSAlex Bradbury;
992619c6c0eSAlex Bradbury; RV32I-LABEL: test_frexp_v4f32_v4i32_only_use_fract:
993619c6c0eSAlex Bradbury; RV32I:       # %bb.0:
994619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -48
995619c6c0eSAlex Bradbury; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
996619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
997619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
998619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill
999619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill
1000619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s4, 24(sp) # 4-byte Folded Spill
1001619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a2, 0(a1)
100214c4f28eSAlex Bradbury; RV32I-NEXT:    lw s0, 4(a1)
100314c4f28eSAlex Bradbury; RV32I-NEXT:    lw s1, 8(a1)
100414c4f28eSAlex Bradbury; RV32I-NEXT:    lw s2, 12(a1)
1005619c6c0eSAlex Bradbury; RV32I-NEXT:    mv s3, a0
1006619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 8
1007619c6c0eSAlex Bradbury; RV32I-NEXT:    mv a0, a2
1008eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
1009619c6c0eSAlex Bradbury; RV32I-NEXT:    mv s4, a0
1010619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 12
101114c4f28eSAlex Bradbury; RV32I-NEXT:    mv a0, s0
1012eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
101314c4f28eSAlex Bradbury; RV32I-NEXT:    mv s0, a0
1014619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 16
1015619c6c0eSAlex Bradbury; RV32I-NEXT:    mv a0, s1
1016eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
1017619c6c0eSAlex Bradbury; RV32I-NEXT:    mv s1, a0
1018619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 20
101914c4f28eSAlex Bradbury; RV32I-NEXT:    mv a0, s2
1020eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
1021619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s4, 0(s3)
10222967e5f8SAlex Bradbury; RV32I-NEXT:    sw s0, 4(s3)
10232967e5f8SAlex Bradbury; RV32I-NEXT:    sw s1, 8(s3)
10242967e5f8SAlex Bradbury; RV32I-NEXT:    sw a0, 12(s3)
1025619c6c0eSAlex Bradbury; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1026619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1027619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
1028619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload
1029619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload
1030619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s4, 24(sp) # 4-byte Folded Reload
1031619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 48
1032619c6c0eSAlex Bradbury; RV32I-NEXT:    ret
1033619c6c0eSAlex Bradbury;
1034619c6c0eSAlex Bradbury; RV64I-LABEL: test_frexp_v4f32_v4i32_only_use_fract:
1035619c6c0eSAlex Bradbury; RV64I:       # %bb.0:
1036619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -64
1037619c6c0eSAlex Bradbury; RV64I-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
1038619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
1039619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
1040619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
1041619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
1042619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s4, 16(sp) # 8-byte Folded Spill
1043619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a2, 0(a1)
104414c4f28eSAlex Bradbury; RV64I-NEXT:    lw s0, 8(a1)
104514c4f28eSAlex Bradbury; RV64I-NEXT:    lw s1, 16(a1)
104614c4f28eSAlex Bradbury; RV64I-NEXT:    lw s2, 24(a1)
1047619c6c0eSAlex Bradbury; RV64I-NEXT:    mv s3, a0
1048619c6c0eSAlex Bradbury; RV64I-NEXT:    mv a1, sp
1049619c6c0eSAlex Bradbury; RV64I-NEXT:    mv a0, a2
1050eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
1051619c6c0eSAlex Bradbury; RV64I-NEXT:    mv s4, a0
1052619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 4
105314c4f28eSAlex Bradbury; RV64I-NEXT:    mv a0, s0
1054eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
105514c4f28eSAlex Bradbury; RV64I-NEXT:    mv s0, a0
1056619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 8
1057619c6c0eSAlex Bradbury; RV64I-NEXT:    mv a0, s1
1058eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
1059619c6c0eSAlex Bradbury; RV64I-NEXT:    mv s1, a0
1060619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 12
106114c4f28eSAlex Bradbury; RV64I-NEXT:    mv a0, s2
1062eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
1063619c6c0eSAlex Bradbury; RV64I-NEXT:    sw s4, 0(s3)
10642967e5f8SAlex Bradbury; RV64I-NEXT:    sw s0, 4(s3)
10652967e5f8SAlex Bradbury; RV64I-NEXT:    sw s1, 8(s3)
10662967e5f8SAlex Bradbury; RV64I-NEXT:    sw a0, 12(s3)
1067619c6c0eSAlex Bradbury; RV64I-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
1068619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
1069619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
1070619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
1071619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
1072619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s4, 16(sp) # 8-byte Folded Reload
1073619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 64
1074619c6c0eSAlex Bradbury; RV64I-NEXT:    ret
10757de4c6f8SAlex Bradbury  %result = call { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float> %a)
10767de4c6f8SAlex Bradbury  %result.0 = extractvalue { <4 x float>, <4 x i32> } %result, 0
10777de4c6f8SAlex Bradbury  ret <4 x float> %result.0
10787de4c6f8SAlex Bradbury}
10797de4c6f8SAlex Bradbury
10807de4c6f8SAlex Bradburydefine <4 x i32> @test_frexp_v4f32_v4i32_only_use_exp(<4 x float> %a) nounwind {
10817de4c6f8SAlex Bradbury; RV32IFD-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
10827de4c6f8SAlex Bradbury; RV32IFD:       # %bb.0:
1083*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    addi sp, sp, -32
1084*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
1085*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
1086*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill
1087*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill
1088*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fsd fs2, 0(sp) # 8-byte Folded Spill
1089*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fmv.s fs0, fa2
1090*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fmv.s fs1, fa1
1091*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fmv.s fs2, fa0
10927de4c6f8SAlex Bradbury; RV32IFD-NEXT:    mv s0, a0
1093*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    addi a0, a0, 12
1094*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fmv.s fa0, fa3
1095eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpf
1096*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    addi a0, s0, 8
1097014455a5SBenjamin Maxwell; RV32IFD-NEXT:    fmv.s fa0, fs0
1098ea6b8fa4SBenjamin Maxwell; RV32IFD-NEXT:    call frexpf
1099*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    addi a0, s0, 4
1100*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fmv.s fa0, fs1
1101*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    call frexpf
1102*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fmv.s fa0, fs2
1103*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    mv a0, s0
1104*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    call frexpf
1105*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
1106*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
1107*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload
1108*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload
1109*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    fld fs2, 0(sp) # 8-byte Folded Reload
1110*a7dafea3SBenjamin Maxwell; RV32IFD-NEXT:    addi sp, sp, 32
11117de4c6f8SAlex Bradbury; RV32IFD-NEXT:    ret
11127de4c6f8SAlex Bradbury;
11137de4c6f8SAlex Bradbury; RV64IFD-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
11147de4c6f8SAlex Bradbury; RV64IFD:       # %bb.0:
11157de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, -80
11167de4c6f8SAlex Bradbury; RV64IFD-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
11177de4c6f8SAlex Bradbury; RV64IFD-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
11187de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsd fs0, 56(sp) # 8-byte Folded Spill
11197de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsd fs1, 48(sp) # 8-byte Folded Spill
11207de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fsd fs2, 40(sp) # 8-byte Folded Spill
11217de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs0, fa3
11227de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs1, fa2
11237de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fs2, fa1
11247de4c6f8SAlex Bradbury; RV64IFD-NEXT:    mv s0, a0
11257de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi a0, sp, 8
1126eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
11277de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi a0, sp, 16
11287de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fa0, fs2
1129eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
11307de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi a0, sp, 24
11317de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fa0, fs1
1132eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
11337de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi a0, sp, 32
11347de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fmv.s fa0, fs0
1135eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpf
11362967e5f8SAlex Bradbury; RV64IFD-NEXT:    ld a0, 8(sp)
11372967e5f8SAlex Bradbury; RV64IFD-NEXT:    ld a1, 16(sp)
11382967e5f8SAlex Bradbury; RV64IFD-NEXT:    ld a2, 24(sp)
11392967e5f8SAlex Bradbury; RV64IFD-NEXT:    ld a3, 32(sp)
11402967e5f8SAlex Bradbury; RV64IFD-NEXT:    sw a0, 0(s0)
11412967e5f8SAlex Bradbury; RV64IFD-NEXT:    sw a1, 4(s0)
11422967e5f8SAlex Bradbury; RV64IFD-NEXT:    sw a2, 8(s0)
11432967e5f8SAlex Bradbury; RV64IFD-NEXT:    sw a3, 12(s0)
11447de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
11457de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
11467de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fld fs0, 56(sp) # 8-byte Folded Reload
11477de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fld fs1, 48(sp) # 8-byte Folded Reload
11487de4c6f8SAlex Bradbury; RV64IFD-NEXT:    fld fs2, 40(sp) # 8-byte Folded Reload
11497de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, 80
11507de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ret
11517de4c6f8SAlex Bradbury;
11527de4c6f8SAlex Bradbury; RV32IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
11537de4c6f8SAlex Bradbury; RV32IZFINXZDINX:       # %bb.0:
1154*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    addi sp, sp, -32
1155*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
1156*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
1157*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
1158*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
1159*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill
1160*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    mv s0, a3
1161*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    mv s1, a2
1162*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    mv s2, a1
11637de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    mv s3, a0
1164*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    addi a1, a0, 12
1165*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    mv a0, a4
1166eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpf
1167*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    addi a1, s3, 8
1168014455a5SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    mv a0, s0
1169ea6b8fa4SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    call frexpf
1170*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    addi a1, s3, 4
1171*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    mv a0, s1
1172*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    call frexpf
1173*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    mv a0, s2
1174*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    mv a1, s3
1175*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    call frexpf
1176*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
1177*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
1178*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
1179*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
1180*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload
1181*a7dafea3SBenjamin Maxwell; RV32IZFINXZDINX-NEXT:    addi sp, sp, 32
11827de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    ret
11837de4c6f8SAlex Bradbury;
11847de4c6f8SAlex Bradbury; RV64IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
11857de4c6f8SAlex Bradbury; RV64IZFINXZDINX:       # %bb.0:
11867de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, -80
11877de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd ra, 72(sp) # 8-byte Folded Spill
11887de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s0, 64(sp) # 8-byte Folded Spill
11897de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s1, 56(sp) # 8-byte Folded Spill
11907de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s2, 48(sp) # 8-byte Folded Spill
11917de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd s3, 40(sp) # 8-byte Folded Spill
11927de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s0, a4
11937de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s1, a3
11947de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s2, a2
11957de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a2, a1
11967de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv s3, a0
11977de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi a1, sp, 8
11987de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a0, a2
1199eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
12007de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi a1, sp, 16
12017de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a0, s2
1202eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
12037de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi a1, sp, 24
12047de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a0, s1
1205eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
12067de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi a1, sp, 32
12077de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a0, s0
1208eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpf
12092967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld a0, 8(sp)
12102967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld a1, 16(sp)
12112967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld a2, 24(sp)
12122967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld a3, 32(sp)
12132967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw a0, 0(s3)
12142967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw a1, 4(s3)
12152967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw a2, 8(s3)
12162967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sw a3, 12(s3)
12177de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
12187de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
12197de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s1, 56(sp) # 8-byte Folded Reload
12207de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s2, 48(sp) # 8-byte Folded Reload
12217de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld s3, 40(sp) # 8-byte Folded Reload
12227de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, 80
12237de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ret
1224619c6c0eSAlex Bradbury;
1225619c6c0eSAlex Bradbury; RV32I-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
1226619c6c0eSAlex Bradbury; RV32I:       # %bb.0:
1227619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -48
1228619c6c0eSAlex Bradbury; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1229619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1230619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
1231619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s2, 32(sp) # 4-byte Folded Spill
1232619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s3, 28(sp) # 4-byte Folded Spill
1233619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a2, 0(a1)
123414c4f28eSAlex Bradbury; RV32I-NEXT:    lw s0, 4(a1)
123514c4f28eSAlex Bradbury; RV32I-NEXT:    lw s1, 8(a1)
123614c4f28eSAlex Bradbury; RV32I-NEXT:    lw s2, 12(a1)
1237619c6c0eSAlex Bradbury; RV32I-NEXT:    mv s3, a0
1238619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 12
1239619c6c0eSAlex Bradbury; RV32I-NEXT:    mv a0, a2
1240eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
1241619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 16
124214c4f28eSAlex Bradbury; RV32I-NEXT:    mv a0, s0
1243eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
1244619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 20
1245619c6c0eSAlex Bradbury; RV32I-NEXT:    mv a0, s1
1246eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
1247619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 24
124814c4f28eSAlex Bradbury; RV32I-NEXT:    mv a0, s2
1249eabaee0cSFangrui Song; RV32I-NEXT:    call frexpf
12502967e5f8SAlex Bradbury; RV32I-NEXT:    lw a0, 12(sp)
12512967e5f8SAlex Bradbury; RV32I-NEXT:    lw a1, 16(sp)
12522967e5f8SAlex Bradbury; RV32I-NEXT:    lw a2, 20(sp)
12532967e5f8SAlex Bradbury; RV32I-NEXT:    lw a3, 24(sp)
12542967e5f8SAlex Bradbury; RV32I-NEXT:    sw a0, 0(s3)
12552967e5f8SAlex Bradbury; RV32I-NEXT:    sw a1, 4(s3)
12562967e5f8SAlex Bradbury; RV32I-NEXT:    sw a2, 8(s3)
12572967e5f8SAlex Bradbury; RV32I-NEXT:    sw a3, 12(s3)
1258619c6c0eSAlex Bradbury; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1259619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1260619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
1261619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s2, 32(sp) # 4-byte Folded Reload
1262619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s3, 28(sp) # 4-byte Folded Reload
1263619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 48
1264619c6c0eSAlex Bradbury; RV32I-NEXT:    ret
1265619c6c0eSAlex Bradbury;
1266619c6c0eSAlex Bradbury; RV64I-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
1267619c6c0eSAlex Bradbury; RV64I:       # %bb.0:
1268619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -64
1269619c6c0eSAlex Bradbury; RV64I-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
1270619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
1271619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
1272619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s2, 32(sp) # 8-byte Folded Spill
1273619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s3, 24(sp) # 8-byte Folded Spill
1274619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a2, 0(a1)
127514c4f28eSAlex Bradbury; RV64I-NEXT:    lw s0, 8(a1)
127614c4f28eSAlex Bradbury; RV64I-NEXT:    lw s1, 16(a1)
127714c4f28eSAlex Bradbury; RV64I-NEXT:    lw s2, 24(a1)
1278619c6c0eSAlex Bradbury; RV64I-NEXT:    mv s3, a0
1279619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 8
1280619c6c0eSAlex Bradbury; RV64I-NEXT:    mv a0, a2
1281eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
1282619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 12
128314c4f28eSAlex Bradbury; RV64I-NEXT:    mv a0, s0
1284eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
1285619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 16
1286619c6c0eSAlex Bradbury; RV64I-NEXT:    mv a0, s1
1287eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
1288619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 20
128914c4f28eSAlex Bradbury; RV64I-NEXT:    mv a0, s2
1290eabaee0cSFangrui Song; RV64I-NEXT:    call frexpf
12912967e5f8SAlex Bradbury; RV64I-NEXT:    lw a0, 8(sp)
12922967e5f8SAlex Bradbury; RV64I-NEXT:    lw a1, 12(sp)
12932967e5f8SAlex Bradbury; RV64I-NEXT:    lw a2, 16(sp)
12942967e5f8SAlex Bradbury; RV64I-NEXT:    lw a3, 20(sp)
12952967e5f8SAlex Bradbury; RV64I-NEXT:    sw a0, 0(s3)
12962967e5f8SAlex Bradbury; RV64I-NEXT:    sw a1, 4(s3)
12972967e5f8SAlex Bradbury; RV64I-NEXT:    sw a2, 8(s3)
12982967e5f8SAlex Bradbury; RV64I-NEXT:    sw a3, 12(s3)
1299619c6c0eSAlex Bradbury; RV64I-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
1300619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
1301619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
1302619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s2, 32(sp) # 8-byte Folded Reload
1303619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s3, 24(sp) # 8-byte Folded Reload
1304619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 64
1305619c6c0eSAlex Bradbury; RV64I-NEXT:    ret
13067de4c6f8SAlex Bradbury  %result = call { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float> %a)
13077de4c6f8SAlex Bradbury  %result.1 = extractvalue { <4 x float>, <4 x i32> } %result, 1
13087de4c6f8SAlex Bradbury  ret <4 x i32> %result.1
13097de4c6f8SAlex Bradbury}
13107de4c6f8SAlex Bradbury
13117de4c6f8SAlex Bradburydefine { double, i32 } @test_frexp_f64_i32(double %a) nounwind {
13127de4c6f8SAlex Bradbury; RV32IFD-LABEL: test_frexp_f64_i32:
13137de4c6f8SAlex Bradbury; RV32IFD:       # %bb.0:
13147de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, -16
13157de4c6f8SAlex Bradbury; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
13167de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi a0, sp, 8
1317eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexp
13187de4c6f8SAlex Bradbury; RV32IFD-NEXT:    lw a0, 8(sp)
13197de4c6f8SAlex Bradbury; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
13207de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, 16
13217de4c6f8SAlex Bradbury; RV32IFD-NEXT:    ret
13227de4c6f8SAlex Bradbury;
13237de4c6f8SAlex Bradbury; RV64IFD-LABEL: test_frexp_f64_i32:
13247de4c6f8SAlex Bradbury; RV64IFD:       # %bb.0:
13257de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, -16
13267de4c6f8SAlex Bradbury; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
13277de4c6f8SAlex Bradbury; RV64IFD-NEXT:    mv a0, sp
1328eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexp
13297de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld a0, 0(sp)
13307de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
13317de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, 16
13327de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ret
13337de4c6f8SAlex Bradbury;
13347de4c6f8SAlex Bradbury; RV32IZFINXZDINX-LABEL: test_frexp_f64_i32:
13357de4c6f8SAlex Bradbury; RV32IZFINXZDINX:       # %bb.0:
13367de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
13377de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
13387de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi a2, sp, 8
1339eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexp
13407de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a2, 8(sp)
13417de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
13427de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
13437de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    ret
13447de4c6f8SAlex Bradbury;
13457de4c6f8SAlex Bradbury; RV64IZFINXZDINX-LABEL: test_frexp_f64_i32:
13467de4c6f8SAlex Bradbury; RV64IZFINXZDINX:       # %bb.0:
13477de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
13487de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
13497de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a1, sp
1350eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexp
13517de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld a1, 0(sp)
13527de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
13537de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
13547de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ret
1355619c6c0eSAlex Bradbury;
1356619c6c0eSAlex Bradbury; RV32I-LABEL: test_frexp_f64_i32:
1357619c6c0eSAlex Bradbury; RV32I:       # %bb.0:
1358619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -16
1359619c6c0eSAlex Bradbury; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1360619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill
1361619c6c0eSAlex Bradbury; RV32I-NEXT:    mv a3, a2
1362619c6c0eSAlex Bradbury; RV32I-NEXT:    mv s0, a0
1363619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a2, sp, 4
1364619c6c0eSAlex Bradbury; RV32I-NEXT:    mv a0, a1
1365619c6c0eSAlex Bradbury; RV32I-NEXT:    mv a1, a3
1366eabaee0cSFangrui Song; RV32I-NEXT:    call frexp
1367619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a2, 4(sp)
1368619c6c0eSAlex Bradbury; RV32I-NEXT:    sw a0, 0(s0)
13692967e5f8SAlex Bradbury; RV32I-NEXT:    sw a1, 4(s0)
1370619c6c0eSAlex Bradbury; RV32I-NEXT:    sw a2, 8(s0)
1371619c6c0eSAlex Bradbury; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1372619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload
1373619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 16
1374619c6c0eSAlex Bradbury; RV32I-NEXT:    ret
1375619c6c0eSAlex Bradbury;
1376619c6c0eSAlex Bradbury; RV64I-LABEL: test_frexp_f64_i32:
1377619c6c0eSAlex Bradbury; RV64I:       # %bb.0:
1378619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -16
1379619c6c0eSAlex Bradbury; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1380619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 4
1381eabaee0cSFangrui Song; RV64I-NEXT:    call frexp
1382619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a1, 4(sp)
1383619c6c0eSAlex Bradbury; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1384619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 16
1385619c6c0eSAlex Bradbury; RV64I-NEXT:    ret
13867de4c6f8SAlex Bradbury  %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)
13877de4c6f8SAlex Bradbury  ret { double, i32 } %result
13887de4c6f8SAlex Bradbury}
13897de4c6f8SAlex Bradbury
13907de4c6f8SAlex Bradburydefine double @test_frexp_f64_i32_only_use_fract(double %a) nounwind {
13917de4c6f8SAlex Bradbury; RV32IFD-LABEL: test_frexp_f64_i32_only_use_fract:
13927de4c6f8SAlex Bradbury; RV32IFD:       # %bb.0:
13937de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, -16
13947de4c6f8SAlex Bradbury; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
13957de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi a0, sp, 8
1396eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexp
13977de4c6f8SAlex Bradbury; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
13987de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, 16
13997de4c6f8SAlex Bradbury; RV32IFD-NEXT:    ret
14007de4c6f8SAlex Bradbury;
14017de4c6f8SAlex Bradbury; RV64IFD-LABEL: test_frexp_f64_i32_only_use_fract:
14027de4c6f8SAlex Bradbury; RV64IFD:       # %bb.0:
14037de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, -16
14047de4c6f8SAlex Bradbury; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
14057de4c6f8SAlex Bradbury; RV64IFD-NEXT:    mv a0, sp
1406eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexp
14077de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
14087de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, 16
14097de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ret
14107de4c6f8SAlex Bradbury;
14117de4c6f8SAlex Bradbury; RV32IZFINXZDINX-LABEL: test_frexp_f64_i32_only_use_fract:
14127de4c6f8SAlex Bradbury; RV32IZFINXZDINX:       # %bb.0:
14137de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
14147de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
14157de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi a2, sp, 8
1416eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexp
14177de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
14187de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
14197de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    ret
14207de4c6f8SAlex Bradbury;
14217de4c6f8SAlex Bradbury; RV64IZFINXZDINX-LABEL: test_frexp_f64_i32_only_use_fract:
14227de4c6f8SAlex Bradbury; RV64IZFINXZDINX:       # %bb.0:
14237de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
14247de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
14257de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a1, sp
1426eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexp
14277de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
14287de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
14297de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ret
1430619c6c0eSAlex Bradbury;
1431619c6c0eSAlex Bradbury; RV32I-LABEL: test_frexp_f64_i32_only_use_fract:
1432619c6c0eSAlex Bradbury; RV32I:       # %bb.0:
1433619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -16
1434619c6c0eSAlex Bradbury; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1435619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a2, sp, 8
1436eabaee0cSFangrui Song; RV32I-NEXT:    call frexp
1437619c6c0eSAlex Bradbury; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1438619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 16
1439619c6c0eSAlex Bradbury; RV32I-NEXT:    ret
1440619c6c0eSAlex Bradbury;
1441619c6c0eSAlex Bradbury; RV64I-LABEL: test_frexp_f64_i32_only_use_fract:
1442619c6c0eSAlex Bradbury; RV64I:       # %bb.0:
1443619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -16
1444619c6c0eSAlex Bradbury; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1445619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 4
1446eabaee0cSFangrui Song; RV64I-NEXT:    call frexp
1447619c6c0eSAlex Bradbury; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1448619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 16
1449619c6c0eSAlex Bradbury; RV64I-NEXT:    ret
14507de4c6f8SAlex Bradbury  %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)
14517de4c6f8SAlex Bradbury  %result.0 = extractvalue { double, i32 } %result, 0
14527de4c6f8SAlex Bradbury  ret double %result.0
14537de4c6f8SAlex Bradbury}
14547de4c6f8SAlex Bradbury
14557de4c6f8SAlex Bradburydefine i32 @test_frexp_f64_i32_only_use_exp(double %a) nounwind {
14567de4c6f8SAlex Bradbury; RV32IFD-LABEL: test_frexp_f64_i32_only_use_exp:
14577de4c6f8SAlex Bradbury; RV32IFD:       # %bb.0:
14587de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, -16
14597de4c6f8SAlex Bradbury; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
14607de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi a0, sp, 8
1461eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexp
14627de4c6f8SAlex Bradbury; RV32IFD-NEXT:    lw a0, 8(sp)
14637de4c6f8SAlex Bradbury; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
14647de4c6f8SAlex Bradbury; RV32IFD-NEXT:    addi sp, sp, 16
14657de4c6f8SAlex Bradbury; RV32IFD-NEXT:    ret
14667de4c6f8SAlex Bradbury;
14677de4c6f8SAlex Bradbury; RV64IFD-LABEL: test_frexp_f64_i32_only_use_exp:
14687de4c6f8SAlex Bradbury; RV64IFD:       # %bb.0:
14697de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, -16
14707de4c6f8SAlex Bradbury; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
14717de4c6f8SAlex Bradbury; RV64IFD-NEXT:    mv a0, sp
1472eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexp
14737de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld a0, 0(sp)
14747de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
14757de4c6f8SAlex Bradbury; RV64IFD-NEXT:    addi sp, sp, 16
14767de4c6f8SAlex Bradbury; RV64IFD-NEXT:    ret
14777de4c6f8SAlex Bradbury;
14787de4c6f8SAlex Bradbury; RV32IZFINXZDINX-LABEL: test_frexp_f64_i32_only_use_exp:
14797de4c6f8SAlex Bradbury; RV32IZFINXZDINX:       # %bb.0:
14807de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, -16
14817de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
14827de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi a2, sp, 8
1483eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexp
14847de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a0, 8(sp)
14857de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
14867de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    addi sp, sp, 16
14877de4c6f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    ret
14887de4c6f8SAlex Bradbury;
14897de4c6f8SAlex Bradbury; RV64IZFINXZDINX-LABEL: test_frexp_f64_i32_only_use_exp:
14907de4c6f8SAlex Bradbury; RV64IZFINXZDINX:       # %bb.0:
14917de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
14927de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
14937de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    mv a1, sp
1494eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexp
14957de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld a0, 0(sp)
14967de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
14977de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
14987de4c6f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    ret
1499619c6c0eSAlex Bradbury;
1500619c6c0eSAlex Bradbury; RV32I-LABEL: test_frexp_f64_i32_only_use_exp:
1501619c6c0eSAlex Bradbury; RV32I:       # %bb.0:
1502619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -16
1503619c6c0eSAlex Bradbury; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
1504619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a2, sp, 8
1505eabaee0cSFangrui Song; RV32I-NEXT:    call frexp
1506619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a0, 8(sp)
1507619c6c0eSAlex Bradbury; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
1508619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 16
1509619c6c0eSAlex Bradbury; RV32I-NEXT:    ret
1510619c6c0eSAlex Bradbury;
1511619c6c0eSAlex Bradbury; RV64I-LABEL: test_frexp_f64_i32_only_use_exp:
1512619c6c0eSAlex Bradbury; RV64I:       # %bb.0:
1513619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -16
1514619c6c0eSAlex Bradbury; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1515619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a1, sp, 4
1516eabaee0cSFangrui Song; RV64I-NEXT:    call frexp
1517619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a0, 4(sp)
1518619c6c0eSAlex Bradbury; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1519619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 16
1520619c6c0eSAlex Bradbury; RV64I-NEXT:    ret
15217de4c6f8SAlex Bradbury  %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)
15227de4c6f8SAlex Bradbury  %result.0 = extractvalue { double, i32 } %result, 1
15237de4c6f8SAlex Bradbury  ret i32 %result.0
15247de4c6f8SAlex Bradbury}
15257de4c6f8SAlex Bradbury
15267de4c6f8SAlex Bradbury; FIXME: Widen vector result
15277de4c6f8SAlex Bradbury; define { <2 x double>, <2 x i32> } @test_frexp_v2f64_v2i32(<2 x double> %a) nounwind {
15287de4c6f8SAlex Bradbury;   %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)
15297de4c6f8SAlex Bradbury;   ret { <2 x double>, <2 x i32> } %result
15307de4c6f8SAlex Bradbury; }
15317de4c6f8SAlex Bradbury
15327de4c6f8SAlex Bradbury; define <2 x double> @test_frexp_v2f64_v2i32_only_use_fract(<2 x double> %a) nounwind {
15337de4c6f8SAlex Bradbury;   %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)
15347de4c6f8SAlex Bradbury;   %result.0 = extractvalue { <2 x double>, <2 x i32> } %result, 0
15357de4c6f8SAlex Bradbury;   ret <2 x double> %result.0
15367de4c6f8SAlex Bradbury; }
15377de4c6f8SAlex Bradbury
15387de4c6f8SAlex Bradbury; define <2 x i32> @test_frexp_v2f64_v2i32_only_use_exp(<2 x double> %a) nounwind {
15397de4c6f8SAlex Bradbury;   %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)
15407de4c6f8SAlex Bradbury;   %result.1 = extractvalue { <2 x double>, <2 x i32> } %result, 1
15417de4c6f8SAlex Bradbury;   ret <2 x i32> %result.1
15427de4c6f8SAlex Bradbury; }
15437de4c6f8SAlex Bradbury
1544e8ed6e35SMatt Arsenaultdefine { fp128, i32 } @test_frexp_f128_i32(fp128 %a) nounwind {
1545e8ed6e35SMatt Arsenault; RV32IFD-LABEL: test_frexp_f128_i32:
1546e8ed6e35SMatt Arsenault; RV32IFD:       # %bb.0:
1547e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi sp, sp, -48
1548e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1549e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1550e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    lw a3, 0(a1)
15512967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a4, 4(a1)
15522967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a5, 8(a1)
15532967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a6, 12(a1)
1554e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    mv s0, a0
1555e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi a0, sp, 16
1556e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    mv a1, sp
1557e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi a2, sp, 36
1558e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    sw a3, 0(sp)
15592967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a4, 4(sp)
15602967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a5, 8(sp)
15612967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a6, 12(sp)
1562eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpl
15632967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a0, 36(sp)
15642967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a1, 16(sp)
15652967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a2, 20(sp)
15662967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a3, 24(sp)
15672967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a4, 28(sp)
15682967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a1, 0(s0)
15692967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a2, 4(s0)
15702967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a3, 8(s0)
15712967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a4, 12(s0)
15722967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a0, 16(s0)
1573e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1574e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1575e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi sp, sp, 48
1576e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    ret
1577e8ed6e35SMatt Arsenault;
1578e8ed6e35SMatt Arsenault; RV64IFD-LABEL: test_frexp_f128_i32:
1579e8ed6e35SMatt Arsenault; RV64IFD:       # %bb.0:
1580e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    addi sp, sp, -32
1581e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
1582e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
1583e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    mv a3, a2
1584e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    mv s0, a0
1585e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    addi a2, sp, 12
1586e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    mv a0, a1
1587e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    mv a1, a3
1588eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpl
1589e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    lw a2, 12(sp)
1590e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    sd a0, 0(s0)
15912967e5f8SAlex Bradbury; RV64IFD-NEXT:    sd a1, 8(s0)
1592e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    sw a2, 16(s0)
1593e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
1594e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
1595e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    addi sp, sp, 32
1596e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    ret
1597e8ed6e35SMatt Arsenault;
1598e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-LABEL: test_frexp_f128_i32:
1599e8ed6e35SMatt Arsenault; RV32IZFINXZDINX:       # %bb.0:
1600e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi sp, sp, -48
1601e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1602e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1603e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    lw a3, 0(a1)
16042967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a4, 4(a1)
16052967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a5, 8(a1)
16062967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a6, 12(a1)
1607e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    mv s0, a0
1608e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi a0, sp, 16
1609e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    mv a1, sp
1610e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi a2, sp, 36
1611e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    sw a3, 0(sp)
16122967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a4, 4(sp)
16132967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a5, 8(sp)
16142967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a6, 12(sp)
1615eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpl
16162967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a0, 36(sp)
16172967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a1, 16(sp)
16182967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a2, 20(sp)
16192967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a3, 24(sp)
16202967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a4, 28(sp)
16212967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a1, 0(s0)
16222967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a2, 4(s0)
16232967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a3, 8(s0)
16242967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a4, 12(s0)
16252967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a0, 16(s0)
1626e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1627e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1628e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi sp, sp, 48
1629e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    ret
1630e8ed6e35SMatt Arsenault;
1631e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-LABEL: test_frexp_f128_i32:
1632e8ed6e35SMatt Arsenault; RV64IZFINXZDINX:       # %bb.0:
1633e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    addi sp, sp, -32
1634e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
1635e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
1636e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    mv a3, a2
1637e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    mv s0, a0
1638e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    addi a2, sp, 12
1639e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    mv a0, a1
1640e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    mv a1, a3
1641eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpl
1642e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    lw a2, 12(sp)
1643e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    sd a0, 0(s0)
16442967e5f8SAlex Bradbury; RV64IZFINXZDINX-NEXT:    sd a1, 8(s0)
1645e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    sw a2, 16(s0)
1646e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
1647e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
1648e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    addi sp, sp, 32
1649e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    ret
1650619c6c0eSAlex Bradbury;
1651619c6c0eSAlex Bradbury; RV32I-LABEL: test_frexp_f128_i32:
1652619c6c0eSAlex Bradbury; RV32I:       # %bb.0:
1653619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -48
1654619c6c0eSAlex Bradbury; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1655619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1656619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a3, 0(a1)
16572967e5f8SAlex Bradbury; RV32I-NEXT:    lw a4, 4(a1)
16582967e5f8SAlex Bradbury; RV32I-NEXT:    lw a5, 8(a1)
16592967e5f8SAlex Bradbury; RV32I-NEXT:    lw a6, 12(a1)
1660619c6c0eSAlex Bradbury; RV32I-NEXT:    mv s0, a0
1661619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a0, sp, 16
1662619c6c0eSAlex Bradbury; RV32I-NEXT:    mv a1, sp
1663619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a2, sp, 36
1664619c6c0eSAlex Bradbury; RV32I-NEXT:    sw a3, 0(sp)
16652967e5f8SAlex Bradbury; RV32I-NEXT:    sw a4, 4(sp)
16662967e5f8SAlex Bradbury; RV32I-NEXT:    sw a5, 8(sp)
16672967e5f8SAlex Bradbury; RV32I-NEXT:    sw a6, 12(sp)
1668eabaee0cSFangrui Song; RV32I-NEXT:    call frexpl
16692967e5f8SAlex Bradbury; RV32I-NEXT:    lw a0, 36(sp)
16702967e5f8SAlex Bradbury; RV32I-NEXT:    lw a1, 16(sp)
16712967e5f8SAlex Bradbury; RV32I-NEXT:    lw a2, 20(sp)
16722967e5f8SAlex Bradbury; RV32I-NEXT:    lw a3, 24(sp)
16732967e5f8SAlex Bradbury; RV32I-NEXT:    lw a4, 28(sp)
16742967e5f8SAlex Bradbury; RV32I-NEXT:    sw a1, 0(s0)
16752967e5f8SAlex Bradbury; RV32I-NEXT:    sw a2, 4(s0)
16762967e5f8SAlex Bradbury; RV32I-NEXT:    sw a3, 8(s0)
16772967e5f8SAlex Bradbury; RV32I-NEXT:    sw a4, 12(s0)
16782967e5f8SAlex Bradbury; RV32I-NEXT:    sw a0, 16(s0)
1679619c6c0eSAlex Bradbury; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1680619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1681619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 48
1682619c6c0eSAlex Bradbury; RV32I-NEXT:    ret
1683619c6c0eSAlex Bradbury;
1684619c6c0eSAlex Bradbury; RV64I-LABEL: test_frexp_f128_i32:
1685619c6c0eSAlex Bradbury; RV64I:       # %bb.0:
1686619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -32
1687619c6c0eSAlex Bradbury; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill
1688619c6c0eSAlex Bradbury; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill
1689619c6c0eSAlex Bradbury; RV64I-NEXT:    mv a3, a2
1690619c6c0eSAlex Bradbury; RV64I-NEXT:    mv s0, a0
1691619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a2, sp, 12
1692619c6c0eSAlex Bradbury; RV64I-NEXT:    mv a0, a1
1693619c6c0eSAlex Bradbury; RV64I-NEXT:    mv a1, a3
1694eabaee0cSFangrui Song; RV64I-NEXT:    call frexpl
1695619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a2, 12(sp)
1696619c6c0eSAlex Bradbury; RV64I-NEXT:    sd a0, 0(s0)
16972967e5f8SAlex Bradbury; RV64I-NEXT:    sd a1, 8(s0)
1698619c6c0eSAlex Bradbury; RV64I-NEXT:    sw a2, 16(s0)
1699619c6c0eSAlex Bradbury; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload
1700619c6c0eSAlex Bradbury; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload
1701619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 32
1702619c6c0eSAlex Bradbury; RV64I-NEXT:    ret
1703e8ed6e35SMatt Arsenault  %result = call { fp128, i32 } @llvm.frexp.f128.i32(fp128 %a)
1704e8ed6e35SMatt Arsenault  ret { fp128, i32 } %result
1705e8ed6e35SMatt Arsenault}
17062ae71f54SAlex Bradbury
1707e8ed6e35SMatt Arsenaultdefine fp128 @test_frexp_f128_i32_only_use_fract(fp128 %a) nounwind {
1708e8ed6e35SMatt Arsenault; RV32IFD-LABEL: test_frexp_f128_i32_only_use_fract:
1709e8ed6e35SMatt Arsenault; RV32IFD:       # %bb.0:
1710e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi sp, sp, -48
1711e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1712e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1713e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    lw a3, 0(a1)
17142967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a4, 4(a1)
17152967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a5, 8(a1)
17162967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a6, 12(a1)
1717e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    mv s0, a0
1718e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi a0, sp, 16
1719e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    mv a1, sp
1720e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi a2, sp, 36
1721e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    sw a3, 0(sp)
17222967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a4, 4(sp)
17232967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a5, 8(sp)
17242967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a6, 12(sp)
1725eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpl
17262967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a0, 16(sp)
17272967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a1, 20(sp)
17282967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a2, 24(sp)
17292967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a3, 28(sp)
17302967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a0, 0(s0)
17312967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a1, 4(s0)
17322967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a2, 8(s0)
17332967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a3, 12(s0)
1734e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1735e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1736e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi sp, sp, 48
1737e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    ret
1738e8ed6e35SMatt Arsenault;
1739e8ed6e35SMatt Arsenault; RV64IFD-LABEL: test_frexp_f128_i32_only_use_fract:
1740e8ed6e35SMatt Arsenault; RV64IFD:       # %bb.0:
1741e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    addi sp, sp, -16
1742e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1743e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    addi a2, sp, 4
1744eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpl
1745e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1746e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    addi sp, sp, 16
1747e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    ret
1748e8ed6e35SMatt Arsenault;
1749e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-LABEL: test_frexp_f128_i32_only_use_fract:
1750e8ed6e35SMatt Arsenault; RV32IZFINXZDINX:       # %bb.0:
1751e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi sp, sp, -48
1752e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1753e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1754e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    lw a3, 0(a1)
17552967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a4, 4(a1)
17562967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a5, 8(a1)
17572967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a6, 12(a1)
1758e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    mv s0, a0
1759e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi a0, sp, 16
1760e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    mv a1, sp
1761e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi a2, sp, 36
1762e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    sw a3, 0(sp)
17632967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a4, 4(sp)
17642967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a5, 8(sp)
17652967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a6, 12(sp)
1766eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpl
17672967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a0, 16(sp)
17682967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a1, 20(sp)
17692967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a2, 24(sp)
17702967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a3, 28(sp)
17712967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a0, 0(s0)
17722967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a1, 4(s0)
17732967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a2, 8(s0)
17742967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a3, 12(s0)
1775e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1776e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1777e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi sp, sp, 48
1778e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    ret
1779e8ed6e35SMatt Arsenault;
1780e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-LABEL: test_frexp_f128_i32_only_use_fract:
1781e8ed6e35SMatt Arsenault; RV64IZFINXZDINX:       # %bb.0:
1782e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
1783e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1784e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    addi a2, sp, 4
1785eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpl
1786e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1787e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
1788e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    ret
1789619c6c0eSAlex Bradbury;
1790619c6c0eSAlex Bradbury; RV32I-LABEL: test_frexp_f128_i32_only_use_fract:
1791619c6c0eSAlex Bradbury; RV32I:       # %bb.0:
1792619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -48
1793619c6c0eSAlex Bradbury; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1794619c6c0eSAlex Bradbury; RV32I-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
1795619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a3, 0(a1)
17962967e5f8SAlex Bradbury; RV32I-NEXT:    lw a4, 4(a1)
17972967e5f8SAlex Bradbury; RV32I-NEXT:    lw a5, 8(a1)
17982967e5f8SAlex Bradbury; RV32I-NEXT:    lw a6, 12(a1)
1799619c6c0eSAlex Bradbury; RV32I-NEXT:    mv s0, a0
1800619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a0, sp, 16
1801619c6c0eSAlex Bradbury; RV32I-NEXT:    mv a1, sp
1802619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a2, sp, 36
1803619c6c0eSAlex Bradbury; RV32I-NEXT:    sw a3, 0(sp)
18042967e5f8SAlex Bradbury; RV32I-NEXT:    sw a4, 4(sp)
18052967e5f8SAlex Bradbury; RV32I-NEXT:    sw a5, 8(sp)
18062967e5f8SAlex Bradbury; RV32I-NEXT:    sw a6, 12(sp)
1807eabaee0cSFangrui Song; RV32I-NEXT:    call frexpl
18082967e5f8SAlex Bradbury; RV32I-NEXT:    lw a0, 16(sp)
18092967e5f8SAlex Bradbury; RV32I-NEXT:    lw a1, 20(sp)
18102967e5f8SAlex Bradbury; RV32I-NEXT:    lw a2, 24(sp)
18112967e5f8SAlex Bradbury; RV32I-NEXT:    lw a3, 28(sp)
18122967e5f8SAlex Bradbury; RV32I-NEXT:    sw a0, 0(s0)
18132967e5f8SAlex Bradbury; RV32I-NEXT:    sw a1, 4(s0)
18142967e5f8SAlex Bradbury; RV32I-NEXT:    sw a2, 8(s0)
18152967e5f8SAlex Bradbury; RV32I-NEXT:    sw a3, 12(s0)
1816619c6c0eSAlex Bradbury; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1817619c6c0eSAlex Bradbury; RV32I-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
1818619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 48
1819619c6c0eSAlex Bradbury; RV32I-NEXT:    ret
1820619c6c0eSAlex Bradbury;
1821619c6c0eSAlex Bradbury; RV64I-LABEL: test_frexp_f128_i32_only_use_fract:
1822619c6c0eSAlex Bradbury; RV64I:       # %bb.0:
1823619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -16
1824619c6c0eSAlex Bradbury; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1825619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a2, sp, 4
1826eabaee0cSFangrui Song; RV64I-NEXT:    call frexpl
1827619c6c0eSAlex Bradbury; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1828619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 16
1829619c6c0eSAlex Bradbury; RV64I-NEXT:    ret
1830e8ed6e35SMatt Arsenault  %result = call { fp128, i32 } @llvm.frexp.f128.i32(fp128 %a)
1831e8ed6e35SMatt Arsenault  %result.0 = extractvalue { fp128, i32 } %result, 0
1832e8ed6e35SMatt Arsenault  ret fp128 %result.0
1833e8ed6e35SMatt Arsenault}
18342ae71f54SAlex Bradbury
1835e8ed6e35SMatt Arsenaultdefine i32 @test_frexp_f128_i32_only_use_exp(fp128 %a) nounwind {
1836e8ed6e35SMatt Arsenault; RV32IFD-LABEL: test_frexp_f128_i32_only_use_exp:
1837e8ed6e35SMatt Arsenault; RV32IFD:       # %bb.0:
1838e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi sp, sp, -48
1839e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1840e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    lw a3, 0(a0)
18412967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a4, 4(a0)
18422967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a5, 8(a0)
18432967e5f8SAlex Bradbury; RV32IFD-NEXT:    lw a6, 12(a0)
1844e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi a0, sp, 24
1845e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi a1, sp, 8
1846e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi a2, sp, 40
1847e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    sw a3, 8(sp)
18482967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a4, 12(sp)
18492967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a5, 16(sp)
18502967e5f8SAlex Bradbury; RV32IFD-NEXT:    sw a6, 20(sp)
1851eabaee0cSFangrui Song; RV32IFD-NEXT:    call frexpl
1852e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    lw a0, 40(sp)
1853e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1854e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    addi sp, sp, 48
1855e8ed6e35SMatt Arsenault; RV32IFD-NEXT:    ret
1856e8ed6e35SMatt Arsenault;
1857e8ed6e35SMatt Arsenault; RV64IFD-LABEL: test_frexp_f128_i32_only_use_exp:
1858e8ed6e35SMatt Arsenault; RV64IFD:       # %bb.0:
1859e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    addi sp, sp, -16
1860e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1861e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    addi a2, sp, 4
1862eabaee0cSFangrui Song; RV64IFD-NEXT:    call frexpl
1863e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    lw a0, 4(sp)
1864e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1865e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    addi sp, sp, 16
1866e8ed6e35SMatt Arsenault; RV64IFD-NEXT:    ret
1867e8ed6e35SMatt Arsenault;
1868e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-LABEL: test_frexp_f128_i32_only_use_exp:
1869e8ed6e35SMatt Arsenault; RV32IZFINXZDINX:       # %bb.0:
1870e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi sp, sp, -48
1871e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1872e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    lw a3, 0(a0)
18732967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a4, 4(a0)
18742967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a5, 8(a0)
18752967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    lw a6, 12(a0)
1876e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi a0, sp, 24
1877e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi a1, sp, 8
1878e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi a2, sp, 40
1879e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    sw a3, 8(sp)
18802967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a4, 12(sp)
18812967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a5, 16(sp)
18822967e5f8SAlex Bradbury; RV32IZFINXZDINX-NEXT:    sw a6, 20(sp)
1883eabaee0cSFangrui Song; RV32IZFINXZDINX-NEXT:    call frexpl
1884e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    lw a0, 40(sp)
1885e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1886e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    addi sp, sp, 48
1887e8ed6e35SMatt Arsenault; RV32IZFINXZDINX-NEXT:    ret
1888e8ed6e35SMatt Arsenault;
1889e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-LABEL: test_frexp_f128_i32_only_use_exp:
1890e8ed6e35SMatt Arsenault; RV64IZFINXZDINX:       # %bb.0:
1891e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    addi sp, sp, -16
1892e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1893e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    addi a2, sp, 4
1894eabaee0cSFangrui Song; RV64IZFINXZDINX-NEXT:    call frexpl
1895e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    lw a0, 4(sp)
1896e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1897e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    addi sp, sp, 16
1898e8ed6e35SMatt Arsenault; RV64IZFINXZDINX-NEXT:    ret
1899619c6c0eSAlex Bradbury;
1900619c6c0eSAlex Bradbury; RV32I-LABEL: test_frexp_f128_i32_only_use_exp:
1901619c6c0eSAlex Bradbury; RV32I:       # %bb.0:
1902619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, -48
1903619c6c0eSAlex Bradbury; RV32I-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
1904619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a3, 0(a0)
19052967e5f8SAlex Bradbury; RV32I-NEXT:    lw a4, 4(a0)
19062967e5f8SAlex Bradbury; RV32I-NEXT:    lw a5, 8(a0)
19072967e5f8SAlex Bradbury; RV32I-NEXT:    lw a6, 12(a0)
1908619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a0, sp, 24
1909619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a1, sp, 8
1910619c6c0eSAlex Bradbury; RV32I-NEXT:    addi a2, sp, 40
1911619c6c0eSAlex Bradbury; RV32I-NEXT:    sw a3, 8(sp)
19122967e5f8SAlex Bradbury; RV32I-NEXT:    sw a4, 12(sp)
19132967e5f8SAlex Bradbury; RV32I-NEXT:    sw a5, 16(sp)
19142967e5f8SAlex Bradbury; RV32I-NEXT:    sw a6, 20(sp)
1915eabaee0cSFangrui Song; RV32I-NEXT:    call frexpl
1916619c6c0eSAlex Bradbury; RV32I-NEXT:    lw a0, 40(sp)
1917619c6c0eSAlex Bradbury; RV32I-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
1918619c6c0eSAlex Bradbury; RV32I-NEXT:    addi sp, sp, 48
1919619c6c0eSAlex Bradbury; RV32I-NEXT:    ret
1920619c6c0eSAlex Bradbury;
1921619c6c0eSAlex Bradbury; RV64I-LABEL: test_frexp_f128_i32_only_use_exp:
1922619c6c0eSAlex Bradbury; RV64I:       # %bb.0:
1923619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, -16
1924619c6c0eSAlex Bradbury; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
1925619c6c0eSAlex Bradbury; RV64I-NEXT:    addi a2, sp, 4
1926eabaee0cSFangrui Song; RV64I-NEXT:    call frexpl
1927619c6c0eSAlex Bradbury; RV64I-NEXT:    lw a0, 4(sp)
1928619c6c0eSAlex Bradbury; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
1929619c6c0eSAlex Bradbury; RV64I-NEXT:    addi sp, sp, 16
1930619c6c0eSAlex Bradbury; RV64I-NEXT:    ret
1931e8ed6e35SMatt Arsenault  %result = call { fp128, i32 } @llvm.frexp.f128.i32(fp128 %a)
1932e8ed6e35SMatt Arsenault  %result.0 = extractvalue { fp128, i32 } %result, 1
1933e8ed6e35SMatt Arsenault  ret i32 %result.0
1934e8ed6e35SMatt Arsenault}
19352ae71f54SAlex Bradbury
19367de4c6f8SAlex Bradburydeclare { float, i32 } @llvm.frexp.f32.i32(float) #0
19377de4c6f8SAlex Bradburydeclare { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float>) #0
19387de4c6f8SAlex Bradburydeclare { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float>) #0
19397de4c6f8SAlex Bradbury
19407de4c6f8SAlex Bradburydeclare { half, i32 } @llvm.frexp.f16.i32(half) #0
19417de4c6f8SAlex Bradburydeclare { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half>) #0
19427de4c6f8SAlex Bradbury
19437de4c6f8SAlex Bradburydeclare { double, i32 } @llvm.frexp.f64.i32(double) #0
19447de4c6f8SAlex Bradburydeclare { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double>) #0
19457de4c6f8SAlex Bradbury
19467de4c6f8SAlex Bradburydeclare { half, i16 } @llvm.frexp.f16.i16(half) #0
19477de4c6f8SAlex Bradburydeclare { <2 x half>, <2 x i16> } @llvm.frexp.v2f16.v2i16(<2 x half>) #0
19487de4c6f8SAlex Bradbury
19492ae71f54SAlex Bradburydeclare { fp128, i32 } @llvm.frexp.f128.i32(fp128) #0
19502ae71f54SAlex Bradbury
19517de4c6f8SAlex Bradburyattributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
1952