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