brintos

brintos / llvm-project-archived public Read only

0
0
Text · 157.6 KiB · 67f6912 Raw
4303 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+zfh -verify-machineinstrs < %s \3; RUN:   -target-abi=ilp32f | FileCheck -check-prefixes=CHECKIZFH,RV32IZFH %s4; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs < %s \5; RUN:   -target-abi=lp64f | FileCheck -check-prefixes=CHECKIZFH,RV64IZFH %s6; RUN: llc -mtriple=riscv32 -mattr=+zhinx -verify-machineinstrs < %s \7; RUN:   -target-abi=ilp32 | FileCheck -check-prefixes=CHECKIZHINX,RV32IZHINX %s8; RUN: llc -mtriple=riscv64 -mattr=+zhinx -verify-machineinstrs < %s \9; RUN:   -target-abi=lp64 | FileCheck -check-prefixes=CHECKIZHINX,RV64IZHINX %s10; RUN: llc -mtriple=riscv32 -mattr=+zfhmin -verify-machineinstrs < %s \11; RUN:   -target-abi=ilp32f | FileCheck -check-prefixes=CHECKIZFHMIN,RV32IZFHMIN %s12; RUN: llc -mtriple=riscv64 -mattr=+zfhmin -verify-machineinstrs < %s \13; RUN:   -target-abi=lp64f | FileCheck -check-prefixes=CHECKIZFHMIN,RV64IZFHMIN %s14; RUN: llc -mtriple=riscv32 -mattr=+zhinxmin -verify-machineinstrs < %s \15; RUN:   -target-abi=ilp32 | FileCheck -check-prefixes=CHECKIZHINXMIN,RV32IZHINXMIN %s16; RUN: llc -mtriple=riscv64 -mattr=+zhinxmin -verify-machineinstrs < %s \17; RUN:   -target-abi=lp64 | FileCheck -check-prefixes=CHECKIZHINXMIN,RV64IZHINXMIN %s18 19define signext i32 @test_floor_si32(half %x) {20; CHECKIZFH-LABEL: test_floor_si32:21; CHECKIZFH:       # %bb.0:22; CHECKIZFH-NEXT:    fcvt.w.h a0, fa0, rdn23; CHECKIZFH-NEXT:    feq.h a1, fa0, fa024; CHECKIZFH-NEXT:    seqz a1, a125; CHECKIZFH-NEXT:    addi a1, a1, -126; CHECKIZFH-NEXT:    and a0, a1, a027; CHECKIZFH-NEXT:    ret28;29; CHECKIZHINX-LABEL: test_floor_si32:30; CHECKIZHINX:       # %bb.0:31; CHECKIZHINX-NEXT:    li a1, 2532; CHECKIZHINX-NEXT:    slli a1, a1, 1033; CHECKIZHINX-NEXT:    fabs.h a2, a034; CHECKIZHINX-NEXT:    flt.h a1, a2, a135; CHECKIZHINX-NEXT:    beqz a1, .LBB0_236; CHECKIZHINX-NEXT:  # %bb.1:37; CHECKIZHINX-NEXT:    fcvt.w.h a1, a0, rdn38; CHECKIZHINX-NEXT:    fcvt.h.w a1, a1, rdn39; CHECKIZHINX-NEXT:    fsgnj.h a0, a1, a040; CHECKIZHINX-NEXT:  .LBB0_2:41; CHECKIZHINX-NEXT:    fcvt.w.h a1, a0, rtz42; CHECKIZHINX-NEXT:    feq.h a0, a0, a043; CHECKIZHINX-NEXT:    seqz a0, a044; CHECKIZHINX-NEXT:    addi a0, a0, -145; CHECKIZHINX-NEXT:    and a0, a0, a146; CHECKIZHINX-NEXT:    ret47;48; CHECKIZFHMIN-LABEL: test_floor_si32:49; CHECKIZFHMIN:       # %bb.0:50; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa051; CHECKIZFHMIN-NEXT:    lui a0, 30720052; CHECKIZFHMIN-NEXT:    fmv.w.x fa4, a053; CHECKIZFHMIN-NEXT:    fabs.s fa3, fa554; CHECKIZFHMIN-NEXT:    flt.s a0, fa3, fa455; CHECKIZFHMIN-NEXT:    beqz a0, .LBB0_256; CHECKIZFHMIN-NEXT:  # %bb.1:57; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa5, rdn58; CHECKIZFHMIN-NEXT:    fcvt.s.w fa4, a0, rdn59; CHECKIZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa560; CHECKIZFHMIN-NEXT:  .LBB0_2:61; CHECKIZFHMIN-NEXT:    fcvt.h.s fa5, fa562; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa563; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz64; CHECKIZFHMIN-NEXT:    feq.s a1, fa5, fa565; CHECKIZFHMIN-NEXT:    seqz a1, a166; CHECKIZFHMIN-NEXT:    addi a1, a1, -167; CHECKIZFHMIN-NEXT:    and a0, a1, a068; CHECKIZFHMIN-NEXT:    ret69;70; CHECKIZHINXMIN-LABEL: test_floor_si32:71; CHECKIZHINXMIN:       # %bb.0:72; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a073; CHECKIZHINXMIN-NEXT:    lui a1, 30720074; CHECKIZHINXMIN-NEXT:    fabs.s a2, a075; CHECKIZHINXMIN-NEXT:    flt.s a1, a2, a176; CHECKIZHINXMIN-NEXT:    beqz a1, .LBB0_277; CHECKIZHINXMIN-NEXT:  # %bb.1:78; CHECKIZHINXMIN-NEXT:    fcvt.w.s a1, a0, rdn79; CHECKIZHINXMIN-NEXT:    fcvt.s.w a1, a1, rdn80; CHECKIZHINXMIN-NEXT:    fsgnj.s a0, a1, a081; CHECKIZHINXMIN-NEXT:  .LBB0_2:82; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a083; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a084; CHECKIZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz85; CHECKIZHINXMIN-NEXT:    feq.s a0, a0, a086; CHECKIZHINXMIN-NEXT:    seqz a0, a087; CHECKIZHINXMIN-NEXT:    addi a0, a0, -188; CHECKIZHINXMIN-NEXT:    and a0, a0, a189; CHECKIZHINXMIN-NEXT:    ret90  %a = call half @llvm.floor.f16(half %x)91  %b = call i32 @llvm.fptosi.sat.i32.f16(half %a)92  ret i32 %b93}94 95define i64 @test_floor_si64(half %x) nounwind {96; RV32IZFH-LABEL: test_floor_si64:97; RV32IZFH:       # %bb.0:98; RV32IZFH-NEXT:    li a0, 2599; RV32IZFH-NEXT:    slli a0, a0, 10100; RV32IZFH-NEXT:    fmv.h.x fa5, a0101; RV32IZFH-NEXT:    fabs.h fa4, fa0102; RV32IZFH-NEXT:    flt.h a0, fa4, fa5103; RV32IZFH-NEXT:    beqz a0, .LBB1_2104; RV32IZFH-NEXT:  # %bb.1:105; RV32IZFH-NEXT:    fcvt.w.h a0, fa0, rdn106; RV32IZFH-NEXT:    fcvt.h.w fa5, a0, rdn107; RV32IZFH-NEXT:    fsgnj.h fa0, fa5, fa0108; RV32IZFH-NEXT:  .LBB1_2:109; RV32IZFH-NEXT:    addi sp, sp, -16110; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill111; RV32IZFH-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill112; RV32IZFH-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill113; RV32IZFH-NEXT:    fcvt.s.h fs0, fa0114; RV32IZFH-NEXT:    lui a0, 913408115; RV32IZFH-NEXT:    fmv.w.x fa5, a0116; RV32IZFH-NEXT:    fle.s s0, fa5, fs0117; RV32IZFH-NEXT:    fmv.s fa0, fs0118; RV32IZFH-NEXT:    call __fixsfdi119; RV32IZFH-NEXT:    lui a3, 524288120; RV32IZFH-NEXT:    lui a2, 524288121; RV32IZFH-NEXT:    beqz s0, .LBB1_4122; RV32IZFH-NEXT:  # %bb.3:123; RV32IZFH-NEXT:    mv a2, a1124; RV32IZFH-NEXT:  .LBB1_4:125; RV32IZFH-NEXT:    lui a1, 389120126; RV32IZFH-NEXT:    addi a1, a1, -1127; RV32IZFH-NEXT:    fmv.w.x fa5, a1128; RV32IZFH-NEXT:    flt.s a1, fa5, fs0129; RV32IZFH-NEXT:    beqz a1, .LBB1_6130; RV32IZFH-NEXT:  # %bb.5:131; RV32IZFH-NEXT:    addi a2, a3, -1132; RV32IZFH-NEXT:  .LBB1_6:133; RV32IZFH-NEXT:    feq.s a3, fs0, fs0134; RV32IZFH-NEXT:    neg a4, s0135; RV32IZFH-NEXT:    neg a5, a1136; RV32IZFH-NEXT:    neg a3, a3137; RV32IZFH-NEXT:    and a0, a4, a0138; RV32IZFH-NEXT:    and a1, a3, a2139; RV32IZFH-NEXT:    or a0, a5, a0140; RV32IZFH-NEXT:    and a0, a3, a0141; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload142; RV32IZFH-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload143; RV32IZFH-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload144; RV32IZFH-NEXT:    addi sp, sp, 16145; RV32IZFH-NEXT:    ret146;147; RV64IZFH-LABEL: test_floor_si64:148; RV64IZFH:       # %bb.0:149; RV64IZFH-NEXT:    fcvt.l.h a0, fa0, rdn150; RV64IZFH-NEXT:    feq.h a1, fa0, fa0151; RV64IZFH-NEXT:    seqz a1, a1152; RV64IZFH-NEXT:    addi a1, a1, -1153; RV64IZFH-NEXT:    and a0, a1, a0154; RV64IZFH-NEXT:    ret155;156; RV32IZHINX-LABEL: test_floor_si64:157; RV32IZHINX:       # %bb.0:158; RV32IZHINX-NEXT:    li a1, 25159; RV32IZHINX-NEXT:    slli a1, a1, 10160; RV32IZHINX-NEXT:    fabs.h a2, a0161; RV32IZHINX-NEXT:    flt.h a1, a2, a1162; RV32IZHINX-NEXT:    beqz a1, .LBB1_2163; RV32IZHINX-NEXT:  # %bb.1:164; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rdn165; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rdn166; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a0167; RV32IZHINX-NEXT:  .LBB1_2:168; RV32IZHINX-NEXT:    addi sp, sp, -16169; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill170; RV32IZHINX-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill171; RV32IZHINX-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill172; RV32IZHINX-NEXT:    fcvt.s.h s0, a0173; RV32IZHINX-NEXT:    lui a0, 913408174; RV32IZHINX-NEXT:    fle.s s1, a0, s0175; RV32IZHINX-NEXT:    mv a0, s0176; RV32IZHINX-NEXT:    call __fixsfdi177; RV32IZHINX-NEXT:    lui a3, 524288178; RV32IZHINX-NEXT:    lui a2, 524288179; RV32IZHINX-NEXT:    beqz s1, .LBB1_4180; RV32IZHINX-NEXT:  # %bb.3:181; RV32IZHINX-NEXT:    mv a2, a1182; RV32IZHINX-NEXT:  .LBB1_4:183; RV32IZHINX-NEXT:    lui a1, 389120184; RV32IZHINX-NEXT:    addi a1, a1, -1185; RV32IZHINX-NEXT:    flt.s a1, a1, s0186; RV32IZHINX-NEXT:    beqz a1, .LBB1_6187; RV32IZHINX-NEXT:  # %bb.5:188; RV32IZHINX-NEXT:    addi a2, a3, -1189; RV32IZHINX-NEXT:  .LBB1_6:190; RV32IZHINX-NEXT:    feq.s a3, s0, s0191; RV32IZHINX-NEXT:    neg a4, s1192; RV32IZHINX-NEXT:    neg a5, a1193; RV32IZHINX-NEXT:    neg a3, a3194; RV32IZHINX-NEXT:    and a0, a4, a0195; RV32IZHINX-NEXT:    and a1, a3, a2196; RV32IZHINX-NEXT:    or a0, a5, a0197; RV32IZHINX-NEXT:    and a0, a3, a0198; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload199; RV32IZHINX-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload200; RV32IZHINX-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload201; RV32IZHINX-NEXT:    addi sp, sp, 16202; RV32IZHINX-NEXT:    ret203;204; RV64IZHINX-LABEL: test_floor_si64:205; RV64IZHINX:       # %bb.0:206; RV64IZHINX-NEXT:    li a1, 25207; RV64IZHINX-NEXT:    slli a1, a1, 10208; RV64IZHINX-NEXT:    fabs.h a2, a0209; RV64IZHINX-NEXT:    flt.h a1, a2, a1210; RV64IZHINX-NEXT:    beqz a1, .LBB1_2211; RV64IZHINX-NEXT:  # %bb.1:212; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rdn213; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rdn214; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a0215; RV64IZHINX-NEXT:  .LBB1_2:216; RV64IZHINX-NEXT:    fcvt.l.h a1, a0, rtz217; RV64IZHINX-NEXT:    feq.h a0, a0, a0218; RV64IZHINX-NEXT:    seqz a0, a0219; RV64IZHINX-NEXT:    addi a0, a0, -1220; RV64IZHINX-NEXT:    and a0, a0, a1221; RV64IZHINX-NEXT:    ret222;223; RV32IZFHMIN-LABEL: test_floor_si64:224; RV32IZFHMIN:       # %bb.0:225; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0226; RV32IZFHMIN-NEXT:    lui a0, 307200227; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a0228; RV32IZFHMIN-NEXT:    fabs.s fa3, fa5229; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa4230; RV32IZFHMIN-NEXT:    beqz a0, .LBB1_2231; RV32IZFHMIN-NEXT:  # %bb.1:232; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rdn233; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rdn234; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa5235; RV32IZFHMIN-NEXT:  .LBB1_2:236; RV32IZFHMIN-NEXT:    addi sp, sp, -16237; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill238; RV32IZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill239; RV32IZFHMIN-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill240; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa5241; RV32IZFHMIN-NEXT:    lui a0, 913408242; RV32IZFHMIN-NEXT:    fcvt.s.h fs0, fa5243; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a0244; RV32IZFHMIN-NEXT:    fle.s s0, fa5, fs0245; RV32IZFHMIN-NEXT:    fmv.s fa0, fs0246; RV32IZFHMIN-NEXT:    call __fixsfdi247; RV32IZFHMIN-NEXT:    lui a3, 524288248; RV32IZFHMIN-NEXT:    lui a2, 524288249; RV32IZFHMIN-NEXT:    beqz s0, .LBB1_4250; RV32IZFHMIN-NEXT:  # %bb.3:251; RV32IZFHMIN-NEXT:    mv a2, a1252; RV32IZFHMIN-NEXT:  .LBB1_4:253; RV32IZFHMIN-NEXT:    lui a1, 389120254; RV32IZFHMIN-NEXT:    addi a1, a1, -1255; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a1256; RV32IZFHMIN-NEXT:    flt.s a1, fa5, fs0257; RV32IZFHMIN-NEXT:    beqz a1, .LBB1_6258; RV32IZFHMIN-NEXT:  # %bb.5:259; RV32IZFHMIN-NEXT:    addi a2, a3, -1260; RV32IZFHMIN-NEXT:  .LBB1_6:261; RV32IZFHMIN-NEXT:    feq.s a3, fs0, fs0262; RV32IZFHMIN-NEXT:    neg a4, s0263; RV32IZFHMIN-NEXT:    neg a5, a1264; RV32IZFHMIN-NEXT:    neg a3, a3265; RV32IZFHMIN-NEXT:    and a0, a4, a0266; RV32IZFHMIN-NEXT:    and a1, a3, a2267; RV32IZFHMIN-NEXT:    or a0, a5, a0268; RV32IZFHMIN-NEXT:    and a0, a3, a0269; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload270; RV32IZFHMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload271; RV32IZFHMIN-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload272; RV32IZFHMIN-NEXT:    addi sp, sp, 16273; RV32IZFHMIN-NEXT:    ret274;275; RV64IZFHMIN-LABEL: test_floor_si64:276; RV64IZFHMIN:       # %bb.0:277; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0278; RV64IZFHMIN-NEXT:    lui a0, 307200279; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a0280; RV64IZFHMIN-NEXT:    fabs.s fa3, fa5281; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa4282; RV64IZFHMIN-NEXT:    beqz a0, .LBB1_2283; RV64IZFHMIN-NEXT:  # %bb.1:284; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rdn285; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rdn286; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa5287; RV64IZFHMIN-NEXT:  .LBB1_2:288; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa5289; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa5290; RV64IZFHMIN-NEXT:    fcvt.l.s a0, fa5, rtz291; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa5292; RV64IZFHMIN-NEXT:    seqz a1, a1293; RV64IZFHMIN-NEXT:    addi a1, a1, -1294; RV64IZFHMIN-NEXT:    and a0, a1, a0295; RV64IZFHMIN-NEXT:    ret296;297; RV32IZHINXMIN-LABEL: test_floor_si64:298; RV32IZHINXMIN:       # %bb.0:299; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0300; RV32IZHINXMIN-NEXT:    lui a1, 307200301; RV32IZHINXMIN-NEXT:    fabs.s a2, a0302; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a1303; RV32IZHINXMIN-NEXT:    beqz a1, .LBB1_2304; RV32IZHINXMIN-NEXT:  # %bb.1:305; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rdn306; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rdn307; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a0308; RV32IZHINXMIN-NEXT:  .LBB1_2:309; RV32IZHINXMIN-NEXT:    addi sp, sp, -16310; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill311; RV32IZHINXMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill312; RV32IZHINXMIN-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill313; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a0314; RV32IZHINXMIN-NEXT:    fcvt.s.h s0, a0315; RV32IZHINXMIN-NEXT:    lui a0, 913408316; RV32IZHINXMIN-NEXT:    fle.s s1, a0, s0317; RV32IZHINXMIN-NEXT:    mv a0, s0318; RV32IZHINXMIN-NEXT:    call __fixsfdi319; RV32IZHINXMIN-NEXT:    lui a3, 524288320; RV32IZHINXMIN-NEXT:    lui a2, 524288321; RV32IZHINXMIN-NEXT:    beqz s1, .LBB1_4322; RV32IZHINXMIN-NEXT:  # %bb.3:323; RV32IZHINXMIN-NEXT:    mv a2, a1324; RV32IZHINXMIN-NEXT:  .LBB1_4:325; RV32IZHINXMIN-NEXT:    lui a1, 389120326; RV32IZHINXMIN-NEXT:    addi a1, a1, -1327; RV32IZHINXMIN-NEXT:    flt.s a1, a1, s0328; RV32IZHINXMIN-NEXT:    beqz a1, .LBB1_6329; RV32IZHINXMIN-NEXT:  # %bb.5:330; RV32IZHINXMIN-NEXT:    addi a2, a3, -1331; RV32IZHINXMIN-NEXT:  .LBB1_6:332; RV32IZHINXMIN-NEXT:    feq.s a3, s0, s0333; RV32IZHINXMIN-NEXT:    neg a4, s1334; RV32IZHINXMIN-NEXT:    neg a5, a1335; RV32IZHINXMIN-NEXT:    neg a3, a3336; RV32IZHINXMIN-NEXT:    and a0, a4, a0337; RV32IZHINXMIN-NEXT:    and a1, a3, a2338; RV32IZHINXMIN-NEXT:    or a0, a5, a0339; RV32IZHINXMIN-NEXT:    and a0, a3, a0340; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload341; RV32IZHINXMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload342; RV32IZHINXMIN-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload343; RV32IZHINXMIN-NEXT:    addi sp, sp, 16344; RV32IZHINXMIN-NEXT:    ret345;346; RV64IZHINXMIN-LABEL: test_floor_si64:347; RV64IZHINXMIN:       # %bb.0:348; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0349; RV64IZHINXMIN-NEXT:    lui a1, 307200350; RV64IZHINXMIN-NEXT:    fabs.s a2, a0351; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a1352; RV64IZHINXMIN-NEXT:    beqz a1, .LBB1_2353; RV64IZHINXMIN-NEXT:  # %bb.1:354; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rdn355; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rdn356; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a0357; RV64IZHINXMIN-NEXT:  .LBB1_2:358; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a0359; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0360; RV64IZHINXMIN-NEXT:    fcvt.l.s a1, a0, rtz361; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a0362; RV64IZHINXMIN-NEXT:    seqz a0, a0363; RV64IZHINXMIN-NEXT:    addi a0, a0, -1364; RV64IZHINXMIN-NEXT:    and a0, a0, a1365; RV64IZHINXMIN-NEXT:    ret366  %a = call half @llvm.floor.f16(half %x)367  %b = call i64 @llvm.fptosi.sat.i64.f16(half %a)368  ret i64 %b369}370 371define signext i32 @test_floor_ui32(half %x) {372; CHECKIZFH-LABEL: test_floor_ui32:373; CHECKIZFH:       # %bb.0:374; CHECKIZFH-NEXT:    fcvt.wu.h a0, fa0, rdn375; CHECKIZFH-NEXT:    feq.h a1, fa0, fa0376; CHECKIZFH-NEXT:    seqz a1, a1377; CHECKIZFH-NEXT:    addi a1, a1, -1378; CHECKIZFH-NEXT:    and a0, a1, a0379; CHECKIZFH-NEXT:    ret380;381; RV32IZHINX-LABEL: test_floor_ui32:382; RV32IZHINX:       # %bb.0:383; RV32IZHINX-NEXT:    li a1, 25384; RV32IZHINX-NEXT:    slli a1, a1, 10385; RV32IZHINX-NEXT:    fabs.h a2, a0386; RV32IZHINX-NEXT:    flt.h a1, a2, a1387; RV32IZHINX-NEXT:    beqz a1, .LBB2_2388; RV32IZHINX-NEXT:  # %bb.1:389; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rdn390; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rdn391; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a0392; RV32IZHINX-NEXT:  .LBB2_2:393; RV32IZHINX-NEXT:    fcvt.wu.h a1, a0, rtz394; RV32IZHINX-NEXT:    feq.h a0, a0, a0395; RV32IZHINX-NEXT:    seqz a0, a0396; RV32IZHINX-NEXT:    addi a0, a0, -1397; RV32IZHINX-NEXT:    and a0, a0, a1398; RV32IZHINX-NEXT:    ret399;400; RV64IZHINX-LABEL: test_floor_ui32:401; RV64IZHINX:       # %bb.0:402; RV64IZHINX-NEXT:    li a1, 25403; RV64IZHINX-NEXT:    slli a1, a1, 10404; RV64IZHINX-NEXT:    fabs.h a2, a0405; RV64IZHINX-NEXT:    flt.h a1, a2, a1406; RV64IZHINX-NEXT:    beqz a1, .LBB2_2407; RV64IZHINX-NEXT:  # %bb.1:408; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rdn409; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rdn410; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a0411; RV64IZHINX-NEXT:  .LBB2_2:412; RV64IZHINX-NEXT:    fcvt.wu.h a1, a0, rtz413; RV64IZHINX-NEXT:    feq.h a0, a0, a0414; RV64IZHINX-NEXT:    seqz a0, a0415; RV64IZHINX-NEXT:    addiw a0, a0, -1416; RV64IZHINX-NEXT:    and a0, a1, a0417; RV64IZHINX-NEXT:    ret418;419; RV32IZFHMIN-LABEL: test_floor_ui32:420; RV32IZFHMIN:       # %bb.0:421; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0422; RV32IZFHMIN-NEXT:    lui a0, 307200423; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a0424; RV32IZFHMIN-NEXT:    fabs.s fa3, fa5425; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa4426; RV32IZFHMIN-NEXT:    beqz a0, .LBB2_2427; RV32IZFHMIN-NEXT:  # %bb.1:428; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rdn429; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rdn430; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa5431; RV32IZFHMIN-NEXT:  .LBB2_2:432; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa5433; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa5434; RV32IZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz435; RV32IZFHMIN-NEXT:    feq.s a1, fa5, fa5436; RV32IZFHMIN-NEXT:    seqz a1, a1437; RV32IZFHMIN-NEXT:    addi a1, a1, -1438; RV32IZFHMIN-NEXT:    and a0, a1, a0439; RV32IZFHMIN-NEXT:    ret440;441; RV64IZFHMIN-LABEL: test_floor_ui32:442; RV64IZFHMIN:       # %bb.0:443; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0444; RV64IZFHMIN-NEXT:    lui a0, 307200445; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a0446; RV64IZFHMIN-NEXT:    fabs.s fa3, fa5447; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa4448; RV64IZFHMIN-NEXT:    beqz a0, .LBB2_2449; RV64IZFHMIN-NEXT:  # %bb.1:450; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rdn451; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rdn452; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa5453; RV64IZFHMIN-NEXT:  .LBB2_2:454; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa5455; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa5456; RV64IZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz457; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa5458; RV64IZFHMIN-NEXT:    seqz a1, a1459; RV64IZFHMIN-NEXT:    addiw a1, a1, -1460; RV64IZFHMIN-NEXT:    and a0, a0, a1461; RV64IZFHMIN-NEXT:    ret462;463; RV32IZHINXMIN-LABEL: test_floor_ui32:464; RV32IZHINXMIN:       # %bb.0:465; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0466; RV32IZHINXMIN-NEXT:    lui a1, 307200467; RV32IZHINXMIN-NEXT:    fabs.s a2, a0468; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a1469; RV32IZHINXMIN-NEXT:    beqz a1, .LBB2_2470; RV32IZHINXMIN-NEXT:  # %bb.1:471; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rdn472; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rdn473; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a0474; RV32IZHINXMIN-NEXT:  .LBB2_2:475; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a0476; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0477; RV32IZHINXMIN-NEXT:    fcvt.wu.s a1, a0, rtz478; RV32IZHINXMIN-NEXT:    feq.s a0, a0, a0479; RV32IZHINXMIN-NEXT:    seqz a0, a0480; RV32IZHINXMIN-NEXT:    addi a0, a0, -1481; RV32IZHINXMIN-NEXT:    and a0, a0, a1482; RV32IZHINXMIN-NEXT:    ret483;484; RV64IZHINXMIN-LABEL: test_floor_ui32:485; RV64IZHINXMIN:       # %bb.0:486; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0487; RV64IZHINXMIN-NEXT:    lui a1, 307200488; RV64IZHINXMIN-NEXT:    fabs.s a2, a0489; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a1490; RV64IZHINXMIN-NEXT:    beqz a1, .LBB2_2491; RV64IZHINXMIN-NEXT:  # %bb.1:492; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rdn493; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rdn494; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a0495; RV64IZHINXMIN-NEXT:  .LBB2_2:496; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a0497; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0498; RV64IZHINXMIN-NEXT:    fcvt.wu.s a1, a0, rtz499; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a0500; RV64IZHINXMIN-NEXT:    seqz a0, a0501; RV64IZHINXMIN-NEXT:    addiw a0, a0, -1502; RV64IZHINXMIN-NEXT:    and a0, a1, a0503; RV64IZHINXMIN-NEXT:    ret504  %a = call half @llvm.floor.f16(half %x)505  %b = call i32 @llvm.fptoui.sat.i32.f16(half %a)506  ret i32 %b507}508 509define i64 @test_floor_ui64(half %x) nounwind {510; RV32IZFH-LABEL: test_floor_ui64:511; RV32IZFH:       # %bb.0:512; RV32IZFH-NEXT:    li a0, 25513; RV32IZFH-NEXT:    slli a0, a0, 10514; RV32IZFH-NEXT:    fmv.h.x fa5, a0515; RV32IZFH-NEXT:    fabs.h fa4, fa0516; RV32IZFH-NEXT:    flt.h a0, fa4, fa5517; RV32IZFH-NEXT:    beqz a0, .LBB3_2518; RV32IZFH-NEXT:  # %bb.1:519; RV32IZFH-NEXT:    fcvt.w.h a0, fa0, rdn520; RV32IZFH-NEXT:    fcvt.h.w fa5, a0, rdn521; RV32IZFH-NEXT:    fsgnj.h fa0, fa5, fa0522; RV32IZFH-NEXT:  .LBB3_2:523; RV32IZFH-NEXT:    addi sp, sp, -16524; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill525; RV32IZFH-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill526; RV32IZFH-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill527; RV32IZFH-NEXT:    fcvt.s.h fs0, fa0528; RV32IZFH-NEXT:    fmv.w.x fa5, zero529; RV32IZFH-NEXT:    fle.s a0, fa5, fs0530; RV32IZFH-NEXT:    neg s0, a0531; RV32IZFH-NEXT:    fmv.s fa0, fs0532; RV32IZFH-NEXT:    call __fixunssfdi533; RV32IZFH-NEXT:    and a0, s0, a0534; RV32IZFH-NEXT:    lui a2, 391168535; RV32IZFH-NEXT:    and a1, s0, a1536; RV32IZFH-NEXT:    addi a2, a2, -1537; RV32IZFH-NEXT:    fmv.w.x fa5, a2538; RV32IZFH-NEXT:    flt.s a2, fa5, fs0539; RV32IZFH-NEXT:    neg a2, a2540; RV32IZFH-NEXT:    or a0, a2, a0541; RV32IZFH-NEXT:    or a1, a2, a1542; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload543; RV32IZFH-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload544; RV32IZFH-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload545; RV32IZFH-NEXT:    addi sp, sp, 16546; RV32IZFH-NEXT:    ret547;548; RV64IZFH-LABEL: test_floor_ui64:549; RV64IZFH:       # %bb.0:550; RV64IZFH-NEXT:    fcvt.lu.h a0, fa0, rdn551; RV64IZFH-NEXT:    feq.h a1, fa0, fa0552; RV64IZFH-NEXT:    seqz a1, a1553; RV64IZFH-NEXT:    addi a1, a1, -1554; RV64IZFH-NEXT:    and a0, a1, a0555; RV64IZFH-NEXT:    ret556;557; RV32IZHINX-LABEL: test_floor_ui64:558; RV32IZHINX:       # %bb.0:559; RV32IZHINX-NEXT:    li a1, 25560; RV32IZHINX-NEXT:    slli a1, a1, 10561; RV32IZHINX-NEXT:    fabs.h a2, a0562; RV32IZHINX-NEXT:    flt.h a1, a2, a1563; RV32IZHINX-NEXT:    beqz a1, .LBB3_2564; RV32IZHINX-NEXT:  # %bb.1:565; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rdn566; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rdn567; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a0568; RV32IZHINX-NEXT:  .LBB3_2:569; RV32IZHINX-NEXT:    addi sp, sp, -16570; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill571; RV32IZHINX-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill572; RV32IZHINX-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill573; RV32IZHINX-NEXT:    fcvt.s.h s0, a0574; RV32IZHINX-NEXT:    fle.s a0, zero, s0575; RV32IZHINX-NEXT:    neg s1, a0576; RV32IZHINX-NEXT:    mv a0, s0577; RV32IZHINX-NEXT:    call __fixunssfdi578; RV32IZHINX-NEXT:    and a0, s1, a0579; RV32IZHINX-NEXT:    lui a2, 391168580; RV32IZHINX-NEXT:    and a1, s1, a1581; RV32IZHINX-NEXT:    addi a2, a2, -1582; RV32IZHINX-NEXT:    flt.s a2, a2, s0583; RV32IZHINX-NEXT:    neg a2, a2584; RV32IZHINX-NEXT:    or a0, a2, a0585; RV32IZHINX-NEXT:    or a1, a2, a1586; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload587; RV32IZHINX-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload588; RV32IZHINX-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload589; RV32IZHINX-NEXT:    addi sp, sp, 16590; RV32IZHINX-NEXT:    ret591;592; RV64IZHINX-LABEL: test_floor_ui64:593; RV64IZHINX:       # %bb.0:594; RV64IZHINX-NEXT:    li a1, 25595; RV64IZHINX-NEXT:    slli a1, a1, 10596; RV64IZHINX-NEXT:    fabs.h a2, a0597; RV64IZHINX-NEXT:    flt.h a1, a2, a1598; RV64IZHINX-NEXT:    beqz a1, .LBB3_2599; RV64IZHINX-NEXT:  # %bb.1:600; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rdn601; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rdn602; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a0603; RV64IZHINX-NEXT:  .LBB3_2:604; RV64IZHINX-NEXT:    fcvt.lu.h a1, a0, rtz605; RV64IZHINX-NEXT:    feq.h a0, a0, a0606; RV64IZHINX-NEXT:    seqz a0, a0607; RV64IZHINX-NEXT:    addi a0, a0, -1608; RV64IZHINX-NEXT:    and a0, a0, a1609; RV64IZHINX-NEXT:    ret610;611; RV32IZFHMIN-LABEL: test_floor_ui64:612; RV32IZFHMIN:       # %bb.0:613; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0614; RV32IZFHMIN-NEXT:    lui a0, 307200615; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a0616; RV32IZFHMIN-NEXT:    fabs.s fa3, fa5617; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa4618; RV32IZFHMIN-NEXT:    beqz a0, .LBB3_2619; RV32IZFHMIN-NEXT:  # %bb.1:620; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rdn621; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rdn622; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa5623; RV32IZFHMIN-NEXT:  .LBB3_2:624; RV32IZFHMIN-NEXT:    addi sp, sp, -16625; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill626; RV32IZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill627; RV32IZFHMIN-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill628; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa5629; RV32IZFHMIN-NEXT:    fcvt.s.h fs0, fa5630; RV32IZFHMIN-NEXT:    fmv.w.x fa5, zero631; RV32IZFHMIN-NEXT:    fle.s a0, fa5, fs0632; RV32IZFHMIN-NEXT:    neg s0, a0633; RV32IZFHMIN-NEXT:    fmv.s fa0, fs0634; RV32IZFHMIN-NEXT:    call __fixunssfdi635; RV32IZFHMIN-NEXT:    and a0, s0, a0636; RV32IZFHMIN-NEXT:    lui a2, 391168637; RV32IZFHMIN-NEXT:    and a1, s0, a1638; RV32IZFHMIN-NEXT:    addi a2, a2, -1639; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a2640; RV32IZFHMIN-NEXT:    flt.s a2, fa5, fs0641; RV32IZFHMIN-NEXT:    neg a2, a2642; RV32IZFHMIN-NEXT:    or a0, a2, a0643; RV32IZFHMIN-NEXT:    or a1, a2, a1644; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload645; RV32IZFHMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload646; RV32IZFHMIN-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload647; RV32IZFHMIN-NEXT:    addi sp, sp, 16648; RV32IZFHMIN-NEXT:    ret649;650; RV64IZFHMIN-LABEL: test_floor_ui64:651; RV64IZFHMIN:       # %bb.0:652; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0653; RV64IZFHMIN-NEXT:    lui a0, 307200654; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a0655; RV64IZFHMIN-NEXT:    fabs.s fa3, fa5656; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa4657; RV64IZFHMIN-NEXT:    beqz a0, .LBB3_2658; RV64IZFHMIN-NEXT:  # %bb.1:659; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rdn660; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rdn661; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa5662; RV64IZFHMIN-NEXT:  .LBB3_2:663; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa5664; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa5665; RV64IZFHMIN-NEXT:    fcvt.lu.s a0, fa5, rtz666; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa5667; RV64IZFHMIN-NEXT:    seqz a1, a1668; RV64IZFHMIN-NEXT:    addi a1, a1, -1669; RV64IZFHMIN-NEXT:    and a0, a1, a0670; RV64IZFHMIN-NEXT:    ret671;672; RV32IZHINXMIN-LABEL: test_floor_ui64:673; RV32IZHINXMIN:       # %bb.0:674; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a0675; RV32IZHINXMIN-NEXT:    lui a1, 307200676; RV32IZHINXMIN-NEXT:    fabs.s a2, a0677; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a1678; RV32IZHINXMIN-NEXT:    beqz a1, .LBB3_2679; RV32IZHINXMIN-NEXT:  # %bb.1:680; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rdn681; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rdn682; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a0683; RV32IZHINXMIN-NEXT:  .LBB3_2:684; RV32IZHINXMIN-NEXT:    addi sp, sp, -16685; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill686; RV32IZHINXMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill687; RV32IZHINXMIN-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill688; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a0689; RV32IZHINXMIN-NEXT:    fcvt.s.h s0, a0690; RV32IZHINXMIN-NEXT:    fle.s a0, zero, s0691; RV32IZHINXMIN-NEXT:    neg s1, a0692; RV32IZHINXMIN-NEXT:    mv a0, s0693; RV32IZHINXMIN-NEXT:    call __fixunssfdi694; RV32IZHINXMIN-NEXT:    and a0, s1, a0695; RV32IZHINXMIN-NEXT:    lui a2, 391168696; RV32IZHINXMIN-NEXT:    and a1, s1, a1697; RV32IZHINXMIN-NEXT:    addi a2, a2, -1698; RV32IZHINXMIN-NEXT:    flt.s a2, a2, s0699; RV32IZHINXMIN-NEXT:    neg a2, a2700; RV32IZHINXMIN-NEXT:    or a0, a2, a0701; RV32IZHINXMIN-NEXT:    or a1, a2, a1702; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload703; RV32IZHINXMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload704; RV32IZHINXMIN-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload705; RV32IZHINXMIN-NEXT:    addi sp, sp, 16706; RV32IZHINXMIN-NEXT:    ret707;708; RV64IZHINXMIN-LABEL: test_floor_ui64:709; RV64IZHINXMIN:       # %bb.0:710; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0711; RV64IZHINXMIN-NEXT:    lui a1, 307200712; RV64IZHINXMIN-NEXT:    fabs.s a2, a0713; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a1714; RV64IZHINXMIN-NEXT:    beqz a1, .LBB3_2715; RV64IZHINXMIN-NEXT:  # %bb.1:716; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rdn717; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rdn718; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a0719; RV64IZHINXMIN-NEXT:  .LBB3_2:720; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a0721; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a0722; RV64IZHINXMIN-NEXT:    fcvt.lu.s a1, a0, rtz723; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a0724; RV64IZHINXMIN-NEXT:    seqz a0, a0725; RV64IZHINXMIN-NEXT:    addi a0, a0, -1726; RV64IZHINXMIN-NEXT:    and a0, a0, a1727; RV64IZHINXMIN-NEXT:    ret728  %a = call half @llvm.floor.f16(half %x)729  %b = call i64 @llvm.fptoui.sat.i64.f16(half %a)730  ret i64 %b731}732 733define signext i32 @test_ceil_si32(half %x) {734; CHECKIZFH-LABEL: test_ceil_si32:735; CHECKIZFH:       # %bb.0:736; CHECKIZFH-NEXT:    fcvt.w.h a0, fa0, rup737; CHECKIZFH-NEXT:    feq.h a1, fa0, fa0738; CHECKIZFH-NEXT:    seqz a1, a1739; CHECKIZFH-NEXT:    addi a1, a1, -1740; CHECKIZFH-NEXT:    and a0, a1, a0741; CHECKIZFH-NEXT:    ret742;743; CHECKIZHINX-LABEL: test_ceil_si32:744; CHECKIZHINX:       # %bb.0:745; CHECKIZHINX-NEXT:    li a1, 25746; CHECKIZHINX-NEXT:    slli a1, a1, 10747; CHECKIZHINX-NEXT:    fabs.h a2, a0748; CHECKIZHINX-NEXT:    flt.h a1, a2, a1749; CHECKIZHINX-NEXT:    beqz a1, .LBB4_2750; CHECKIZHINX-NEXT:  # %bb.1:751; CHECKIZHINX-NEXT:    fcvt.w.h a1, a0, rup752; CHECKIZHINX-NEXT:    fcvt.h.w a1, a1, rup753; CHECKIZHINX-NEXT:    fsgnj.h a0, a1, a0754; CHECKIZHINX-NEXT:  .LBB4_2:755; CHECKIZHINX-NEXT:    fcvt.w.h a1, a0, rtz756; CHECKIZHINX-NEXT:    feq.h a0, a0, a0757; CHECKIZHINX-NEXT:    seqz a0, a0758; CHECKIZHINX-NEXT:    addi a0, a0, -1759; CHECKIZHINX-NEXT:    and a0, a0, a1760; CHECKIZHINX-NEXT:    ret761;762; CHECKIZFHMIN-LABEL: test_ceil_si32:763; CHECKIZFHMIN:       # %bb.0:764; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0765; CHECKIZFHMIN-NEXT:    lui a0, 307200766; CHECKIZFHMIN-NEXT:    fmv.w.x fa4, a0767; CHECKIZFHMIN-NEXT:    fabs.s fa3, fa5768; CHECKIZFHMIN-NEXT:    flt.s a0, fa3, fa4769; CHECKIZFHMIN-NEXT:    beqz a0, .LBB4_2770; CHECKIZFHMIN-NEXT:  # %bb.1:771; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa5, rup772; CHECKIZFHMIN-NEXT:    fcvt.s.w fa4, a0, rup773; CHECKIZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa5774; CHECKIZFHMIN-NEXT:  .LBB4_2:775; CHECKIZFHMIN-NEXT:    fcvt.h.s fa5, fa5776; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa5777; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz778; CHECKIZFHMIN-NEXT:    feq.s a1, fa5, fa5779; CHECKIZFHMIN-NEXT:    seqz a1, a1780; CHECKIZFHMIN-NEXT:    addi a1, a1, -1781; CHECKIZFHMIN-NEXT:    and a0, a1, a0782; CHECKIZFHMIN-NEXT:    ret783;784; CHECKIZHINXMIN-LABEL: test_ceil_si32:785; CHECKIZHINXMIN:       # %bb.0:786; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0787; CHECKIZHINXMIN-NEXT:    lui a1, 307200788; CHECKIZHINXMIN-NEXT:    fabs.s a2, a0789; CHECKIZHINXMIN-NEXT:    flt.s a1, a2, a1790; CHECKIZHINXMIN-NEXT:    beqz a1, .LBB4_2791; CHECKIZHINXMIN-NEXT:  # %bb.1:792; CHECKIZHINXMIN-NEXT:    fcvt.w.s a1, a0, rup793; CHECKIZHINXMIN-NEXT:    fcvt.s.w a1, a1, rup794; CHECKIZHINXMIN-NEXT:    fsgnj.s a0, a1, a0795; CHECKIZHINXMIN-NEXT:  .LBB4_2:796; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a0797; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0798; CHECKIZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz799; CHECKIZHINXMIN-NEXT:    feq.s a0, a0, a0800; CHECKIZHINXMIN-NEXT:    seqz a0, a0801; CHECKIZHINXMIN-NEXT:    addi a0, a0, -1802; CHECKIZHINXMIN-NEXT:    and a0, a0, a1803; CHECKIZHINXMIN-NEXT:    ret804  %a = call half @llvm.ceil.f16(half %x)805  %b = call i32 @llvm.fptosi.sat.i32.f16(half %a)806  ret i32 %b807}808 809define i64 @test_ceil_si64(half %x) nounwind {810; RV32IZFH-LABEL: test_ceil_si64:811; RV32IZFH:       # %bb.0:812; RV32IZFH-NEXT:    li a0, 25813; RV32IZFH-NEXT:    slli a0, a0, 10814; RV32IZFH-NEXT:    fmv.h.x fa5, a0815; RV32IZFH-NEXT:    fabs.h fa4, fa0816; RV32IZFH-NEXT:    flt.h a0, fa4, fa5817; RV32IZFH-NEXT:    beqz a0, .LBB5_2818; RV32IZFH-NEXT:  # %bb.1:819; RV32IZFH-NEXT:    fcvt.w.h a0, fa0, rup820; RV32IZFH-NEXT:    fcvt.h.w fa5, a0, rup821; RV32IZFH-NEXT:    fsgnj.h fa0, fa5, fa0822; RV32IZFH-NEXT:  .LBB5_2:823; RV32IZFH-NEXT:    addi sp, sp, -16824; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill825; RV32IZFH-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill826; RV32IZFH-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill827; RV32IZFH-NEXT:    fcvt.s.h fs0, fa0828; RV32IZFH-NEXT:    lui a0, 913408829; RV32IZFH-NEXT:    fmv.w.x fa5, a0830; RV32IZFH-NEXT:    fle.s s0, fa5, fs0831; RV32IZFH-NEXT:    fmv.s fa0, fs0832; RV32IZFH-NEXT:    call __fixsfdi833; RV32IZFH-NEXT:    lui a3, 524288834; RV32IZFH-NEXT:    lui a2, 524288835; RV32IZFH-NEXT:    beqz s0, .LBB5_4836; RV32IZFH-NEXT:  # %bb.3:837; RV32IZFH-NEXT:    mv a2, a1838; RV32IZFH-NEXT:  .LBB5_4:839; RV32IZFH-NEXT:    lui a1, 389120840; RV32IZFH-NEXT:    addi a1, a1, -1841; RV32IZFH-NEXT:    fmv.w.x fa5, a1842; RV32IZFH-NEXT:    flt.s a1, fa5, fs0843; RV32IZFH-NEXT:    beqz a1, .LBB5_6844; RV32IZFH-NEXT:  # %bb.5:845; RV32IZFH-NEXT:    addi a2, a3, -1846; RV32IZFH-NEXT:  .LBB5_6:847; RV32IZFH-NEXT:    feq.s a3, fs0, fs0848; RV32IZFH-NEXT:    neg a4, s0849; RV32IZFH-NEXT:    neg a5, a1850; RV32IZFH-NEXT:    neg a3, a3851; RV32IZFH-NEXT:    and a0, a4, a0852; RV32IZFH-NEXT:    and a1, a3, a2853; RV32IZFH-NEXT:    or a0, a5, a0854; RV32IZFH-NEXT:    and a0, a3, a0855; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload856; RV32IZFH-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload857; RV32IZFH-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload858; RV32IZFH-NEXT:    addi sp, sp, 16859; RV32IZFH-NEXT:    ret860;861; RV64IZFH-LABEL: test_ceil_si64:862; RV64IZFH:       # %bb.0:863; RV64IZFH-NEXT:    fcvt.l.h a0, fa0, rup864; RV64IZFH-NEXT:    feq.h a1, fa0, fa0865; RV64IZFH-NEXT:    seqz a1, a1866; RV64IZFH-NEXT:    addi a1, a1, -1867; RV64IZFH-NEXT:    and a0, a1, a0868; RV64IZFH-NEXT:    ret869;870; RV32IZHINX-LABEL: test_ceil_si64:871; RV32IZHINX:       # %bb.0:872; RV32IZHINX-NEXT:    li a1, 25873; RV32IZHINX-NEXT:    slli a1, a1, 10874; RV32IZHINX-NEXT:    fabs.h a2, a0875; RV32IZHINX-NEXT:    flt.h a1, a2, a1876; RV32IZHINX-NEXT:    beqz a1, .LBB5_2877; RV32IZHINX-NEXT:  # %bb.1:878; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rup879; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rup880; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a0881; RV32IZHINX-NEXT:  .LBB5_2:882; RV32IZHINX-NEXT:    addi sp, sp, -16883; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill884; RV32IZHINX-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill885; RV32IZHINX-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill886; RV32IZHINX-NEXT:    fcvt.s.h s0, a0887; RV32IZHINX-NEXT:    lui a0, 913408888; RV32IZHINX-NEXT:    fle.s s1, a0, s0889; RV32IZHINX-NEXT:    mv a0, s0890; RV32IZHINX-NEXT:    call __fixsfdi891; RV32IZHINX-NEXT:    lui a3, 524288892; RV32IZHINX-NEXT:    lui a2, 524288893; RV32IZHINX-NEXT:    beqz s1, .LBB5_4894; RV32IZHINX-NEXT:  # %bb.3:895; RV32IZHINX-NEXT:    mv a2, a1896; RV32IZHINX-NEXT:  .LBB5_4:897; RV32IZHINX-NEXT:    lui a1, 389120898; RV32IZHINX-NEXT:    addi a1, a1, -1899; RV32IZHINX-NEXT:    flt.s a1, a1, s0900; RV32IZHINX-NEXT:    beqz a1, .LBB5_6901; RV32IZHINX-NEXT:  # %bb.5:902; RV32IZHINX-NEXT:    addi a2, a3, -1903; RV32IZHINX-NEXT:  .LBB5_6:904; RV32IZHINX-NEXT:    feq.s a3, s0, s0905; RV32IZHINX-NEXT:    neg a4, s1906; RV32IZHINX-NEXT:    neg a5, a1907; RV32IZHINX-NEXT:    neg a3, a3908; RV32IZHINX-NEXT:    and a0, a4, a0909; RV32IZHINX-NEXT:    and a1, a3, a2910; RV32IZHINX-NEXT:    or a0, a5, a0911; RV32IZHINX-NEXT:    and a0, a3, a0912; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload913; RV32IZHINX-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload914; RV32IZHINX-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload915; RV32IZHINX-NEXT:    addi sp, sp, 16916; RV32IZHINX-NEXT:    ret917;918; RV64IZHINX-LABEL: test_ceil_si64:919; RV64IZHINX:       # %bb.0:920; RV64IZHINX-NEXT:    li a1, 25921; RV64IZHINX-NEXT:    slli a1, a1, 10922; RV64IZHINX-NEXT:    fabs.h a2, a0923; RV64IZHINX-NEXT:    flt.h a1, a2, a1924; RV64IZHINX-NEXT:    beqz a1, .LBB5_2925; RV64IZHINX-NEXT:  # %bb.1:926; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rup927; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rup928; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a0929; RV64IZHINX-NEXT:  .LBB5_2:930; RV64IZHINX-NEXT:    fcvt.l.h a1, a0, rtz931; RV64IZHINX-NEXT:    feq.h a0, a0, a0932; RV64IZHINX-NEXT:    seqz a0, a0933; RV64IZHINX-NEXT:    addi a0, a0, -1934; RV64IZHINX-NEXT:    and a0, a0, a1935; RV64IZHINX-NEXT:    ret936;937; RV32IZFHMIN-LABEL: test_ceil_si64:938; RV32IZFHMIN:       # %bb.0:939; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0940; RV32IZFHMIN-NEXT:    lui a0, 307200941; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a0942; RV32IZFHMIN-NEXT:    fabs.s fa3, fa5943; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa4944; RV32IZFHMIN-NEXT:    beqz a0, .LBB5_2945; RV32IZFHMIN-NEXT:  # %bb.1:946; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rup947; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rup948; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa5949; RV32IZFHMIN-NEXT:  .LBB5_2:950; RV32IZFHMIN-NEXT:    addi sp, sp, -16951; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill952; RV32IZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill953; RV32IZFHMIN-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill954; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa5955; RV32IZFHMIN-NEXT:    lui a0, 913408956; RV32IZFHMIN-NEXT:    fcvt.s.h fs0, fa5957; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a0958; RV32IZFHMIN-NEXT:    fle.s s0, fa5, fs0959; RV32IZFHMIN-NEXT:    fmv.s fa0, fs0960; RV32IZFHMIN-NEXT:    call __fixsfdi961; RV32IZFHMIN-NEXT:    lui a3, 524288962; RV32IZFHMIN-NEXT:    lui a2, 524288963; RV32IZFHMIN-NEXT:    beqz s0, .LBB5_4964; RV32IZFHMIN-NEXT:  # %bb.3:965; RV32IZFHMIN-NEXT:    mv a2, a1966; RV32IZFHMIN-NEXT:  .LBB5_4:967; RV32IZFHMIN-NEXT:    lui a1, 389120968; RV32IZFHMIN-NEXT:    addi a1, a1, -1969; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a1970; RV32IZFHMIN-NEXT:    flt.s a1, fa5, fs0971; RV32IZFHMIN-NEXT:    beqz a1, .LBB5_6972; RV32IZFHMIN-NEXT:  # %bb.5:973; RV32IZFHMIN-NEXT:    addi a2, a3, -1974; RV32IZFHMIN-NEXT:  .LBB5_6:975; RV32IZFHMIN-NEXT:    feq.s a3, fs0, fs0976; RV32IZFHMIN-NEXT:    neg a4, s0977; RV32IZFHMIN-NEXT:    neg a5, a1978; RV32IZFHMIN-NEXT:    neg a3, a3979; RV32IZFHMIN-NEXT:    and a0, a4, a0980; RV32IZFHMIN-NEXT:    and a1, a3, a2981; RV32IZFHMIN-NEXT:    or a0, a5, a0982; RV32IZFHMIN-NEXT:    and a0, a3, a0983; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload984; RV32IZFHMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload985; RV32IZFHMIN-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload986; RV32IZFHMIN-NEXT:    addi sp, sp, 16987; RV32IZFHMIN-NEXT:    ret988;989; RV64IZFHMIN-LABEL: test_ceil_si64:990; RV64IZFHMIN:       # %bb.0:991; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0992; RV64IZFHMIN-NEXT:    lui a0, 307200993; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a0994; RV64IZFHMIN-NEXT:    fabs.s fa3, fa5995; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa4996; RV64IZFHMIN-NEXT:    beqz a0, .LBB5_2997; RV64IZFHMIN-NEXT:  # %bb.1:998; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rup999; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rup1000; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa51001; RV64IZFHMIN-NEXT:  .LBB5_2:1002; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa51003; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa51004; RV64IZFHMIN-NEXT:    fcvt.l.s a0, fa5, rtz1005; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa51006; RV64IZFHMIN-NEXT:    seqz a1, a11007; RV64IZFHMIN-NEXT:    addi a1, a1, -11008; RV64IZFHMIN-NEXT:    and a0, a1, a01009; RV64IZFHMIN-NEXT:    ret1010;1011; RV32IZHINXMIN-LABEL: test_ceil_si64:1012; RV32IZHINXMIN:       # %bb.0:1013; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a01014; RV32IZHINXMIN-NEXT:    lui a1, 3072001015; RV32IZHINXMIN-NEXT:    fabs.s a2, a01016; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a11017; RV32IZHINXMIN-NEXT:    beqz a1, .LBB5_21018; RV32IZHINXMIN-NEXT:  # %bb.1:1019; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rup1020; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rup1021; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a01022; RV32IZHINXMIN-NEXT:  .LBB5_2:1023; RV32IZHINXMIN-NEXT:    addi sp, sp, -161024; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1025; RV32IZHINXMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1026; RV32IZHINXMIN-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1027; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a01028; RV32IZHINXMIN-NEXT:    fcvt.s.h s0, a01029; RV32IZHINXMIN-NEXT:    lui a0, 9134081030; RV32IZHINXMIN-NEXT:    fle.s s1, a0, s01031; RV32IZHINXMIN-NEXT:    mv a0, s01032; RV32IZHINXMIN-NEXT:    call __fixsfdi1033; RV32IZHINXMIN-NEXT:    lui a3, 5242881034; RV32IZHINXMIN-NEXT:    lui a2, 5242881035; RV32IZHINXMIN-NEXT:    beqz s1, .LBB5_41036; RV32IZHINXMIN-NEXT:  # %bb.3:1037; RV32IZHINXMIN-NEXT:    mv a2, a11038; RV32IZHINXMIN-NEXT:  .LBB5_4:1039; RV32IZHINXMIN-NEXT:    lui a1, 3891201040; RV32IZHINXMIN-NEXT:    addi a1, a1, -11041; RV32IZHINXMIN-NEXT:    flt.s a1, a1, s01042; RV32IZHINXMIN-NEXT:    beqz a1, .LBB5_61043; RV32IZHINXMIN-NEXT:  # %bb.5:1044; RV32IZHINXMIN-NEXT:    addi a2, a3, -11045; RV32IZHINXMIN-NEXT:  .LBB5_6:1046; RV32IZHINXMIN-NEXT:    feq.s a3, s0, s01047; RV32IZHINXMIN-NEXT:    neg a4, s11048; RV32IZHINXMIN-NEXT:    neg a5, a11049; RV32IZHINXMIN-NEXT:    neg a3, a31050; RV32IZHINXMIN-NEXT:    and a0, a4, a01051; RV32IZHINXMIN-NEXT:    and a1, a3, a21052; RV32IZHINXMIN-NEXT:    or a0, a5, a01053; RV32IZHINXMIN-NEXT:    and a0, a3, a01054; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1055; RV32IZHINXMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1056; RV32IZHINXMIN-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1057; RV32IZHINXMIN-NEXT:    addi sp, sp, 161058; RV32IZHINXMIN-NEXT:    ret1059;1060; RV64IZHINXMIN-LABEL: test_ceil_si64:1061; RV64IZHINXMIN:       # %bb.0:1062; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a01063; RV64IZHINXMIN-NEXT:    lui a1, 3072001064; RV64IZHINXMIN-NEXT:    fabs.s a2, a01065; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a11066; RV64IZHINXMIN-NEXT:    beqz a1, .LBB5_21067; RV64IZHINXMIN-NEXT:  # %bb.1:1068; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rup1069; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rup1070; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a01071; RV64IZHINXMIN-NEXT:  .LBB5_2:1072; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a01073; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a01074; RV64IZHINXMIN-NEXT:    fcvt.l.s a1, a0, rtz1075; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a01076; RV64IZHINXMIN-NEXT:    seqz a0, a01077; RV64IZHINXMIN-NEXT:    addi a0, a0, -11078; RV64IZHINXMIN-NEXT:    and a0, a0, a11079; RV64IZHINXMIN-NEXT:    ret1080  %a = call half @llvm.ceil.f16(half %x)1081  %b = call i64 @llvm.fptosi.sat.i64.f16(half %a)1082  ret i64 %b1083}1084 1085define signext i32 @test_ceil_ui32(half %x) {1086; CHECKIZFH-LABEL: test_ceil_ui32:1087; CHECKIZFH:       # %bb.0:1088; CHECKIZFH-NEXT:    fcvt.wu.h a0, fa0, rup1089; CHECKIZFH-NEXT:    feq.h a1, fa0, fa01090; CHECKIZFH-NEXT:    seqz a1, a11091; CHECKIZFH-NEXT:    addi a1, a1, -11092; CHECKIZFH-NEXT:    and a0, a1, a01093; CHECKIZFH-NEXT:    ret1094;1095; RV32IZHINX-LABEL: test_ceil_ui32:1096; RV32IZHINX:       # %bb.0:1097; RV32IZHINX-NEXT:    li a1, 251098; RV32IZHINX-NEXT:    slli a1, a1, 101099; RV32IZHINX-NEXT:    fabs.h a2, a01100; RV32IZHINX-NEXT:    flt.h a1, a2, a11101; RV32IZHINX-NEXT:    beqz a1, .LBB6_21102; RV32IZHINX-NEXT:  # %bb.1:1103; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rup1104; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rup1105; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a01106; RV32IZHINX-NEXT:  .LBB6_2:1107; RV32IZHINX-NEXT:    fcvt.wu.h a1, a0, rtz1108; RV32IZHINX-NEXT:    feq.h a0, a0, a01109; RV32IZHINX-NEXT:    seqz a0, a01110; RV32IZHINX-NEXT:    addi a0, a0, -11111; RV32IZHINX-NEXT:    and a0, a0, a11112; RV32IZHINX-NEXT:    ret1113;1114; RV64IZHINX-LABEL: test_ceil_ui32:1115; RV64IZHINX:       # %bb.0:1116; RV64IZHINX-NEXT:    li a1, 251117; RV64IZHINX-NEXT:    slli a1, a1, 101118; RV64IZHINX-NEXT:    fabs.h a2, a01119; RV64IZHINX-NEXT:    flt.h a1, a2, a11120; RV64IZHINX-NEXT:    beqz a1, .LBB6_21121; RV64IZHINX-NEXT:  # %bb.1:1122; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rup1123; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rup1124; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a01125; RV64IZHINX-NEXT:  .LBB6_2:1126; RV64IZHINX-NEXT:    fcvt.wu.h a1, a0, rtz1127; RV64IZHINX-NEXT:    feq.h a0, a0, a01128; RV64IZHINX-NEXT:    seqz a0, a01129; RV64IZHINX-NEXT:    addiw a0, a0, -11130; RV64IZHINX-NEXT:    and a0, a1, a01131; RV64IZHINX-NEXT:    ret1132;1133; RV32IZFHMIN-LABEL: test_ceil_ui32:1134; RV32IZFHMIN:       # %bb.0:1135; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa01136; RV32IZFHMIN-NEXT:    lui a0, 3072001137; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a01138; RV32IZFHMIN-NEXT:    fabs.s fa3, fa51139; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa41140; RV32IZFHMIN-NEXT:    beqz a0, .LBB6_21141; RV32IZFHMIN-NEXT:  # %bb.1:1142; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rup1143; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rup1144; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa51145; RV32IZFHMIN-NEXT:  .LBB6_2:1146; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa51147; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa51148; RV32IZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz1149; RV32IZFHMIN-NEXT:    feq.s a1, fa5, fa51150; RV32IZFHMIN-NEXT:    seqz a1, a11151; RV32IZFHMIN-NEXT:    addi a1, a1, -11152; RV32IZFHMIN-NEXT:    and a0, a1, a01153; RV32IZFHMIN-NEXT:    ret1154;1155; RV64IZFHMIN-LABEL: test_ceil_ui32:1156; RV64IZFHMIN:       # %bb.0:1157; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa01158; RV64IZFHMIN-NEXT:    lui a0, 3072001159; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a01160; RV64IZFHMIN-NEXT:    fabs.s fa3, fa51161; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa41162; RV64IZFHMIN-NEXT:    beqz a0, .LBB6_21163; RV64IZFHMIN-NEXT:  # %bb.1:1164; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rup1165; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rup1166; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa51167; RV64IZFHMIN-NEXT:  .LBB6_2:1168; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa51169; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa51170; RV64IZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz1171; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa51172; RV64IZFHMIN-NEXT:    seqz a1, a11173; RV64IZFHMIN-NEXT:    addiw a1, a1, -11174; RV64IZFHMIN-NEXT:    and a0, a0, a11175; RV64IZFHMIN-NEXT:    ret1176;1177; RV32IZHINXMIN-LABEL: test_ceil_ui32:1178; RV32IZHINXMIN:       # %bb.0:1179; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a01180; RV32IZHINXMIN-NEXT:    lui a1, 3072001181; RV32IZHINXMIN-NEXT:    fabs.s a2, a01182; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a11183; RV32IZHINXMIN-NEXT:    beqz a1, .LBB6_21184; RV32IZHINXMIN-NEXT:  # %bb.1:1185; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rup1186; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rup1187; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a01188; RV32IZHINXMIN-NEXT:  .LBB6_2:1189; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a01190; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a01191; RV32IZHINXMIN-NEXT:    fcvt.wu.s a1, a0, rtz1192; RV32IZHINXMIN-NEXT:    feq.s a0, a0, a01193; RV32IZHINXMIN-NEXT:    seqz a0, a01194; RV32IZHINXMIN-NEXT:    addi a0, a0, -11195; RV32IZHINXMIN-NEXT:    and a0, a0, a11196; RV32IZHINXMIN-NEXT:    ret1197;1198; RV64IZHINXMIN-LABEL: test_ceil_ui32:1199; RV64IZHINXMIN:       # %bb.0:1200; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a01201; RV64IZHINXMIN-NEXT:    lui a1, 3072001202; RV64IZHINXMIN-NEXT:    fabs.s a2, a01203; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a11204; RV64IZHINXMIN-NEXT:    beqz a1, .LBB6_21205; RV64IZHINXMIN-NEXT:  # %bb.1:1206; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rup1207; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rup1208; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a01209; RV64IZHINXMIN-NEXT:  .LBB6_2:1210; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a01211; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a01212; RV64IZHINXMIN-NEXT:    fcvt.wu.s a1, a0, rtz1213; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a01214; RV64IZHINXMIN-NEXT:    seqz a0, a01215; RV64IZHINXMIN-NEXT:    addiw a0, a0, -11216; RV64IZHINXMIN-NEXT:    and a0, a1, a01217; RV64IZHINXMIN-NEXT:    ret1218  %a = call half @llvm.ceil.f16(half %x)1219  %b = call i32 @llvm.fptoui.sat.i32.f16(half %a)1220  ret i32 %b1221}1222 1223define i64 @test_ceil_ui64(half %x) nounwind {1224; RV32IZFH-LABEL: test_ceil_ui64:1225; RV32IZFH:       # %bb.0:1226; RV32IZFH-NEXT:    li a0, 251227; RV32IZFH-NEXT:    slli a0, a0, 101228; RV32IZFH-NEXT:    fmv.h.x fa5, a01229; RV32IZFH-NEXT:    fabs.h fa4, fa01230; RV32IZFH-NEXT:    flt.h a0, fa4, fa51231; RV32IZFH-NEXT:    beqz a0, .LBB7_21232; RV32IZFH-NEXT:  # %bb.1:1233; RV32IZFH-NEXT:    fcvt.w.h a0, fa0, rup1234; RV32IZFH-NEXT:    fcvt.h.w fa5, a0, rup1235; RV32IZFH-NEXT:    fsgnj.h fa0, fa5, fa01236; RV32IZFH-NEXT:  .LBB7_2:1237; RV32IZFH-NEXT:    addi sp, sp, -161238; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1239; RV32IZFH-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1240; RV32IZFH-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill1241; RV32IZFH-NEXT:    fcvt.s.h fs0, fa01242; RV32IZFH-NEXT:    fmv.w.x fa5, zero1243; RV32IZFH-NEXT:    fle.s a0, fa5, fs01244; RV32IZFH-NEXT:    neg s0, a01245; RV32IZFH-NEXT:    fmv.s fa0, fs01246; RV32IZFH-NEXT:    call __fixunssfdi1247; RV32IZFH-NEXT:    and a0, s0, a01248; RV32IZFH-NEXT:    lui a2, 3911681249; RV32IZFH-NEXT:    and a1, s0, a11250; RV32IZFH-NEXT:    addi a2, a2, -11251; RV32IZFH-NEXT:    fmv.w.x fa5, a21252; RV32IZFH-NEXT:    flt.s a2, fa5, fs01253; RV32IZFH-NEXT:    neg a2, a21254; RV32IZFH-NEXT:    or a0, a2, a01255; RV32IZFH-NEXT:    or a1, a2, a11256; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1257; RV32IZFH-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1258; RV32IZFH-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload1259; RV32IZFH-NEXT:    addi sp, sp, 161260; RV32IZFH-NEXT:    ret1261;1262; RV64IZFH-LABEL: test_ceil_ui64:1263; RV64IZFH:       # %bb.0:1264; RV64IZFH-NEXT:    fcvt.lu.h a0, fa0, rup1265; RV64IZFH-NEXT:    feq.h a1, fa0, fa01266; RV64IZFH-NEXT:    seqz a1, a11267; RV64IZFH-NEXT:    addi a1, a1, -11268; RV64IZFH-NEXT:    and a0, a1, a01269; RV64IZFH-NEXT:    ret1270;1271; RV32IZHINX-LABEL: test_ceil_ui64:1272; RV32IZHINX:       # %bb.0:1273; RV32IZHINX-NEXT:    li a1, 251274; RV32IZHINX-NEXT:    slli a1, a1, 101275; RV32IZHINX-NEXT:    fabs.h a2, a01276; RV32IZHINX-NEXT:    flt.h a1, a2, a11277; RV32IZHINX-NEXT:    beqz a1, .LBB7_21278; RV32IZHINX-NEXT:  # %bb.1:1279; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rup1280; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rup1281; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a01282; RV32IZHINX-NEXT:  .LBB7_2:1283; RV32IZHINX-NEXT:    addi sp, sp, -161284; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1285; RV32IZHINX-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1286; RV32IZHINX-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1287; RV32IZHINX-NEXT:    fcvt.s.h s0, a01288; RV32IZHINX-NEXT:    fle.s a0, zero, s01289; RV32IZHINX-NEXT:    neg s1, a01290; RV32IZHINX-NEXT:    mv a0, s01291; RV32IZHINX-NEXT:    call __fixunssfdi1292; RV32IZHINX-NEXT:    and a0, s1, a01293; RV32IZHINX-NEXT:    lui a2, 3911681294; RV32IZHINX-NEXT:    and a1, s1, a11295; RV32IZHINX-NEXT:    addi a2, a2, -11296; RV32IZHINX-NEXT:    flt.s a2, a2, s01297; RV32IZHINX-NEXT:    neg a2, a21298; RV32IZHINX-NEXT:    or a0, a2, a01299; RV32IZHINX-NEXT:    or a1, a2, a11300; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1301; RV32IZHINX-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1302; RV32IZHINX-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1303; RV32IZHINX-NEXT:    addi sp, sp, 161304; RV32IZHINX-NEXT:    ret1305;1306; RV64IZHINX-LABEL: test_ceil_ui64:1307; RV64IZHINX:       # %bb.0:1308; RV64IZHINX-NEXT:    li a1, 251309; RV64IZHINX-NEXT:    slli a1, a1, 101310; RV64IZHINX-NEXT:    fabs.h a2, a01311; RV64IZHINX-NEXT:    flt.h a1, a2, a11312; RV64IZHINX-NEXT:    beqz a1, .LBB7_21313; RV64IZHINX-NEXT:  # %bb.1:1314; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rup1315; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rup1316; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a01317; RV64IZHINX-NEXT:  .LBB7_2:1318; RV64IZHINX-NEXT:    fcvt.lu.h a1, a0, rtz1319; RV64IZHINX-NEXT:    feq.h a0, a0, a01320; RV64IZHINX-NEXT:    seqz a0, a01321; RV64IZHINX-NEXT:    addi a0, a0, -11322; RV64IZHINX-NEXT:    and a0, a0, a11323; RV64IZHINX-NEXT:    ret1324;1325; RV32IZFHMIN-LABEL: test_ceil_ui64:1326; RV32IZFHMIN:       # %bb.0:1327; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa01328; RV32IZFHMIN-NEXT:    lui a0, 3072001329; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a01330; RV32IZFHMIN-NEXT:    fabs.s fa3, fa51331; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa41332; RV32IZFHMIN-NEXT:    beqz a0, .LBB7_21333; RV32IZFHMIN-NEXT:  # %bb.1:1334; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rup1335; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rup1336; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa51337; RV32IZFHMIN-NEXT:  .LBB7_2:1338; RV32IZFHMIN-NEXT:    addi sp, sp, -161339; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1340; RV32IZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1341; RV32IZFHMIN-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill1342; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa51343; RV32IZFHMIN-NEXT:    fcvt.s.h fs0, fa51344; RV32IZFHMIN-NEXT:    fmv.w.x fa5, zero1345; RV32IZFHMIN-NEXT:    fle.s a0, fa5, fs01346; RV32IZFHMIN-NEXT:    neg s0, a01347; RV32IZFHMIN-NEXT:    fmv.s fa0, fs01348; RV32IZFHMIN-NEXT:    call __fixunssfdi1349; RV32IZFHMIN-NEXT:    and a0, s0, a01350; RV32IZFHMIN-NEXT:    lui a2, 3911681351; RV32IZFHMIN-NEXT:    and a1, s0, a11352; RV32IZFHMIN-NEXT:    addi a2, a2, -11353; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a21354; RV32IZFHMIN-NEXT:    flt.s a2, fa5, fs01355; RV32IZFHMIN-NEXT:    neg a2, a21356; RV32IZFHMIN-NEXT:    or a0, a2, a01357; RV32IZFHMIN-NEXT:    or a1, a2, a11358; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1359; RV32IZFHMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1360; RV32IZFHMIN-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload1361; RV32IZFHMIN-NEXT:    addi sp, sp, 161362; RV32IZFHMIN-NEXT:    ret1363;1364; RV64IZFHMIN-LABEL: test_ceil_ui64:1365; RV64IZFHMIN:       # %bb.0:1366; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa01367; RV64IZFHMIN-NEXT:    lui a0, 3072001368; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a01369; RV64IZFHMIN-NEXT:    fabs.s fa3, fa51370; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa41371; RV64IZFHMIN-NEXT:    beqz a0, .LBB7_21372; RV64IZFHMIN-NEXT:  # %bb.1:1373; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rup1374; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rup1375; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa51376; RV64IZFHMIN-NEXT:  .LBB7_2:1377; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa51378; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa51379; RV64IZFHMIN-NEXT:    fcvt.lu.s a0, fa5, rtz1380; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa51381; RV64IZFHMIN-NEXT:    seqz a1, a11382; RV64IZFHMIN-NEXT:    addi a1, a1, -11383; RV64IZFHMIN-NEXT:    and a0, a1, a01384; RV64IZFHMIN-NEXT:    ret1385;1386; RV32IZHINXMIN-LABEL: test_ceil_ui64:1387; RV32IZHINXMIN:       # %bb.0:1388; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a01389; RV32IZHINXMIN-NEXT:    lui a1, 3072001390; RV32IZHINXMIN-NEXT:    fabs.s a2, a01391; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a11392; RV32IZHINXMIN-NEXT:    beqz a1, .LBB7_21393; RV32IZHINXMIN-NEXT:  # %bb.1:1394; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rup1395; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rup1396; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a01397; RV32IZHINXMIN-NEXT:  .LBB7_2:1398; RV32IZHINXMIN-NEXT:    addi sp, sp, -161399; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1400; RV32IZHINXMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1401; RV32IZHINXMIN-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1402; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a01403; RV32IZHINXMIN-NEXT:    fcvt.s.h s0, a01404; RV32IZHINXMIN-NEXT:    fle.s a0, zero, s01405; RV32IZHINXMIN-NEXT:    neg s1, a01406; RV32IZHINXMIN-NEXT:    mv a0, s01407; RV32IZHINXMIN-NEXT:    call __fixunssfdi1408; RV32IZHINXMIN-NEXT:    and a0, s1, a01409; RV32IZHINXMIN-NEXT:    lui a2, 3911681410; RV32IZHINXMIN-NEXT:    and a1, s1, a11411; RV32IZHINXMIN-NEXT:    addi a2, a2, -11412; RV32IZHINXMIN-NEXT:    flt.s a2, a2, s01413; RV32IZHINXMIN-NEXT:    neg a2, a21414; RV32IZHINXMIN-NEXT:    or a0, a2, a01415; RV32IZHINXMIN-NEXT:    or a1, a2, a11416; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1417; RV32IZHINXMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1418; RV32IZHINXMIN-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1419; RV32IZHINXMIN-NEXT:    addi sp, sp, 161420; RV32IZHINXMIN-NEXT:    ret1421;1422; RV64IZHINXMIN-LABEL: test_ceil_ui64:1423; RV64IZHINXMIN:       # %bb.0:1424; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a01425; RV64IZHINXMIN-NEXT:    lui a1, 3072001426; RV64IZHINXMIN-NEXT:    fabs.s a2, a01427; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a11428; RV64IZHINXMIN-NEXT:    beqz a1, .LBB7_21429; RV64IZHINXMIN-NEXT:  # %bb.1:1430; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rup1431; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rup1432; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a01433; RV64IZHINXMIN-NEXT:  .LBB7_2:1434; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a01435; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a01436; RV64IZHINXMIN-NEXT:    fcvt.lu.s a1, a0, rtz1437; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a01438; RV64IZHINXMIN-NEXT:    seqz a0, a01439; RV64IZHINXMIN-NEXT:    addi a0, a0, -11440; RV64IZHINXMIN-NEXT:    and a0, a0, a11441; RV64IZHINXMIN-NEXT:    ret1442  %a = call half @llvm.ceil.f16(half %x)1443  %b = call i64 @llvm.fptoui.sat.i64.f16(half %a)1444  ret i64 %b1445}1446 1447define signext i32 @test_trunc_si32(half %x) {1448; CHECKIZFH-LABEL: test_trunc_si32:1449; CHECKIZFH:       # %bb.0:1450; CHECKIZFH-NEXT:    fcvt.w.h a0, fa0, rtz1451; CHECKIZFH-NEXT:    feq.h a1, fa0, fa01452; CHECKIZFH-NEXT:    seqz a1, a11453; CHECKIZFH-NEXT:    addi a1, a1, -11454; CHECKIZFH-NEXT:    and a0, a1, a01455; CHECKIZFH-NEXT:    ret1456;1457; CHECKIZHINX-LABEL: test_trunc_si32:1458; CHECKIZHINX:       # %bb.0:1459; CHECKIZHINX-NEXT:    li a1, 251460; CHECKIZHINX-NEXT:    slli a1, a1, 101461; CHECKIZHINX-NEXT:    fabs.h a2, a01462; CHECKIZHINX-NEXT:    flt.h a1, a2, a11463; CHECKIZHINX-NEXT:    beqz a1, .LBB8_21464; CHECKIZHINX-NEXT:  # %bb.1:1465; CHECKIZHINX-NEXT:    fcvt.w.h a1, a0, rtz1466; CHECKIZHINX-NEXT:    fcvt.h.w a1, a1, rtz1467; CHECKIZHINX-NEXT:    fsgnj.h a0, a1, a01468; CHECKIZHINX-NEXT:  .LBB8_2:1469; CHECKIZHINX-NEXT:    fcvt.w.h a1, a0, rtz1470; CHECKIZHINX-NEXT:    feq.h a0, a0, a01471; CHECKIZHINX-NEXT:    seqz a0, a01472; CHECKIZHINX-NEXT:    addi a0, a0, -11473; CHECKIZHINX-NEXT:    and a0, a0, a11474; CHECKIZHINX-NEXT:    ret1475;1476; CHECKIZFHMIN-LABEL: test_trunc_si32:1477; CHECKIZFHMIN:       # %bb.0:1478; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa01479; CHECKIZFHMIN-NEXT:    lui a0, 3072001480; CHECKIZFHMIN-NEXT:    fmv.w.x fa4, a01481; CHECKIZFHMIN-NEXT:    fabs.s fa3, fa51482; CHECKIZFHMIN-NEXT:    flt.s a0, fa3, fa41483; CHECKIZFHMIN-NEXT:    beqz a0, .LBB8_21484; CHECKIZFHMIN-NEXT:  # %bb.1:1485; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz1486; CHECKIZFHMIN-NEXT:    fcvt.s.w fa4, a0, rtz1487; CHECKIZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa51488; CHECKIZFHMIN-NEXT:  .LBB8_2:1489; CHECKIZFHMIN-NEXT:    fcvt.h.s fa5, fa51490; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa51491; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz1492; CHECKIZFHMIN-NEXT:    feq.s a1, fa5, fa51493; CHECKIZFHMIN-NEXT:    seqz a1, a11494; CHECKIZFHMIN-NEXT:    addi a1, a1, -11495; CHECKIZFHMIN-NEXT:    and a0, a1, a01496; CHECKIZFHMIN-NEXT:    ret1497;1498; CHECKIZHINXMIN-LABEL: test_trunc_si32:1499; CHECKIZHINXMIN:       # %bb.0:1500; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a01501; CHECKIZHINXMIN-NEXT:    lui a1, 3072001502; CHECKIZHINXMIN-NEXT:    fabs.s a2, a01503; CHECKIZHINXMIN-NEXT:    flt.s a1, a2, a11504; CHECKIZHINXMIN-NEXT:    beqz a1, .LBB8_21505; CHECKIZHINXMIN-NEXT:  # %bb.1:1506; CHECKIZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz1507; CHECKIZHINXMIN-NEXT:    fcvt.s.w a1, a1, rtz1508; CHECKIZHINXMIN-NEXT:    fsgnj.s a0, a1, a01509; CHECKIZHINXMIN-NEXT:  .LBB8_2:1510; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a01511; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a01512; CHECKIZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz1513; CHECKIZHINXMIN-NEXT:    feq.s a0, a0, a01514; CHECKIZHINXMIN-NEXT:    seqz a0, a01515; CHECKIZHINXMIN-NEXT:    addi a0, a0, -11516; CHECKIZHINXMIN-NEXT:    and a0, a0, a11517; CHECKIZHINXMIN-NEXT:    ret1518  %a = call half @llvm.trunc.f16(half %x)1519  %b = call i32 @llvm.fptosi.sat.i32.f16(half %a)1520  ret i32 %b1521}1522 1523define i64 @test_trunc_si64(half %x) nounwind {1524; RV32IZFH-LABEL: test_trunc_si64:1525; RV32IZFH:       # %bb.0:1526; RV32IZFH-NEXT:    li a0, 251527; RV32IZFH-NEXT:    slli a0, a0, 101528; RV32IZFH-NEXT:    fmv.h.x fa5, a01529; RV32IZFH-NEXT:    fabs.h fa4, fa01530; RV32IZFH-NEXT:    flt.h a0, fa4, fa51531; RV32IZFH-NEXT:    beqz a0, .LBB9_21532; RV32IZFH-NEXT:  # %bb.1:1533; RV32IZFH-NEXT:    fcvt.w.h a0, fa0, rtz1534; RV32IZFH-NEXT:    fcvt.h.w fa5, a0, rtz1535; RV32IZFH-NEXT:    fsgnj.h fa0, fa5, fa01536; RV32IZFH-NEXT:  .LBB9_2:1537; RV32IZFH-NEXT:    addi sp, sp, -161538; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1539; RV32IZFH-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1540; RV32IZFH-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill1541; RV32IZFH-NEXT:    fcvt.s.h fs0, fa01542; RV32IZFH-NEXT:    lui a0, 9134081543; RV32IZFH-NEXT:    fmv.w.x fa5, a01544; RV32IZFH-NEXT:    fle.s s0, fa5, fs01545; RV32IZFH-NEXT:    fmv.s fa0, fs01546; RV32IZFH-NEXT:    call __fixsfdi1547; RV32IZFH-NEXT:    lui a3, 5242881548; RV32IZFH-NEXT:    lui a2, 5242881549; RV32IZFH-NEXT:    beqz s0, .LBB9_41550; RV32IZFH-NEXT:  # %bb.3:1551; RV32IZFH-NEXT:    mv a2, a11552; RV32IZFH-NEXT:  .LBB9_4:1553; RV32IZFH-NEXT:    lui a1, 3891201554; RV32IZFH-NEXT:    addi a1, a1, -11555; RV32IZFH-NEXT:    fmv.w.x fa5, a11556; RV32IZFH-NEXT:    flt.s a1, fa5, fs01557; RV32IZFH-NEXT:    beqz a1, .LBB9_61558; RV32IZFH-NEXT:  # %bb.5:1559; RV32IZFH-NEXT:    addi a2, a3, -11560; RV32IZFH-NEXT:  .LBB9_6:1561; RV32IZFH-NEXT:    feq.s a3, fs0, fs01562; RV32IZFH-NEXT:    neg a4, s01563; RV32IZFH-NEXT:    neg a5, a11564; RV32IZFH-NEXT:    neg a3, a31565; RV32IZFH-NEXT:    and a0, a4, a01566; RV32IZFH-NEXT:    and a1, a3, a21567; RV32IZFH-NEXT:    or a0, a5, a01568; RV32IZFH-NEXT:    and a0, a3, a01569; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1570; RV32IZFH-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1571; RV32IZFH-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload1572; RV32IZFH-NEXT:    addi sp, sp, 161573; RV32IZFH-NEXT:    ret1574;1575; RV64IZFH-LABEL: test_trunc_si64:1576; RV64IZFH:       # %bb.0:1577; RV64IZFH-NEXT:    fcvt.l.h a0, fa0, rtz1578; RV64IZFH-NEXT:    feq.h a1, fa0, fa01579; RV64IZFH-NEXT:    seqz a1, a11580; RV64IZFH-NEXT:    addi a1, a1, -11581; RV64IZFH-NEXT:    and a0, a1, a01582; RV64IZFH-NEXT:    ret1583;1584; RV32IZHINX-LABEL: test_trunc_si64:1585; RV32IZHINX:       # %bb.0:1586; RV32IZHINX-NEXT:    li a1, 251587; RV32IZHINX-NEXT:    slli a1, a1, 101588; RV32IZHINX-NEXT:    fabs.h a2, a01589; RV32IZHINX-NEXT:    flt.h a1, a2, a11590; RV32IZHINX-NEXT:    beqz a1, .LBB9_21591; RV32IZHINX-NEXT:  # %bb.1:1592; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rtz1593; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rtz1594; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a01595; RV32IZHINX-NEXT:  .LBB9_2:1596; RV32IZHINX-NEXT:    addi sp, sp, -161597; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1598; RV32IZHINX-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1599; RV32IZHINX-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1600; RV32IZHINX-NEXT:    fcvt.s.h s0, a01601; RV32IZHINX-NEXT:    lui a0, 9134081602; RV32IZHINX-NEXT:    fle.s s1, a0, s01603; RV32IZHINX-NEXT:    mv a0, s01604; RV32IZHINX-NEXT:    call __fixsfdi1605; RV32IZHINX-NEXT:    lui a3, 5242881606; RV32IZHINX-NEXT:    lui a2, 5242881607; RV32IZHINX-NEXT:    beqz s1, .LBB9_41608; RV32IZHINX-NEXT:  # %bb.3:1609; RV32IZHINX-NEXT:    mv a2, a11610; RV32IZHINX-NEXT:  .LBB9_4:1611; RV32IZHINX-NEXT:    lui a1, 3891201612; RV32IZHINX-NEXT:    addi a1, a1, -11613; RV32IZHINX-NEXT:    flt.s a1, a1, s01614; RV32IZHINX-NEXT:    beqz a1, .LBB9_61615; RV32IZHINX-NEXT:  # %bb.5:1616; RV32IZHINX-NEXT:    addi a2, a3, -11617; RV32IZHINX-NEXT:  .LBB9_6:1618; RV32IZHINX-NEXT:    feq.s a3, s0, s01619; RV32IZHINX-NEXT:    neg a4, s11620; RV32IZHINX-NEXT:    neg a5, a11621; RV32IZHINX-NEXT:    neg a3, a31622; RV32IZHINX-NEXT:    and a0, a4, a01623; RV32IZHINX-NEXT:    and a1, a3, a21624; RV32IZHINX-NEXT:    or a0, a5, a01625; RV32IZHINX-NEXT:    and a0, a3, a01626; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1627; RV32IZHINX-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1628; RV32IZHINX-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1629; RV32IZHINX-NEXT:    addi sp, sp, 161630; RV32IZHINX-NEXT:    ret1631;1632; RV64IZHINX-LABEL: test_trunc_si64:1633; RV64IZHINX:       # %bb.0:1634; RV64IZHINX-NEXT:    li a1, 251635; RV64IZHINX-NEXT:    slli a1, a1, 101636; RV64IZHINX-NEXT:    fabs.h a2, a01637; RV64IZHINX-NEXT:    flt.h a1, a2, a11638; RV64IZHINX-NEXT:    beqz a1, .LBB9_21639; RV64IZHINX-NEXT:  # %bb.1:1640; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rtz1641; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rtz1642; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a01643; RV64IZHINX-NEXT:  .LBB9_2:1644; RV64IZHINX-NEXT:    fcvt.l.h a1, a0, rtz1645; RV64IZHINX-NEXT:    feq.h a0, a0, a01646; RV64IZHINX-NEXT:    seqz a0, a01647; RV64IZHINX-NEXT:    addi a0, a0, -11648; RV64IZHINX-NEXT:    and a0, a0, a11649; RV64IZHINX-NEXT:    ret1650;1651; RV32IZFHMIN-LABEL: test_trunc_si64:1652; RV32IZFHMIN:       # %bb.0:1653; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa01654; RV32IZFHMIN-NEXT:    lui a0, 3072001655; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a01656; RV32IZFHMIN-NEXT:    fabs.s fa3, fa51657; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa41658; RV32IZFHMIN-NEXT:    beqz a0, .LBB9_21659; RV32IZFHMIN-NEXT:  # %bb.1:1660; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz1661; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rtz1662; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa51663; RV32IZFHMIN-NEXT:  .LBB9_2:1664; RV32IZFHMIN-NEXT:    addi sp, sp, -161665; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1666; RV32IZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1667; RV32IZFHMIN-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill1668; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa51669; RV32IZFHMIN-NEXT:    lui a0, 9134081670; RV32IZFHMIN-NEXT:    fcvt.s.h fs0, fa51671; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a01672; RV32IZFHMIN-NEXT:    fle.s s0, fa5, fs01673; RV32IZFHMIN-NEXT:    fmv.s fa0, fs01674; RV32IZFHMIN-NEXT:    call __fixsfdi1675; RV32IZFHMIN-NEXT:    lui a3, 5242881676; RV32IZFHMIN-NEXT:    lui a2, 5242881677; RV32IZFHMIN-NEXT:    beqz s0, .LBB9_41678; RV32IZFHMIN-NEXT:  # %bb.3:1679; RV32IZFHMIN-NEXT:    mv a2, a11680; RV32IZFHMIN-NEXT:  .LBB9_4:1681; RV32IZFHMIN-NEXT:    lui a1, 3891201682; RV32IZFHMIN-NEXT:    addi a1, a1, -11683; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a11684; RV32IZFHMIN-NEXT:    flt.s a1, fa5, fs01685; RV32IZFHMIN-NEXT:    beqz a1, .LBB9_61686; RV32IZFHMIN-NEXT:  # %bb.5:1687; RV32IZFHMIN-NEXT:    addi a2, a3, -11688; RV32IZFHMIN-NEXT:  .LBB9_6:1689; RV32IZFHMIN-NEXT:    feq.s a3, fs0, fs01690; RV32IZFHMIN-NEXT:    neg a4, s01691; RV32IZFHMIN-NEXT:    neg a5, a11692; RV32IZFHMIN-NEXT:    neg a3, a31693; RV32IZFHMIN-NEXT:    and a0, a4, a01694; RV32IZFHMIN-NEXT:    and a1, a3, a21695; RV32IZFHMIN-NEXT:    or a0, a5, a01696; RV32IZFHMIN-NEXT:    and a0, a3, a01697; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1698; RV32IZFHMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1699; RV32IZFHMIN-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload1700; RV32IZFHMIN-NEXT:    addi sp, sp, 161701; RV32IZFHMIN-NEXT:    ret1702;1703; RV64IZFHMIN-LABEL: test_trunc_si64:1704; RV64IZFHMIN:       # %bb.0:1705; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa01706; RV64IZFHMIN-NEXT:    lui a0, 3072001707; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a01708; RV64IZFHMIN-NEXT:    fabs.s fa3, fa51709; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa41710; RV64IZFHMIN-NEXT:    beqz a0, .LBB9_21711; RV64IZFHMIN-NEXT:  # %bb.1:1712; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz1713; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rtz1714; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa51715; RV64IZFHMIN-NEXT:  .LBB9_2:1716; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa51717; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa51718; RV64IZFHMIN-NEXT:    fcvt.l.s a0, fa5, rtz1719; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa51720; RV64IZFHMIN-NEXT:    seqz a1, a11721; RV64IZFHMIN-NEXT:    addi a1, a1, -11722; RV64IZFHMIN-NEXT:    and a0, a1, a01723; RV64IZFHMIN-NEXT:    ret1724;1725; RV32IZHINXMIN-LABEL: test_trunc_si64:1726; RV32IZHINXMIN:       # %bb.0:1727; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a01728; RV32IZHINXMIN-NEXT:    lui a1, 3072001729; RV32IZHINXMIN-NEXT:    fabs.s a2, a01730; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a11731; RV32IZHINXMIN-NEXT:    beqz a1, .LBB9_21732; RV32IZHINXMIN-NEXT:  # %bb.1:1733; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz1734; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rtz1735; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a01736; RV32IZHINXMIN-NEXT:  .LBB9_2:1737; RV32IZHINXMIN-NEXT:    addi sp, sp, -161738; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1739; RV32IZHINXMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1740; RV32IZHINXMIN-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1741; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a01742; RV32IZHINXMIN-NEXT:    fcvt.s.h s0, a01743; RV32IZHINXMIN-NEXT:    lui a0, 9134081744; RV32IZHINXMIN-NEXT:    fle.s s1, a0, s01745; RV32IZHINXMIN-NEXT:    mv a0, s01746; RV32IZHINXMIN-NEXT:    call __fixsfdi1747; RV32IZHINXMIN-NEXT:    lui a3, 5242881748; RV32IZHINXMIN-NEXT:    lui a2, 5242881749; RV32IZHINXMIN-NEXT:    beqz s1, .LBB9_41750; RV32IZHINXMIN-NEXT:  # %bb.3:1751; RV32IZHINXMIN-NEXT:    mv a2, a11752; RV32IZHINXMIN-NEXT:  .LBB9_4:1753; RV32IZHINXMIN-NEXT:    lui a1, 3891201754; RV32IZHINXMIN-NEXT:    addi a1, a1, -11755; RV32IZHINXMIN-NEXT:    flt.s a1, a1, s01756; RV32IZHINXMIN-NEXT:    beqz a1, .LBB9_61757; RV32IZHINXMIN-NEXT:  # %bb.5:1758; RV32IZHINXMIN-NEXT:    addi a2, a3, -11759; RV32IZHINXMIN-NEXT:  .LBB9_6:1760; RV32IZHINXMIN-NEXT:    feq.s a3, s0, s01761; RV32IZHINXMIN-NEXT:    neg a4, s11762; RV32IZHINXMIN-NEXT:    neg a5, a11763; RV32IZHINXMIN-NEXT:    neg a3, a31764; RV32IZHINXMIN-NEXT:    and a0, a4, a01765; RV32IZHINXMIN-NEXT:    and a1, a3, a21766; RV32IZHINXMIN-NEXT:    or a0, a5, a01767; RV32IZHINXMIN-NEXT:    and a0, a3, a01768; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1769; RV32IZHINXMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1770; RV32IZHINXMIN-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1771; RV32IZHINXMIN-NEXT:    addi sp, sp, 161772; RV32IZHINXMIN-NEXT:    ret1773;1774; RV64IZHINXMIN-LABEL: test_trunc_si64:1775; RV64IZHINXMIN:       # %bb.0:1776; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a01777; RV64IZHINXMIN-NEXT:    lui a1, 3072001778; RV64IZHINXMIN-NEXT:    fabs.s a2, a01779; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a11780; RV64IZHINXMIN-NEXT:    beqz a1, .LBB9_21781; RV64IZHINXMIN-NEXT:  # %bb.1:1782; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz1783; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rtz1784; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a01785; RV64IZHINXMIN-NEXT:  .LBB9_2:1786; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a01787; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a01788; RV64IZHINXMIN-NEXT:    fcvt.l.s a1, a0, rtz1789; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a01790; RV64IZHINXMIN-NEXT:    seqz a0, a01791; RV64IZHINXMIN-NEXT:    addi a0, a0, -11792; RV64IZHINXMIN-NEXT:    and a0, a0, a11793; RV64IZHINXMIN-NEXT:    ret1794  %a = call half @llvm.trunc.f16(half %x)1795  %b = call i64 @llvm.fptosi.sat.i64.f16(half %a)1796  ret i64 %b1797}1798 1799define signext i32 @test_trunc_ui32(half %x) {1800; CHECKIZFH-LABEL: test_trunc_ui32:1801; CHECKIZFH:       # %bb.0:1802; CHECKIZFH-NEXT:    fcvt.wu.h a0, fa0, rtz1803; CHECKIZFH-NEXT:    feq.h a1, fa0, fa01804; CHECKIZFH-NEXT:    seqz a1, a11805; CHECKIZFH-NEXT:    addi a1, a1, -11806; CHECKIZFH-NEXT:    and a0, a1, a01807; CHECKIZFH-NEXT:    ret1808;1809; RV32IZHINX-LABEL: test_trunc_ui32:1810; RV32IZHINX:       # %bb.0:1811; RV32IZHINX-NEXT:    li a1, 251812; RV32IZHINX-NEXT:    slli a1, a1, 101813; RV32IZHINX-NEXT:    fabs.h a2, a01814; RV32IZHINX-NEXT:    flt.h a1, a2, a11815; RV32IZHINX-NEXT:    beqz a1, .LBB10_21816; RV32IZHINX-NEXT:  # %bb.1:1817; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rtz1818; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rtz1819; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a01820; RV32IZHINX-NEXT:  .LBB10_2:1821; RV32IZHINX-NEXT:    fcvt.wu.h a1, a0, rtz1822; RV32IZHINX-NEXT:    feq.h a0, a0, a01823; RV32IZHINX-NEXT:    seqz a0, a01824; RV32IZHINX-NEXT:    addi a0, a0, -11825; RV32IZHINX-NEXT:    and a0, a0, a11826; RV32IZHINX-NEXT:    ret1827;1828; RV64IZHINX-LABEL: test_trunc_ui32:1829; RV64IZHINX:       # %bb.0:1830; RV64IZHINX-NEXT:    li a1, 251831; RV64IZHINX-NEXT:    slli a1, a1, 101832; RV64IZHINX-NEXT:    fabs.h a2, a01833; RV64IZHINX-NEXT:    flt.h a1, a2, a11834; RV64IZHINX-NEXT:    beqz a1, .LBB10_21835; RV64IZHINX-NEXT:  # %bb.1:1836; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rtz1837; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rtz1838; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a01839; RV64IZHINX-NEXT:  .LBB10_2:1840; RV64IZHINX-NEXT:    fcvt.wu.h a1, a0, rtz1841; RV64IZHINX-NEXT:    feq.h a0, a0, a01842; RV64IZHINX-NEXT:    seqz a0, a01843; RV64IZHINX-NEXT:    addiw a0, a0, -11844; RV64IZHINX-NEXT:    and a0, a1, a01845; RV64IZHINX-NEXT:    ret1846;1847; RV32IZFHMIN-LABEL: test_trunc_ui32:1848; RV32IZFHMIN:       # %bb.0:1849; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa01850; RV32IZFHMIN-NEXT:    lui a0, 3072001851; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a01852; RV32IZFHMIN-NEXT:    fabs.s fa3, fa51853; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa41854; RV32IZFHMIN-NEXT:    beqz a0, .LBB10_21855; RV32IZFHMIN-NEXT:  # %bb.1:1856; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz1857; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rtz1858; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa51859; RV32IZFHMIN-NEXT:  .LBB10_2:1860; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa51861; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa51862; RV32IZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz1863; RV32IZFHMIN-NEXT:    feq.s a1, fa5, fa51864; RV32IZFHMIN-NEXT:    seqz a1, a11865; RV32IZFHMIN-NEXT:    addi a1, a1, -11866; RV32IZFHMIN-NEXT:    and a0, a1, a01867; RV32IZFHMIN-NEXT:    ret1868;1869; RV64IZFHMIN-LABEL: test_trunc_ui32:1870; RV64IZFHMIN:       # %bb.0:1871; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa01872; RV64IZFHMIN-NEXT:    lui a0, 3072001873; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a01874; RV64IZFHMIN-NEXT:    fabs.s fa3, fa51875; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa41876; RV64IZFHMIN-NEXT:    beqz a0, .LBB10_21877; RV64IZFHMIN-NEXT:  # %bb.1:1878; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz1879; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rtz1880; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa51881; RV64IZFHMIN-NEXT:  .LBB10_2:1882; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa51883; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa51884; RV64IZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz1885; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa51886; RV64IZFHMIN-NEXT:    seqz a1, a11887; RV64IZFHMIN-NEXT:    addiw a1, a1, -11888; RV64IZFHMIN-NEXT:    and a0, a0, a11889; RV64IZFHMIN-NEXT:    ret1890;1891; RV32IZHINXMIN-LABEL: test_trunc_ui32:1892; RV32IZHINXMIN:       # %bb.0:1893; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a01894; RV32IZHINXMIN-NEXT:    lui a1, 3072001895; RV32IZHINXMIN-NEXT:    fabs.s a2, a01896; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a11897; RV32IZHINXMIN-NEXT:    beqz a1, .LBB10_21898; RV32IZHINXMIN-NEXT:  # %bb.1:1899; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz1900; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rtz1901; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a01902; RV32IZHINXMIN-NEXT:  .LBB10_2:1903; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a01904; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a01905; RV32IZHINXMIN-NEXT:    fcvt.wu.s a1, a0, rtz1906; RV32IZHINXMIN-NEXT:    feq.s a0, a0, a01907; RV32IZHINXMIN-NEXT:    seqz a0, a01908; RV32IZHINXMIN-NEXT:    addi a0, a0, -11909; RV32IZHINXMIN-NEXT:    and a0, a0, a11910; RV32IZHINXMIN-NEXT:    ret1911;1912; RV64IZHINXMIN-LABEL: test_trunc_ui32:1913; RV64IZHINXMIN:       # %bb.0:1914; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a01915; RV64IZHINXMIN-NEXT:    lui a1, 3072001916; RV64IZHINXMIN-NEXT:    fabs.s a2, a01917; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a11918; RV64IZHINXMIN-NEXT:    beqz a1, .LBB10_21919; RV64IZHINXMIN-NEXT:  # %bb.1:1920; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz1921; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rtz1922; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a01923; RV64IZHINXMIN-NEXT:  .LBB10_2:1924; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a01925; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a01926; RV64IZHINXMIN-NEXT:    fcvt.wu.s a1, a0, rtz1927; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a01928; RV64IZHINXMIN-NEXT:    seqz a0, a01929; RV64IZHINXMIN-NEXT:    addiw a0, a0, -11930; RV64IZHINXMIN-NEXT:    and a0, a1, a01931; RV64IZHINXMIN-NEXT:    ret1932  %a = call half @llvm.trunc.f16(half %x)1933  %b = call i32 @llvm.fptoui.sat.i32.f16(half %a)1934  ret i32 %b1935}1936 1937define i64 @test_trunc_ui64(half %x) nounwind {1938; RV32IZFH-LABEL: test_trunc_ui64:1939; RV32IZFH:       # %bb.0:1940; RV32IZFH-NEXT:    li a0, 251941; RV32IZFH-NEXT:    slli a0, a0, 101942; RV32IZFH-NEXT:    fmv.h.x fa5, a01943; RV32IZFH-NEXT:    fabs.h fa4, fa01944; RV32IZFH-NEXT:    flt.h a0, fa4, fa51945; RV32IZFH-NEXT:    beqz a0, .LBB11_21946; RV32IZFH-NEXT:  # %bb.1:1947; RV32IZFH-NEXT:    fcvt.w.h a0, fa0, rtz1948; RV32IZFH-NEXT:    fcvt.h.w fa5, a0, rtz1949; RV32IZFH-NEXT:    fsgnj.h fa0, fa5, fa01950; RV32IZFH-NEXT:  .LBB11_2:1951; RV32IZFH-NEXT:    addi sp, sp, -161952; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1953; RV32IZFH-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1954; RV32IZFH-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill1955; RV32IZFH-NEXT:    fcvt.s.h fs0, fa01956; RV32IZFH-NEXT:    fmv.w.x fa5, zero1957; RV32IZFH-NEXT:    fle.s a0, fa5, fs01958; RV32IZFH-NEXT:    neg s0, a01959; RV32IZFH-NEXT:    fmv.s fa0, fs01960; RV32IZFH-NEXT:    call __fixunssfdi1961; RV32IZFH-NEXT:    and a0, s0, a01962; RV32IZFH-NEXT:    lui a2, 3911681963; RV32IZFH-NEXT:    and a1, s0, a11964; RV32IZFH-NEXT:    addi a2, a2, -11965; RV32IZFH-NEXT:    fmv.w.x fa5, a21966; RV32IZFH-NEXT:    flt.s a2, fa5, fs01967; RV32IZFH-NEXT:    neg a2, a21968; RV32IZFH-NEXT:    or a0, a2, a01969; RV32IZFH-NEXT:    or a1, a2, a11970; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1971; RV32IZFH-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1972; RV32IZFH-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload1973; RV32IZFH-NEXT:    addi sp, sp, 161974; RV32IZFH-NEXT:    ret1975;1976; RV64IZFH-LABEL: test_trunc_ui64:1977; RV64IZFH:       # %bb.0:1978; RV64IZFH-NEXT:    fcvt.lu.h a0, fa0, rtz1979; RV64IZFH-NEXT:    feq.h a1, fa0, fa01980; RV64IZFH-NEXT:    seqz a1, a11981; RV64IZFH-NEXT:    addi a1, a1, -11982; RV64IZFH-NEXT:    and a0, a1, a01983; RV64IZFH-NEXT:    ret1984;1985; RV32IZHINX-LABEL: test_trunc_ui64:1986; RV32IZHINX:       # %bb.0:1987; RV32IZHINX-NEXT:    li a1, 251988; RV32IZHINX-NEXT:    slli a1, a1, 101989; RV32IZHINX-NEXT:    fabs.h a2, a01990; RV32IZHINX-NEXT:    flt.h a1, a2, a11991; RV32IZHINX-NEXT:    beqz a1, .LBB11_21992; RV32IZHINX-NEXT:  # %bb.1:1993; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rtz1994; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rtz1995; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a01996; RV32IZHINX-NEXT:  .LBB11_2:1997; RV32IZHINX-NEXT:    addi sp, sp, -161998; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1999; RV32IZHINX-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2000; RV32IZHINX-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2001; RV32IZHINX-NEXT:    fcvt.s.h s0, a02002; RV32IZHINX-NEXT:    fle.s a0, zero, s02003; RV32IZHINX-NEXT:    neg s1, a02004; RV32IZHINX-NEXT:    mv a0, s02005; RV32IZHINX-NEXT:    call __fixunssfdi2006; RV32IZHINX-NEXT:    and a0, s1, a02007; RV32IZHINX-NEXT:    lui a2, 3911682008; RV32IZHINX-NEXT:    and a1, s1, a12009; RV32IZHINX-NEXT:    addi a2, a2, -12010; RV32IZHINX-NEXT:    flt.s a2, a2, s02011; RV32IZHINX-NEXT:    neg a2, a22012; RV32IZHINX-NEXT:    or a0, a2, a02013; RV32IZHINX-NEXT:    or a1, a2, a12014; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2015; RV32IZHINX-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2016; RV32IZHINX-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2017; RV32IZHINX-NEXT:    addi sp, sp, 162018; RV32IZHINX-NEXT:    ret2019;2020; RV64IZHINX-LABEL: test_trunc_ui64:2021; RV64IZHINX:       # %bb.0:2022; RV64IZHINX-NEXT:    li a1, 252023; RV64IZHINX-NEXT:    slli a1, a1, 102024; RV64IZHINX-NEXT:    fabs.h a2, a02025; RV64IZHINX-NEXT:    flt.h a1, a2, a12026; RV64IZHINX-NEXT:    beqz a1, .LBB11_22027; RV64IZHINX-NEXT:  # %bb.1:2028; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rtz2029; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rtz2030; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a02031; RV64IZHINX-NEXT:  .LBB11_2:2032; RV64IZHINX-NEXT:    fcvt.lu.h a1, a0, rtz2033; RV64IZHINX-NEXT:    feq.h a0, a0, a02034; RV64IZHINX-NEXT:    seqz a0, a02035; RV64IZHINX-NEXT:    addi a0, a0, -12036; RV64IZHINX-NEXT:    and a0, a0, a12037; RV64IZHINX-NEXT:    ret2038;2039; RV32IZFHMIN-LABEL: test_trunc_ui64:2040; RV32IZFHMIN:       # %bb.0:2041; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa02042; RV32IZFHMIN-NEXT:    lui a0, 3072002043; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a02044; RV32IZFHMIN-NEXT:    fabs.s fa3, fa52045; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa42046; RV32IZFHMIN-NEXT:    beqz a0, .LBB11_22047; RV32IZFHMIN-NEXT:  # %bb.1:2048; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz2049; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rtz2050; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa52051; RV32IZFHMIN-NEXT:  .LBB11_2:2052; RV32IZFHMIN-NEXT:    addi sp, sp, -162053; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2054; RV32IZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2055; RV32IZFHMIN-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill2056; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa52057; RV32IZFHMIN-NEXT:    fcvt.s.h fs0, fa52058; RV32IZFHMIN-NEXT:    fmv.w.x fa5, zero2059; RV32IZFHMIN-NEXT:    fle.s a0, fa5, fs02060; RV32IZFHMIN-NEXT:    neg s0, a02061; RV32IZFHMIN-NEXT:    fmv.s fa0, fs02062; RV32IZFHMIN-NEXT:    call __fixunssfdi2063; RV32IZFHMIN-NEXT:    and a0, s0, a02064; RV32IZFHMIN-NEXT:    lui a2, 3911682065; RV32IZFHMIN-NEXT:    and a1, s0, a12066; RV32IZFHMIN-NEXT:    addi a2, a2, -12067; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a22068; RV32IZFHMIN-NEXT:    flt.s a2, fa5, fs02069; RV32IZFHMIN-NEXT:    neg a2, a22070; RV32IZFHMIN-NEXT:    or a0, a2, a02071; RV32IZFHMIN-NEXT:    or a1, a2, a12072; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2073; RV32IZFHMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2074; RV32IZFHMIN-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload2075; RV32IZFHMIN-NEXT:    addi sp, sp, 162076; RV32IZFHMIN-NEXT:    ret2077;2078; RV64IZFHMIN-LABEL: test_trunc_ui64:2079; RV64IZFHMIN:       # %bb.0:2080; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa02081; RV64IZFHMIN-NEXT:    lui a0, 3072002082; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a02083; RV64IZFHMIN-NEXT:    fabs.s fa3, fa52084; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa42085; RV64IZFHMIN-NEXT:    beqz a0, .LBB11_22086; RV64IZFHMIN-NEXT:  # %bb.1:2087; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz2088; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rtz2089; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa52090; RV64IZFHMIN-NEXT:  .LBB11_2:2091; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa52092; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa52093; RV64IZFHMIN-NEXT:    fcvt.lu.s a0, fa5, rtz2094; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa52095; RV64IZFHMIN-NEXT:    seqz a1, a12096; RV64IZFHMIN-NEXT:    addi a1, a1, -12097; RV64IZFHMIN-NEXT:    and a0, a1, a02098; RV64IZFHMIN-NEXT:    ret2099;2100; RV32IZHINXMIN-LABEL: test_trunc_ui64:2101; RV32IZHINXMIN:       # %bb.0:2102; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a02103; RV32IZHINXMIN-NEXT:    lui a1, 3072002104; RV32IZHINXMIN-NEXT:    fabs.s a2, a02105; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a12106; RV32IZHINXMIN-NEXT:    beqz a1, .LBB11_22107; RV32IZHINXMIN-NEXT:  # %bb.1:2108; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz2109; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rtz2110; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a02111; RV32IZHINXMIN-NEXT:  .LBB11_2:2112; RV32IZHINXMIN-NEXT:    addi sp, sp, -162113; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2114; RV32IZHINXMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2115; RV32IZHINXMIN-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2116; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a02117; RV32IZHINXMIN-NEXT:    fcvt.s.h s0, a02118; RV32IZHINXMIN-NEXT:    fle.s a0, zero, s02119; RV32IZHINXMIN-NEXT:    neg s1, a02120; RV32IZHINXMIN-NEXT:    mv a0, s02121; RV32IZHINXMIN-NEXT:    call __fixunssfdi2122; RV32IZHINXMIN-NEXT:    and a0, s1, a02123; RV32IZHINXMIN-NEXT:    lui a2, 3911682124; RV32IZHINXMIN-NEXT:    and a1, s1, a12125; RV32IZHINXMIN-NEXT:    addi a2, a2, -12126; RV32IZHINXMIN-NEXT:    flt.s a2, a2, s02127; RV32IZHINXMIN-NEXT:    neg a2, a22128; RV32IZHINXMIN-NEXT:    or a0, a2, a02129; RV32IZHINXMIN-NEXT:    or a1, a2, a12130; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2131; RV32IZHINXMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2132; RV32IZHINXMIN-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2133; RV32IZHINXMIN-NEXT:    addi sp, sp, 162134; RV32IZHINXMIN-NEXT:    ret2135;2136; RV64IZHINXMIN-LABEL: test_trunc_ui64:2137; RV64IZHINXMIN:       # %bb.0:2138; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a02139; RV64IZHINXMIN-NEXT:    lui a1, 3072002140; RV64IZHINXMIN-NEXT:    fabs.s a2, a02141; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a12142; RV64IZHINXMIN-NEXT:    beqz a1, .LBB11_22143; RV64IZHINXMIN-NEXT:  # %bb.1:2144; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz2145; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rtz2146; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a02147; RV64IZHINXMIN-NEXT:  .LBB11_2:2148; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a02149; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a02150; RV64IZHINXMIN-NEXT:    fcvt.lu.s a1, a0, rtz2151; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a02152; RV64IZHINXMIN-NEXT:    seqz a0, a02153; RV64IZHINXMIN-NEXT:    addi a0, a0, -12154; RV64IZHINXMIN-NEXT:    and a0, a0, a12155; RV64IZHINXMIN-NEXT:    ret2156  %a = call half @llvm.trunc.f16(half %x)2157  %b = call i64 @llvm.fptoui.sat.i64.f16(half %a)2158  ret i64 %b2159}2160 2161define signext i32 @test_round_si32(half %x) {2162; CHECKIZFH-LABEL: test_round_si32:2163; CHECKIZFH:       # %bb.0:2164; CHECKIZFH-NEXT:    fcvt.w.h a0, fa0, rmm2165; CHECKIZFH-NEXT:    feq.h a1, fa0, fa02166; CHECKIZFH-NEXT:    seqz a1, a12167; CHECKIZFH-NEXT:    addi a1, a1, -12168; CHECKIZFH-NEXT:    and a0, a1, a02169; CHECKIZFH-NEXT:    ret2170;2171; CHECKIZHINX-LABEL: test_round_si32:2172; CHECKIZHINX:       # %bb.0:2173; CHECKIZHINX-NEXT:    li a1, 252174; CHECKIZHINX-NEXT:    slli a1, a1, 102175; CHECKIZHINX-NEXT:    fabs.h a2, a02176; CHECKIZHINX-NEXT:    flt.h a1, a2, a12177; CHECKIZHINX-NEXT:    beqz a1, .LBB12_22178; CHECKIZHINX-NEXT:  # %bb.1:2179; CHECKIZHINX-NEXT:    fcvt.w.h a1, a0, rmm2180; CHECKIZHINX-NEXT:    fcvt.h.w a1, a1, rmm2181; CHECKIZHINX-NEXT:    fsgnj.h a0, a1, a02182; CHECKIZHINX-NEXT:  .LBB12_2:2183; CHECKIZHINX-NEXT:    fcvt.w.h a1, a0, rtz2184; CHECKIZHINX-NEXT:    feq.h a0, a0, a02185; CHECKIZHINX-NEXT:    seqz a0, a02186; CHECKIZHINX-NEXT:    addi a0, a0, -12187; CHECKIZHINX-NEXT:    and a0, a0, a12188; CHECKIZHINX-NEXT:    ret2189;2190; CHECKIZFHMIN-LABEL: test_round_si32:2191; CHECKIZFHMIN:       # %bb.0:2192; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa02193; CHECKIZFHMIN-NEXT:    lui a0, 3072002194; CHECKIZFHMIN-NEXT:    fmv.w.x fa4, a02195; CHECKIZFHMIN-NEXT:    fabs.s fa3, fa52196; CHECKIZFHMIN-NEXT:    flt.s a0, fa3, fa42197; CHECKIZFHMIN-NEXT:    beqz a0, .LBB12_22198; CHECKIZFHMIN-NEXT:  # %bb.1:2199; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm2200; CHECKIZFHMIN-NEXT:    fcvt.s.w fa4, a0, rmm2201; CHECKIZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa52202; CHECKIZFHMIN-NEXT:  .LBB12_2:2203; CHECKIZFHMIN-NEXT:    fcvt.h.s fa5, fa52204; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa52205; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz2206; CHECKIZFHMIN-NEXT:    feq.s a1, fa5, fa52207; CHECKIZFHMIN-NEXT:    seqz a1, a12208; CHECKIZFHMIN-NEXT:    addi a1, a1, -12209; CHECKIZFHMIN-NEXT:    and a0, a1, a02210; CHECKIZFHMIN-NEXT:    ret2211;2212; CHECKIZHINXMIN-LABEL: test_round_si32:2213; CHECKIZHINXMIN:       # %bb.0:2214; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a02215; CHECKIZHINXMIN-NEXT:    lui a1, 3072002216; CHECKIZHINXMIN-NEXT:    fabs.s a2, a02217; CHECKIZHINXMIN-NEXT:    flt.s a1, a2, a12218; CHECKIZHINXMIN-NEXT:    beqz a1, .LBB12_22219; CHECKIZHINXMIN-NEXT:  # %bb.1:2220; CHECKIZHINXMIN-NEXT:    fcvt.w.s a1, a0, rmm2221; CHECKIZHINXMIN-NEXT:    fcvt.s.w a1, a1, rmm2222; CHECKIZHINXMIN-NEXT:    fsgnj.s a0, a1, a02223; CHECKIZHINXMIN-NEXT:  .LBB12_2:2224; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a02225; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a02226; CHECKIZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz2227; CHECKIZHINXMIN-NEXT:    feq.s a0, a0, a02228; CHECKIZHINXMIN-NEXT:    seqz a0, a02229; CHECKIZHINXMIN-NEXT:    addi a0, a0, -12230; CHECKIZHINXMIN-NEXT:    and a0, a0, a12231; CHECKIZHINXMIN-NEXT:    ret2232  %a = call half @llvm.round.f16(half %x)2233  %b = call i32 @llvm.fptosi.sat.i32.f16(half %a)2234  ret i32 %b2235}2236 2237define i64 @test_round_si64(half %x) nounwind {2238; RV32IZFH-LABEL: test_round_si64:2239; RV32IZFH:       # %bb.0:2240; RV32IZFH-NEXT:    li a0, 252241; RV32IZFH-NEXT:    slli a0, a0, 102242; RV32IZFH-NEXT:    fmv.h.x fa5, a02243; RV32IZFH-NEXT:    fabs.h fa4, fa02244; RV32IZFH-NEXT:    flt.h a0, fa4, fa52245; RV32IZFH-NEXT:    beqz a0, .LBB13_22246; RV32IZFH-NEXT:  # %bb.1:2247; RV32IZFH-NEXT:    fcvt.w.h a0, fa0, rmm2248; RV32IZFH-NEXT:    fcvt.h.w fa5, a0, rmm2249; RV32IZFH-NEXT:    fsgnj.h fa0, fa5, fa02250; RV32IZFH-NEXT:  .LBB13_2:2251; RV32IZFH-NEXT:    addi sp, sp, -162252; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2253; RV32IZFH-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2254; RV32IZFH-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill2255; RV32IZFH-NEXT:    fcvt.s.h fs0, fa02256; RV32IZFH-NEXT:    lui a0, 9134082257; RV32IZFH-NEXT:    fmv.w.x fa5, a02258; RV32IZFH-NEXT:    fle.s s0, fa5, fs02259; RV32IZFH-NEXT:    fmv.s fa0, fs02260; RV32IZFH-NEXT:    call __fixsfdi2261; RV32IZFH-NEXT:    lui a3, 5242882262; RV32IZFH-NEXT:    lui a2, 5242882263; RV32IZFH-NEXT:    beqz s0, .LBB13_42264; RV32IZFH-NEXT:  # %bb.3:2265; RV32IZFH-NEXT:    mv a2, a12266; RV32IZFH-NEXT:  .LBB13_4:2267; RV32IZFH-NEXT:    lui a1, 3891202268; RV32IZFH-NEXT:    addi a1, a1, -12269; RV32IZFH-NEXT:    fmv.w.x fa5, a12270; RV32IZFH-NEXT:    flt.s a1, fa5, fs02271; RV32IZFH-NEXT:    beqz a1, .LBB13_62272; RV32IZFH-NEXT:  # %bb.5:2273; RV32IZFH-NEXT:    addi a2, a3, -12274; RV32IZFH-NEXT:  .LBB13_6:2275; RV32IZFH-NEXT:    feq.s a3, fs0, fs02276; RV32IZFH-NEXT:    neg a4, s02277; RV32IZFH-NEXT:    neg a5, a12278; RV32IZFH-NEXT:    neg a3, a32279; RV32IZFH-NEXT:    and a0, a4, a02280; RV32IZFH-NEXT:    and a1, a3, a22281; RV32IZFH-NEXT:    or a0, a5, a02282; RV32IZFH-NEXT:    and a0, a3, a02283; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2284; RV32IZFH-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2285; RV32IZFH-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload2286; RV32IZFH-NEXT:    addi sp, sp, 162287; RV32IZFH-NEXT:    ret2288;2289; RV64IZFH-LABEL: test_round_si64:2290; RV64IZFH:       # %bb.0:2291; RV64IZFH-NEXT:    fcvt.l.h a0, fa0, rmm2292; RV64IZFH-NEXT:    feq.h a1, fa0, fa02293; RV64IZFH-NEXT:    seqz a1, a12294; RV64IZFH-NEXT:    addi a1, a1, -12295; RV64IZFH-NEXT:    and a0, a1, a02296; RV64IZFH-NEXT:    ret2297;2298; RV32IZHINX-LABEL: test_round_si64:2299; RV32IZHINX:       # %bb.0:2300; RV32IZHINX-NEXT:    li a1, 252301; RV32IZHINX-NEXT:    slli a1, a1, 102302; RV32IZHINX-NEXT:    fabs.h a2, a02303; RV32IZHINX-NEXT:    flt.h a1, a2, a12304; RV32IZHINX-NEXT:    beqz a1, .LBB13_22305; RV32IZHINX-NEXT:  # %bb.1:2306; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rmm2307; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rmm2308; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a02309; RV32IZHINX-NEXT:  .LBB13_2:2310; RV32IZHINX-NEXT:    addi sp, sp, -162311; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2312; RV32IZHINX-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2313; RV32IZHINX-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2314; RV32IZHINX-NEXT:    fcvt.s.h s0, a02315; RV32IZHINX-NEXT:    lui a0, 9134082316; RV32IZHINX-NEXT:    fle.s s1, a0, s02317; RV32IZHINX-NEXT:    mv a0, s02318; RV32IZHINX-NEXT:    call __fixsfdi2319; RV32IZHINX-NEXT:    lui a3, 5242882320; RV32IZHINX-NEXT:    lui a2, 5242882321; RV32IZHINX-NEXT:    beqz s1, .LBB13_42322; RV32IZHINX-NEXT:  # %bb.3:2323; RV32IZHINX-NEXT:    mv a2, a12324; RV32IZHINX-NEXT:  .LBB13_4:2325; RV32IZHINX-NEXT:    lui a1, 3891202326; RV32IZHINX-NEXT:    addi a1, a1, -12327; RV32IZHINX-NEXT:    flt.s a1, a1, s02328; RV32IZHINX-NEXT:    beqz a1, .LBB13_62329; RV32IZHINX-NEXT:  # %bb.5:2330; RV32IZHINX-NEXT:    addi a2, a3, -12331; RV32IZHINX-NEXT:  .LBB13_6:2332; RV32IZHINX-NEXT:    feq.s a3, s0, s02333; RV32IZHINX-NEXT:    neg a4, s12334; RV32IZHINX-NEXT:    neg a5, a12335; RV32IZHINX-NEXT:    neg a3, a32336; RV32IZHINX-NEXT:    and a0, a4, a02337; RV32IZHINX-NEXT:    and a1, a3, a22338; RV32IZHINX-NEXT:    or a0, a5, a02339; RV32IZHINX-NEXT:    and a0, a3, a02340; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2341; RV32IZHINX-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2342; RV32IZHINX-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2343; RV32IZHINX-NEXT:    addi sp, sp, 162344; RV32IZHINX-NEXT:    ret2345;2346; RV64IZHINX-LABEL: test_round_si64:2347; RV64IZHINX:       # %bb.0:2348; RV64IZHINX-NEXT:    li a1, 252349; RV64IZHINX-NEXT:    slli a1, a1, 102350; RV64IZHINX-NEXT:    fabs.h a2, a02351; RV64IZHINX-NEXT:    flt.h a1, a2, a12352; RV64IZHINX-NEXT:    beqz a1, .LBB13_22353; RV64IZHINX-NEXT:  # %bb.1:2354; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rmm2355; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rmm2356; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a02357; RV64IZHINX-NEXT:  .LBB13_2:2358; RV64IZHINX-NEXT:    fcvt.l.h a1, a0, rtz2359; RV64IZHINX-NEXT:    feq.h a0, a0, a02360; RV64IZHINX-NEXT:    seqz a0, a02361; RV64IZHINX-NEXT:    addi a0, a0, -12362; RV64IZHINX-NEXT:    and a0, a0, a12363; RV64IZHINX-NEXT:    ret2364;2365; RV32IZFHMIN-LABEL: test_round_si64:2366; RV32IZFHMIN:       # %bb.0:2367; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa02368; RV32IZFHMIN-NEXT:    lui a0, 3072002369; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a02370; RV32IZFHMIN-NEXT:    fabs.s fa3, fa52371; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa42372; RV32IZFHMIN-NEXT:    beqz a0, .LBB13_22373; RV32IZFHMIN-NEXT:  # %bb.1:2374; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm2375; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rmm2376; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa52377; RV32IZFHMIN-NEXT:  .LBB13_2:2378; RV32IZFHMIN-NEXT:    addi sp, sp, -162379; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2380; RV32IZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2381; RV32IZFHMIN-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill2382; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa52383; RV32IZFHMIN-NEXT:    lui a0, 9134082384; RV32IZFHMIN-NEXT:    fcvt.s.h fs0, fa52385; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a02386; RV32IZFHMIN-NEXT:    fle.s s0, fa5, fs02387; RV32IZFHMIN-NEXT:    fmv.s fa0, fs02388; RV32IZFHMIN-NEXT:    call __fixsfdi2389; RV32IZFHMIN-NEXT:    lui a3, 5242882390; RV32IZFHMIN-NEXT:    lui a2, 5242882391; RV32IZFHMIN-NEXT:    beqz s0, .LBB13_42392; RV32IZFHMIN-NEXT:  # %bb.3:2393; RV32IZFHMIN-NEXT:    mv a2, a12394; RV32IZFHMIN-NEXT:  .LBB13_4:2395; RV32IZFHMIN-NEXT:    lui a1, 3891202396; RV32IZFHMIN-NEXT:    addi a1, a1, -12397; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a12398; RV32IZFHMIN-NEXT:    flt.s a1, fa5, fs02399; RV32IZFHMIN-NEXT:    beqz a1, .LBB13_62400; RV32IZFHMIN-NEXT:  # %bb.5:2401; RV32IZFHMIN-NEXT:    addi a2, a3, -12402; RV32IZFHMIN-NEXT:  .LBB13_6:2403; RV32IZFHMIN-NEXT:    feq.s a3, fs0, fs02404; RV32IZFHMIN-NEXT:    neg a4, s02405; RV32IZFHMIN-NEXT:    neg a5, a12406; RV32IZFHMIN-NEXT:    neg a3, a32407; RV32IZFHMIN-NEXT:    and a0, a4, a02408; RV32IZFHMIN-NEXT:    and a1, a3, a22409; RV32IZFHMIN-NEXT:    or a0, a5, a02410; RV32IZFHMIN-NEXT:    and a0, a3, a02411; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2412; RV32IZFHMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2413; RV32IZFHMIN-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload2414; RV32IZFHMIN-NEXT:    addi sp, sp, 162415; RV32IZFHMIN-NEXT:    ret2416;2417; RV64IZFHMIN-LABEL: test_round_si64:2418; RV64IZFHMIN:       # %bb.0:2419; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa02420; RV64IZFHMIN-NEXT:    lui a0, 3072002421; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a02422; RV64IZFHMIN-NEXT:    fabs.s fa3, fa52423; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa42424; RV64IZFHMIN-NEXT:    beqz a0, .LBB13_22425; RV64IZFHMIN-NEXT:  # %bb.1:2426; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm2427; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rmm2428; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa52429; RV64IZFHMIN-NEXT:  .LBB13_2:2430; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa52431; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa52432; RV64IZFHMIN-NEXT:    fcvt.l.s a0, fa5, rtz2433; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa52434; RV64IZFHMIN-NEXT:    seqz a1, a12435; RV64IZFHMIN-NEXT:    addi a1, a1, -12436; RV64IZFHMIN-NEXT:    and a0, a1, a02437; RV64IZFHMIN-NEXT:    ret2438;2439; RV32IZHINXMIN-LABEL: test_round_si64:2440; RV32IZHINXMIN:       # %bb.0:2441; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a02442; RV32IZHINXMIN-NEXT:    lui a1, 3072002443; RV32IZHINXMIN-NEXT:    fabs.s a2, a02444; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a12445; RV32IZHINXMIN-NEXT:    beqz a1, .LBB13_22446; RV32IZHINXMIN-NEXT:  # %bb.1:2447; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rmm2448; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rmm2449; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a02450; RV32IZHINXMIN-NEXT:  .LBB13_2:2451; RV32IZHINXMIN-NEXT:    addi sp, sp, -162452; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2453; RV32IZHINXMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2454; RV32IZHINXMIN-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2455; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a02456; RV32IZHINXMIN-NEXT:    fcvt.s.h s0, a02457; RV32IZHINXMIN-NEXT:    lui a0, 9134082458; RV32IZHINXMIN-NEXT:    fle.s s1, a0, s02459; RV32IZHINXMIN-NEXT:    mv a0, s02460; RV32IZHINXMIN-NEXT:    call __fixsfdi2461; RV32IZHINXMIN-NEXT:    lui a3, 5242882462; RV32IZHINXMIN-NEXT:    lui a2, 5242882463; RV32IZHINXMIN-NEXT:    beqz s1, .LBB13_42464; RV32IZHINXMIN-NEXT:  # %bb.3:2465; RV32IZHINXMIN-NEXT:    mv a2, a12466; RV32IZHINXMIN-NEXT:  .LBB13_4:2467; RV32IZHINXMIN-NEXT:    lui a1, 3891202468; RV32IZHINXMIN-NEXT:    addi a1, a1, -12469; RV32IZHINXMIN-NEXT:    flt.s a1, a1, s02470; RV32IZHINXMIN-NEXT:    beqz a1, .LBB13_62471; RV32IZHINXMIN-NEXT:  # %bb.5:2472; RV32IZHINXMIN-NEXT:    addi a2, a3, -12473; RV32IZHINXMIN-NEXT:  .LBB13_6:2474; RV32IZHINXMIN-NEXT:    feq.s a3, s0, s02475; RV32IZHINXMIN-NEXT:    neg a4, s12476; RV32IZHINXMIN-NEXT:    neg a5, a12477; RV32IZHINXMIN-NEXT:    neg a3, a32478; RV32IZHINXMIN-NEXT:    and a0, a4, a02479; RV32IZHINXMIN-NEXT:    and a1, a3, a22480; RV32IZHINXMIN-NEXT:    or a0, a5, a02481; RV32IZHINXMIN-NEXT:    and a0, a3, a02482; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2483; RV32IZHINXMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2484; RV32IZHINXMIN-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2485; RV32IZHINXMIN-NEXT:    addi sp, sp, 162486; RV32IZHINXMIN-NEXT:    ret2487;2488; RV64IZHINXMIN-LABEL: test_round_si64:2489; RV64IZHINXMIN:       # %bb.0:2490; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a02491; RV64IZHINXMIN-NEXT:    lui a1, 3072002492; RV64IZHINXMIN-NEXT:    fabs.s a2, a02493; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a12494; RV64IZHINXMIN-NEXT:    beqz a1, .LBB13_22495; RV64IZHINXMIN-NEXT:  # %bb.1:2496; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rmm2497; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rmm2498; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a02499; RV64IZHINXMIN-NEXT:  .LBB13_2:2500; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a02501; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a02502; RV64IZHINXMIN-NEXT:    fcvt.l.s a1, a0, rtz2503; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a02504; RV64IZHINXMIN-NEXT:    seqz a0, a02505; RV64IZHINXMIN-NEXT:    addi a0, a0, -12506; RV64IZHINXMIN-NEXT:    and a0, a0, a12507; RV64IZHINXMIN-NEXT:    ret2508  %a = call half @llvm.round.f16(half %x)2509  %b = call i64 @llvm.fptosi.sat.i64.f16(half %a)2510  ret i64 %b2511}2512 2513define signext i32 @test_round_ui32(half %x) {2514; CHECKIZFH-LABEL: test_round_ui32:2515; CHECKIZFH:       # %bb.0:2516; CHECKIZFH-NEXT:    fcvt.wu.h a0, fa0, rmm2517; CHECKIZFH-NEXT:    feq.h a1, fa0, fa02518; CHECKIZFH-NEXT:    seqz a1, a12519; CHECKIZFH-NEXT:    addi a1, a1, -12520; CHECKIZFH-NEXT:    and a0, a1, a02521; CHECKIZFH-NEXT:    ret2522;2523; RV32IZHINX-LABEL: test_round_ui32:2524; RV32IZHINX:       # %bb.0:2525; RV32IZHINX-NEXT:    li a1, 252526; RV32IZHINX-NEXT:    slli a1, a1, 102527; RV32IZHINX-NEXT:    fabs.h a2, a02528; RV32IZHINX-NEXT:    flt.h a1, a2, a12529; RV32IZHINX-NEXT:    beqz a1, .LBB14_22530; RV32IZHINX-NEXT:  # %bb.1:2531; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rmm2532; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rmm2533; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a02534; RV32IZHINX-NEXT:  .LBB14_2:2535; RV32IZHINX-NEXT:    fcvt.wu.h a1, a0, rtz2536; RV32IZHINX-NEXT:    feq.h a0, a0, a02537; RV32IZHINX-NEXT:    seqz a0, a02538; RV32IZHINX-NEXT:    addi a0, a0, -12539; RV32IZHINX-NEXT:    and a0, a0, a12540; RV32IZHINX-NEXT:    ret2541;2542; RV64IZHINX-LABEL: test_round_ui32:2543; RV64IZHINX:       # %bb.0:2544; RV64IZHINX-NEXT:    li a1, 252545; RV64IZHINX-NEXT:    slli a1, a1, 102546; RV64IZHINX-NEXT:    fabs.h a2, a02547; RV64IZHINX-NEXT:    flt.h a1, a2, a12548; RV64IZHINX-NEXT:    beqz a1, .LBB14_22549; RV64IZHINX-NEXT:  # %bb.1:2550; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rmm2551; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rmm2552; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a02553; RV64IZHINX-NEXT:  .LBB14_2:2554; RV64IZHINX-NEXT:    fcvt.wu.h a1, a0, rtz2555; RV64IZHINX-NEXT:    feq.h a0, a0, a02556; RV64IZHINX-NEXT:    seqz a0, a02557; RV64IZHINX-NEXT:    addiw a0, a0, -12558; RV64IZHINX-NEXT:    and a0, a1, a02559; RV64IZHINX-NEXT:    ret2560;2561; RV32IZFHMIN-LABEL: test_round_ui32:2562; RV32IZFHMIN:       # %bb.0:2563; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa02564; RV32IZFHMIN-NEXT:    lui a0, 3072002565; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a02566; RV32IZFHMIN-NEXT:    fabs.s fa3, fa52567; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa42568; RV32IZFHMIN-NEXT:    beqz a0, .LBB14_22569; RV32IZFHMIN-NEXT:  # %bb.1:2570; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm2571; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rmm2572; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa52573; RV32IZFHMIN-NEXT:  .LBB14_2:2574; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa52575; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa52576; RV32IZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz2577; RV32IZFHMIN-NEXT:    feq.s a1, fa5, fa52578; RV32IZFHMIN-NEXT:    seqz a1, a12579; RV32IZFHMIN-NEXT:    addi a1, a1, -12580; RV32IZFHMIN-NEXT:    and a0, a1, a02581; RV32IZFHMIN-NEXT:    ret2582;2583; RV64IZFHMIN-LABEL: test_round_ui32:2584; RV64IZFHMIN:       # %bb.0:2585; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa02586; RV64IZFHMIN-NEXT:    lui a0, 3072002587; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a02588; RV64IZFHMIN-NEXT:    fabs.s fa3, fa52589; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa42590; RV64IZFHMIN-NEXT:    beqz a0, .LBB14_22591; RV64IZFHMIN-NEXT:  # %bb.1:2592; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm2593; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rmm2594; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa52595; RV64IZFHMIN-NEXT:  .LBB14_2:2596; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa52597; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa52598; RV64IZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz2599; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa52600; RV64IZFHMIN-NEXT:    seqz a1, a12601; RV64IZFHMIN-NEXT:    addiw a1, a1, -12602; RV64IZFHMIN-NEXT:    and a0, a0, a12603; RV64IZFHMIN-NEXT:    ret2604;2605; RV32IZHINXMIN-LABEL: test_round_ui32:2606; RV32IZHINXMIN:       # %bb.0:2607; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a02608; RV32IZHINXMIN-NEXT:    lui a1, 3072002609; RV32IZHINXMIN-NEXT:    fabs.s a2, a02610; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a12611; RV32IZHINXMIN-NEXT:    beqz a1, .LBB14_22612; RV32IZHINXMIN-NEXT:  # %bb.1:2613; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rmm2614; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rmm2615; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a02616; RV32IZHINXMIN-NEXT:  .LBB14_2:2617; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a02618; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a02619; RV32IZHINXMIN-NEXT:    fcvt.wu.s a1, a0, rtz2620; RV32IZHINXMIN-NEXT:    feq.s a0, a0, a02621; RV32IZHINXMIN-NEXT:    seqz a0, a02622; RV32IZHINXMIN-NEXT:    addi a0, a0, -12623; RV32IZHINXMIN-NEXT:    and a0, a0, a12624; RV32IZHINXMIN-NEXT:    ret2625;2626; RV64IZHINXMIN-LABEL: test_round_ui32:2627; RV64IZHINXMIN:       # %bb.0:2628; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a02629; RV64IZHINXMIN-NEXT:    lui a1, 3072002630; RV64IZHINXMIN-NEXT:    fabs.s a2, a02631; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a12632; RV64IZHINXMIN-NEXT:    beqz a1, .LBB14_22633; RV64IZHINXMIN-NEXT:  # %bb.1:2634; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rmm2635; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rmm2636; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a02637; RV64IZHINXMIN-NEXT:  .LBB14_2:2638; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a02639; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a02640; RV64IZHINXMIN-NEXT:    fcvt.wu.s a1, a0, rtz2641; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a02642; RV64IZHINXMIN-NEXT:    seqz a0, a02643; RV64IZHINXMIN-NEXT:    addiw a0, a0, -12644; RV64IZHINXMIN-NEXT:    and a0, a1, a02645; RV64IZHINXMIN-NEXT:    ret2646  %a = call half @llvm.round.f16(half %x)2647  %b = call i32 @llvm.fptoui.sat.i32.f16(half %a)2648  ret i32 %b2649}2650 2651define i64 @test_round_ui64(half %x) nounwind {2652; RV32IZFH-LABEL: test_round_ui64:2653; RV32IZFH:       # %bb.0:2654; RV32IZFH-NEXT:    li a0, 252655; RV32IZFH-NEXT:    slli a0, a0, 102656; RV32IZFH-NEXT:    fmv.h.x fa5, a02657; RV32IZFH-NEXT:    fabs.h fa4, fa02658; RV32IZFH-NEXT:    flt.h a0, fa4, fa52659; RV32IZFH-NEXT:    beqz a0, .LBB15_22660; RV32IZFH-NEXT:  # %bb.1:2661; RV32IZFH-NEXT:    fcvt.w.h a0, fa0, rmm2662; RV32IZFH-NEXT:    fcvt.h.w fa5, a0, rmm2663; RV32IZFH-NEXT:    fsgnj.h fa0, fa5, fa02664; RV32IZFH-NEXT:  .LBB15_2:2665; RV32IZFH-NEXT:    addi sp, sp, -162666; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2667; RV32IZFH-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2668; RV32IZFH-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill2669; RV32IZFH-NEXT:    fcvt.s.h fs0, fa02670; RV32IZFH-NEXT:    fmv.w.x fa5, zero2671; RV32IZFH-NEXT:    fle.s a0, fa5, fs02672; RV32IZFH-NEXT:    neg s0, a02673; RV32IZFH-NEXT:    fmv.s fa0, fs02674; RV32IZFH-NEXT:    call __fixunssfdi2675; RV32IZFH-NEXT:    and a0, s0, a02676; RV32IZFH-NEXT:    lui a2, 3911682677; RV32IZFH-NEXT:    and a1, s0, a12678; RV32IZFH-NEXT:    addi a2, a2, -12679; RV32IZFH-NEXT:    fmv.w.x fa5, a22680; RV32IZFH-NEXT:    flt.s a2, fa5, fs02681; RV32IZFH-NEXT:    neg a2, a22682; RV32IZFH-NEXT:    or a0, a2, a02683; RV32IZFH-NEXT:    or a1, a2, a12684; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2685; RV32IZFH-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2686; RV32IZFH-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload2687; RV32IZFH-NEXT:    addi sp, sp, 162688; RV32IZFH-NEXT:    ret2689;2690; RV64IZFH-LABEL: test_round_ui64:2691; RV64IZFH:       # %bb.0:2692; RV64IZFH-NEXT:    fcvt.lu.h a0, fa0, rmm2693; RV64IZFH-NEXT:    feq.h a1, fa0, fa02694; RV64IZFH-NEXT:    seqz a1, a12695; RV64IZFH-NEXT:    addi a1, a1, -12696; RV64IZFH-NEXT:    and a0, a1, a02697; RV64IZFH-NEXT:    ret2698;2699; RV32IZHINX-LABEL: test_round_ui64:2700; RV32IZHINX:       # %bb.0:2701; RV32IZHINX-NEXT:    li a1, 252702; RV32IZHINX-NEXT:    slli a1, a1, 102703; RV32IZHINX-NEXT:    fabs.h a2, a02704; RV32IZHINX-NEXT:    flt.h a1, a2, a12705; RV32IZHINX-NEXT:    beqz a1, .LBB15_22706; RV32IZHINX-NEXT:  # %bb.1:2707; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rmm2708; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rmm2709; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a02710; RV32IZHINX-NEXT:  .LBB15_2:2711; RV32IZHINX-NEXT:    addi sp, sp, -162712; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2713; RV32IZHINX-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2714; RV32IZHINX-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2715; RV32IZHINX-NEXT:    fcvt.s.h s0, a02716; RV32IZHINX-NEXT:    fle.s a0, zero, s02717; RV32IZHINX-NEXT:    neg s1, a02718; RV32IZHINX-NEXT:    mv a0, s02719; RV32IZHINX-NEXT:    call __fixunssfdi2720; RV32IZHINX-NEXT:    and a0, s1, a02721; RV32IZHINX-NEXT:    lui a2, 3911682722; RV32IZHINX-NEXT:    and a1, s1, a12723; RV32IZHINX-NEXT:    addi a2, a2, -12724; RV32IZHINX-NEXT:    flt.s a2, a2, s02725; RV32IZHINX-NEXT:    neg a2, a22726; RV32IZHINX-NEXT:    or a0, a2, a02727; RV32IZHINX-NEXT:    or a1, a2, a12728; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2729; RV32IZHINX-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2730; RV32IZHINX-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2731; RV32IZHINX-NEXT:    addi sp, sp, 162732; RV32IZHINX-NEXT:    ret2733;2734; RV64IZHINX-LABEL: test_round_ui64:2735; RV64IZHINX:       # %bb.0:2736; RV64IZHINX-NEXT:    li a1, 252737; RV64IZHINX-NEXT:    slli a1, a1, 102738; RV64IZHINX-NEXT:    fabs.h a2, a02739; RV64IZHINX-NEXT:    flt.h a1, a2, a12740; RV64IZHINX-NEXT:    beqz a1, .LBB15_22741; RV64IZHINX-NEXT:  # %bb.1:2742; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rmm2743; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rmm2744; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a02745; RV64IZHINX-NEXT:  .LBB15_2:2746; RV64IZHINX-NEXT:    fcvt.lu.h a1, a0, rtz2747; RV64IZHINX-NEXT:    feq.h a0, a0, a02748; RV64IZHINX-NEXT:    seqz a0, a02749; RV64IZHINX-NEXT:    addi a0, a0, -12750; RV64IZHINX-NEXT:    and a0, a0, a12751; RV64IZHINX-NEXT:    ret2752;2753; RV32IZFHMIN-LABEL: test_round_ui64:2754; RV32IZFHMIN:       # %bb.0:2755; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa02756; RV32IZFHMIN-NEXT:    lui a0, 3072002757; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a02758; RV32IZFHMIN-NEXT:    fabs.s fa3, fa52759; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa42760; RV32IZFHMIN-NEXT:    beqz a0, .LBB15_22761; RV32IZFHMIN-NEXT:  # %bb.1:2762; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm2763; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rmm2764; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa52765; RV32IZFHMIN-NEXT:  .LBB15_2:2766; RV32IZFHMIN-NEXT:    addi sp, sp, -162767; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2768; RV32IZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2769; RV32IZFHMIN-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill2770; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa52771; RV32IZFHMIN-NEXT:    fcvt.s.h fs0, fa52772; RV32IZFHMIN-NEXT:    fmv.w.x fa5, zero2773; RV32IZFHMIN-NEXT:    fle.s a0, fa5, fs02774; RV32IZFHMIN-NEXT:    neg s0, a02775; RV32IZFHMIN-NEXT:    fmv.s fa0, fs02776; RV32IZFHMIN-NEXT:    call __fixunssfdi2777; RV32IZFHMIN-NEXT:    and a0, s0, a02778; RV32IZFHMIN-NEXT:    lui a2, 3911682779; RV32IZFHMIN-NEXT:    and a1, s0, a12780; RV32IZFHMIN-NEXT:    addi a2, a2, -12781; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a22782; RV32IZFHMIN-NEXT:    flt.s a2, fa5, fs02783; RV32IZFHMIN-NEXT:    neg a2, a22784; RV32IZFHMIN-NEXT:    or a0, a2, a02785; RV32IZFHMIN-NEXT:    or a1, a2, a12786; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2787; RV32IZFHMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2788; RV32IZFHMIN-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload2789; RV32IZFHMIN-NEXT:    addi sp, sp, 162790; RV32IZFHMIN-NEXT:    ret2791;2792; RV64IZFHMIN-LABEL: test_round_ui64:2793; RV64IZFHMIN:       # %bb.0:2794; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa02795; RV64IZFHMIN-NEXT:    lui a0, 3072002796; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a02797; RV64IZFHMIN-NEXT:    fabs.s fa3, fa52798; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa42799; RV64IZFHMIN-NEXT:    beqz a0, .LBB15_22800; RV64IZFHMIN-NEXT:  # %bb.1:2801; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm2802; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rmm2803; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa52804; RV64IZFHMIN-NEXT:  .LBB15_2:2805; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa52806; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa52807; RV64IZFHMIN-NEXT:    fcvt.lu.s a0, fa5, rtz2808; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa52809; RV64IZFHMIN-NEXT:    seqz a1, a12810; RV64IZFHMIN-NEXT:    addi a1, a1, -12811; RV64IZFHMIN-NEXT:    and a0, a1, a02812; RV64IZFHMIN-NEXT:    ret2813;2814; RV32IZHINXMIN-LABEL: test_round_ui64:2815; RV32IZHINXMIN:       # %bb.0:2816; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a02817; RV32IZHINXMIN-NEXT:    lui a1, 3072002818; RV32IZHINXMIN-NEXT:    fabs.s a2, a02819; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a12820; RV32IZHINXMIN-NEXT:    beqz a1, .LBB15_22821; RV32IZHINXMIN-NEXT:  # %bb.1:2822; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rmm2823; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rmm2824; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a02825; RV32IZHINXMIN-NEXT:  .LBB15_2:2826; RV32IZHINXMIN-NEXT:    addi sp, sp, -162827; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2828; RV32IZHINXMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2829; RV32IZHINXMIN-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill2830; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a02831; RV32IZHINXMIN-NEXT:    fcvt.s.h s0, a02832; RV32IZHINXMIN-NEXT:    fle.s a0, zero, s02833; RV32IZHINXMIN-NEXT:    neg s1, a02834; RV32IZHINXMIN-NEXT:    mv a0, s02835; RV32IZHINXMIN-NEXT:    call __fixunssfdi2836; RV32IZHINXMIN-NEXT:    and a0, s1, a02837; RV32IZHINXMIN-NEXT:    lui a2, 3911682838; RV32IZHINXMIN-NEXT:    and a1, s1, a12839; RV32IZHINXMIN-NEXT:    addi a2, a2, -12840; RV32IZHINXMIN-NEXT:    flt.s a2, a2, s02841; RV32IZHINXMIN-NEXT:    neg a2, a22842; RV32IZHINXMIN-NEXT:    or a0, a2, a02843; RV32IZHINXMIN-NEXT:    or a1, a2, a12844; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2845; RV32IZHINXMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2846; RV32IZHINXMIN-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload2847; RV32IZHINXMIN-NEXT:    addi sp, sp, 162848; RV32IZHINXMIN-NEXT:    ret2849;2850; RV64IZHINXMIN-LABEL: test_round_ui64:2851; RV64IZHINXMIN:       # %bb.0:2852; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a02853; RV64IZHINXMIN-NEXT:    lui a1, 3072002854; RV64IZHINXMIN-NEXT:    fabs.s a2, a02855; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a12856; RV64IZHINXMIN-NEXT:    beqz a1, .LBB15_22857; RV64IZHINXMIN-NEXT:  # %bb.1:2858; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rmm2859; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rmm2860; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a02861; RV64IZHINXMIN-NEXT:  .LBB15_2:2862; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a02863; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a02864; RV64IZHINXMIN-NEXT:    fcvt.lu.s a1, a0, rtz2865; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a02866; RV64IZHINXMIN-NEXT:    seqz a0, a02867; RV64IZHINXMIN-NEXT:    addi a0, a0, -12868; RV64IZHINXMIN-NEXT:    and a0, a0, a12869; RV64IZHINXMIN-NEXT:    ret2870  %a = call half @llvm.round.f16(half %x)2871  %b = call i64 @llvm.fptoui.sat.i64.f16(half %a)2872  ret i64 %b2873}2874 2875define signext i32 @test_roundeven_si32(half %x) {2876; CHECKIZFH-LABEL: test_roundeven_si32:2877; CHECKIZFH:       # %bb.0:2878; CHECKIZFH-NEXT:    fcvt.w.h a0, fa0, rne2879; CHECKIZFH-NEXT:    feq.h a1, fa0, fa02880; CHECKIZFH-NEXT:    seqz a1, a12881; CHECKIZFH-NEXT:    addi a1, a1, -12882; CHECKIZFH-NEXT:    and a0, a1, a02883; CHECKIZFH-NEXT:    ret2884;2885; CHECKIZHINX-LABEL: test_roundeven_si32:2886; CHECKIZHINX:       # %bb.0:2887; CHECKIZHINX-NEXT:    li a1, 252888; CHECKIZHINX-NEXT:    slli a1, a1, 102889; CHECKIZHINX-NEXT:    fabs.h a2, a02890; CHECKIZHINX-NEXT:    flt.h a1, a2, a12891; CHECKIZHINX-NEXT:    beqz a1, .LBB16_22892; CHECKIZHINX-NEXT:  # %bb.1:2893; CHECKIZHINX-NEXT:    fcvt.w.h a1, a0, rne2894; CHECKIZHINX-NEXT:    fcvt.h.w a1, a1, rne2895; CHECKIZHINX-NEXT:    fsgnj.h a0, a1, a02896; CHECKIZHINX-NEXT:  .LBB16_2:2897; CHECKIZHINX-NEXT:    fcvt.w.h a1, a0, rtz2898; CHECKIZHINX-NEXT:    feq.h a0, a0, a02899; CHECKIZHINX-NEXT:    seqz a0, a02900; CHECKIZHINX-NEXT:    addi a0, a0, -12901; CHECKIZHINX-NEXT:    and a0, a0, a12902; CHECKIZHINX-NEXT:    ret2903;2904; CHECKIZFHMIN-LABEL: test_roundeven_si32:2905; CHECKIZFHMIN:       # %bb.0:2906; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa02907; CHECKIZFHMIN-NEXT:    lui a0, 3072002908; CHECKIZFHMIN-NEXT:    fmv.w.x fa4, a02909; CHECKIZFHMIN-NEXT:    fabs.s fa3, fa52910; CHECKIZFHMIN-NEXT:    flt.s a0, fa3, fa42911; CHECKIZFHMIN-NEXT:    beqz a0, .LBB16_22912; CHECKIZFHMIN-NEXT:  # %bb.1:2913; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa5, rne2914; CHECKIZFHMIN-NEXT:    fcvt.s.w fa4, a0, rne2915; CHECKIZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa52916; CHECKIZFHMIN-NEXT:  .LBB16_2:2917; CHECKIZFHMIN-NEXT:    fcvt.h.s fa5, fa52918; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa52919; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz2920; CHECKIZFHMIN-NEXT:    feq.s a1, fa5, fa52921; CHECKIZFHMIN-NEXT:    seqz a1, a12922; CHECKIZFHMIN-NEXT:    addi a1, a1, -12923; CHECKIZFHMIN-NEXT:    and a0, a1, a02924; CHECKIZFHMIN-NEXT:    ret2925;2926; CHECKIZHINXMIN-LABEL: test_roundeven_si32:2927; CHECKIZHINXMIN:       # %bb.0:2928; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a02929; CHECKIZHINXMIN-NEXT:    lui a1, 3072002930; CHECKIZHINXMIN-NEXT:    fabs.s a2, a02931; CHECKIZHINXMIN-NEXT:    flt.s a1, a2, a12932; CHECKIZHINXMIN-NEXT:    beqz a1, .LBB16_22933; CHECKIZHINXMIN-NEXT:  # %bb.1:2934; CHECKIZHINXMIN-NEXT:    fcvt.w.s a1, a0, rne2935; CHECKIZHINXMIN-NEXT:    fcvt.s.w a1, a1, rne2936; CHECKIZHINXMIN-NEXT:    fsgnj.s a0, a1, a02937; CHECKIZHINXMIN-NEXT:  .LBB16_2:2938; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a02939; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a02940; CHECKIZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz2941; CHECKIZHINXMIN-NEXT:    feq.s a0, a0, a02942; CHECKIZHINXMIN-NEXT:    seqz a0, a02943; CHECKIZHINXMIN-NEXT:    addi a0, a0, -12944; CHECKIZHINXMIN-NEXT:    and a0, a0, a12945; CHECKIZHINXMIN-NEXT:    ret2946  %a = call half @llvm.roundeven.f16(half %x)2947  %b = call i32 @llvm.fptosi.sat.i32.f16(half %a)2948  ret i32 %b2949}2950 2951define i64 @test_roundeven_si64(half %x) nounwind {2952; RV32IZFH-LABEL: test_roundeven_si64:2953; RV32IZFH:       # %bb.0:2954; RV32IZFH-NEXT:    li a0, 252955; RV32IZFH-NEXT:    slli a0, a0, 102956; RV32IZFH-NEXT:    fmv.h.x fa5, a02957; RV32IZFH-NEXT:    fabs.h fa4, fa02958; RV32IZFH-NEXT:    flt.h a0, fa4, fa52959; RV32IZFH-NEXT:    beqz a0, .LBB17_22960; RV32IZFH-NEXT:  # %bb.1:2961; RV32IZFH-NEXT:    fcvt.w.h a0, fa0, rne2962; RV32IZFH-NEXT:    fcvt.h.w fa5, a0, rne2963; RV32IZFH-NEXT:    fsgnj.h fa0, fa5, fa02964; RV32IZFH-NEXT:  .LBB17_2:2965; RV32IZFH-NEXT:    addi sp, sp, -162966; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill2967; RV32IZFH-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill2968; RV32IZFH-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill2969; RV32IZFH-NEXT:    fcvt.s.h fs0, fa02970; RV32IZFH-NEXT:    lui a0, 9134082971; RV32IZFH-NEXT:    fmv.w.x fa5, a02972; RV32IZFH-NEXT:    fle.s s0, fa5, fs02973; RV32IZFH-NEXT:    fmv.s fa0, fs02974; RV32IZFH-NEXT:    call __fixsfdi2975; RV32IZFH-NEXT:    lui a3, 5242882976; RV32IZFH-NEXT:    lui a2, 5242882977; RV32IZFH-NEXT:    beqz s0, .LBB17_42978; RV32IZFH-NEXT:  # %bb.3:2979; RV32IZFH-NEXT:    mv a2, a12980; RV32IZFH-NEXT:  .LBB17_4:2981; RV32IZFH-NEXT:    lui a1, 3891202982; RV32IZFH-NEXT:    addi a1, a1, -12983; RV32IZFH-NEXT:    fmv.w.x fa5, a12984; RV32IZFH-NEXT:    flt.s a1, fa5, fs02985; RV32IZFH-NEXT:    beqz a1, .LBB17_62986; RV32IZFH-NEXT:  # %bb.5:2987; RV32IZFH-NEXT:    addi a2, a3, -12988; RV32IZFH-NEXT:  .LBB17_6:2989; RV32IZFH-NEXT:    feq.s a3, fs0, fs02990; RV32IZFH-NEXT:    neg a4, s02991; RV32IZFH-NEXT:    neg a5, a12992; RV32IZFH-NEXT:    neg a3, a32993; RV32IZFH-NEXT:    and a0, a4, a02994; RV32IZFH-NEXT:    and a1, a3, a22995; RV32IZFH-NEXT:    or a0, a5, a02996; RV32IZFH-NEXT:    and a0, a3, a02997; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload2998; RV32IZFH-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload2999; RV32IZFH-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload3000; RV32IZFH-NEXT:    addi sp, sp, 163001; RV32IZFH-NEXT:    ret3002;3003; RV64IZFH-LABEL: test_roundeven_si64:3004; RV64IZFH:       # %bb.0:3005; RV64IZFH-NEXT:    fcvt.l.h a0, fa0, rne3006; RV64IZFH-NEXT:    feq.h a1, fa0, fa03007; RV64IZFH-NEXT:    seqz a1, a13008; RV64IZFH-NEXT:    addi a1, a1, -13009; RV64IZFH-NEXT:    and a0, a1, a03010; RV64IZFH-NEXT:    ret3011;3012; RV32IZHINX-LABEL: test_roundeven_si64:3013; RV32IZHINX:       # %bb.0:3014; RV32IZHINX-NEXT:    li a1, 253015; RV32IZHINX-NEXT:    slli a1, a1, 103016; RV32IZHINX-NEXT:    fabs.h a2, a03017; RV32IZHINX-NEXT:    flt.h a1, a2, a13018; RV32IZHINX-NEXT:    beqz a1, .LBB17_23019; RV32IZHINX-NEXT:  # %bb.1:3020; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rne3021; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rne3022; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a03023; RV32IZHINX-NEXT:  .LBB17_2:3024; RV32IZHINX-NEXT:    addi sp, sp, -163025; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3026; RV32IZHINX-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3027; RV32IZHINX-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill3028; RV32IZHINX-NEXT:    fcvt.s.h s0, a03029; RV32IZHINX-NEXT:    lui a0, 9134083030; RV32IZHINX-NEXT:    fle.s s1, a0, s03031; RV32IZHINX-NEXT:    mv a0, s03032; RV32IZHINX-NEXT:    call __fixsfdi3033; RV32IZHINX-NEXT:    lui a3, 5242883034; RV32IZHINX-NEXT:    lui a2, 5242883035; RV32IZHINX-NEXT:    beqz s1, .LBB17_43036; RV32IZHINX-NEXT:  # %bb.3:3037; RV32IZHINX-NEXT:    mv a2, a13038; RV32IZHINX-NEXT:  .LBB17_4:3039; RV32IZHINX-NEXT:    lui a1, 3891203040; RV32IZHINX-NEXT:    addi a1, a1, -13041; RV32IZHINX-NEXT:    flt.s a1, a1, s03042; RV32IZHINX-NEXT:    beqz a1, .LBB17_63043; RV32IZHINX-NEXT:  # %bb.5:3044; RV32IZHINX-NEXT:    addi a2, a3, -13045; RV32IZHINX-NEXT:  .LBB17_6:3046; RV32IZHINX-NEXT:    feq.s a3, s0, s03047; RV32IZHINX-NEXT:    neg a4, s13048; RV32IZHINX-NEXT:    neg a5, a13049; RV32IZHINX-NEXT:    neg a3, a33050; RV32IZHINX-NEXT:    and a0, a4, a03051; RV32IZHINX-NEXT:    and a1, a3, a23052; RV32IZHINX-NEXT:    or a0, a5, a03053; RV32IZHINX-NEXT:    and a0, a3, a03054; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3055; RV32IZHINX-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3056; RV32IZHINX-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload3057; RV32IZHINX-NEXT:    addi sp, sp, 163058; RV32IZHINX-NEXT:    ret3059;3060; RV64IZHINX-LABEL: test_roundeven_si64:3061; RV64IZHINX:       # %bb.0:3062; RV64IZHINX-NEXT:    li a1, 253063; RV64IZHINX-NEXT:    slli a1, a1, 103064; RV64IZHINX-NEXT:    fabs.h a2, a03065; RV64IZHINX-NEXT:    flt.h a1, a2, a13066; RV64IZHINX-NEXT:    beqz a1, .LBB17_23067; RV64IZHINX-NEXT:  # %bb.1:3068; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rne3069; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rne3070; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a03071; RV64IZHINX-NEXT:  .LBB17_2:3072; RV64IZHINX-NEXT:    fcvt.l.h a1, a0, rtz3073; RV64IZHINX-NEXT:    feq.h a0, a0, a03074; RV64IZHINX-NEXT:    seqz a0, a03075; RV64IZHINX-NEXT:    addi a0, a0, -13076; RV64IZHINX-NEXT:    and a0, a0, a13077; RV64IZHINX-NEXT:    ret3078;3079; RV32IZFHMIN-LABEL: test_roundeven_si64:3080; RV32IZFHMIN:       # %bb.0:3081; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa03082; RV32IZFHMIN-NEXT:    lui a0, 3072003083; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a03084; RV32IZFHMIN-NEXT:    fabs.s fa3, fa53085; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa43086; RV32IZFHMIN-NEXT:    beqz a0, .LBB17_23087; RV32IZFHMIN-NEXT:  # %bb.1:3088; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rne3089; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rne3090; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa53091; RV32IZFHMIN-NEXT:  .LBB17_2:3092; RV32IZFHMIN-NEXT:    addi sp, sp, -163093; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3094; RV32IZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3095; RV32IZFHMIN-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill3096; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa53097; RV32IZFHMIN-NEXT:    lui a0, 9134083098; RV32IZFHMIN-NEXT:    fcvt.s.h fs0, fa53099; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a03100; RV32IZFHMIN-NEXT:    fle.s s0, fa5, fs03101; RV32IZFHMIN-NEXT:    fmv.s fa0, fs03102; RV32IZFHMIN-NEXT:    call __fixsfdi3103; RV32IZFHMIN-NEXT:    lui a3, 5242883104; RV32IZFHMIN-NEXT:    lui a2, 5242883105; RV32IZFHMIN-NEXT:    beqz s0, .LBB17_43106; RV32IZFHMIN-NEXT:  # %bb.3:3107; RV32IZFHMIN-NEXT:    mv a2, a13108; RV32IZFHMIN-NEXT:  .LBB17_4:3109; RV32IZFHMIN-NEXT:    lui a1, 3891203110; RV32IZFHMIN-NEXT:    addi a1, a1, -13111; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a13112; RV32IZFHMIN-NEXT:    flt.s a1, fa5, fs03113; RV32IZFHMIN-NEXT:    beqz a1, .LBB17_63114; RV32IZFHMIN-NEXT:  # %bb.5:3115; RV32IZFHMIN-NEXT:    addi a2, a3, -13116; RV32IZFHMIN-NEXT:  .LBB17_6:3117; RV32IZFHMIN-NEXT:    feq.s a3, fs0, fs03118; RV32IZFHMIN-NEXT:    neg a4, s03119; RV32IZFHMIN-NEXT:    neg a5, a13120; RV32IZFHMIN-NEXT:    neg a3, a33121; RV32IZFHMIN-NEXT:    and a0, a4, a03122; RV32IZFHMIN-NEXT:    and a1, a3, a23123; RV32IZFHMIN-NEXT:    or a0, a5, a03124; RV32IZFHMIN-NEXT:    and a0, a3, a03125; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3126; RV32IZFHMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3127; RV32IZFHMIN-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload3128; RV32IZFHMIN-NEXT:    addi sp, sp, 163129; RV32IZFHMIN-NEXT:    ret3130;3131; RV64IZFHMIN-LABEL: test_roundeven_si64:3132; RV64IZFHMIN:       # %bb.0:3133; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa03134; RV64IZFHMIN-NEXT:    lui a0, 3072003135; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a03136; RV64IZFHMIN-NEXT:    fabs.s fa3, fa53137; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa43138; RV64IZFHMIN-NEXT:    beqz a0, .LBB17_23139; RV64IZFHMIN-NEXT:  # %bb.1:3140; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rne3141; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rne3142; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa53143; RV64IZFHMIN-NEXT:  .LBB17_2:3144; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa53145; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa53146; RV64IZFHMIN-NEXT:    fcvt.l.s a0, fa5, rtz3147; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa53148; RV64IZFHMIN-NEXT:    seqz a1, a13149; RV64IZFHMIN-NEXT:    addi a1, a1, -13150; RV64IZFHMIN-NEXT:    and a0, a1, a03151; RV64IZFHMIN-NEXT:    ret3152;3153; RV32IZHINXMIN-LABEL: test_roundeven_si64:3154; RV32IZHINXMIN:       # %bb.0:3155; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a03156; RV32IZHINXMIN-NEXT:    lui a1, 3072003157; RV32IZHINXMIN-NEXT:    fabs.s a2, a03158; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a13159; RV32IZHINXMIN-NEXT:    beqz a1, .LBB17_23160; RV32IZHINXMIN-NEXT:  # %bb.1:3161; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rne3162; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rne3163; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a03164; RV32IZHINXMIN-NEXT:  .LBB17_2:3165; RV32IZHINXMIN-NEXT:    addi sp, sp, -163166; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3167; RV32IZHINXMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3168; RV32IZHINXMIN-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill3169; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a03170; RV32IZHINXMIN-NEXT:    fcvt.s.h s0, a03171; RV32IZHINXMIN-NEXT:    lui a0, 9134083172; RV32IZHINXMIN-NEXT:    fle.s s1, a0, s03173; RV32IZHINXMIN-NEXT:    mv a0, s03174; RV32IZHINXMIN-NEXT:    call __fixsfdi3175; RV32IZHINXMIN-NEXT:    lui a3, 5242883176; RV32IZHINXMIN-NEXT:    lui a2, 5242883177; RV32IZHINXMIN-NEXT:    beqz s1, .LBB17_43178; RV32IZHINXMIN-NEXT:  # %bb.3:3179; RV32IZHINXMIN-NEXT:    mv a2, a13180; RV32IZHINXMIN-NEXT:  .LBB17_4:3181; RV32IZHINXMIN-NEXT:    lui a1, 3891203182; RV32IZHINXMIN-NEXT:    addi a1, a1, -13183; RV32IZHINXMIN-NEXT:    flt.s a1, a1, s03184; RV32IZHINXMIN-NEXT:    beqz a1, .LBB17_63185; RV32IZHINXMIN-NEXT:  # %bb.5:3186; RV32IZHINXMIN-NEXT:    addi a2, a3, -13187; RV32IZHINXMIN-NEXT:  .LBB17_6:3188; RV32IZHINXMIN-NEXT:    feq.s a3, s0, s03189; RV32IZHINXMIN-NEXT:    neg a4, s13190; RV32IZHINXMIN-NEXT:    neg a5, a13191; RV32IZHINXMIN-NEXT:    neg a3, a33192; RV32IZHINXMIN-NEXT:    and a0, a4, a03193; RV32IZHINXMIN-NEXT:    and a1, a3, a23194; RV32IZHINXMIN-NEXT:    or a0, a5, a03195; RV32IZHINXMIN-NEXT:    and a0, a3, a03196; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3197; RV32IZHINXMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3198; RV32IZHINXMIN-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload3199; RV32IZHINXMIN-NEXT:    addi sp, sp, 163200; RV32IZHINXMIN-NEXT:    ret3201;3202; RV64IZHINXMIN-LABEL: test_roundeven_si64:3203; RV64IZHINXMIN:       # %bb.0:3204; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a03205; RV64IZHINXMIN-NEXT:    lui a1, 3072003206; RV64IZHINXMIN-NEXT:    fabs.s a2, a03207; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a13208; RV64IZHINXMIN-NEXT:    beqz a1, .LBB17_23209; RV64IZHINXMIN-NEXT:  # %bb.1:3210; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rne3211; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rne3212; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a03213; RV64IZHINXMIN-NEXT:  .LBB17_2:3214; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a03215; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a03216; RV64IZHINXMIN-NEXT:    fcvt.l.s a1, a0, rtz3217; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a03218; RV64IZHINXMIN-NEXT:    seqz a0, a03219; RV64IZHINXMIN-NEXT:    addi a0, a0, -13220; RV64IZHINXMIN-NEXT:    and a0, a0, a13221; RV64IZHINXMIN-NEXT:    ret3222  %a = call half @llvm.roundeven.f16(half %x)3223  %b = call i64 @llvm.fptosi.sat.i64.f16(half %a)3224  ret i64 %b3225}3226 3227define signext i32 @test_roundeven_ui32(half %x) {3228; CHECKIZFH-LABEL: test_roundeven_ui32:3229; CHECKIZFH:       # %bb.0:3230; CHECKIZFH-NEXT:    fcvt.wu.h a0, fa0, rne3231; CHECKIZFH-NEXT:    feq.h a1, fa0, fa03232; CHECKIZFH-NEXT:    seqz a1, a13233; CHECKIZFH-NEXT:    addi a1, a1, -13234; CHECKIZFH-NEXT:    and a0, a1, a03235; CHECKIZFH-NEXT:    ret3236;3237; RV32IZHINX-LABEL: test_roundeven_ui32:3238; RV32IZHINX:       # %bb.0:3239; RV32IZHINX-NEXT:    li a1, 253240; RV32IZHINX-NEXT:    slli a1, a1, 103241; RV32IZHINX-NEXT:    fabs.h a2, a03242; RV32IZHINX-NEXT:    flt.h a1, a2, a13243; RV32IZHINX-NEXT:    beqz a1, .LBB18_23244; RV32IZHINX-NEXT:  # %bb.1:3245; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rne3246; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rne3247; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a03248; RV32IZHINX-NEXT:  .LBB18_2:3249; RV32IZHINX-NEXT:    fcvt.wu.h a1, a0, rtz3250; RV32IZHINX-NEXT:    feq.h a0, a0, a03251; RV32IZHINX-NEXT:    seqz a0, a03252; RV32IZHINX-NEXT:    addi a0, a0, -13253; RV32IZHINX-NEXT:    and a0, a0, a13254; RV32IZHINX-NEXT:    ret3255;3256; RV64IZHINX-LABEL: test_roundeven_ui32:3257; RV64IZHINX:       # %bb.0:3258; RV64IZHINX-NEXT:    li a1, 253259; RV64IZHINX-NEXT:    slli a1, a1, 103260; RV64IZHINX-NEXT:    fabs.h a2, a03261; RV64IZHINX-NEXT:    flt.h a1, a2, a13262; RV64IZHINX-NEXT:    beqz a1, .LBB18_23263; RV64IZHINX-NEXT:  # %bb.1:3264; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rne3265; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rne3266; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a03267; RV64IZHINX-NEXT:  .LBB18_2:3268; RV64IZHINX-NEXT:    fcvt.wu.h a1, a0, rtz3269; RV64IZHINX-NEXT:    feq.h a0, a0, a03270; RV64IZHINX-NEXT:    seqz a0, a03271; RV64IZHINX-NEXT:    addiw a0, a0, -13272; RV64IZHINX-NEXT:    and a0, a1, a03273; RV64IZHINX-NEXT:    ret3274;3275; RV32IZFHMIN-LABEL: test_roundeven_ui32:3276; RV32IZFHMIN:       # %bb.0:3277; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa03278; RV32IZFHMIN-NEXT:    lui a0, 3072003279; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a03280; RV32IZFHMIN-NEXT:    fabs.s fa3, fa53281; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa43282; RV32IZFHMIN-NEXT:    beqz a0, .LBB18_23283; RV32IZFHMIN-NEXT:  # %bb.1:3284; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rne3285; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rne3286; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa53287; RV32IZFHMIN-NEXT:  .LBB18_2:3288; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa53289; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa53290; RV32IZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz3291; RV32IZFHMIN-NEXT:    feq.s a1, fa5, fa53292; RV32IZFHMIN-NEXT:    seqz a1, a13293; RV32IZFHMIN-NEXT:    addi a1, a1, -13294; RV32IZFHMIN-NEXT:    and a0, a1, a03295; RV32IZFHMIN-NEXT:    ret3296;3297; RV64IZFHMIN-LABEL: test_roundeven_ui32:3298; RV64IZFHMIN:       # %bb.0:3299; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa03300; RV64IZFHMIN-NEXT:    lui a0, 3072003301; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a03302; RV64IZFHMIN-NEXT:    fabs.s fa3, fa53303; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa43304; RV64IZFHMIN-NEXT:    beqz a0, .LBB18_23305; RV64IZFHMIN-NEXT:  # %bb.1:3306; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rne3307; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rne3308; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa53309; RV64IZFHMIN-NEXT:  .LBB18_2:3310; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa53311; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa53312; RV64IZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz3313; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa53314; RV64IZFHMIN-NEXT:    seqz a1, a13315; RV64IZFHMIN-NEXT:    addiw a1, a1, -13316; RV64IZFHMIN-NEXT:    and a0, a0, a13317; RV64IZFHMIN-NEXT:    ret3318;3319; RV32IZHINXMIN-LABEL: test_roundeven_ui32:3320; RV32IZHINXMIN:       # %bb.0:3321; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a03322; RV32IZHINXMIN-NEXT:    lui a1, 3072003323; RV32IZHINXMIN-NEXT:    fabs.s a2, a03324; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a13325; RV32IZHINXMIN-NEXT:    beqz a1, .LBB18_23326; RV32IZHINXMIN-NEXT:  # %bb.1:3327; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rne3328; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rne3329; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a03330; RV32IZHINXMIN-NEXT:  .LBB18_2:3331; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a03332; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a03333; RV32IZHINXMIN-NEXT:    fcvt.wu.s a1, a0, rtz3334; RV32IZHINXMIN-NEXT:    feq.s a0, a0, a03335; RV32IZHINXMIN-NEXT:    seqz a0, a03336; RV32IZHINXMIN-NEXT:    addi a0, a0, -13337; RV32IZHINXMIN-NEXT:    and a0, a0, a13338; RV32IZHINXMIN-NEXT:    ret3339;3340; RV64IZHINXMIN-LABEL: test_roundeven_ui32:3341; RV64IZHINXMIN:       # %bb.0:3342; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a03343; RV64IZHINXMIN-NEXT:    lui a1, 3072003344; RV64IZHINXMIN-NEXT:    fabs.s a2, a03345; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a13346; RV64IZHINXMIN-NEXT:    beqz a1, .LBB18_23347; RV64IZHINXMIN-NEXT:  # %bb.1:3348; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rne3349; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rne3350; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a03351; RV64IZHINXMIN-NEXT:  .LBB18_2:3352; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a03353; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a03354; RV64IZHINXMIN-NEXT:    fcvt.wu.s a1, a0, rtz3355; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a03356; RV64IZHINXMIN-NEXT:    seqz a0, a03357; RV64IZHINXMIN-NEXT:    addiw a0, a0, -13358; RV64IZHINXMIN-NEXT:    and a0, a1, a03359; RV64IZHINXMIN-NEXT:    ret3360  %a = call half @llvm.roundeven.f16(half %x)3361  %b = call i32 @llvm.fptoui.sat.i32.f16(half %a)3362  ret i32 %b3363}3364 3365define i64 @test_roundeven_ui64(half %x) nounwind {3366; RV32IZFH-LABEL: test_roundeven_ui64:3367; RV32IZFH:       # %bb.0:3368; RV32IZFH-NEXT:    li a0, 253369; RV32IZFH-NEXT:    slli a0, a0, 103370; RV32IZFH-NEXT:    fmv.h.x fa5, a03371; RV32IZFH-NEXT:    fabs.h fa4, fa03372; RV32IZFH-NEXT:    flt.h a0, fa4, fa53373; RV32IZFH-NEXT:    beqz a0, .LBB19_23374; RV32IZFH-NEXT:  # %bb.1:3375; RV32IZFH-NEXT:    fcvt.w.h a0, fa0, rne3376; RV32IZFH-NEXT:    fcvt.h.w fa5, a0, rne3377; RV32IZFH-NEXT:    fsgnj.h fa0, fa5, fa03378; RV32IZFH-NEXT:  .LBB19_2:3379; RV32IZFH-NEXT:    addi sp, sp, -163380; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3381; RV32IZFH-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3382; RV32IZFH-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill3383; RV32IZFH-NEXT:    fcvt.s.h fs0, fa03384; RV32IZFH-NEXT:    fmv.w.x fa5, zero3385; RV32IZFH-NEXT:    fle.s a0, fa5, fs03386; RV32IZFH-NEXT:    neg s0, a03387; RV32IZFH-NEXT:    fmv.s fa0, fs03388; RV32IZFH-NEXT:    call __fixunssfdi3389; RV32IZFH-NEXT:    and a0, s0, a03390; RV32IZFH-NEXT:    lui a2, 3911683391; RV32IZFH-NEXT:    and a1, s0, a13392; RV32IZFH-NEXT:    addi a2, a2, -13393; RV32IZFH-NEXT:    fmv.w.x fa5, a23394; RV32IZFH-NEXT:    flt.s a2, fa5, fs03395; RV32IZFH-NEXT:    neg a2, a23396; RV32IZFH-NEXT:    or a0, a2, a03397; RV32IZFH-NEXT:    or a1, a2, a13398; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3399; RV32IZFH-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3400; RV32IZFH-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload3401; RV32IZFH-NEXT:    addi sp, sp, 163402; RV32IZFH-NEXT:    ret3403;3404; RV64IZFH-LABEL: test_roundeven_ui64:3405; RV64IZFH:       # %bb.0:3406; RV64IZFH-NEXT:    fcvt.lu.h a0, fa0, rne3407; RV64IZFH-NEXT:    feq.h a1, fa0, fa03408; RV64IZFH-NEXT:    seqz a1, a13409; RV64IZFH-NEXT:    addi a1, a1, -13410; RV64IZFH-NEXT:    and a0, a1, a03411; RV64IZFH-NEXT:    ret3412;3413; RV32IZHINX-LABEL: test_roundeven_ui64:3414; RV32IZHINX:       # %bb.0:3415; RV32IZHINX-NEXT:    li a1, 253416; RV32IZHINX-NEXT:    slli a1, a1, 103417; RV32IZHINX-NEXT:    fabs.h a2, a03418; RV32IZHINX-NEXT:    flt.h a1, a2, a13419; RV32IZHINX-NEXT:    beqz a1, .LBB19_23420; RV32IZHINX-NEXT:  # %bb.1:3421; RV32IZHINX-NEXT:    fcvt.w.h a1, a0, rne3422; RV32IZHINX-NEXT:    fcvt.h.w a1, a1, rne3423; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a03424; RV32IZHINX-NEXT:  .LBB19_2:3425; RV32IZHINX-NEXT:    addi sp, sp, -163426; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3427; RV32IZHINX-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3428; RV32IZHINX-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill3429; RV32IZHINX-NEXT:    fcvt.s.h s0, a03430; RV32IZHINX-NEXT:    fle.s a0, zero, s03431; RV32IZHINX-NEXT:    neg s1, a03432; RV32IZHINX-NEXT:    mv a0, s03433; RV32IZHINX-NEXT:    call __fixunssfdi3434; RV32IZHINX-NEXT:    and a0, s1, a03435; RV32IZHINX-NEXT:    lui a2, 3911683436; RV32IZHINX-NEXT:    and a1, s1, a13437; RV32IZHINX-NEXT:    addi a2, a2, -13438; RV32IZHINX-NEXT:    flt.s a2, a2, s03439; RV32IZHINX-NEXT:    neg a2, a23440; RV32IZHINX-NEXT:    or a0, a2, a03441; RV32IZHINX-NEXT:    or a1, a2, a13442; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3443; RV32IZHINX-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3444; RV32IZHINX-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload3445; RV32IZHINX-NEXT:    addi sp, sp, 163446; RV32IZHINX-NEXT:    ret3447;3448; RV64IZHINX-LABEL: test_roundeven_ui64:3449; RV64IZHINX:       # %bb.0:3450; RV64IZHINX-NEXT:    li a1, 253451; RV64IZHINX-NEXT:    slli a1, a1, 103452; RV64IZHINX-NEXT:    fabs.h a2, a03453; RV64IZHINX-NEXT:    flt.h a1, a2, a13454; RV64IZHINX-NEXT:    beqz a1, .LBB19_23455; RV64IZHINX-NEXT:  # %bb.1:3456; RV64IZHINX-NEXT:    fcvt.w.h a1, a0, rne3457; RV64IZHINX-NEXT:    fcvt.h.w a1, a1, rne3458; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a03459; RV64IZHINX-NEXT:  .LBB19_2:3460; RV64IZHINX-NEXT:    fcvt.lu.h a1, a0, rtz3461; RV64IZHINX-NEXT:    feq.h a0, a0, a03462; RV64IZHINX-NEXT:    seqz a0, a03463; RV64IZHINX-NEXT:    addi a0, a0, -13464; RV64IZHINX-NEXT:    and a0, a0, a13465; RV64IZHINX-NEXT:    ret3466;3467; RV32IZFHMIN-LABEL: test_roundeven_ui64:3468; RV32IZFHMIN:       # %bb.0:3469; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa03470; RV32IZFHMIN-NEXT:    lui a0, 3072003471; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a03472; RV32IZFHMIN-NEXT:    fabs.s fa3, fa53473; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa43474; RV32IZFHMIN-NEXT:    beqz a0, .LBB19_23475; RV32IZFHMIN-NEXT:  # %bb.1:3476; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rne3477; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rne3478; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa53479; RV32IZFHMIN-NEXT:  .LBB19_2:3480; RV32IZFHMIN-NEXT:    addi sp, sp, -163481; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3482; RV32IZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3483; RV32IZFHMIN-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill3484; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa53485; RV32IZFHMIN-NEXT:    fcvt.s.h fs0, fa53486; RV32IZFHMIN-NEXT:    fmv.w.x fa5, zero3487; RV32IZFHMIN-NEXT:    fle.s a0, fa5, fs03488; RV32IZFHMIN-NEXT:    neg s0, a03489; RV32IZFHMIN-NEXT:    fmv.s fa0, fs03490; RV32IZFHMIN-NEXT:    call __fixunssfdi3491; RV32IZFHMIN-NEXT:    and a0, s0, a03492; RV32IZFHMIN-NEXT:    lui a2, 3911683493; RV32IZFHMIN-NEXT:    and a1, s0, a13494; RV32IZFHMIN-NEXT:    addi a2, a2, -13495; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a23496; RV32IZFHMIN-NEXT:    flt.s a2, fa5, fs03497; RV32IZFHMIN-NEXT:    neg a2, a23498; RV32IZFHMIN-NEXT:    or a0, a2, a03499; RV32IZFHMIN-NEXT:    or a1, a2, a13500; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3501; RV32IZFHMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3502; RV32IZFHMIN-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload3503; RV32IZFHMIN-NEXT:    addi sp, sp, 163504; RV32IZFHMIN-NEXT:    ret3505;3506; RV64IZFHMIN-LABEL: test_roundeven_ui64:3507; RV64IZFHMIN:       # %bb.0:3508; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa03509; RV64IZFHMIN-NEXT:    lui a0, 3072003510; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a03511; RV64IZFHMIN-NEXT:    fabs.s fa3, fa53512; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa43513; RV64IZFHMIN-NEXT:    beqz a0, .LBB19_23514; RV64IZFHMIN-NEXT:  # %bb.1:3515; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rne3516; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a0, rne3517; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa53518; RV64IZFHMIN-NEXT:  .LBB19_2:3519; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa53520; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa53521; RV64IZFHMIN-NEXT:    fcvt.lu.s a0, fa5, rtz3522; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa53523; RV64IZFHMIN-NEXT:    seqz a1, a13524; RV64IZFHMIN-NEXT:    addi a1, a1, -13525; RV64IZFHMIN-NEXT:    and a0, a1, a03526; RV64IZFHMIN-NEXT:    ret3527;3528; RV32IZHINXMIN-LABEL: test_roundeven_ui64:3529; RV32IZHINXMIN:       # %bb.0:3530; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a03531; RV32IZHINXMIN-NEXT:    lui a1, 3072003532; RV32IZHINXMIN-NEXT:    fabs.s a2, a03533; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a13534; RV32IZHINXMIN-NEXT:    beqz a1, .LBB19_23535; RV32IZHINXMIN-NEXT:  # %bb.1:3536; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rne3537; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rne3538; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a03539; RV32IZHINXMIN-NEXT:  .LBB19_2:3540; RV32IZHINXMIN-NEXT:    addi sp, sp, -163541; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3542; RV32IZHINXMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3543; RV32IZHINXMIN-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill3544; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a03545; RV32IZHINXMIN-NEXT:    fcvt.s.h s0, a03546; RV32IZHINXMIN-NEXT:    fle.s a0, zero, s03547; RV32IZHINXMIN-NEXT:    neg s1, a03548; RV32IZHINXMIN-NEXT:    mv a0, s03549; RV32IZHINXMIN-NEXT:    call __fixunssfdi3550; RV32IZHINXMIN-NEXT:    and a0, s1, a03551; RV32IZHINXMIN-NEXT:    lui a2, 3911683552; RV32IZHINXMIN-NEXT:    and a1, s1, a13553; RV32IZHINXMIN-NEXT:    addi a2, a2, -13554; RV32IZHINXMIN-NEXT:    flt.s a2, a2, s03555; RV32IZHINXMIN-NEXT:    neg a2, a23556; RV32IZHINXMIN-NEXT:    or a0, a2, a03557; RV32IZHINXMIN-NEXT:    or a1, a2, a13558; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3559; RV32IZHINXMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3560; RV32IZHINXMIN-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload3561; RV32IZHINXMIN-NEXT:    addi sp, sp, 163562; RV32IZHINXMIN-NEXT:    ret3563;3564; RV64IZHINXMIN-LABEL: test_roundeven_ui64:3565; RV64IZHINXMIN:       # %bb.0:3566; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a03567; RV64IZHINXMIN-NEXT:    lui a1, 3072003568; RV64IZHINXMIN-NEXT:    fabs.s a2, a03569; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a13570; RV64IZHINXMIN-NEXT:    beqz a1, .LBB19_23571; RV64IZHINXMIN-NEXT:  # %bb.1:3572; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a0, rne3573; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a1, rne3574; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a03575; RV64IZHINXMIN-NEXT:  .LBB19_2:3576; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a03577; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a03578; RV64IZHINXMIN-NEXT:    fcvt.lu.s a1, a0, rtz3579; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a03580; RV64IZHINXMIN-NEXT:    seqz a0, a03581; RV64IZHINXMIN-NEXT:    addi a0, a0, -13582; RV64IZHINXMIN-NEXT:    and a0, a0, a13583; RV64IZHINXMIN-NEXT:    ret3584  %a = call half @llvm.roundeven.f16(half %x)3585  %b = call i64 @llvm.fptoui.sat.i64.f16(half %a)3586  ret i64 %b3587}3588 3589define signext i32 @test_rint_si32(half %x) {3590; CHECKIZFH-LABEL: test_rint_si32:3591; CHECKIZFH:       # %bb.0:3592; CHECKIZFH-NEXT:    fcvt.w.h a0, fa03593; CHECKIZFH-NEXT:    feq.h a1, fa0, fa03594; CHECKIZFH-NEXT:    seqz a1, a13595; CHECKIZFH-NEXT:    addi a1, a1, -13596; CHECKIZFH-NEXT:    and a0, a1, a03597; CHECKIZFH-NEXT:    ret3598;3599; CHECKIZHINX-LABEL: test_rint_si32:3600; CHECKIZHINX:       # %bb.0:3601; CHECKIZHINX-NEXT:    li a1, 253602; CHECKIZHINX-NEXT:    slli a1, a1, 103603; CHECKIZHINX-NEXT:    fabs.h a2, a03604; CHECKIZHINX-NEXT:    flt.h a1, a2, a13605; CHECKIZHINX-NEXT:    beqz a1, .LBB20_23606; CHECKIZHINX-NEXT:  # %bb.1:3607; CHECKIZHINX-NEXT:    fcvt.w.h a1, a03608; CHECKIZHINX-NEXT:    fcvt.h.w a1, a13609; CHECKIZHINX-NEXT:    fsgnj.h a0, a1, a03610; CHECKIZHINX-NEXT:  .LBB20_2:3611; CHECKIZHINX-NEXT:    fcvt.w.h a1, a0, rtz3612; CHECKIZHINX-NEXT:    feq.h a0, a0, a03613; CHECKIZHINX-NEXT:    seqz a0, a03614; CHECKIZHINX-NEXT:    addi a0, a0, -13615; CHECKIZHINX-NEXT:    and a0, a0, a13616; CHECKIZHINX-NEXT:    ret3617;3618; CHECKIZFHMIN-LABEL: test_rint_si32:3619; CHECKIZFHMIN:       # %bb.0:3620; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa03621; CHECKIZFHMIN-NEXT:    lui a0, 3072003622; CHECKIZFHMIN-NEXT:    fmv.w.x fa4, a03623; CHECKIZFHMIN-NEXT:    fabs.s fa3, fa53624; CHECKIZFHMIN-NEXT:    flt.s a0, fa3, fa43625; CHECKIZFHMIN-NEXT:    beqz a0, .LBB20_23626; CHECKIZFHMIN-NEXT:  # %bb.1:3627; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa53628; CHECKIZFHMIN-NEXT:    fcvt.s.w fa4, a03629; CHECKIZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa53630; CHECKIZFHMIN-NEXT:  .LBB20_2:3631; CHECKIZFHMIN-NEXT:    fcvt.h.s fa5, fa53632; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa53633; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz3634; CHECKIZFHMIN-NEXT:    feq.s a1, fa5, fa53635; CHECKIZFHMIN-NEXT:    seqz a1, a13636; CHECKIZFHMIN-NEXT:    addi a1, a1, -13637; CHECKIZFHMIN-NEXT:    and a0, a1, a03638; CHECKIZFHMIN-NEXT:    ret3639;3640; CHECKIZHINXMIN-LABEL: test_rint_si32:3641; CHECKIZHINXMIN:       # %bb.0:3642; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a03643; CHECKIZHINXMIN-NEXT:    lui a1, 3072003644; CHECKIZHINXMIN-NEXT:    fabs.s a2, a03645; CHECKIZHINXMIN-NEXT:    flt.s a1, a2, a13646; CHECKIZHINXMIN-NEXT:    beqz a1, .LBB20_23647; CHECKIZHINXMIN-NEXT:  # %bb.1:3648; CHECKIZHINXMIN-NEXT:    fcvt.w.s a1, a03649; CHECKIZHINXMIN-NEXT:    fcvt.s.w a1, a13650; CHECKIZHINXMIN-NEXT:    fsgnj.s a0, a1, a03651; CHECKIZHINXMIN-NEXT:  .LBB20_2:3652; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a03653; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a03654; CHECKIZHINXMIN-NEXT:    fcvt.w.s a1, a0, rtz3655; CHECKIZHINXMIN-NEXT:    feq.s a0, a0, a03656; CHECKIZHINXMIN-NEXT:    seqz a0, a03657; CHECKIZHINXMIN-NEXT:    addi a0, a0, -13658; CHECKIZHINXMIN-NEXT:    and a0, a0, a13659; CHECKIZHINXMIN-NEXT:    ret3660  %a = call half @llvm.rint.f16(half %x)3661  %b = call i32 @llvm.fptosi.sat.i32.f16(half %a)3662  ret i32 %b3663}3664 3665define i64 @test_rint_si64(half %x) nounwind {3666; RV32IZFH-LABEL: test_rint_si64:3667; RV32IZFH:       # %bb.0:3668; RV32IZFH-NEXT:    li a0, 253669; RV32IZFH-NEXT:    slli a0, a0, 103670; RV32IZFH-NEXT:    fmv.h.x fa5, a03671; RV32IZFH-NEXT:    fabs.h fa4, fa03672; RV32IZFH-NEXT:    flt.h a0, fa4, fa53673; RV32IZFH-NEXT:    beqz a0, .LBB21_23674; RV32IZFH-NEXT:  # %bb.1:3675; RV32IZFH-NEXT:    fcvt.w.h a0, fa03676; RV32IZFH-NEXT:    fcvt.h.w fa5, a03677; RV32IZFH-NEXT:    fsgnj.h fa0, fa5, fa03678; RV32IZFH-NEXT:  .LBB21_2:3679; RV32IZFH-NEXT:    addi sp, sp, -163680; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3681; RV32IZFH-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3682; RV32IZFH-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill3683; RV32IZFH-NEXT:    fcvt.s.h fs0, fa03684; RV32IZFH-NEXT:    lui a0, 9134083685; RV32IZFH-NEXT:    fmv.w.x fa5, a03686; RV32IZFH-NEXT:    fle.s s0, fa5, fs03687; RV32IZFH-NEXT:    fmv.s fa0, fs03688; RV32IZFH-NEXT:    call __fixsfdi3689; RV32IZFH-NEXT:    lui a3, 5242883690; RV32IZFH-NEXT:    lui a2, 5242883691; RV32IZFH-NEXT:    beqz s0, .LBB21_43692; RV32IZFH-NEXT:  # %bb.3:3693; RV32IZFH-NEXT:    mv a2, a13694; RV32IZFH-NEXT:  .LBB21_4:3695; RV32IZFH-NEXT:    lui a1, 3891203696; RV32IZFH-NEXT:    addi a1, a1, -13697; RV32IZFH-NEXT:    fmv.w.x fa5, a13698; RV32IZFH-NEXT:    flt.s a1, fa5, fs03699; RV32IZFH-NEXT:    beqz a1, .LBB21_63700; RV32IZFH-NEXT:  # %bb.5:3701; RV32IZFH-NEXT:    addi a2, a3, -13702; RV32IZFH-NEXT:  .LBB21_6:3703; RV32IZFH-NEXT:    feq.s a3, fs0, fs03704; RV32IZFH-NEXT:    neg a4, s03705; RV32IZFH-NEXT:    neg a5, a13706; RV32IZFH-NEXT:    neg a3, a33707; RV32IZFH-NEXT:    and a0, a4, a03708; RV32IZFH-NEXT:    and a1, a3, a23709; RV32IZFH-NEXT:    or a0, a5, a03710; RV32IZFH-NEXT:    and a0, a3, a03711; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3712; RV32IZFH-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3713; RV32IZFH-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload3714; RV32IZFH-NEXT:    addi sp, sp, 163715; RV32IZFH-NEXT:    ret3716;3717; RV64IZFH-LABEL: test_rint_si64:3718; RV64IZFH:       # %bb.0:3719; RV64IZFH-NEXT:    fcvt.l.h a0, fa03720; RV64IZFH-NEXT:    feq.h a1, fa0, fa03721; RV64IZFH-NEXT:    seqz a1, a13722; RV64IZFH-NEXT:    addi a1, a1, -13723; RV64IZFH-NEXT:    and a0, a1, a03724; RV64IZFH-NEXT:    ret3725;3726; RV32IZHINX-LABEL: test_rint_si64:3727; RV32IZHINX:       # %bb.0:3728; RV32IZHINX-NEXT:    li a1, 253729; RV32IZHINX-NEXT:    slli a1, a1, 103730; RV32IZHINX-NEXT:    fabs.h a2, a03731; RV32IZHINX-NEXT:    flt.h a1, a2, a13732; RV32IZHINX-NEXT:    beqz a1, .LBB21_23733; RV32IZHINX-NEXT:  # %bb.1:3734; RV32IZHINX-NEXT:    fcvt.w.h a1, a03735; RV32IZHINX-NEXT:    fcvt.h.w a1, a13736; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a03737; RV32IZHINX-NEXT:  .LBB21_2:3738; RV32IZHINX-NEXT:    addi sp, sp, -163739; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3740; RV32IZHINX-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3741; RV32IZHINX-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill3742; RV32IZHINX-NEXT:    fcvt.s.h s0, a03743; RV32IZHINX-NEXT:    lui a0, 9134083744; RV32IZHINX-NEXT:    fle.s s1, a0, s03745; RV32IZHINX-NEXT:    mv a0, s03746; RV32IZHINX-NEXT:    call __fixsfdi3747; RV32IZHINX-NEXT:    lui a3, 5242883748; RV32IZHINX-NEXT:    lui a2, 5242883749; RV32IZHINX-NEXT:    beqz s1, .LBB21_43750; RV32IZHINX-NEXT:  # %bb.3:3751; RV32IZHINX-NEXT:    mv a2, a13752; RV32IZHINX-NEXT:  .LBB21_4:3753; RV32IZHINX-NEXT:    lui a1, 3891203754; RV32IZHINX-NEXT:    addi a1, a1, -13755; RV32IZHINX-NEXT:    flt.s a1, a1, s03756; RV32IZHINX-NEXT:    beqz a1, .LBB21_63757; RV32IZHINX-NEXT:  # %bb.5:3758; RV32IZHINX-NEXT:    addi a2, a3, -13759; RV32IZHINX-NEXT:  .LBB21_6:3760; RV32IZHINX-NEXT:    feq.s a3, s0, s03761; RV32IZHINX-NEXT:    neg a4, s13762; RV32IZHINX-NEXT:    neg a5, a13763; RV32IZHINX-NEXT:    neg a3, a33764; RV32IZHINX-NEXT:    and a0, a4, a03765; RV32IZHINX-NEXT:    and a1, a3, a23766; RV32IZHINX-NEXT:    or a0, a5, a03767; RV32IZHINX-NEXT:    and a0, a3, a03768; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3769; RV32IZHINX-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3770; RV32IZHINX-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload3771; RV32IZHINX-NEXT:    addi sp, sp, 163772; RV32IZHINX-NEXT:    ret3773;3774; RV64IZHINX-LABEL: test_rint_si64:3775; RV64IZHINX:       # %bb.0:3776; RV64IZHINX-NEXT:    li a1, 253777; RV64IZHINX-NEXT:    slli a1, a1, 103778; RV64IZHINX-NEXT:    fabs.h a2, a03779; RV64IZHINX-NEXT:    flt.h a1, a2, a13780; RV64IZHINX-NEXT:    beqz a1, .LBB21_23781; RV64IZHINX-NEXT:  # %bb.1:3782; RV64IZHINX-NEXT:    fcvt.w.h a1, a03783; RV64IZHINX-NEXT:    fcvt.h.w a1, a13784; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a03785; RV64IZHINX-NEXT:  .LBB21_2:3786; RV64IZHINX-NEXT:    fcvt.l.h a1, a0, rtz3787; RV64IZHINX-NEXT:    feq.h a0, a0, a03788; RV64IZHINX-NEXT:    seqz a0, a03789; RV64IZHINX-NEXT:    addi a0, a0, -13790; RV64IZHINX-NEXT:    and a0, a0, a13791; RV64IZHINX-NEXT:    ret3792;3793; RV32IZFHMIN-LABEL: test_rint_si64:3794; RV32IZFHMIN:       # %bb.0:3795; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa03796; RV32IZFHMIN-NEXT:    lui a0, 3072003797; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a03798; RV32IZFHMIN-NEXT:    fabs.s fa3, fa53799; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa43800; RV32IZFHMIN-NEXT:    beqz a0, .LBB21_23801; RV32IZFHMIN-NEXT:  # %bb.1:3802; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa53803; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a03804; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa53805; RV32IZFHMIN-NEXT:  .LBB21_2:3806; RV32IZFHMIN-NEXT:    addi sp, sp, -163807; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3808; RV32IZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3809; RV32IZFHMIN-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill3810; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa53811; RV32IZFHMIN-NEXT:    lui a0, 9134083812; RV32IZFHMIN-NEXT:    fcvt.s.h fs0, fa53813; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a03814; RV32IZFHMIN-NEXT:    fle.s s0, fa5, fs03815; RV32IZFHMIN-NEXT:    fmv.s fa0, fs03816; RV32IZFHMIN-NEXT:    call __fixsfdi3817; RV32IZFHMIN-NEXT:    lui a3, 5242883818; RV32IZFHMIN-NEXT:    lui a2, 5242883819; RV32IZFHMIN-NEXT:    beqz s0, .LBB21_43820; RV32IZFHMIN-NEXT:  # %bb.3:3821; RV32IZFHMIN-NEXT:    mv a2, a13822; RV32IZFHMIN-NEXT:  .LBB21_4:3823; RV32IZFHMIN-NEXT:    lui a1, 3891203824; RV32IZFHMIN-NEXT:    addi a1, a1, -13825; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a13826; RV32IZFHMIN-NEXT:    flt.s a1, fa5, fs03827; RV32IZFHMIN-NEXT:    beqz a1, .LBB21_63828; RV32IZFHMIN-NEXT:  # %bb.5:3829; RV32IZFHMIN-NEXT:    addi a2, a3, -13830; RV32IZFHMIN-NEXT:  .LBB21_6:3831; RV32IZFHMIN-NEXT:    feq.s a3, fs0, fs03832; RV32IZFHMIN-NEXT:    neg a4, s03833; RV32IZFHMIN-NEXT:    neg a5, a13834; RV32IZFHMIN-NEXT:    neg a3, a33835; RV32IZFHMIN-NEXT:    and a0, a4, a03836; RV32IZFHMIN-NEXT:    and a1, a3, a23837; RV32IZFHMIN-NEXT:    or a0, a5, a03838; RV32IZFHMIN-NEXT:    and a0, a3, a03839; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3840; RV32IZFHMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3841; RV32IZFHMIN-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload3842; RV32IZFHMIN-NEXT:    addi sp, sp, 163843; RV32IZFHMIN-NEXT:    ret3844;3845; RV64IZFHMIN-LABEL: test_rint_si64:3846; RV64IZFHMIN:       # %bb.0:3847; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa03848; RV64IZFHMIN-NEXT:    lui a0, 3072003849; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a03850; RV64IZFHMIN-NEXT:    fabs.s fa3, fa53851; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa43852; RV64IZFHMIN-NEXT:    beqz a0, .LBB21_23853; RV64IZFHMIN-NEXT:  # %bb.1:3854; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa53855; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a03856; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa53857; RV64IZFHMIN-NEXT:  .LBB21_2:3858; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa53859; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa53860; RV64IZFHMIN-NEXT:    fcvt.l.s a0, fa5, rtz3861; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa53862; RV64IZFHMIN-NEXT:    seqz a1, a13863; RV64IZFHMIN-NEXT:    addi a1, a1, -13864; RV64IZFHMIN-NEXT:    and a0, a1, a03865; RV64IZFHMIN-NEXT:    ret3866;3867; RV32IZHINXMIN-LABEL: test_rint_si64:3868; RV32IZHINXMIN:       # %bb.0:3869; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a03870; RV32IZHINXMIN-NEXT:    lui a1, 3072003871; RV32IZHINXMIN-NEXT:    fabs.s a2, a03872; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a13873; RV32IZHINXMIN-NEXT:    beqz a1, .LBB21_23874; RV32IZHINXMIN-NEXT:  # %bb.1:3875; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a03876; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a13877; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a03878; RV32IZHINXMIN-NEXT:  .LBB21_2:3879; RV32IZHINXMIN-NEXT:    addi sp, sp, -163880; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill3881; RV32IZHINXMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill3882; RV32IZHINXMIN-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill3883; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a03884; RV32IZHINXMIN-NEXT:    fcvt.s.h s0, a03885; RV32IZHINXMIN-NEXT:    lui a0, 9134083886; RV32IZHINXMIN-NEXT:    fle.s s1, a0, s03887; RV32IZHINXMIN-NEXT:    mv a0, s03888; RV32IZHINXMIN-NEXT:    call __fixsfdi3889; RV32IZHINXMIN-NEXT:    lui a3, 5242883890; RV32IZHINXMIN-NEXT:    lui a2, 5242883891; RV32IZHINXMIN-NEXT:    beqz s1, .LBB21_43892; RV32IZHINXMIN-NEXT:  # %bb.3:3893; RV32IZHINXMIN-NEXT:    mv a2, a13894; RV32IZHINXMIN-NEXT:  .LBB21_4:3895; RV32IZHINXMIN-NEXT:    lui a1, 3891203896; RV32IZHINXMIN-NEXT:    addi a1, a1, -13897; RV32IZHINXMIN-NEXT:    flt.s a1, a1, s03898; RV32IZHINXMIN-NEXT:    beqz a1, .LBB21_63899; RV32IZHINXMIN-NEXT:  # %bb.5:3900; RV32IZHINXMIN-NEXT:    addi a2, a3, -13901; RV32IZHINXMIN-NEXT:  .LBB21_6:3902; RV32IZHINXMIN-NEXT:    feq.s a3, s0, s03903; RV32IZHINXMIN-NEXT:    neg a4, s13904; RV32IZHINXMIN-NEXT:    neg a5, a13905; RV32IZHINXMIN-NEXT:    neg a3, a33906; RV32IZHINXMIN-NEXT:    and a0, a4, a03907; RV32IZHINXMIN-NEXT:    and a1, a3, a23908; RV32IZHINXMIN-NEXT:    or a0, a5, a03909; RV32IZHINXMIN-NEXT:    and a0, a3, a03910; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload3911; RV32IZHINXMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload3912; RV32IZHINXMIN-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload3913; RV32IZHINXMIN-NEXT:    addi sp, sp, 163914; RV32IZHINXMIN-NEXT:    ret3915;3916; RV64IZHINXMIN-LABEL: test_rint_si64:3917; RV64IZHINXMIN:       # %bb.0:3918; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a03919; RV64IZHINXMIN-NEXT:    lui a1, 3072003920; RV64IZHINXMIN-NEXT:    fabs.s a2, a03921; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a13922; RV64IZHINXMIN-NEXT:    beqz a1, .LBB21_23923; RV64IZHINXMIN-NEXT:  # %bb.1:3924; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a03925; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a13926; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a03927; RV64IZHINXMIN-NEXT:  .LBB21_2:3928; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a03929; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a03930; RV64IZHINXMIN-NEXT:    fcvt.l.s a1, a0, rtz3931; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a03932; RV64IZHINXMIN-NEXT:    seqz a0, a03933; RV64IZHINXMIN-NEXT:    addi a0, a0, -13934; RV64IZHINXMIN-NEXT:    and a0, a0, a13935; RV64IZHINXMIN-NEXT:    ret3936  %a = call half @llvm.rint.f16(half %x)3937  %b = call i64 @llvm.fptosi.sat.i64.f16(half %a)3938  ret i64 %b3939}3940 3941define signext i32 @test_rint_ui32(half %x) {3942; CHECKIZFH-LABEL: test_rint_ui32:3943; CHECKIZFH:       # %bb.0:3944; CHECKIZFH-NEXT:    fcvt.wu.h a0, fa03945; CHECKIZFH-NEXT:    feq.h a1, fa0, fa03946; CHECKIZFH-NEXT:    seqz a1, a13947; CHECKIZFH-NEXT:    addi a1, a1, -13948; CHECKIZFH-NEXT:    and a0, a1, a03949; CHECKIZFH-NEXT:    ret3950;3951; RV32IZHINX-LABEL: test_rint_ui32:3952; RV32IZHINX:       # %bb.0:3953; RV32IZHINX-NEXT:    li a1, 253954; RV32IZHINX-NEXT:    slli a1, a1, 103955; RV32IZHINX-NEXT:    fabs.h a2, a03956; RV32IZHINX-NEXT:    flt.h a1, a2, a13957; RV32IZHINX-NEXT:    beqz a1, .LBB22_23958; RV32IZHINX-NEXT:  # %bb.1:3959; RV32IZHINX-NEXT:    fcvt.w.h a1, a03960; RV32IZHINX-NEXT:    fcvt.h.w a1, a13961; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a03962; RV32IZHINX-NEXT:  .LBB22_2:3963; RV32IZHINX-NEXT:    fcvt.wu.h a1, a0, rtz3964; RV32IZHINX-NEXT:    feq.h a0, a0, a03965; RV32IZHINX-NEXT:    seqz a0, a03966; RV32IZHINX-NEXT:    addi a0, a0, -13967; RV32IZHINX-NEXT:    and a0, a0, a13968; RV32IZHINX-NEXT:    ret3969;3970; RV64IZHINX-LABEL: test_rint_ui32:3971; RV64IZHINX:       # %bb.0:3972; RV64IZHINX-NEXT:    li a1, 253973; RV64IZHINX-NEXT:    slli a1, a1, 103974; RV64IZHINX-NEXT:    fabs.h a2, a03975; RV64IZHINX-NEXT:    flt.h a1, a2, a13976; RV64IZHINX-NEXT:    beqz a1, .LBB22_23977; RV64IZHINX-NEXT:  # %bb.1:3978; RV64IZHINX-NEXT:    fcvt.w.h a1, a03979; RV64IZHINX-NEXT:    fcvt.h.w a1, a13980; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a03981; RV64IZHINX-NEXT:  .LBB22_2:3982; RV64IZHINX-NEXT:    fcvt.wu.h a1, a0, rtz3983; RV64IZHINX-NEXT:    feq.h a0, a0, a03984; RV64IZHINX-NEXT:    seqz a0, a03985; RV64IZHINX-NEXT:    addiw a0, a0, -13986; RV64IZHINX-NEXT:    and a0, a1, a03987; RV64IZHINX-NEXT:    ret3988;3989; RV32IZFHMIN-LABEL: test_rint_ui32:3990; RV32IZFHMIN:       # %bb.0:3991; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa03992; RV32IZFHMIN-NEXT:    lui a0, 3072003993; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a03994; RV32IZFHMIN-NEXT:    fabs.s fa3, fa53995; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa43996; RV32IZFHMIN-NEXT:    beqz a0, .LBB22_23997; RV32IZFHMIN-NEXT:  # %bb.1:3998; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa53999; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a04000; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa54001; RV32IZFHMIN-NEXT:  .LBB22_2:4002; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa54003; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa54004; RV32IZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz4005; RV32IZFHMIN-NEXT:    feq.s a1, fa5, fa54006; RV32IZFHMIN-NEXT:    seqz a1, a14007; RV32IZFHMIN-NEXT:    addi a1, a1, -14008; RV32IZFHMIN-NEXT:    and a0, a1, a04009; RV32IZFHMIN-NEXT:    ret4010;4011; RV64IZFHMIN-LABEL: test_rint_ui32:4012; RV64IZFHMIN:       # %bb.0:4013; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa04014; RV64IZFHMIN-NEXT:    lui a0, 3072004015; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a04016; RV64IZFHMIN-NEXT:    fabs.s fa3, fa54017; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa44018; RV64IZFHMIN-NEXT:    beqz a0, .LBB22_24019; RV64IZFHMIN-NEXT:  # %bb.1:4020; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa54021; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a04022; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa54023; RV64IZFHMIN-NEXT:  .LBB22_2:4024; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa54025; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa54026; RV64IZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz4027; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa54028; RV64IZFHMIN-NEXT:    seqz a1, a14029; RV64IZFHMIN-NEXT:    addiw a1, a1, -14030; RV64IZFHMIN-NEXT:    and a0, a0, a14031; RV64IZFHMIN-NEXT:    ret4032;4033; RV32IZHINXMIN-LABEL: test_rint_ui32:4034; RV32IZHINXMIN:       # %bb.0:4035; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a04036; RV32IZHINXMIN-NEXT:    lui a1, 3072004037; RV32IZHINXMIN-NEXT:    fabs.s a2, a04038; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a14039; RV32IZHINXMIN-NEXT:    beqz a1, .LBB22_24040; RV32IZHINXMIN-NEXT:  # %bb.1:4041; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a04042; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a14043; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a04044; RV32IZHINXMIN-NEXT:  .LBB22_2:4045; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a04046; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a04047; RV32IZHINXMIN-NEXT:    fcvt.wu.s a1, a0, rtz4048; RV32IZHINXMIN-NEXT:    feq.s a0, a0, a04049; RV32IZHINXMIN-NEXT:    seqz a0, a04050; RV32IZHINXMIN-NEXT:    addi a0, a0, -14051; RV32IZHINXMIN-NEXT:    and a0, a0, a14052; RV32IZHINXMIN-NEXT:    ret4053;4054; RV64IZHINXMIN-LABEL: test_rint_ui32:4055; RV64IZHINXMIN:       # %bb.0:4056; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a04057; RV64IZHINXMIN-NEXT:    lui a1, 3072004058; RV64IZHINXMIN-NEXT:    fabs.s a2, a04059; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a14060; RV64IZHINXMIN-NEXT:    beqz a1, .LBB22_24061; RV64IZHINXMIN-NEXT:  # %bb.1:4062; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a04063; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a14064; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a04065; RV64IZHINXMIN-NEXT:  .LBB22_2:4066; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a04067; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a04068; RV64IZHINXMIN-NEXT:    fcvt.wu.s a1, a0, rtz4069; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a04070; RV64IZHINXMIN-NEXT:    seqz a0, a04071; RV64IZHINXMIN-NEXT:    addiw a0, a0, -14072; RV64IZHINXMIN-NEXT:    and a0, a1, a04073; RV64IZHINXMIN-NEXT:    ret4074  %a = call half @llvm.rint.f16(half %x)4075  %b = call i32 @llvm.fptoui.sat.i32.f16(half %a)4076  ret i32 %b4077}4078 4079define i64 @test_rint_ui64(half %x) nounwind {4080; RV32IZFH-LABEL: test_rint_ui64:4081; RV32IZFH:       # %bb.0:4082; RV32IZFH-NEXT:    li a0, 254083; RV32IZFH-NEXT:    slli a0, a0, 104084; RV32IZFH-NEXT:    fmv.h.x fa5, a04085; RV32IZFH-NEXT:    fabs.h fa4, fa04086; RV32IZFH-NEXT:    flt.h a0, fa4, fa54087; RV32IZFH-NEXT:    beqz a0, .LBB23_24088; RV32IZFH-NEXT:  # %bb.1:4089; RV32IZFH-NEXT:    fcvt.w.h a0, fa04090; RV32IZFH-NEXT:    fcvt.h.w fa5, a04091; RV32IZFH-NEXT:    fsgnj.h fa0, fa5, fa04092; RV32IZFH-NEXT:  .LBB23_2:4093; RV32IZFH-NEXT:    addi sp, sp, -164094; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4095; RV32IZFH-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill4096; RV32IZFH-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill4097; RV32IZFH-NEXT:    fcvt.s.h fs0, fa04098; RV32IZFH-NEXT:    fmv.w.x fa5, zero4099; RV32IZFH-NEXT:    fle.s a0, fa5, fs04100; RV32IZFH-NEXT:    neg s0, a04101; RV32IZFH-NEXT:    fmv.s fa0, fs04102; RV32IZFH-NEXT:    call __fixunssfdi4103; RV32IZFH-NEXT:    and a0, s0, a04104; RV32IZFH-NEXT:    lui a2, 3911684105; RV32IZFH-NEXT:    and a1, s0, a14106; RV32IZFH-NEXT:    addi a2, a2, -14107; RV32IZFH-NEXT:    fmv.w.x fa5, a24108; RV32IZFH-NEXT:    flt.s a2, fa5, fs04109; RV32IZFH-NEXT:    neg a2, a24110; RV32IZFH-NEXT:    or a0, a2, a04111; RV32IZFH-NEXT:    or a1, a2, a14112; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4113; RV32IZFH-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload4114; RV32IZFH-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload4115; RV32IZFH-NEXT:    addi sp, sp, 164116; RV32IZFH-NEXT:    ret4117;4118; RV64IZFH-LABEL: test_rint_ui64:4119; RV64IZFH:       # %bb.0:4120; RV64IZFH-NEXT:    fcvt.lu.h a0, fa04121; RV64IZFH-NEXT:    feq.h a1, fa0, fa04122; RV64IZFH-NEXT:    seqz a1, a14123; RV64IZFH-NEXT:    addi a1, a1, -14124; RV64IZFH-NEXT:    and a0, a1, a04125; RV64IZFH-NEXT:    ret4126;4127; RV32IZHINX-LABEL: test_rint_ui64:4128; RV32IZHINX:       # %bb.0:4129; RV32IZHINX-NEXT:    li a1, 254130; RV32IZHINX-NEXT:    slli a1, a1, 104131; RV32IZHINX-NEXT:    fabs.h a2, a04132; RV32IZHINX-NEXT:    flt.h a1, a2, a14133; RV32IZHINX-NEXT:    beqz a1, .LBB23_24134; RV32IZHINX-NEXT:  # %bb.1:4135; RV32IZHINX-NEXT:    fcvt.w.h a1, a04136; RV32IZHINX-NEXT:    fcvt.h.w a1, a14137; RV32IZHINX-NEXT:    fsgnj.h a0, a1, a04138; RV32IZHINX-NEXT:  .LBB23_2:4139; RV32IZHINX-NEXT:    addi sp, sp, -164140; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4141; RV32IZHINX-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill4142; RV32IZHINX-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill4143; RV32IZHINX-NEXT:    fcvt.s.h s0, a04144; RV32IZHINX-NEXT:    fle.s a0, zero, s04145; RV32IZHINX-NEXT:    neg s1, a04146; RV32IZHINX-NEXT:    mv a0, s04147; RV32IZHINX-NEXT:    call __fixunssfdi4148; RV32IZHINX-NEXT:    and a0, s1, a04149; RV32IZHINX-NEXT:    lui a2, 3911684150; RV32IZHINX-NEXT:    and a1, s1, a14151; RV32IZHINX-NEXT:    addi a2, a2, -14152; RV32IZHINX-NEXT:    flt.s a2, a2, s04153; RV32IZHINX-NEXT:    neg a2, a24154; RV32IZHINX-NEXT:    or a0, a2, a04155; RV32IZHINX-NEXT:    or a1, a2, a14156; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4157; RV32IZHINX-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload4158; RV32IZHINX-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload4159; RV32IZHINX-NEXT:    addi sp, sp, 164160; RV32IZHINX-NEXT:    ret4161;4162; RV64IZHINX-LABEL: test_rint_ui64:4163; RV64IZHINX:       # %bb.0:4164; RV64IZHINX-NEXT:    li a1, 254165; RV64IZHINX-NEXT:    slli a1, a1, 104166; RV64IZHINX-NEXT:    fabs.h a2, a04167; RV64IZHINX-NEXT:    flt.h a1, a2, a14168; RV64IZHINX-NEXT:    beqz a1, .LBB23_24169; RV64IZHINX-NEXT:  # %bb.1:4170; RV64IZHINX-NEXT:    fcvt.w.h a1, a04171; RV64IZHINX-NEXT:    fcvt.h.w a1, a14172; RV64IZHINX-NEXT:    fsgnj.h a0, a1, a04173; RV64IZHINX-NEXT:  .LBB23_2:4174; RV64IZHINX-NEXT:    fcvt.lu.h a1, a0, rtz4175; RV64IZHINX-NEXT:    feq.h a0, a0, a04176; RV64IZHINX-NEXT:    seqz a0, a04177; RV64IZHINX-NEXT:    addi a0, a0, -14178; RV64IZHINX-NEXT:    and a0, a0, a14179; RV64IZHINX-NEXT:    ret4180;4181; RV32IZFHMIN-LABEL: test_rint_ui64:4182; RV32IZFHMIN:       # %bb.0:4183; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa04184; RV32IZFHMIN-NEXT:    lui a0, 3072004185; RV32IZFHMIN-NEXT:    fmv.w.x fa4, a04186; RV32IZFHMIN-NEXT:    fabs.s fa3, fa54187; RV32IZFHMIN-NEXT:    flt.s a0, fa3, fa44188; RV32IZFHMIN-NEXT:    beqz a0, .LBB23_24189; RV32IZFHMIN-NEXT:  # %bb.1:4190; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa54191; RV32IZFHMIN-NEXT:    fcvt.s.w fa4, a04192; RV32IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa54193; RV32IZFHMIN-NEXT:  .LBB23_2:4194; RV32IZFHMIN-NEXT:    addi sp, sp, -164195; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4196; RV32IZFHMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill4197; RV32IZFHMIN-NEXT:    fsw fs0, 4(sp) # 4-byte Folded Spill4198; RV32IZFHMIN-NEXT:    fcvt.h.s fa5, fa54199; RV32IZFHMIN-NEXT:    fcvt.s.h fs0, fa54200; RV32IZFHMIN-NEXT:    fmv.w.x fa5, zero4201; RV32IZFHMIN-NEXT:    fle.s a0, fa5, fs04202; RV32IZFHMIN-NEXT:    neg s0, a04203; RV32IZFHMIN-NEXT:    fmv.s fa0, fs04204; RV32IZFHMIN-NEXT:    call __fixunssfdi4205; RV32IZFHMIN-NEXT:    and a0, s0, a04206; RV32IZFHMIN-NEXT:    lui a2, 3911684207; RV32IZFHMIN-NEXT:    and a1, s0, a14208; RV32IZFHMIN-NEXT:    addi a2, a2, -14209; RV32IZFHMIN-NEXT:    fmv.w.x fa5, a24210; RV32IZFHMIN-NEXT:    flt.s a2, fa5, fs04211; RV32IZFHMIN-NEXT:    neg a2, a24212; RV32IZFHMIN-NEXT:    or a0, a2, a04213; RV32IZFHMIN-NEXT:    or a1, a2, a14214; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4215; RV32IZFHMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload4216; RV32IZFHMIN-NEXT:    flw fs0, 4(sp) # 4-byte Folded Reload4217; RV32IZFHMIN-NEXT:    addi sp, sp, 164218; RV32IZFHMIN-NEXT:    ret4219;4220; RV64IZFHMIN-LABEL: test_rint_ui64:4221; RV64IZFHMIN:       # %bb.0:4222; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa04223; RV64IZFHMIN-NEXT:    lui a0, 3072004224; RV64IZFHMIN-NEXT:    fmv.w.x fa4, a04225; RV64IZFHMIN-NEXT:    fabs.s fa3, fa54226; RV64IZFHMIN-NEXT:    flt.s a0, fa3, fa44227; RV64IZFHMIN-NEXT:    beqz a0, .LBB23_24228; RV64IZFHMIN-NEXT:  # %bb.1:4229; RV64IZFHMIN-NEXT:    fcvt.w.s a0, fa54230; RV64IZFHMIN-NEXT:    fcvt.s.w fa4, a04231; RV64IZFHMIN-NEXT:    fsgnj.s fa5, fa4, fa54232; RV64IZFHMIN-NEXT:  .LBB23_2:4233; RV64IZFHMIN-NEXT:    fcvt.h.s fa5, fa54234; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa54235; RV64IZFHMIN-NEXT:    fcvt.lu.s a0, fa5, rtz4236; RV64IZFHMIN-NEXT:    feq.s a1, fa5, fa54237; RV64IZFHMIN-NEXT:    seqz a1, a14238; RV64IZFHMIN-NEXT:    addi a1, a1, -14239; RV64IZFHMIN-NEXT:    and a0, a1, a04240; RV64IZFHMIN-NEXT:    ret4241;4242; RV32IZHINXMIN-LABEL: test_rint_ui64:4243; RV32IZHINXMIN:       # %bb.0:4244; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a04245; RV32IZHINXMIN-NEXT:    lui a1, 3072004246; RV32IZHINXMIN-NEXT:    fabs.s a2, a04247; RV32IZHINXMIN-NEXT:    flt.s a1, a2, a14248; RV32IZHINXMIN-NEXT:    beqz a1, .LBB23_24249; RV32IZHINXMIN-NEXT:  # %bb.1:4250; RV32IZHINXMIN-NEXT:    fcvt.w.s a1, a04251; RV32IZHINXMIN-NEXT:    fcvt.s.w a1, a14252; RV32IZHINXMIN-NEXT:    fsgnj.s a0, a1, a04253; RV32IZHINXMIN-NEXT:  .LBB23_2:4254; RV32IZHINXMIN-NEXT:    addi sp, sp, -164255; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill4256; RV32IZHINXMIN-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill4257; RV32IZHINXMIN-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill4258; RV32IZHINXMIN-NEXT:    fcvt.h.s a0, a04259; RV32IZHINXMIN-NEXT:    fcvt.s.h s0, a04260; RV32IZHINXMIN-NEXT:    fle.s a0, zero, s04261; RV32IZHINXMIN-NEXT:    neg s1, a04262; RV32IZHINXMIN-NEXT:    mv a0, s04263; RV32IZHINXMIN-NEXT:    call __fixunssfdi4264; RV32IZHINXMIN-NEXT:    and a0, s1, a04265; RV32IZHINXMIN-NEXT:    lui a2, 3911684266; RV32IZHINXMIN-NEXT:    and a1, s1, a14267; RV32IZHINXMIN-NEXT:    addi a2, a2, -14268; RV32IZHINXMIN-NEXT:    flt.s a2, a2, s04269; RV32IZHINXMIN-NEXT:    neg a2, a24270; RV32IZHINXMIN-NEXT:    or a0, a2, a04271; RV32IZHINXMIN-NEXT:    or a1, a2, a14272; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload4273; RV32IZHINXMIN-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload4274; RV32IZHINXMIN-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload4275; RV32IZHINXMIN-NEXT:    addi sp, sp, 164276; RV32IZHINXMIN-NEXT:    ret4277;4278; RV64IZHINXMIN-LABEL: test_rint_ui64:4279; RV64IZHINXMIN:       # %bb.0:4280; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a04281; RV64IZHINXMIN-NEXT:    lui a1, 3072004282; RV64IZHINXMIN-NEXT:    fabs.s a2, a04283; RV64IZHINXMIN-NEXT:    flt.s a1, a2, a14284; RV64IZHINXMIN-NEXT:    beqz a1, .LBB23_24285; RV64IZHINXMIN-NEXT:  # %bb.1:4286; RV64IZHINXMIN-NEXT:    fcvt.w.s a1, a04287; RV64IZHINXMIN-NEXT:    fcvt.s.w a1, a14288; RV64IZHINXMIN-NEXT:    fsgnj.s a0, a1, a04289; RV64IZHINXMIN-NEXT:  .LBB23_2:4290; RV64IZHINXMIN-NEXT:    fcvt.h.s a0, a04291; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a04292; RV64IZHINXMIN-NEXT:    fcvt.lu.s a1, a0, rtz4293; RV64IZHINXMIN-NEXT:    feq.s a0, a0, a04294; RV64IZHINXMIN-NEXT:    seqz a0, a04295; RV64IZHINXMIN-NEXT:    addi a0, a0, -14296; RV64IZHINXMIN-NEXT:    and a0, a0, a14297; RV64IZHINXMIN-NEXT:    ret4298  %a = call half @llvm.rint.f16(half %x)4299  %b = call i64 @llvm.fptoui.sat.i64.f16(half %a)4300  ret i64 %b4301}4302 4303