9458 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+zfh -verify-machineinstrs \3; RUN: -target-abi ilp32f < %s | FileCheck -check-prefixes=CHECKIZFH,RV32IZFH %s4; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \5; RUN: -target-abi lp64f < %s | FileCheck -check-prefixes=CHECKIZFH,RV64IZFH %s6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh -verify-machineinstrs \7; RUN: -target-abi ilp32d < %s | FileCheck -check-prefix=RV32IDZFH %s8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh -verify-machineinstrs \9; RUN: -target-abi lp64d < %s | FileCheck -check-prefix=RV64IDZFH %s10; RUN: llc -mtriple=riscv32 -mattr=+zhinx -verify-machineinstrs \11; RUN: -target-abi ilp32 < %s | FileCheck -check-prefixes=CHECKIZHINX,RV32IZHINX %s12; RUN: llc -mtriple=riscv64 -mattr=+zhinx -verify-machineinstrs \13; RUN: -target-abi lp64 < %s | FileCheck -check-prefixes=CHECKIZHINX,RV64IZHINX %s14; RUN: llc -mtriple=riscv32 -mattr=+zdinx,+zhinx -verify-machineinstrs \15; RUN: -target-abi ilp32 < %s | FileCheck -check-prefixes=CHECKIZDINXZHINX,RV32IZDINXZHINX %s16; RUN: llc -mtriple=riscv64 -mattr=+zdinx,+zhinx -verify-machineinstrs \17; RUN: -target-abi lp64 < %s | FileCheck -check-prefixes=CHECKIZDINXZHINX,RV64IZDINXZHINX %s18; RUN: llc -mtriple=riscv32 -verify-machineinstrs \19; RUN: < %s | FileCheck -check-prefix=RV32I %s20; RUN: llc -mtriple=riscv64 -verify-machineinstrs \21; RUN: < %s | FileCheck -check-prefix=RV64I %s22; RUN: llc -mtriple=riscv32 -mattr=+d -target-abi=ilp32 -verify-machineinstrs \23; RUN: < %s | FileCheck %s -check-prefix=RV32ID-ILP3224; RUN: llc -mtriple=riscv64 -mattr=+d -target-abi=lp64 -verify-machineinstrs \25; RUN: < %s | FileCheck %s -check-prefix=RV64ID-LP6426; RUN: llc -mtriple=riscv32 -mattr=+d -target-abi=ilp32d -verify-machineinstrs \27; RUN: < %s | FileCheck %s -check-prefix=RV32ID28; RUN: llc -mtriple=riscv64 -mattr=+d -target-abi=lp64d -verify-machineinstrs \29; RUN: < %s | FileCheck %s -check-prefix=RV64ID30; RUN: llc -mtriple=riscv32 -mattr=+zfhmin -verify-machineinstrs \31; RUN: -target-abi ilp32f < %s | FileCheck -check-prefixes=CHECK32-IZFHMIN,RV32IFZFHMIN %s32; RUN: llc -mtriple=riscv64 -mattr=+zfhmin -verify-machineinstrs \33; RUN: -target-abi lp64f < %s | FileCheck -check-prefixes=CHECK64-IZFHMIN,RV64IFZFHMIN %s34; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin -verify-machineinstrs \35; RUN: -target-abi ilp32d < %s | FileCheck -check-prefixes=CHECK32-IZFHMIN,RV32IDZFHMIN %s36; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin -verify-machineinstrs \37; RUN: -target-abi lp64d < %s | FileCheck -check-prefixes=CHECK64-IZFHMIN,RV64IDZFHMIN %s38; RUN: llc -mtriple=riscv32 -mattr=+zhinxmin -verify-machineinstrs \39; RUN: -target-abi ilp32 < %s | FileCheck -check-prefixes=CHECK32-IZHINXMIN %s40; RUN: llc -mtriple=riscv64 -mattr=+zhinxmin -verify-machineinstrs \41; RUN: -target-abi lp64 < %s | FileCheck -check-prefixes=CHECK64-IZHINXMIN %s42; RUN: llc -mtriple=riscv32 -mattr=+zdinx,+zhinxmin -verify-machineinstrs \43; RUN: -target-abi ilp32 < %s | FileCheck -check-prefixes=CHECK32-IZDINXZHINXMIN %s44; RUN: llc -mtriple=riscv64 -mattr=+zdinx,+zhinxmin -verify-machineinstrs \45; RUN: -target-abi lp64 < %s | FileCheck -check-prefixes=CHECK64-IZDINXZHINXMIN %s46 47define i16 @fcvt_si_h(half %a) nounwind {48; RV32IZFH-LABEL: fcvt_si_h:49; RV32IZFH: # %bb.0:50; RV32IZFH-NEXT: fcvt.w.h a0, fa0, rtz51; RV32IZFH-NEXT: ret52;53; RV64IZFH-LABEL: fcvt_si_h:54; RV64IZFH: # %bb.0:55; RV64IZFH-NEXT: fcvt.l.h a0, fa0, rtz56; RV64IZFH-NEXT: ret57;58; RV32IDZFH-LABEL: fcvt_si_h:59; RV32IDZFH: # %bb.0:60; RV32IDZFH-NEXT: fcvt.w.h a0, fa0, rtz61; RV32IDZFH-NEXT: ret62;63; RV64IDZFH-LABEL: fcvt_si_h:64; RV64IDZFH: # %bb.0:65; RV64IDZFH-NEXT: fcvt.l.h a0, fa0, rtz66; RV64IDZFH-NEXT: ret67;68; RV32IZHINX-LABEL: fcvt_si_h:69; RV32IZHINX: # %bb.0:70; RV32IZHINX-NEXT: fcvt.w.h a0, a0, rtz71; RV32IZHINX-NEXT: ret72;73; RV64IZHINX-LABEL: fcvt_si_h:74; RV64IZHINX: # %bb.0:75; RV64IZHINX-NEXT: fcvt.l.h a0, a0, rtz76; RV64IZHINX-NEXT: ret77;78; RV32IZDINXZHINX-LABEL: fcvt_si_h:79; RV32IZDINXZHINX: # %bb.0:80; RV32IZDINXZHINX-NEXT: fcvt.w.h a0, a0, rtz81; RV32IZDINXZHINX-NEXT: ret82;83; RV64IZDINXZHINX-LABEL: fcvt_si_h:84; RV64IZDINXZHINX: # %bb.0:85; RV64IZDINXZHINX-NEXT: fcvt.l.h a0, a0, rtz86; RV64IZDINXZHINX-NEXT: ret87;88; RV32I-LABEL: fcvt_si_h:89; RV32I: # %bb.0:90; RV32I-NEXT: addi sp, sp, -1691; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill92; RV32I-NEXT: slli a0, a0, 1693; RV32I-NEXT: srli a0, a0, 1694; RV32I-NEXT: call __extendhfsf295; RV32I-NEXT: call __fixsfsi96; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload97; RV32I-NEXT: addi sp, sp, 1698; RV32I-NEXT: ret99;100; RV64I-LABEL: fcvt_si_h:101; RV64I: # %bb.0:102; RV64I-NEXT: addi sp, sp, -16103; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill104; RV64I-NEXT: slli a0, a0, 48105; RV64I-NEXT: srli a0, a0, 48106; RV64I-NEXT: call __extendhfsf2107; RV64I-NEXT: call __fixsfdi108; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload109; RV64I-NEXT: addi sp, sp, 16110; RV64I-NEXT: ret111;112; RV32ID-ILP32-LABEL: fcvt_si_h:113; RV32ID-ILP32: # %bb.0:114; RV32ID-ILP32-NEXT: addi sp, sp, -16115; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill116; RV32ID-ILP32-NEXT: call __extendhfsf2117; RV32ID-ILP32-NEXT: fmv.w.x fa5, a0118; RV32ID-ILP32-NEXT: fcvt.w.s a0, fa5, rtz119; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload120; RV32ID-ILP32-NEXT: addi sp, sp, 16121; RV32ID-ILP32-NEXT: ret122;123; RV64ID-LP64-LABEL: fcvt_si_h:124; RV64ID-LP64: # %bb.0:125; RV64ID-LP64-NEXT: addi sp, sp, -16126; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill127; RV64ID-LP64-NEXT: call __extendhfsf2128; RV64ID-LP64-NEXT: fmv.w.x fa5, a0129; RV64ID-LP64-NEXT: fcvt.l.s a0, fa5, rtz130; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload131; RV64ID-LP64-NEXT: addi sp, sp, 16132; RV64ID-LP64-NEXT: ret133;134; RV32ID-LABEL: fcvt_si_h:135; RV32ID: # %bb.0:136; RV32ID-NEXT: addi sp, sp, -16137; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill138; RV32ID-NEXT: call __extendhfsf2139; RV32ID-NEXT: fcvt.w.s a0, fa0, rtz140; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload141; RV32ID-NEXT: addi sp, sp, 16142; RV32ID-NEXT: ret143;144; RV64ID-LABEL: fcvt_si_h:145; RV64ID: # %bb.0:146; RV64ID-NEXT: addi sp, sp, -16147; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill148; RV64ID-NEXT: call __extendhfsf2149; RV64ID-NEXT: fcvt.l.s a0, fa0, rtz150; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload151; RV64ID-NEXT: addi sp, sp, 16152; RV64ID-NEXT: ret153;154; CHECK32-IZFHMIN-LABEL: fcvt_si_h:155; CHECK32-IZFHMIN: # %bb.0:156; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa0157; CHECK32-IZFHMIN-NEXT: fcvt.w.s a0, fa5, rtz158; CHECK32-IZFHMIN-NEXT: ret159;160; CHECK64-IZFHMIN-LABEL: fcvt_si_h:161; CHECK64-IZFHMIN: # %bb.0:162; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa0163; CHECK64-IZFHMIN-NEXT: fcvt.l.s a0, fa5, rtz164; CHECK64-IZFHMIN-NEXT: ret165;166; CHECK32-IZHINXMIN-LABEL: fcvt_si_h:167; CHECK32-IZHINXMIN: # %bb.0:168; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a0169; CHECK32-IZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz170; CHECK32-IZHINXMIN-NEXT: ret171;172; CHECK64-IZHINXMIN-LABEL: fcvt_si_h:173; CHECK64-IZHINXMIN: # %bb.0:174; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a0175; CHECK64-IZHINXMIN-NEXT: fcvt.l.s a0, a0, rtz176; CHECK64-IZHINXMIN-NEXT: ret177;178; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_si_h:179; CHECK32-IZDINXZHINXMIN: # %bb.0:180; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0181; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz182; CHECK32-IZDINXZHINXMIN-NEXT: ret183;184; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_si_h:185; CHECK64-IZDINXZHINXMIN: # %bb.0:186; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0187; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.l.s a0, a0, rtz188; CHECK64-IZDINXZHINXMIN-NEXT: ret189 %1 = fptosi half %a to i16190 ret i16 %1191}192 193define i16 @fcvt_si_h_sat(half %a) nounwind {194; RV32IZFH-LABEL: fcvt_si_h_sat:195; RV32IZFH: # %bb.0: # %start196; RV32IZFH-NEXT: fcvt.s.h fa5, fa0197; RV32IZFH-NEXT: lui a0, 815104198; RV32IZFH-NEXT: lui a1, 290816199; RV32IZFH-NEXT: fmv.w.x fa4, a0200; RV32IZFH-NEXT: feq.s a0, fa5, fa5201; RV32IZFH-NEXT: addi a1, a1, -512202; RV32IZFH-NEXT: neg a0, a0203; RV32IZFH-NEXT: fmax.s fa5, fa5, fa4204; RV32IZFH-NEXT: fmv.w.x fa4, a1205; RV32IZFH-NEXT: fmin.s fa5, fa5, fa4206; RV32IZFH-NEXT: fcvt.w.s a1, fa5, rtz207; RV32IZFH-NEXT: and a0, a0, a1208; RV32IZFH-NEXT: ret209;210; RV64IZFH-LABEL: fcvt_si_h_sat:211; RV64IZFH: # %bb.0: # %start212; RV64IZFH-NEXT: fcvt.s.h fa5, fa0213; RV64IZFH-NEXT: lui a0, 815104214; RV64IZFH-NEXT: lui a1, 290816215; RV64IZFH-NEXT: fmv.w.x fa4, a0216; RV64IZFH-NEXT: feq.s a0, fa5, fa5217; RV64IZFH-NEXT: addi a1, a1, -512218; RV64IZFH-NEXT: neg a0, a0219; RV64IZFH-NEXT: fmax.s fa5, fa5, fa4220; RV64IZFH-NEXT: fmv.w.x fa4, a1221; RV64IZFH-NEXT: fmin.s fa5, fa5, fa4222; RV64IZFH-NEXT: fcvt.l.s a1, fa5, rtz223; RV64IZFH-NEXT: and a0, a0, a1224; RV64IZFH-NEXT: ret225;226; RV32IDZFH-LABEL: fcvt_si_h_sat:227; RV32IDZFH: # %bb.0: # %start228; RV32IDZFH-NEXT: fcvt.s.h fa5, fa0229; RV32IDZFH-NEXT: lui a0, 815104230; RV32IDZFH-NEXT: lui a1, 290816231; RV32IDZFH-NEXT: fmv.w.x fa4, a0232; RV32IDZFH-NEXT: feq.s a0, fa5, fa5233; RV32IDZFH-NEXT: addi a1, a1, -512234; RV32IDZFH-NEXT: neg a0, a0235; RV32IDZFH-NEXT: fmax.s fa5, fa5, fa4236; RV32IDZFH-NEXT: fmv.w.x fa4, a1237; RV32IDZFH-NEXT: fmin.s fa5, fa5, fa4238; RV32IDZFH-NEXT: fcvt.w.s a1, fa5, rtz239; RV32IDZFH-NEXT: and a0, a0, a1240; RV32IDZFH-NEXT: ret241;242; RV64IDZFH-LABEL: fcvt_si_h_sat:243; RV64IDZFH: # %bb.0: # %start244; RV64IDZFH-NEXT: fcvt.s.h fa5, fa0245; RV64IDZFH-NEXT: lui a0, 815104246; RV64IDZFH-NEXT: lui a1, 290816247; RV64IDZFH-NEXT: fmv.w.x fa4, a0248; RV64IDZFH-NEXT: feq.s a0, fa5, fa5249; RV64IDZFH-NEXT: addi a1, a1, -512250; RV64IDZFH-NEXT: neg a0, a0251; RV64IDZFH-NEXT: fmax.s fa5, fa5, fa4252; RV64IDZFH-NEXT: fmv.w.x fa4, a1253; RV64IDZFH-NEXT: fmin.s fa5, fa5, fa4254; RV64IDZFH-NEXT: fcvt.l.s a1, fa5, rtz255; RV64IDZFH-NEXT: and a0, a0, a1256; RV64IDZFH-NEXT: ret257;258; RV32IZHINX-LABEL: fcvt_si_h_sat:259; RV32IZHINX: # %bb.0: # %start260; RV32IZHINX-NEXT: fcvt.s.h a0, a0261; RV32IZHINX-NEXT: lui a1, 815104262; RV32IZHINX-NEXT: lui a2, 290816263; RV32IZHINX-NEXT: fmax.s a1, a0, a1264; RV32IZHINX-NEXT: feq.s a0, a0, a0265; RV32IZHINX-NEXT: addi a2, a2, -512266; RV32IZHINX-NEXT: neg a0, a0267; RV32IZHINX-NEXT: fmin.s a1, a1, a2268; RV32IZHINX-NEXT: fcvt.w.s a1, a1, rtz269; RV32IZHINX-NEXT: and a0, a0, a1270; RV32IZHINX-NEXT: ret271;272; RV64IZHINX-LABEL: fcvt_si_h_sat:273; RV64IZHINX: # %bb.0: # %start274; RV64IZHINX-NEXT: fcvt.s.h a0, a0275; RV64IZHINX-NEXT: lui a1, 815104276; RV64IZHINX-NEXT: lui a2, 290816277; RV64IZHINX-NEXT: fmax.s a1, a0, a1278; RV64IZHINX-NEXT: feq.s a0, a0, a0279; RV64IZHINX-NEXT: addi a2, a2, -512280; RV64IZHINX-NEXT: neg a0, a0281; RV64IZHINX-NEXT: fmin.s a1, a1, a2282; RV64IZHINX-NEXT: fcvt.l.s a1, a1, rtz283; RV64IZHINX-NEXT: and a0, a0, a1284; RV64IZHINX-NEXT: ret285;286; RV32IZDINXZHINX-LABEL: fcvt_si_h_sat:287; RV32IZDINXZHINX: # %bb.0: # %start288; RV32IZDINXZHINX-NEXT: fcvt.s.h a0, a0289; RV32IZDINXZHINX-NEXT: lui a1, 815104290; RV32IZDINXZHINX-NEXT: lui a2, 290816291; RV32IZDINXZHINX-NEXT: fmax.s a1, a0, a1292; RV32IZDINXZHINX-NEXT: feq.s a0, a0, a0293; RV32IZDINXZHINX-NEXT: addi a2, a2, -512294; RV32IZDINXZHINX-NEXT: neg a0, a0295; RV32IZDINXZHINX-NEXT: fmin.s a1, a1, a2296; RV32IZDINXZHINX-NEXT: fcvt.w.s a1, a1, rtz297; RV32IZDINXZHINX-NEXT: and a0, a0, a1298; RV32IZDINXZHINX-NEXT: ret299;300; RV64IZDINXZHINX-LABEL: fcvt_si_h_sat:301; RV64IZDINXZHINX: # %bb.0: # %start302; RV64IZDINXZHINX-NEXT: fcvt.s.h a0, a0303; RV64IZDINXZHINX-NEXT: lui a1, 815104304; RV64IZDINXZHINX-NEXT: lui a2, 290816305; RV64IZDINXZHINX-NEXT: fmax.s a1, a0, a1306; RV64IZDINXZHINX-NEXT: feq.s a0, a0, a0307; RV64IZDINXZHINX-NEXT: addi a2, a2, -512308; RV64IZDINXZHINX-NEXT: neg a0, a0309; RV64IZDINXZHINX-NEXT: fmin.s a1, a1, a2310; RV64IZDINXZHINX-NEXT: fcvt.l.s a1, a1, rtz311; RV64IZDINXZHINX-NEXT: and a0, a0, a1312; RV64IZDINXZHINX-NEXT: ret313;314; RV32I-LABEL: fcvt_si_h_sat:315; RV32I: # %bb.0: # %start316; RV32I-NEXT: addi sp, sp, -16317; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill318; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill319; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill320; RV32I-NEXT: sw s2, 0(sp) # 4-byte Folded Spill321; RV32I-NEXT: slli a0, a0, 16322; RV32I-NEXT: srli a0, a0, 16323; RV32I-NEXT: call __extendhfsf2324; RV32I-NEXT: mv s0, a0325; RV32I-NEXT: lui a1, 815104326; RV32I-NEXT: call __gesf2327; RV32I-NEXT: mv s2, a0328; RV32I-NEXT: mv a0, s0329; RV32I-NEXT: call __fixsfsi330; RV32I-NEXT: mv s1, a0331; RV32I-NEXT: bgez s2, .LBB1_2332; RV32I-NEXT: # %bb.1: # %start333; RV32I-NEXT: lui s1, 1048568334; RV32I-NEXT: .LBB1_2: # %start335; RV32I-NEXT: lui a1, 290816336; RV32I-NEXT: addi a1, a1, -512337; RV32I-NEXT: mv a0, s0338; RV32I-NEXT: call __gtsf2339; RV32I-NEXT: blez a0, .LBB1_4340; RV32I-NEXT: # %bb.3: # %start341; RV32I-NEXT: lui s1, 8342; RV32I-NEXT: addi s1, s1, -1343; RV32I-NEXT: .LBB1_4: # %start344; RV32I-NEXT: mv a0, s0345; RV32I-NEXT: mv a1, s0346; RV32I-NEXT: call __unordsf2347; RV32I-NEXT: snez a0, a0348; RV32I-NEXT: addi a0, a0, -1349; RV32I-NEXT: and a0, a0, s1350; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload351; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload352; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload353; RV32I-NEXT: lw s2, 0(sp) # 4-byte Folded Reload354; RV32I-NEXT: addi sp, sp, 16355; RV32I-NEXT: ret356;357; RV64I-LABEL: fcvt_si_h_sat:358; RV64I: # %bb.0: # %start359; RV64I-NEXT: addi sp, sp, -32360; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill361; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill362; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill363; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill364; RV64I-NEXT: slli a0, a0, 48365; RV64I-NEXT: srli a0, a0, 48366; RV64I-NEXT: call __extendhfsf2367; RV64I-NEXT: mv s0, a0368; RV64I-NEXT: lui a1, 815104369; RV64I-NEXT: call __gesf2370; RV64I-NEXT: mv s2, a0371; RV64I-NEXT: mv a0, s0372; RV64I-NEXT: call __fixsfdi373; RV64I-NEXT: mv s1, a0374; RV64I-NEXT: bgez s2, .LBB1_2375; RV64I-NEXT: # %bb.1: # %start376; RV64I-NEXT: lui s1, 1048568377; RV64I-NEXT: .LBB1_2: # %start378; RV64I-NEXT: lui a1, 290816379; RV64I-NEXT: addi a1, a1, -512380; RV64I-NEXT: mv a0, s0381; RV64I-NEXT: call __gtsf2382; RV64I-NEXT: blez a0, .LBB1_4383; RV64I-NEXT: # %bb.3: # %start384; RV64I-NEXT: lui s1, 8385; RV64I-NEXT: addi s1, s1, -1386; RV64I-NEXT: .LBB1_4: # %start387; RV64I-NEXT: mv a0, s0388; RV64I-NEXT: mv a1, s0389; RV64I-NEXT: call __unordsf2390; RV64I-NEXT: snez a0, a0391; RV64I-NEXT: addi a0, a0, -1392; RV64I-NEXT: and a0, a0, s1393; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload394; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload395; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload396; RV64I-NEXT: ld s2, 0(sp) # 8-byte Folded Reload397; RV64I-NEXT: addi sp, sp, 32398; RV64I-NEXT: ret399;400; RV32ID-ILP32-LABEL: fcvt_si_h_sat:401; RV32ID-ILP32: # %bb.0: # %start402; RV32ID-ILP32-NEXT: addi sp, sp, -16403; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill404; RV32ID-ILP32-NEXT: call __extendhfsf2405; RV32ID-ILP32-NEXT: fmv.w.x fa5, a0406; RV32ID-ILP32-NEXT: lui a0, 815104407; RV32ID-ILP32-NEXT: lui a1, 290816408; RV32ID-ILP32-NEXT: fmv.w.x fa4, a0409; RV32ID-ILP32-NEXT: feq.s a0, fa5, fa5410; RV32ID-ILP32-NEXT: addi a1, a1, -512411; RV32ID-ILP32-NEXT: neg a0, a0412; RV32ID-ILP32-NEXT: fmax.s fa5, fa5, fa4413; RV32ID-ILP32-NEXT: fmv.w.x fa4, a1414; RV32ID-ILP32-NEXT: fmin.s fa5, fa5, fa4415; RV32ID-ILP32-NEXT: fcvt.w.s a1, fa5, rtz416; RV32ID-ILP32-NEXT: and a0, a0, a1417; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload418; RV32ID-ILP32-NEXT: addi sp, sp, 16419; RV32ID-ILP32-NEXT: ret420;421; RV64ID-LP64-LABEL: fcvt_si_h_sat:422; RV64ID-LP64: # %bb.0: # %start423; RV64ID-LP64-NEXT: addi sp, sp, -16424; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill425; RV64ID-LP64-NEXT: call __extendhfsf2426; RV64ID-LP64-NEXT: fmv.w.x fa5, a0427; RV64ID-LP64-NEXT: lui a0, 815104428; RV64ID-LP64-NEXT: lui a1, 290816429; RV64ID-LP64-NEXT: fmv.w.x fa4, a0430; RV64ID-LP64-NEXT: feq.s a0, fa5, fa5431; RV64ID-LP64-NEXT: addi a1, a1, -512432; RV64ID-LP64-NEXT: neg a0, a0433; RV64ID-LP64-NEXT: fmax.s fa5, fa5, fa4434; RV64ID-LP64-NEXT: fmv.w.x fa4, a1435; RV64ID-LP64-NEXT: fmin.s fa5, fa5, fa4436; RV64ID-LP64-NEXT: fcvt.l.s a1, fa5, rtz437; RV64ID-LP64-NEXT: and a0, a0, a1438; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload439; RV64ID-LP64-NEXT: addi sp, sp, 16440; RV64ID-LP64-NEXT: ret441;442; RV32ID-LABEL: fcvt_si_h_sat:443; RV32ID: # %bb.0: # %start444; RV32ID-NEXT: addi sp, sp, -16445; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill446; RV32ID-NEXT: call __extendhfsf2447; RV32ID-NEXT: feq.s a0, fa0, fa0448; RV32ID-NEXT: lui a1, 815104449; RV32ID-NEXT: fmv.w.x fa5, a1450; RV32ID-NEXT: lui a1, 290816451; RV32ID-NEXT: neg a0, a0452; RV32ID-NEXT: addi a1, a1, -512453; RV32ID-NEXT: fmax.s fa5, fa0, fa5454; RV32ID-NEXT: fmv.w.x fa4, a1455; RV32ID-NEXT: fmin.s fa5, fa5, fa4456; RV32ID-NEXT: fcvt.w.s a1, fa5, rtz457; RV32ID-NEXT: and a0, a0, a1458; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload459; RV32ID-NEXT: addi sp, sp, 16460; RV32ID-NEXT: ret461;462; RV64ID-LABEL: fcvt_si_h_sat:463; RV64ID: # %bb.0: # %start464; RV64ID-NEXT: addi sp, sp, -16465; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill466; RV64ID-NEXT: call __extendhfsf2467; RV64ID-NEXT: feq.s a0, fa0, fa0468; RV64ID-NEXT: lui a1, 815104469; RV64ID-NEXT: fmv.w.x fa5, a1470; RV64ID-NEXT: lui a1, 290816471; RV64ID-NEXT: neg a0, a0472; RV64ID-NEXT: addi a1, a1, -512473; RV64ID-NEXT: fmax.s fa5, fa0, fa5474; RV64ID-NEXT: fmv.w.x fa4, a1475; RV64ID-NEXT: fmin.s fa5, fa5, fa4476; RV64ID-NEXT: fcvt.l.s a1, fa5, rtz477; RV64ID-NEXT: and a0, a0, a1478; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload479; RV64ID-NEXT: addi sp, sp, 16480; RV64ID-NEXT: ret481;482; CHECK32-IZFHMIN-LABEL: fcvt_si_h_sat:483; CHECK32-IZFHMIN: # %bb.0: # %start484; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa0485; CHECK32-IZFHMIN-NEXT: lui a0, 815104486; CHECK32-IZFHMIN-NEXT: lui a1, 290816487; CHECK32-IZFHMIN-NEXT: fmv.w.x fa4, a0488; CHECK32-IZFHMIN-NEXT: feq.s a0, fa5, fa5489; CHECK32-IZFHMIN-NEXT: addi a1, a1, -512490; CHECK32-IZFHMIN-NEXT: neg a0, a0491; CHECK32-IZFHMIN-NEXT: fmax.s fa5, fa5, fa4492; CHECK32-IZFHMIN-NEXT: fmv.w.x fa4, a1493; CHECK32-IZFHMIN-NEXT: fmin.s fa5, fa5, fa4494; CHECK32-IZFHMIN-NEXT: fcvt.w.s a1, fa5, rtz495; CHECK32-IZFHMIN-NEXT: and a0, a0, a1496; CHECK32-IZFHMIN-NEXT: ret497;498; CHECK64-IZFHMIN-LABEL: fcvt_si_h_sat:499; CHECK64-IZFHMIN: # %bb.0: # %start500; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa0501; CHECK64-IZFHMIN-NEXT: lui a0, 815104502; CHECK64-IZFHMIN-NEXT: lui a1, 290816503; CHECK64-IZFHMIN-NEXT: fmv.w.x fa4, a0504; CHECK64-IZFHMIN-NEXT: feq.s a0, fa5, fa5505; CHECK64-IZFHMIN-NEXT: addi a1, a1, -512506; CHECK64-IZFHMIN-NEXT: neg a0, a0507; CHECK64-IZFHMIN-NEXT: fmax.s fa5, fa5, fa4508; CHECK64-IZFHMIN-NEXT: fmv.w.x fa4, a1509; CHECK64-IZFHMIN-NEXT: fmin.s fa5, fa5, fa4510; CHECK64-IZFHMIN-NEXT: fcvt.l.s a1, fa5, rtz511; CHECK64-IZFHMIN-NEXT: and a0, a0, a1512; CHECK64-IZFHMIN-NEXT: ret513;514; CHECK32-IZHINXMIN-LABEL: fcvt_si_h_sat:515; CHECK32-IZHINXMIN: # %bb.0: # %start516; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a0517; CHECK32-IZHINXMIN-NEXT: lui a1, 815104518; CHECK32-IZHINXMIN-NEXT: lui a2, 290816519; CHECK32-IZHINXMIN-NEXT: fmax.s a1, a0, a1520; CHECK32-IZHINXMIN-NEXT: feq.s a0, a0, a0521; CHECK32-IZHINXMIN-NEXT: addi a2, a2, -512522; CHECK32-IZHINXMIN-NEXT: neg a0, a0523; CHECK32-IZHINXMIN-NEXT: fmin.s a1, a1, a2524; CHECK32-IZHINXMIN-NEXT: fcvt.w.s a1, a1, rtz525; CHECK32-IZHINXMIN-NEXT: and a0, a0, a1526; CHECK32-IZHINXMIN-NEXT: ret527;528; CHECK64-IZHINXMIN-LABEL: fcvt_si_h_sat:529; CHECK64-IZHINXMIN: # %bb.0: # %start530; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a0531; CHECK64-IZHINXMIN-NEXT: lui a1, 815104532; CHECK64-IZHINXMIN-NEXT: lui a2, 290816533; CHECK64-IZHINXMIN-NEXT: fmax.s a1, a0, a1534; CHECK64-IZHINXMIN-NEXT: feq.s a0, a0, a0535; CHECK64-IZHINXMIN-NEXT: addi a2, a2, -512536; CHECK64-IZHINXMIN-NEXT: neg a0, a0537; CHECK64-IZHINXMIN-NEXT: fmin.s a1, a1, a2538; CHECK64-IZHINXMIN-NEXT: fcvt.l.s a1, a1, rtz539; CHECK64-IZHINXMIN-NEXT: and a0, a0, a1540; CHECK64-IZHINXMIN-NEXT: ret541;542; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_si_h_sat:543; CHECK32-IZDINXZHINXMIN: # %bb.0: # %start544; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0545; CHECK32-IZDINXZHINXMIN-NEXT: lui a1, 815104546; CHECK32-IZDINXZHINXMIN-NEXT: lui a2, 290816547; CHECK32-IZDINXZHINXMIN-NEXT: fmax.s a1, a0, a1548; CHECK32-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a0549; CHECK32-IZDINXZHINXMIN-NEXT: addi a2, a2, -512550; CHECK32-IZDINXZHINXMIN-NEXT: neg a0, a0551; CHECK32-IZDINXZHINXMIN-NEXT: fmin.s a1, a1, a2552; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.w.s a1, a1, rtz553; CHECK32-IZDINXZHINXMIN-NEXT: and a0, a0, a1554; CHECK32-IZDINXZHINXMIN-NEXT: ret555;556; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_si_h_sat:557; CHECK64-IZDINXZHINXMIN: # %bb.0: # %start558; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0559; CHECK64-IZDINXZHINXMIN-NEXT: lui a1, 815104560; CHECK64-IZDINXZHINXMIN-NEXT: lui a2, 290816561; CHECK64-IZDINXZHINXMIN-NEXT: fmax.s a1, a0, a1562; CHECK64-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a0563; CHECK64-IZDINXZHINXMIN-NEXT: addi a2, a2, -512564; CHECK64-IZDINXZHINXMIN-NEXT: neg a0, a0565; CHECK64-IZDINXZHINXMIN-NEXT: fmin.s a1, a1, a2566; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.l.s a1, a1, rtz567; CHECK64-IZDINXZHINXMIN-NEXT: and a0, a0, a1568; CHECK64-IZDINXZHINXMIN-NEXT: ret569start:570 %0 = tail call i16 @llvm.fptosi.sat.i16.f16(half %a)571 ret i16 %0572}573 574define i16 @fcvt_ui_h(half %a) nounwind {575; RV32IZFH-LABEL: fcvt_ui_h:576; RV32IZFH: # %bb.0:577; RV32IZFH-NEXT: fcvt.wu.h a0, fa0, rtz578; RV32IZFH-NEXT: ret579;580; RV64IZFH-LABEL: fcvt_ui_h:581; RV64IZFH: # %bb.0:582; RV64IZFH-NEXT: fcvt.lu.h a0, fa0, rtz583; RV64IZFH-NEXT: ret584;585; RV32IDZFH-LABEL: fcvt_ui_h:586; RV32IDZFH: # %bb.0:587; RV32IDZFH-NEXT: fcvt.wu.h a0, fa0, rtz588; RV32IDZFH-NEXT: ret589;590; RV64IDZFH-LABEL: fcvt_ui_h:591; RV64IDZFH: # %bb.0:592; RV64IDZFH-NEXT: fcvt.lu.h a0, fa0, rtz593; RV64IDZFH-NEXT: ret594;595; RV32IZHINX-LABEL: fcvt_ui_h:596; RV32IZHINX: # %bb.0:597; RV32IZHINX-NEXT: fcvt.wu.h a0, a0, rtz598; RV32IZHINX-NEXT: ret599;600; RV64IZHINX-LABEL: fcvt_ui_h:601; RV64IZHINX: # %bb.0:602; RV64IZHINX-NEXT: fcvt.lu.h a0, a0, rtz603; RV64IZHINX-NEXT: ret604;605; RV32IZDINXZHINX-LABEL: fcvt_ui_h:606; RV32IZDINXZHINX: # %bb.0:607; RV32IZDINXZHINX-NEXT: fcvt.wu.h a0, a0, rtz608; RV32IZDINXZHINX-NEXT: ret609;610; RV64IZDINXZHINX-LABEL: fcvt_ui_h:611; RV64IZDINXZHINX: # %bb.0:612; RV64IZDINXZHINX-NEXT: fcvt.lu.h a0, a0, rtz613; RV64IZDINXZHINX-NEXT: ret614;615; RV32I-LABEL: fcvt_ui_h:616; RV32I: # %bb.0:617; RV32I-NEXT: addi sp, sp, -16618; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill619; RV32I-NEXT: slli a0, a0, 16620; RV32I-NEXT: srli a0, a0, 16621; RV32I-NEXT: call __extendhfsf2622; RV32I-NEXT: call __fixunssfsi623; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload624; RV32I-NEXT: addi sp, sp, 16625; RV32I-NEXT: ret626;627; RV64I-LABEL: fcvt_ui_h:628; RV64I: # %bb.0:629; RV64I-NEXT: addi sp, sp, -16630; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill631; RV64I-NEXT: slli a0, a0, 48632; RV64I-NEXT: srli a0, a0, 48633; RV64I-NEXT: call __extendhfsf2634; RV64I-NEXT: call __fixunssfdi635; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload636; RV64I-NEXT: addi sp, sp, 16637; RV64I-NEXT: ret638;639; RV32ID-ILP32-LABEL: fcvt_ui_h:640; RV32ID-ILP32: # %bb.0:641; RV32ID-ILP32-NEXT: addi sp, sp, -16642; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill643; RV32ID-ILP32-NEXT: call __extendhfsf2644; RV32ID-ILP32-NEXT: fmv.w.x fa5, a0645; RV32ID-ILP32-NEXT: fcvt.wu.s a0, fa5, rtz646; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload647; RV32ID-ILP32-NEXT: addi sp, sp, 16648; RV32ID-ILP32-NEXT: ret649;650; RV64ID-LP64-LABEL: fcvt_ui_h:651; RV64ID-LP64: # %bb.0:652; RV64ID-LP64-NEXT: addi sp, sp, -16653; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill654; RV64ID-LP64-NEXT: call __extendhfsf2655; RV64ID-LP64-NEXT: fmv.w.x fa5, a0656; RV64ID-LP64-NEXT: fcvt.lu.s a0, fa5, rtz657; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload658; RV64ID-LP64-NEXT: addi sp, sp, 16659; RV64ID-LP64-NEXT: ret660;661; RV32ID-LABEL: fcvt_ui_h:662; RV32ID: # %bb.0:663; RV32ID-NEXT: addi sp, sp, -16664; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill665; RV32ID-NEXT: call __extendhfsf2666; RV32ID-NEXT: fcvt.wu.s a0, fa0, rtz667; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload668; RV32ID-NEXT: addi sp, sp, 16669; RV32ID-NEXT: ret670;671; RV64ID-LABEL: fcvt_ui_h:672; RV64ID: # %bb.0:673; RV64ID-NEXT: addi sp, sp, -16674; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill675; RV64ID-NEXT: call __extendhfsf2676; RV64ID-NEXT: fcvt.lu.s a0, fa0, rtz677; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload678; RV64ID-NEXT: addi sp, sp, 16679; RV64ID-NEXT: ret680;681; CHECK32-IZFHMIN-LABEL: fcvt_ui_h:682; CHECK32-IZFHMIN: # %bb.0:683; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa0684; CHECK32-IZFHMIN-NEXT: fcvt.w.s a0, fa5, rtz685; CHECK32-IZFHMIN-NEXT: ret686;687; CHECK64-IZFHMIN-LABEL: fcvt_ui_h:688; CHECK64-IZFHMIN: # %bb.0:689; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa0690; CHECK64-IZFHMIN-NEXT: fcvt.l.s a0, fa5, rtz691; CHECK64-IZFHMIN-NEXT: ret692;693; CHECK32-IZHINXMIN-LABEL: fcvt_ui_h:694; CHECK32-IZHINXMIN: # %bb.0:695; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a0696; CHECK32-IZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz697; CHECK32-IZHINXMIN-NEXT: ret698;699; CHECK64-IZHINXMIN-LABEL: fcvt_ui_h:700; CHECK64-IZHINXMIN: # %bb.0:701; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a0702; CHECK64-IZHINXMIN-NEXT: fcvt.l.s a0, a0, rtz703; CHECK64-IZHINXMIN-NEXT: ret704;705; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_ui_h:706; CHECK32-IZDINXZHINXMIN: # %bb.0:707; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0708; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz709; CHECK32-IZDINXZHINXMIN-NEXT: ret710;711; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_ui_h:712; CHECK64-IZDINXZHINXMIN: # %bb.0:713; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0714; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.l.s a0, a0, rtz715; CHECK64-IZDINXZHINXMIN-NEXT: ret716 %1 = fptoui half %a to i16717 ret i16 %1718}719 720define i16 @fcvt_ui_h_sat(half %a) nounwind {721; RV32IZFH-LABEL: fcvt_ui_h_sat:722; RV32IZFH: # %bb.0: # %start723; RV32IZFH-NEXT: fcvt.s.h fa5, fa0724; RV32IZFH-NEXT: fmv.w.x fa4, zero725; RV32IZFH-NEXT: lui a0, 292864726; RV32IZFH-NEXT: fmax.s fa5, fa5, fa4727; RV32IZFH-NEXT: addi a0, a0, -256728; RV32IZFH-NEXT: fmv.w.x fa4, a0729; RV32IZFH-NEXT: fmin.s fa5, fa5, fa4730; RV32IZFH-NEXT: fcvt.wu.s a0, fa5, rtz731; RV32IZFH-NEXT: ret732;733; RV64IZFH-LABEL: fcvt_ui_h_sat:734; RV64IZFH: # %bb.0: # %start735; RV64IZFH-NEXT: fcvt.s.h fa5, fa0736; RV64IZFH-NEXT: fmv.w.x fa4, zero737; RV64IZFH-NEXT: lui a0, 292864738; RV64IZFH-NEXT: fmax.s fa5, fa5, fa4739; RV64IZFH-NEXT: addi a0, a0, -256740; RV64IZFH-NEXT: fmv.w.x fa4, a0741; RV64IZFH-NEXT: fmin.s fa5, fa5, fa4742; RV64IZFH-NEXT: fcvt.lu.s a0, fa5, rtz743; RV64IZFH-NEXT: ret744;745; RV32IDZFH-LABEL: fcvt_ui_h_sat:746; RV32IDZFH: # %bb.0: # %start747; RV32IDZFH-NEXT: fcvt.s.h fa5, fa0748; RV32IDZFH-NEXT: fmv.w.x fa4, zero749; RV32IDZFH-NEXT: lui a0, 292864750; RV32IDZFH-NEXT: fmax.s fa5, fa5, fa4751; RV32IDZFH-NEXT: addi a0, a0, -256752; RV32IDZFH-NEXT: fmv.w.x fa4, a0753; RV32IDZFH-NEXT: fmin.s fa5, fa5, fa4754; RV32IDZFH-NEXT: fcvt.wu.s a0, fa5, rtz755; RV32IDZFH-NEXT: ret756;757; RV64IDZFH-LABEL: fcvt_ui_h_sat:758; RV64IDZFH: # %bb.0: # %start759; RV64IDZFH-NEXT: fcvt.s.h fa5, fa0760; RV64IDZFH-NEXT: fmv.w.x fa4, zero761; RV64IDZFH-NEXT: lui a0, 292864762; RV64IDZFH-NEXT: fmax.s fa5, fa5, fa4763; RV64IDZFH-NEXT: addi a0, a0, -256764; RV64IDZFH-NEXT: fmv.w.x fa4, a0765; RV64IDZFH-NEXT: fmin.s fa5, fa5, fa4766; RV64IDZFH-NEXT: fcvt.lu.s a0, fa5, rtz767; RV64IDZFH-NEXT: ret768;769; RV32IZHINX-LABEL: fcvt_ui_h_sat:770; RV32IZHINX: # %bb.0: # %start771; RV32IZHINX-NEXT: fcvt.s.h a0, a0772; RV32IZHINX-NEXT: lui a1, 292864773; RV32IZHINX-NEXT: fmax.s a0, a0, zero774; RV32IZHINX-NEXT: addi a1, a1, -256775; RV32IZHINX-NEXT: fmin.s a0, a0, a1776; RV32IZHINX-NEXT: fcvt.wu.s a0, a0, rtz777; RV32IZHINX-NEXT: ret778;779; RV64IZHINX-LABEL: fcvt_ui_h_sat:780; RV64IZHINX: # %bb.0: # %start781; RV64IZHINX-NEXT: fcvt.s.h a0, a0782; RV64IZHINX-NEXT: lui a1, 292864783; RV64IZHINX-NEXT: fmax.s a0, a0, zero784; RV64IZHINX-NEXT: addi a1, a1, -256785; RV64IZHINX-NEXT: fmin.s a0, a0, a1786; RV64IZHINX-NEXT: fcvt.lu.s a0, a0, rtz787; RV64IZHINX-NEXT: ret788;789; RV32IZDINXZHINX-LABEL: fcvt_ui_h_sat:790; RV32IZDINXZHINX: # %bb.0: # %start791; RV32IZDINXZHINX-NEXT: fcvt.s.h a0, a0792; RV32IZDINXZHINX-NEXT: lui a1, 292864793; RV32IZDINXZHINX-NEXT: fmax.s a0, a0, zero794; RV32IZDINXZHINX-NEXT: addi a1, a1, -256795; RV32IZDINXZHINX-NEXT: fmin.s a0, a0, a1796; RV32IZDINXZHINX-NEXT: fcvt.wu.s a0, a0, rtz797; RV32IZDINXZHINX-NEXT: ret798;799; RV64IZDINXZHINX-LABEL: fcvt_ui_h_sat:800; RV64IZDINXZHINX: # %bb.0: # %start801; RV64IZDINXZHINX-NEXT: fcvt.s.h a0, a0802; RV64IZDINXZHINX-NEXT: lui a1, 292864803; RV64IZDINXZHINX-NEXT: fmax.s a0, a0, zero804; RV64IZDINXZHINX-NEXT: addi a1, a1, -256805; RV64IZDINXZHINX-NEXT: fmin.s a0, a0, a1806; RV64IZDINXZHINX-NEXT: fcvt.lu.s a0, a0, rtz807; RV64IZDINXZHINX-NEXT: ret808;809; RV32I-LABEL: fcvt_ui_h_sat:810; RV32I: # %bb.0: # %start811; RV32I-NEXT: addi sp, sp, -32812; RV32I-NEXT: sw ra, 28(sp) # 4-byte Folded Spill813; RV32I-NEXT: sw s0, 24(sp) # 4-byte Folded Spill814; RV32I-NEXT: sw s1, 20(sp) # 4-byte Folded Spill815; RV32I-NEXT: sw s2, 16(sp) # 4-byte Folded Spill816; RV32I-NEXT: sw s3, 12(sp) # 4-byte Folded Spill817; RV32I-NEXT: lui s0, 16818; RV32I-NEXT: addi s0, s0, -1819; RV32I-NEXT: and a0, a0, s0820; RV32I-NEXT: call __extendhfsf2821; RV32I-NEXT: mv s3, a0822; RV32I-NEXT: call __fixunssfsi823; RV32I-NEXT: mv s1, a0824; RV32I-NEXT: mv a0, s3825; RV32I-NEXT: li a1, 0826; RV32I-NEXT: call __gesf2827; RV32I-NEXT: mv s2, a0828; RV32I-NEXT: lui a1, 292864829; RV32I-NEXT: addi a1, a1, -256830; RV32I-NEXT: mv a0, s3831; RV32I-NEXT: call __gtsf2832; RV32I-NEXT: bgtz a0, .LBB3_2833; RV32I-NEXT: # %bb.1:834; RV32I-NEXT: srli a0, s2, 31835; RV32I-NEXT: addi a0, a0, -1836; RV32I-NEXT: and s0, a0, s1837; RV32I-NEXT: .LBB3_2: # %start838; RV32I-NEXT: mv a0, s0839; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload840; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload841; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload842; RV32I-NEXT: lw s2, 16(sp) # 4-byte Folded Reload843; RV32I-NEXT: lw s3, 12(sp) # 4-byte Folded Reload844; RV32I-NEXT: addi sp, sp, 32845; RV32I-NEXT: ret846;847; RV64I-LABEL: fcvt_ui_h_sat:848; RV64I: # %bb.0: # %start849; RV64I-NEXT: addi sp, sp, -48850; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill851; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill852; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill853; RV64I-NEXT: sd s2, 16(sp) # 8-byte Folded Spill854; RV64I-NEXT: sd s3, 8(sp) # 8-byte Folded Spill855; RV64I-NEXT: lui s0, 16856; RV64I-NEXT: addi s0, s0, -1857; RV64I-NEXT: and a0, a0, s0858; RV64I-NEXT: call __extendhfsf2859; RV64I-NEXT: mv s3, a0860; RV64I-NEXT: call __fixunssfdi861; RV64I-NEXT: mv s1, a0862; RV64I-NEXT: mv a0, s3863; RV64I-NEXT: li a1, 0864; RV64I-NEXT: call __gesf2865; RV64I-NEXT: mv s2, a0866; RV64I-NEXT: lui a1, 292864867; RV64I-NEXT: addi a1, a1, -256868; RV64I-NEXT: mv a0, s3869; RV64I-NEXT: call __gtsf2870; RV64I-NEXT: bgtz a0, .LBB3_2871; RV64I-NEXT: # %bb.1:872; RV64I-NEXT: srli a0, s2, 63873; RV64I-NEXT: addi a0, a0, -1874; RV64I-NEXT: and s0, a0, s1875; RV64I-NEXT: .LBB3_2: # %start876; RV64I-NEXT: mv a0, s0877; RV64I-NEXT: ld ra, 40(sp) # 8-byte Folded Reload878; RV64I-NEXT: ld s0, 32(sp) # 8-byte Folded Reload879; RV64I-NEXT: ld s1, 24(sp) # 8-byte Folded Reload880; RV64I-NEXT: ld s2, 16(sp) # 8-byte Folded Reload881; RV64I-NEXT: ld s3, 8(sp) # 8-byte Folded Reload882; RV64I-NEXT: addi sp, sp, 48883; RV64I-NEXT: ret884;885; RV32ID-ILP32-LABEL: fcvt_ui_h_sat:886; RV32ID-ILP32: # %bb.0: # %start887; RV32ID-ILP32-NEXT: addi sp, sp, -16888; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill889; RV32ID-ILP32-NEXT: call __extendhfsf2890; RV32ID-ILP32-NEXT: fmv.w.x fa5, a0891; RV32ID-ILP32-NEXT: fmv.w.x fa4, zero892; RV32ID-ILP32-NEXT: lui a0, 292864893; RV32ID-ILP32-NEXT: fmax.s fa5, fa5, fa4894; RV32ID-ILP32-NEXT: addi a0, a0, -256895; RV32ID-ILP32-NEXT: fmv.w.x fa4, a0896; RV32ID-ILP32-NEXT: fmin.s fa5, fa5, fa4897; RV32ID-ILP32-NEXT: fcvt.wu.s a0, fa5, rtz898; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload899; RV32ID-ILP32-NEXT: addi sp, sp, 16900; RV32ID-ILP32-NEXT: ret901;902; RV64ID-LP64-LABEL: fcvt_ui_h_sat:903; RV64ID-LP64: # %bb.0: # %start904; RV64ID-LP64-NEXT: addi sp, sp, -16905; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill906; RV64ID-LP64-NEXT: call __extendhfsf2907; RV64ID-LP64-NEXT: fmv.w.x fa5, a0908; RV64ID-LP64-NEXT: fmv.w.x fa4, zero909; RV64ID-LP64-NEXT: lui a0, 292864910; RV64ID-LP64-NEXT: fmax.s fa5, fa5, fa4911; RV64ID-LP64-NEXT: addi a0, a0, -256912; RV64ID-LP64-NEXT: fmv.w.x fa4, a0913; RV64ID-LP64-NEXT: fmin.s fa5, fa5, fa4914; RV64ID-LP64-NEXT: fcvt.lu.s a0, fa5, rtz915; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload916; RV64ID-LP64-NEXT: addi sp, sp, 16917; RV64ID-LP64-NEXT: ret918;919; RV32ID-LABEL: fcvt_ui_h_sat:920; RV32ID: # %bb.0: # %start921; RV32ID-NEXT: addi sp, sp, -16922; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill923; RV32ID-NEXT: call __extendhfsf2924; RV32ID-NEXT: fmv.w.x fa5, zero925; RV32ID-NEXT: lui a0, 292864926; RV32ID-NEXT: fmax.s fa5, fa0, fa5927; RV32ID-NEXT: addi a0, a0, -256928; RV32ID-NEXT: fmv.w.x fa4, a0929; RV32ID-NEXT: fmin.s fa5, fa5, fa4930; RV32ID-NEXT: fcvt.wu.s a0, fa5, rtz931; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload932; RV32ID-NEXT: addi sp, sp, 16933; RV32ID-NEXT: ret934;935; RV64ID-LABEL: fcvt_ui_h_sat:936; RV64ID: # %bb.0: # %start937; RV64ID-NEXT: addi sp, sp, -16938; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill939; RV64ID-NEXT: call __extendhfsf2940; RV64ID-NEXT: fmv.w.x fa5, zero941; RV64ID-NEXT: lui a0, 292864942; RV64ID-NEXT: fmax.s fa5, fa0, fa5943; RV64ID-NEXT: addi a0, a0, -256944; RV64ID-NEXT: fmv.w.x fa4, a0945; RV64ID-NEXT: fmin.s fa5, fa5, fa4946; RV64ID-NEXT: fcvt.lu.s a0, fa5, rtz947; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload948; RV64ID-NEXT: addi sp, sp, 16949; RV64ID-NEXT: ret950;951; CHECK32-IZFHMIN-LABEL: fcvt_ui_h_sat:952; CHECK32-IZFHMIN: # %bb.0: # %start953; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa0954; CHECK32-IZFHMIN-NEXT: fmv.w.x fa4, zero955; CHECK32-IZFHMIN-NEXT: lui a0, 292864956; CHECK32-IZFHMIN-NEXT: fmax.s fa5, fa5, fa4957; CHECK32-IZFHMIN-NEXT: addi a0, a0, -256958; CHECK32-IZFHMIN-NEXT: fmv.w.x fa4, a0959; CHECK32-IZFHMIN-NEXT: fmin.s fa5, fa5, fa4960; CHECK32-IZFHMIN-NEXT: fcvt.wu.s a0, fa5, rtz961; CHECK32-IZFHMIN-NEXT: ret962;963; CHECK64-IZFHMIN-LABEL: fcvt_ui_h_sat:964; CHECK64-IZFHMIN: # %bb.0: # %start965; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa0966; CHECK64-IZFHMIN-NEXT: fmv.w.x fa4, zero967; CHECK64-IZFHMIN-NEXT: lui a0, 292864968; CHECK64-IZFHMIN-NEXT: fmax.s fa5, fa5, fa4969; CHECK64-IZFHMIN-NEXT: addi a0, a0, -256970; CHECK64-IZFHMIN-NEXT: fmv.w.x fa4, a0971; CHECK64-IZFHMIN-NEXT: fmin.s fa5, fa5, fa4972; CHECK64-IZFHMIN-NEXT: fcvt.lu.s a0, fa5, rtz973; CHECK64-IZFHMIN-NEXT: ret974;975; CHECK32-IZHINXMIN-LABEL: fcvt_ui_h_sat:976; CHECK32-IZHINXMIN: # %bb.0: # %start977; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a0978; CHECK32-IZHINXMIN-NEXT: lui a1, 292864979; CHECK32-IZHINXMIN-NEXT: fmax.s a0, a0, zero980; CHECK32-IZHINXMIN-NEXT: addi a1, a1, -256981; CHECK32-IZHINXMIN-NEXT: fmin.s a0, a0, a1982; CHECK32-IZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz983; CHECK32-IZHINXMIN-NEXT: ret984;985; CHECK64-IZHINXMIN-LABEL: fcvt_ui_h_sat:986; CHECK64-IZHINXMIN: # %bb.0: # %start987; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a0988; CHECK64-IZHINXMIN-NEXT: lui a1, 292864989; CHECK64-IZHINXMIN-NEXT: fmax.s a0, a0, zero990; CHECK64-IZHINXMIN-NEXT: addi a1, a1, -256991; CHECK64-IZHINXMIN-NEXT: fmin.s a0, a0, a1992; CHECK64-IZHINXMIN-NEXT: fcvt.lu.s a0, a0, rtz993; CHECK64-IZHINXMIN-NEXT: ret994;995; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_ui_h_sat:996; CHECK32-IZDINXZHINXMIN: # %bb.0: # %start997; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a0998; CHECK32-IZDINXZHINXMIN-NEXT: lui a1, 292864999; CHECK32-IZDINXZHINXMIN-NEXT: fmax.s a0, a0, zero1000; CHECK32-IZDINXZHINXMIN-NEXT: addi a1, a1, -2561001; CHECK32-IZDINXZHINXMIN-NEXT: fmin.s a0, a0, a11002; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz1003; CHECK32-IZDINXZHINXMIN-NEXT: ret1004;1005; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_ui_h_sat:1006; CHECK64-IZDINXZHINXMIN: # %bb.0: # %start1007; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a01008; CHECK64-IZDINXZHINXMIN-NEXT: lui a1, 2928641009; CHECK64-IZDINXZHINXMIN-NEXT: fmax.s a0, a0, zero1010; CHECK64-IZDINXZHINXMIN-NEXT: addi a1, a1, -2561011; CHECK64-IZDINXZHINXMIN-NEXT: fmin.s a0, a0, a11012; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.lu.s a0, a0, rtz1013; CHECK64-IZDINXZHINXMIN-NEXT: ret1014start:1015 %0 = tail call i16 @llvm.fptoui.sat.i16.f16(half %a)1016 ret i16 %01017}1018 1019define i32 @fcvt_w_h(half %a) nounwind {1020; CHECKIZFH-LABEL: fcvt_w_h:1021; CHECKIZFH: # %bb.0:1022; CHECKIZFH-NEXT: fcvt.w.h a0, fa0, rtz1023; CHECKIZFH-NEXT: ret1024;1025; RV32IDZFH-LABEL: fcvt_w_h:1026; RV32IDZFH: # %bb.0:1027; RV32IDZFH-NEXT: fcvt.w.h a0, fa0, rtz1028; RV32IDZFH-NEXT: ret1029;1030; RV64IDZFH-LABEL: fcvt_w_h:1031; RV64IDZFH: # %bb.0:1032; RV64IDZFH-NEXT: fcvt.w.h a0, fa0, rtz1033; RV64IDZFH-NEXT: ret1034;1035; CHECKIZHINX-LABEL: fcvt_w_h:1036; CHECKIZHINX: # %bb.0:1037; CHECKIZHINX-NEXT: fcvt.w.h a0, a0, rtz1038; CHECKIZHINX-NEXT: ret1039;1040; CHECKIZDINXZHINX-LABEL: fcvt_w_h:1041; CHECKIZDINXZHINX: # %bb.0:1042; CHECKIZDINXZHINX-NEXT: fcvt.w.h a0, a0, rtz1043; CHECKIZDINXZHINX-NEXT: ret1044;1045; RV32I-LABEL: fcvt_w_h:1046; RV32I: # %bb.0:1047; RV32I-NEXT: addi sp, sp, -161048; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1049; RV32I-NEXT: slli a0, a0, 161050; RV32I-NEXT: srli a0, a0, 161051; RV32I-NEXT: call __extendhfsf21052; RV32I-NEXT: call __fixsfsi1053; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1054; RV32I-NEXT: addi sp, sp, 161055; RV32I-NEXT: ret1056;1057; RV64I-LABEL: fcvt_w_h:1058; RV64I: # %bb.0:1059; RV64I-NEXT: addi sp, sp, -161060; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1061; RV64I-NEXT: slli a0, a0, 481062; RV64I-NEXT: srli a0, a0, 481063; RV64I-NEXT: call __extendhfsf21064; RV64I-NEXT: call __fixsfdi1065; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1066; RV64I-NEXT: addi sp, sp, 161067; RV64I-NEXT: ret1068;1069; RV32ID-ILP32-LABEL: fcvt_w_h:1070; RV32ID-ILP32: # %bb.0:1071; RV32ID-ILP32-NEXT: addi sp, sp, -161072; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1073; RV32ID-ILP32-NEXT: call __extendhfsf21074; RV32ID-ILP32-NEXT: fmv.w.x fa5, a01075; RV32ID-ILP32-NEXT: fcvt.w.s a0, fa5, rtz1076; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1077; RV32ID-ILP32-NEXT: addi sp, sp, 161078; RV32ID-ILP32-NEXT: ret1079;1080; RV64ID-LP64-LABEL: fcvt_w_h:1081; RV64ID-LP64: # %bb.0:1082; RV64ID-LP64-NEXT: addi sp, sp, -161083; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1084; RV64ID-LP64-NEXT: call __extendhfsf21085; RV64ID-LP64-NEXT: fmv.w.x fa5, a01086; RV64ID-LP64-NEXT: fcvt.l.s a0, fa5, rtz1087; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1088; RV64ID-LP64-NEXT: addi sp, sp, 161089; RV64ID-LP64-NEXT: ret1090;1091; RV32ID-LABEL: fcvt_w_h:1092; RV32ID: # %bb.0:1093; RV32ID-NEXT: addi sp, sp, -161094; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1095; RV32ID-NEXT: call __extendhfsf21096; RV32ID-NEXT: fcvt.w.s a0, fa0, rtz1097; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1098; RV32ID-NEXT: addi sp, sp, 161099; RV32ID-NEXT: ret1100;1101; RV64ID-LABEL: fcvt_w_h:1102; RV64ID: # %bb.0:1103; RV64ID-NEXT: addi sp, sp, -161104; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1105; RV64ID-NEXT: call __extendhfsf21106; RV64ID-NEXT: fcvt.l.s a0, fa0, rtz1107; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1108; RV64ID-NEXT: addi sp, sp, 161109; RV64ID-NEXT: ret1110;1111; CHECK32-IZFHMIN-LABEL: fcvt_w_h:1112; CHECK32-IZFHMIN: # %bb.0:1113; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa01114; CHECK32-IZFHMIN-NEXT: fcvt.w.s a0, fa5, rtz1115; CHECK32-IZFHMIN-NEXT: ret1116;1117; CHECK64-IZFHMIN-LABEL: fcvt_w_h:1118; CHECK64-IZFHMIN: # %bb.0:1119; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa01120; CHECK64-IZFHMIN-NEXT: fcvt.w.s a0, fa5, rtz1121; CHECK64-IZFHMIN-NEXT: ret1122;1123; CHECK32-IZHINXMIN-LABEL: fcvt_w_h:1124; CHECK32-IZHINXMIN: # %bb.0:1125; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a01126; CHECK32-IZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz1127; CHECK32-IZHINXMIN-NEXT: ret1128;1129; CHECK64-IZHINXMIN-LABEL: fcvt_w_h:1130; CHECK64-IZHINXMIN: # %bb.0:1131; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a01132; CHECK64-IZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz1133; CHECK64-IZHINXMIN-NEXT: ret1134;1135; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_w_h:1136; CHECK32-IZDINXZHINXMIN: # %bb.0:1137; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a01138; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz1139; CHECK32-IZDINXZHINXMIN-NEXT: ret1140;1141; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_w_h:1142; CHECK64-IZDINXZHINXMIN: # %bb.0:1143; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a01144; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz1145; CHECK64-IZDINXZHINXMIN-NEXT: ret1146 %1 = fptosi half %a to i321147 ret i32 %11148}1149 1150define i32 @fcvt_w_h_sat(half %a) nounwind {1151; CHECKIZFH-LABEL: fcvt_w_h_sat:1152; CHECKIZFH: # %bb.0: # %start1153; CHECKIZFH-NEXT: fcvt.w.h a0, fa0, rtz1154; CHECKIZFH-NEXT: feq.h a1, fa0, fa01155; CHECKIZFH-NEXT: seqz a1, a11156; CHECKIZFH-NEXT: addi a1, a1, -11157; CHECKIZFH-NEXT: and a0, a1, a01158; CHECKIZFH-NEXT: ret1159;1160; RV32IDZFH-LABEL: fcvt_w_h_sat:1161; RV32IDZFH: # %bb.0: # %start1162; RV32IDZFH-NEXT: fcvt.w.h a0, fa0, rtz1163; RV32IDZFH-NEXT: feq.h a1, fa0, fa01164; RV32IDZFH-NEXT: seqz a1, a11165; RV32IDZFH-NEXT: addi a1, a1, -11166; RV32IDZFH-NEXT: and a0, a1, a01167; RV32IDZFH-NEXT: ret1168;1169; RV64IDZFH-LABEL: fcvt_w_h_sat:1170; RV64IDZFH: # %bb.0: # %start1171; RV64IDZFH-NEXT: fcvt.w.h a0, fa0, rtz1172; RV64IDZFH-NEXT: feq.h a1, fa0, fa01173; RV64IDZFH-NEXT: seqz a1, a11174; RV64IDZFH-NEXT: addi a1, a1, -11175; RV64IDZFH-NEXT: and a0, a1, a01176; RV64IDZFH-NEXT: ret1177;1178; CHECKIZHINX-LABEL: fcvt_w_h_sat:1179; CHECKIZHINX: # %bb.0: # %start1180; CHECKIZHINX-NEXT: fcvt.w.h a1, a0, rtz1181; CHECKIZHINX-NEXT: feq.h a0, a0, a01182; CHECKIZHINX-NEXT: seqz a0, a01183; CHECKIZHINX-NEXT: addi a0, a0, -11184; CHECKIZHINX-NEXT: and a0, a0, a11185; CHECKIZHINX-NEXT: ret1186;1187; CHECKIZDINXZHINX-LABEL: fcvt_w_h_sat:1188; CHECKIZDINXZHINX: # %bb.0: # %start1189; CHECKIZDINXZHINX-NEXT: fcvt.w.h a1, a0, rtz1190; CHECKIZDINXZHINX-NEXT: feq.h a0, a0, a01191; CHECKIZDINXZHINX-NEXT: seqz a0, a01192; CHECKIZDINXZHINX-NEXT: addi a0, a0, -11193; CHECKIZDINXZHINX-NEXT: and a0, a0, a11194; CHECKIZDINXZHINX-NEXT: ret1195;1196; RV32I-LABEL: fcvt_w_h_sat:1197; RV32I: # %bb.0: # %start1198; RV32I-NEXT: addi sp, sp, -321199; RV32I-NEXT: sw ra, 28(sp) # 4-byte Folded Spill1200; RV32I-NEXT: sw s0, 24(sp) # 4-byte Folded Spill1201; RV32I-NEXT: sw s1, 20(sp) # 4-byte Folded Spill1202; RV32I-NEXT: sw s2, 16(sp) # 4-byte Folded Spill1203; RV32I-NEXT: sw s3, 12(sp) # 4-byte Folded Spill1204; RV32I-NEXT: slli a0, a0, 161205; RV32I-NEXT: srli a0, a0, 161206; RV32I-NEXT: call __extendhfsf21207; RV32I-NEXT: mv s0, a01208; RV32I-NEXT: lui a1, 8478721209; RV32I-NEXT: call __gesf21210; RV32I-NEXT: mv s2, a01211; RV32I-NEXT: mv a0, s01212; RV32I-NEXT: call __fixsfsi1213; RV32I-NEXT: mv s1, a01214; RV32I-NEXT: lui s3, 5242881215; RV32I-NEXT: bgez s2, .LBB5_21216; RV32I-NEXT: # %bb.1: # %start1217; RV32I-NEXT: lui s1, 5242881218; RV32I-NEXT: .LBB5_2: # %start1219; RV32I-NEXT: lui a1, 3235841220; RV32I-NEXT: addi a1, a1, -11221; RV32I-NEXT: mv a0, s01222; RV32I-NEXT: call __gtsf21223; RV32I-NEXT: blez a0, .LBB5_41224; RV32I-NEXT: # %bb.3: # %start1225; RV32I-NEXT: addi s1, s3, -11226; RV32I-NEXT: .LBB5_4: # %start1227; RV32I-NEXT: mv a0, s01228; RV32I-NEXT: mv a1, s01229; RV32I-NEXT: call __unordsf21230; RV32I-NEXT: snez a0, a01231; RV32I-NEXT: addi a0, a0, -11232; RV32I-NEXT: and a0, a0, s11233; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload1234; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload1235; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload1236; RV32I-NEXT: lw s2, 16(sp) # 4-byte Folded Reload1237; RV32I-NEXT: lw s3, 12(sp) # 4-byte Folded Reload1238; RV32I-NEXT: addi sp, sp, 321239; RV32I-NEXT: ret1240;1241; RV64I-LABEL: fcvt_w_h_sat:1242; RV64I: # %bb.0: # %start1243; RV64I-NEXT: addi sp, sp, -481244; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill1245; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill1246; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill1247; RV64I-NEXT: sd s2, 16(sp) # 8-byte Folded Spill1248; RV64I-NEXT: sd s3, 8(sp) # 8-byte Folded Spill1249; RV64I-NEXT: slli a0, a0, 481250; RV64I-NEXT: srli a0, a0, 481251; RV64I-NEXT: call __extendhfsf21252; RV64I-NEXT: mv s0, a01253; RV64I-NEXT: lui a1, 8478721254; RV64I-NEXT: call __gesf21255; RV64I-NEXT: mv s2, a01256; RV64I-NEXT: mv a0, s01257; RV64I-NEXT: call __fixsfdi1258; RV64I-NEXT: mv s1, a01259; RV64I-NEXT: lui s3, 5242881260; RV64I-NEXT: bgez s2, .LBB5_21261; RV64I-NEXT: # %bb.1: # %start1262; RV64I-NEXT: lui s1, 5242881263; RV64I-NEXT: .LBB5_2: # %start1264; RV64I-NEXT: lui a1, 3235841265; RV64I-NEXT: addi a1, a1, -11266; RV64I-NEXT: mv a0, s01267; RV64I-NEXT: call __gtsf21268; RV64I-NEXT: blez a0, .LBB5_41269; RV64I-NEXT: # %bb.3: # %start1270; RV64I-NEXT: addiw s1, s3, -11271; RV64I-NEXT: .LBB5_4: # %start1272; RV64I-NEXT: mv a0, s01273; RV64I-NEXT: mv a1, s01274; RV64I-NEXT: call __unordsf21275; RV64I-NEXT: snez a0, a01276; RV64I-NEXT: addi a0, a0, -11277; RV64I-NEXT: and a0, a0, s11278; RV64I-NEXT: ld ra, 40(sp) # 8-byte Folded Reload1279; RV64I-NEXT: ld s0, 32(sp) # 8-byte Folded Reload1280; RV64I-NEXT: ld s1, 24(sp) # 8-byte Folded Reload1281; RV64I-NEXT: ld s2, 16(sp) # 8-byte Folded Reload1282; RV64I-NEXT: ld s3, 8(sp) # 8-byte Folded Reload1283; RV64I-NEXT: addi sp, sp, 481284; RV64I-NEXT: ret1285;1286; RV32ID-ILP32-LABEL: fcvt_w_h_sat:1287; RV32ID-ILP32: # %bb.0: # %start1288; RV32ID-ILP32-NEXT: addi sp, sp, -161289; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1290; RV32ID-ILP32-NEXT: call __extendhfsf21291; RV32ID-ILP32-NEXT: fmv.w.x fa5, a01292; RV32ID-ILP32-NEXT: fcvt.w.s a0, fa5, rtz1293; RV32ID-ILP32-NEXT: feq.s a1, fa5, fa51294; RV32ID-ILP32-NEXT: seqz a1, a11295; RV32ID-ILP32-NEXT: addi a1, a1, -11296; RV32ID-ILP32-NEXT: and a0, a1, a01297; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1298; RV32ID-ILP32-NEXT: addi sp, sp, 161299; RV32ID-ILP32-NEXT: ret1300;1301; RV64ID-LP64-LABEL: fcvt_w_h_sat:1302; RV64ID-LP64: # %bb.0: # %start1303; RV64ID-LP64-NEXT: addi sp, sp, -161304; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1305; RV64ID-LP64-NEXT: call __extendhfsf21306; RV64ID-LP64-NEXT: fmv.w.x fa5, a01307; RV64ID-LP64-NEXT: fcvt.w.s a0, fa5, rtz1308; RV64ID-LP64-NEXT: feq.s a1, fa5, fa51309; RV64ID-LP64-NEXT: seqz a1, a11310; RV64ID-LP64-NEXT: addi a1, a1, -11311; RV64ID-LP64-NEXT: and a0, a1, a01312; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1313; RV64ID-LP64-NEXT: addi sp, sp, 161314; RV64ID-LP64-NEXT: ret1315;1316; RV32ID-LABEL: fcvt_w_h_sat:1317; RV32ID: # %bb.0: # %start1318; RV32ID-NEXT: addi sp, sp, -161319; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1320; RV32ID-NEXT: call __extendhfsf21321; RV32ID-NEXT: fcvt.w.s a0, fa0, rtz1322; RV32ID-NEXT: feq.s a1, fa0, fa01323; RV32ID-NEXT: seqz a1, a11324; RV32ID-NEXT: addi a1, a1, -11325; RV32ID-NEXT: and a0, a1, a01326; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1327; RV32ID-NEXT: addi sp, sp, 161328; RV32ID-NEXT: ret1329;1330; RV64ID-LABEL: fcvt_w_h_sat:1331; RV64ID: # %bb.0: # %start1332; RV64ID-NEXT: addi sp, sp, -161333; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1334; RV64ID-NEXT: call __extendhfsf21335; RV64ID-NEXT: fcvt.w.s a0, fa0, rtz1336; RV64ID-NEXT: feq.s a1, fa0, fa01337; RV64ID-NEXT: seqz a1, a11338; RV64ID-NEXT: addi a1, a1, -11339; RV64ID-NEXT: and a0, a1, a01340; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1341; RV64ID-NEXT: addi sp, sp, 161342; RV64ID-NEXT: ret1343;1344; CHECK32-IZFHMIN-LABEL: fcvt_w_h_sat:1345; CHECK32-IZFHMIN: # %bb.0: # %start1346; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa01347; CHECK32-IZFHMIN-NEXT: fcvt.w.s a0, fa5, rtz1348; CHECK32-IZFHMIN-NEXT: feq.s a1, fa5, fa51349; CHECK32-IZFHMIN-NEXT: seqz a1, a11350; CHECK32-IZFHMIN-NEXT: addi a1, a1, -11351; CHECK32-IZFHMIN-NEXT: and a0, a1, a01352; CHECK32-IZFHMIN-NEXT: ret1353;1354; CHECK64-IZFHMIN-LABEL: fcvt_w_h_sat:1355; CHECK64-IZFHMIN: # %bb.0: # %start1356; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa01357; CHECK64-IZFHMIN-NEXT: fcvt.w.s a0, fa5, rtz1358; CHECK64-IZFHMIN-NEXT: feq.s a1, fa5, fa51359; CHECK64-IZFHMIN-NEXT: seqz a1, a11360; CHECK64-IZFHMIN-NEXT: addi a1, a1, -11361; CHECK64-IZFHMIN-NEXT: and a0, a1, a01362; CHECK64-IZFHMIN-NEXT: ret1363;1364; CHECK32-IZHINXMIN-LABEL: fcvt_w_h_sat:1365; CHECK32-IZHINXMIN: # %bb.0: # %start1366; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a01367; CHECK32-IZHINXMIN-NEXT: fcvt.w.s a1, a0, rtz1368; CHECK32-IZHINXMIN-NEXT: feq.s a0, a0, a01369; CHECK32-IZHINXMIN-NEXT: seqz a0, a01370; CHECK32-IZHINXMIN-NEXT: addi a0, a0, -11371; CHECK32-IZHINXMIN-NEXT: and a0, a0, a11372; CHECK32-IZHINXMIN-NEXT: ret1373;1374; CHECK64-IZHINXMIN-LABEL: fcvt_w_h_sat:1375; CHECK64-IZHINXMIN: # %bb.0: # %start1376; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a01377; CHECK64-IZHINXMIN-NEXT: fcvt.w.s a1, a0, rtz1378; CHECK64-IZHINXMIN-NEXT: feq.s a0, a0, a01379; CHECK64-IZHINXMIN-NEXT: seqz a0, a01380; CHECK64-IZHINXMIN-NEXT: addi a0, a0, -11381; CHECK64-IZHINXMIN-NEXT: and a0, a0, a11382; CHECK64-IZHINXMIN-NEXT: ret1383;1384; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_w_h_sat:1385; CHECK32-IZDINXZHINXMIN: # %bb.0: # %start1386; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a01387; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.w.s a1, a0, rtz1388; CHECK32-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a01389; CHECK32-IZDINXZHINXMIN-NEXT: seqz a0, a01390; CHECK32-IZDINXZHINXMIN-NEXT: addi a0, a0, -11391; CHECK32-IZDINXZHINXMIN-NEXT: and a0, a0, a11392; CHECK32-IZDINXZHINXMIN-NEXT: ret1393;1394; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_w_h_sat:1395; CHECK64-IZDINXZHINXMIN: # %bb.0: # %start1396; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a01397; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.w.s a1, a0, rtz1398; CHECK64-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a01399; CHECK64-IZDINXZHINXMIN-NEXT: seqz a0, a01400; CHECK64-IZDINXZHINXMIN-NEXT: addi a0, a0, -11401; CHECK64-IZDINXZHINXMIN-NEXT: and a0, a0, a11402; CHECK64-IZDINXZHINXMIN-NEXT: ret1403start:1404 %0 = tail call i32 @llvm.fptosi.sat.i32.f16(half %a)1405 ret i32 %01406}1407 1408define i32 @fcvt_wu_h(half %a) nounwind {1409; CHECKIZFH-LABEL: fcvt_wu_h:1410; CHECKIZFH: # %bb.0:1411; CHECKIZFH-NEXT: fcvt.wu.h a0, fa0, rtz1412; CHECKIZFH-NEXT: ret1413;1414; RV32IDZFH-LABEL: fcvt_wu_h:1415; RV32IDZFH: # %bb.0:1416; RV32IDZFH-NEXT: fcvt.wu.h a0, fa0, rtz1417; RV32IDZFH-NEXT: ret1418;1419; RV64IDZFH-LABEL: fcvt_wu_h:1420; RV64IDZFH: # %bb.0:1421; RV64IDZFH-NEXT: fcvt.wu.h a0, fa0, rtz1422; RV64IDZFH-NEXT: ret1423;1424; CHECKIZHINX-LABEL: fcvt_wu_h:1425; CHECKIZHINX: # %bb.0:1426; CHECKIZHINX-NEXT: fcvt.wu.h a0, a0, rtz1427; CHECKIZHINX-NEXT: ret1428;1429; CHECKIZDINXZHINX-LABEL: fcvt_wu_h:1430; CHECKIZDINXZHINX: # %bb.0:1431; CHECKIZDINXZHINX-NEXT: fcvt.wu.h a0, a0, rtz1432; CHECKIZDINXZHINX-NEXT: ret1433;1434; RV32I-LABEL: fcvt_wu_h:1435; RV32I: # %bb.0:1436; RV32I-NEXT: addi sp, sp, -161437; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1438; RV32I-NEXT: slli a0, a0, 161439; RV32I-NEXT: srli a0, a0, 161440; RV32I-NEXT: call __extendhfsf21441; RV32I-NEXT: call __fixunssfsi1442; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1443; RV32I-NEXT: addi sp, sp, 161444; RV32I-NEXT: ret1445;1446; RV64I-LABEL: fcvt_wu_h:1447; RV64I: # %bb.0:1448; RV64I-NEXT: addi sp, sp, -161449; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1450; RV64I-NEXT: slli a0, a0, 481451; RV64I-NEXT: srli a0, a0, 481452; RV64I-NEXT: call __extendhfsf21453; RV64I-NEXT: call __fixunssfdi1454; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1455; RV64I-NEXT: addi sp, sp, 161456; RV64I-NEXT: ret1457;1458; RV32ID-ILP32-LABEL: fcvt_wu_h:1459; RV32ID-ILP32: # %bb.0:1460; RV32ID-ILP32-NEXT: addi sp, sp, -161461; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1462; RV32ID-ILP32-NEXT: call __extendhfsf21463; RV32ID-ILP32-NEXT: fmv.w.x fa5, a01464; RV32ID-ILP32-NEXT: fcvt.wu.s a0, fa5, rtz1465; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1466; RV32ID-ILP32-NEXT: addi sp, sp, 161467; RV32ID-ILP32-NEXT: ret1468;1469; RV64ID-LP64-LABEL: fcvt_wu_h:1470; RV64ID-LP64: # %bb.0:1471; RV64ID-LP64-NEXT: addi sp, sp, -161472; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1473; RV64ID-LP64-NEXT: call __extendhfsf21474; RV64ID-LP64-NEXT: fmv.w.x fa5, a01475; RV64ID-LP64-NEXT: fcvt.lu.s a0, fa5, rtz1476; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1477; RV64ID-LP64-NEXT: addi sp, sp, 161478; RV64ID-LP64-NEXT: ret1479;1480; RV32ID-LABEL: fcvt_wu_h:1481; RV32ID: # %bb.0:1482; RV32ID-NEXT: addi sp, sp, -161483; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1484; RV32ID-NEXT: call __extendhfsf21485; RV32ID-NEXT: fcvt.wu.s a0, fa0, rtz1486; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1487; RV32ID-NEXT: addi sp, sp, 161488; RV32ID-NEXT: ret1489;1490; RV64ID-LABEL: fcvt_wu_h:1491; RV64ID: # %bb.0:1492; RV64ID-NEXT: addi sp, sp, -161493; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1494; RV64ID-NEXT: call __extendhfsf21495; RV64ID-NEXT: fcvt.lu.s a0, fa0, rtz1496; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1497; RV64ID-NEXT: addi sp, sp, 161498; RV64ID-NEXT: ret1499;1500; CHECK32-IZFHMIN-LABEL: fcvt_wu_h:1501; CHECK32-IZFHMIN: # %bb.0:1502; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa01503; CHECK32-IZFHMIN-NEXT: fcvt.wu.s a0, fa5, rtz1504; CHECK32-IZFHMIN-NEXT: ret1505;1506; CHECK64-IZFHMIN-LABEL: fcvt_wu_h:1507; CHECK64-IZFHMIN: # %bb.0:1508; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa01509; CHECK64-IZFHMIN-NEXT: fcvt.wu.s a0, fa5, rtz1510; CHECK64-IZFHMIN-NEXT: ret1511;1512; CHECK32-IZHINXMIN-LABEL: fcvt_wu_h:1513; CHECK32-IZHINXMIN: # %bb.0:1514; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a01515; CHECK32-IZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz1516; CHECK32-IZHINXMIN-NEXT: ret1517;1518; CHECK64-IZHINXMIN-LABEL: fcvt_wu_h:1519; CHECK64-IZHINXMIN: # %bb.0:1520; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a01521; CHECK64-IZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz1522; CHECK64-IZHINXMIN-NEXT: ret1523;1524; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_wu_h:1525; CHECK32-IZDINXZHINXMIN: # %bb.0:1526; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a01527; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz1528; CHECK32-IZDINXZHINXMIN-NEXT: ret1529;1530; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_wu_h:1531; CHECK64-IZDINXZHINXMIN: # %bb.0:1532; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a01533; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz1534; CHECK64-IZDINXZHINXMIN-NEXT: ret1535 %1 = fptoui half %a to i321536 ret i32 %11537}1538 1539; Test where the fptoui has multiple uses, one of which causes a sext to be1540; inserted on RV64.1541define i32 @fcvt_wu_h_multiple_use(half %x, ptr %y) nounwind {1542; CHECKIZFH-LABEL: fcvt_wu_h_multiple_use:1543; CHECKIZFH: # %bb.0:1544; CHECKIZFH-NEXT: fcvt.wu.h a0, fa0, rtz1545; CHECKIZFH-NEXT: seqz a1, a01546; CHECKIZFH-NEXT: add a0, a0, a11547; CHECKIZFH-NEXT: ret1548;1549; RV32IDZFH-LABEL: fcvt_wu_h_multiple_use:1550; RV32IDZFH: # %bb.0:1551; RV32IDZFH-NEXT: fcvt.wu.h a0, fa0, rtz1552; RV32IDZFH-NEXT: seqz a1, a01553; RV32IDZFH-NEXT: add a0, a0, a11554; RV32IDZFH-NEXT: ret1555;1556; RV64IDZFH-LABEL: fcvt_wu_h_multiple_use:1557; RV64IDZFH: # %bb.0:1558; RV64IDZFH-NEXT: fcvt.wu.h a0, fa0, rtz1559; RV64IDZFH-NEXT: seqz a1, a01560; RV64IDZFH-NEXT: add a0, a0, a11561; RV64IDZFH-NEXT: ret1562;1563; CHECKIZHINX-LABEL: fcvt_wu_h_multiple_use:1564; CHECKIZHINX: # %bb.0:1565; CHECKIZHINX-NEXT: fcvt.wu.h a0, a0, rtz1566; CHECKIZHINX-NEXT: seqz a1, a01567; CHECKIZHINX-NEXT: add a0, a0, a11568; CHECKIZHINX-NEXT: ret1569;1570; CHECKIZDINXZHINX-LABEL: fcvt_wu_h_multiple_use:1571; CHECKIZDINXZHINX: # %bb.0:1572; CHECKIZDINXZHINX-NEXT: fcvt.wu.h a0, a0, rtz1573; CHECKIZDINXZHINX-NEXT: seqz a1, a01574; CHECKIZDINXZHINX-NEXT: add a0, a0, a11575; CHECKIZDINXZHINX-NEXT: ret1576;1577; RV32I-LABEL: fcvt_wu_h_multiple_use:1578; RV32I: # %bb.0:1579; RV32I-NEXT: addi sp, sp, -161580; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1581; RV32I-NEXT: slli a0, a0, 161582; RV32I-NEXT: srli a0, a0, 161583; RV32I-NEXT: call __extendhfsf21584; RV32I-NEXT: call __fixunssfsi1585; RV32I-NEXT: seqz a1, a01586; RV32I-NEXT: add a0, a0, a11587; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1588; RV32I-NEXT: addi sp, sp, 161589; RV32I-NEXT: ret1590;1591; RV64I-LABEL: fcvt_wu_h_multiple_use:1592; RV64I: # %bb.0:1593; RV64I-NEXT: addi sp, sp, -161594; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1595; RV64I-NEXT: slli a0, a0, 481596; RV64I-NEXT: srli a0, a0, 481597; RV64I-NEXT: call __extendhfsf21598; RV64I-NEXT: call __fixunssfdi1599; RV64I-NEXT: seqz a1, a01600; RV64I-NEXT: add a0, a0, a11601; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1602; RV64I-NEXT: addi sp, sp, 161603; RV64I-NEXT: ret1604;1605; RV32ID-ILP32-LABEL: fcvt_wu_h_multiple_use:1606; RV32ID-ILP32: # %bb.0:1607; RV32ID-ILP32-NEXT: addi sp, sp, -161608; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1609; RV32ID-ILP32-NEXT: call __extendhfsf21610; RV32ID-ILP32-NEXT: fmv.w.x fa5, a01611; RV32ID-ILP32-NEXT: fcvt.wu.s a0, fa5, rtz1612; RV32ID-ILP32-NEXT: seqz a1, a01613; RV32ID-ILP32-NEXT: add a0, a0, a11614; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1615; RV32ID-ILP32-NEXT: addi sp, sp, 161616; RV32ID-ILP32-NEXT: ret1617;1618; RV64ID-LP64-LABEL: fcvt_wu_h_multiple_use:1619; RV64ID-LP64: # %bb.0:1620; RV64ID-LP64-NEXT: addi sp, sp, -161621; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1622; RV64ID-LP64-NEXT: call __extendhfsf21623; RV64ID-LP64-NEXT: fmv.w.x fa5, a01624; RV64ID-LP64-NEXT: fcvt.lu.s a0, fa5, rtz1625; RV64ID-LP64-NEXT: seqz a1, a01626; RV64ID-LP64-NEXT: add a0, a0, a11627; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1628; RV64ID-LP64-NEXT: addi sp, sp, 161629; RV64ID-LP64-NEXT: ret1630;1631; RV32ID-LABEL: fcvt_wu_h_multiple_use:1632; RV32ID: # %bb.0:1633; RV32ID-NEXT: addi sp, sp, -161634; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1635; RV32ID-NEXT: call __extendhfsf21636; RV32ID-NEXT: fcvt.wu.s a0, fa0, rtz1637; RV32ID-NEXT: seqz a1, a01638; RV32ID-NEXT: add a0, a0, a11639; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1640; RV32ID-NEXT: addi sp, sp, 161641; RV32ID-NEXT: ret1642;1643; RV64ID-LABEL: fcvt_wu_h_multiple_use:1644; RV64ID: # %bb.0:1645; RV64ID-NEXT: addi sp, sp, -161646; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1647; RV64ID-NEXT: call __extendhfsf21648; RV64ID-NEXT: fcvt.lu.s a0, fa0, rtz1649; RV64ID-NEXT: seqz a1, a01650; RV64ID-NEXT: add a0, a0, a11651; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1652; RV64ID-NEXT: addi sp, sp, 161653; RV64ID-NEXT: ret1654;1655; CHECK32-IZFHMIN-LABEL: fcvt_wu_h_multiple_use:1656; CHECK32-IZFHMIN: # %bb.0:1657; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa01658; CHECK32-IZFHMIN-NEXT: fcvt.wu.s a0, fa5, rtz1659; CHECK32-IZFHMIN-NEXT: seqz a1, a01660; CHECK32-IZFHMIN-NEXT: add a0, a0, a11661; CHECK32-IZFHMIN-NEXT: ret1662;1663; CHECK64-IZFHMIN-LABEL: fcvt_wu_h_multiple_use:1664; CHECK64-IZFHMIN: # %bb.0:1665; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa01666; CHECK64-IZFHMIN-NEXT: fcvt.wu.s a0, fa5, rtz1667; CHECK64-IZFHMIN-NEXT: seqz a1, a01668; CHECK64-IZFHMIN-NEXT: add a0, a0, a11669; CHECK64-IZFHMIN-NEXT: ret1670;1671; CHECK32-IZHINXMIN-LABEL: fcvt_wu_h_multiple_use:1672; CHECK32-IZHINXMIN: # %bb.0:1673; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a01674; CHECK32-IZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz1675; CHECK32-IZHINXMIN-NEXT: seqz a1, a01676; CHECK32-IZHINXMIN-NEXT: add a0, a0, a11677; CHECK32-IZHINXMIN-NEXT: ret1678;1679; CHECK64-IZHINXMIN-LABEL: fcvt_wu_h_multiple_use:1680; CHECK64-IZHINXMIN: # %bb.0:1681; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a01682; CHECK64-IZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz1683; CHECK64-IZHINXMIN-NEXT: seqz a1, a01684; CHECK64-IZHINXMIN-NEXT: add a0, a0, a11685; CHECK64-IZHINXMIN-NEXT: ret1686;1687; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_wu_h_multiple_use:1688; CHECK32-IZDINXZHINXMIN: # %bb.0:1689; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a01690; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz1691; CHECK32-IZDINXZHINXMIN-NEXT: seqz a1, a01692; CHECK32-IZDINXZHINXMIN-NEXT: add a0, a0, a11693; CHECK32-IZDINXZHINXMIN-NEXT: ret1694;1695; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_wu_h_multiple_use:1696; CHECK64-IZDINXZHINXMIN: # %bb.0:1697; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a01698; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz1699; CHECK64-IZDINXZHINXMIN-NEXT: seqz a1, a01700; CHECK64-IZDINXZHINXMIN-NEXT: add a0, a0, a11701; CHECK64-IZDINXZHINXMIN-NEXT: ret1702 %a = fptoui half %x to i321703 %b = icmp eq i32 %a, 01704 %c = select i1 %b, i32 1, i32 %a1705 ret i32 %c1706}1707 1708define i32 @fcvt_wu_h_sat(half %a) nounwind {1709; RV32IZFH-LABEL: fcvt_wu_h_sat:1710; RV32IZFH: # %bb.0: # %start1711; RV32IZFH-NEXT: fcvt.wu.h a0, fa0, rtz1712; RV32IZFH-NEXT: feq.h a1, fa0, fa01713; RV32IZFH-NEXT: seqz a1, a11714; RV32IZFH-NEXT: addi a1, a1, -11715; RV32IZFH-NEXT: and a0, a1, a01716; RV32IZFH-NEXT: ret1717;1718; RV64IZFH-LABEL: fcvt_wu_h_sat:1719; RV64IZFH: # %bb.0: # %start1720; RV64IZFH-NEXT: fcvt.wu.h a0, fa0, rtz1721; RV64IZFH-NEXT: feq.h a1, fa0, fa01722; RV64IZFH-NEXT: seqz a1, a11723; RV64IZFH-NEXT: addi a1, a1, -11724; RV64IZFH-NEXT: and a0, a0, a11725; RV64IZFH-NEXT: slli a0, a0, 321726; RV64IZFH-NEXT: srli a0, a0, 321727; RV64IZFH-NEXT: ret1728;1729; RV32IDZFH-LABEL: fcvt_wu_h_sat:1730; RV32IDZFH: # %bb.0: # %start1731; RV32IDZFH-NEXT: fcvt.wu.h a0, fa0, rtz1732; RV32IDZFH-NEXT: feq.h a1, fa0, fa01733; RV32IDZFH-NEXT: seqz a1, a11734; RV32IDZFH-NEXT: addi a1, a1, -11735; RV32IDZFH-NEXT: and a0, a1, a01736; RV32IDZFH-NEXT: ret1737;1738; RV64IDZFH-LABEL: fcvt_wu_h_sat:1739; RV64IDZFH: # %bb.0: # %start1740; RV64IDZFH-NEXT: fcvt.wu.h a0, fa0, rtz1741; RV64IDZFH-NEXT: feq.h a1, fa0, fa01742; RV64IDZFH-NEXT: seqz a1, a11743; RV64IDZFH-NEXT: addi a1, a1, -11744; RV64IDZFH-NEXT: and a0, a0, a11745; RV64IDZFH-NEXT: slli a0, a0, 321746; RV64IDZFH-NEXT: srli a0, a0, 321747; RV64IDZFH-NEXT: ret1748;1749; RV32IZHINX-LABEL: fcvt_wu_h_sat:1750; RV32IZHINX: # %bb.0: # %start1751; RV32IZHINX-NEXT: fcvt.wu.h a1, a0, rtz1752; RV32IZHINX-NEXT: feq.h a0, a0, a01753; RV32IZHINX-NEXT: seqz a0, a01754; RV32IZHINX-NEXT: addi a0, a0, -11755; RV32IZHINX-NEXT: and a0, a0, a11756; RV32IZHINX-NEXT: ret1757;1758; RV64IZHINX-LABEL: fcvt_wu_h_sat:1759; RV64IZHINX: # %bb.0: # %start1760; RV64IZHINX-NEXT: fcvt.wu.h a1, a0, rtz1761; RV64IZHINX-NEXT: feq.h a0, a0, a01762; RV64IZHINX-NEXT: seqz a0, a01763; RV64IZHINX-NEXT: addi a0, a0, -11764; RV64IZHINX-NEXT: and a0, a1, a01765; RV64IZHINX-NEXT: slli a0, a0, 321766; RV64IZHINX-NEXT: srli a0, a0, 321767; RV64IZHINX-NEXT: ret1768;1769; RV32IZDINXZHINX-LABEL: fcvt_wu_h_sat:1770; RV32IZDINXZHINX: # %bb.0: # %start1771; RV32IZDINXZHINX-NEXT: fcvt.wu.h a1, a0, rtz1772; RV32IZDINXZHINX-NEXT: feq.h a0, a0, a01773; RV32IZDINXZHINX-NEXT: seqz a0, a01774; RV32IZDINXZHINX-NEXT: addi a0, a0, -11775; RV32IZDINXZHINX-NEXT: and a0, a0, a11776; RV32IZDINXZHINX-NEXT: ret1777;1778; RV64IZDINXZHINX-LABEL: fcvt_wu_h_sat:1779; RV64IZDINXZHINX: # %bb.0: # %start1780; RV64IZDINXZHINX-NEXT: fcvt.wu.h a1, a0, rtz1781; RV64IZDINXZHINX-NEXT: feq.h a0, a0, a01782; RV64IZDINXZHINX-NEXT: seqz a0, a01783; RV64IZDINXZHINX-NEXT: addi a0, a0, -11784; RV64IZDINXZHINX-NEXT: and a0, a1, a01785; RV64IZDINXZHINX-NEXT: slli a0, a0, 321786; RV64IZDINXZHINX-NEXT: srli a0, a0, 321787; RV64IZDINXZHINX-NEXT: ret1788;1789; RV32I-LABEL: fcvt_wu_h_sat:1790; RV32I: # %bb.0: # %start1791; RV32I-NEXT: addi sp, sp, -161792; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1793; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill1794; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill1795; RV32I-NEXT: sw s2, 0(sp) # 4-byte Folded Spill1796; RV32I-NEXT: slli a0, a0, 161797; RV32I-NEXT: srli a0, a0, 161798; RV32I-NEXT: call __extendhfsf21799; RV32I-NEXT: mv s0, a01800; RV32I-NEXT: lui a1, 3256321801; RV32I-NEXT: addi a1, a1, -11802; RV32I-NEXT: call __gtsf21803; RV32I-NEXT: sgtz a0, a01804; RV32I-NEXT: neg s1, a01805; RV32I-NEXT: mv a0, s01806; RV32I-NEXT: li a1, 01807; RV32I-NEXT: call __gesf21808; RV32I-NEXT: srli a0, a0, 311809; RV32I-NEXT: addi s2, a0, -11810; RV32I-NEXT: mv a0, s01811; RV32I-NEXT: call __fixunssfsi1812; RV32I-NEXT: and a0, s2, a01813; RV32I-NEXT: or a0, s1, a01814; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1815; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload1816; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload1817; RV32I-NEXT: lw s2, 0(sp) # 4-byte Folded Reload1818; RV32I-NEXT: addi sp, sp, 161819; RV32I-NEXT: ret1820;1821; RV64I-LABEL: fcvt_wu_h_sat:1822; RV64I: # %bb.0: # %start1823; RV64I-NEXT: addi sp, sp, -321824; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill1825; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill1826; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill1827; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill1828; RV64I-NEXT: slli a0, a0, 481829; RV64I-NEXT: srli a0, a0, 481830; RV64I-NEXT: call __extendhfsf21831; RV64I-NEXT: mv s2, a01832; RV64I-NEXT: li a1, 01833; RV64I-NEXT: call __gesf21834; RV64I-NEXT: mv s0, a01835; RV64I-NEXT: mv a0, s21836; RV64I-NEXT: call __fixunssfdi1837; RV64I-NEXT: mv s1, a01838; RV64I-NEXT: lui a1, 3256321839; RV64I-NEXT: addi a1, a1, -11840; RV64I-NEXT: mv a0, s21841; RV64I-NEXT: call __gtsf21842; RV64I-NEXT: blez a0, .LBB8_21843; RV64I-NEXT: # %bb.1: # %start1844; RV64I-NEXT: li a0, -11845; RV64I-NEXT: srli a0, a0, 321846; RV64I-NEXT: j .LBB8_31847; RV64I-NEXT: .LBB8_2:1848; RV64I-NEXT: srli s0, s0, 631849; RV64I-NEXT: addi a0, s0, -11850; RV64I-NEXT: and a0, a0, s11851; RV64I-NEXT: .LBB8_3: # %start1852; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload1853; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload1854; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload1855; RV64I-NEXT: ld s2, 0(sp) # 8-byte Folded Reload1856; RV64I-NEXT: addi sp, sp, 321857; RV64I-NEXT: ret1858;1859; RV32ID-ILP32-LABEL: fcvt_wu_h_sat:1860; RV32ID-ILP32: # %bb.0: # %start1861; RV32ID-ILP32-NEXT: addi sp, sp, -161862; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1863; RV32ID-ILP32-NEXT: call __extendhfsf21864; RV32ID-ILP32-NEXT: fmv.w.x fa5, a01865; RV32ID-ILP32-NEXT: fcvt.wu.s a0, fa5, rtz1866; RV32ID-ILP32-NEXT: feq.s a1, fa5, fa51867; RV32ID-ILP32-NEXT: seqz a1, a11868; RV32ID-ILP32-NEXT: addi a1, a1, -11869; RV32ID-ILP32-NEXT: and a0, a1, a01870; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1871; RV32ID-ILP32-NEXT: addi sp, sp, 161872; RV32ID-ILP32-NEXT: ret1873;1874; RV64ID-LP64-LABEL: fcvt_wu_h_sat:1875; RV64ID-LP64: # %bb.0: # %start1876; RV64ID-LP64-NEXT: addi sp, sp, -161877; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1878; RV64ID-LP64-NEXT: call __extendhfsf21879; RV64ID-LP64-NEXT: fmv.w.x fa5, a01880; RV64ID-LP64-NEXT: fcvt.wu.s a0, fa5, rtz1881; RV64ID-LP64-NEXT: feq.s a1, fa5, fa51882; RV64ID-LP64-NEXT: seqz a1, a11883; RV64ID-LP64-NEXT: addi a1, a1, -11884; RV64ID-LP64-NEXT: and a0, a0, a11885; RV64ID-LP64-NEXT: slli a0, a0, 321886; RV64ID-LP64-NEXT: srli a0, a0, 321887; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1888; RV64ID-LP64-NEXT: addi sp, sp, 161889; RV64ID-LP64-NEXT: ret1890;1891; RV32ID-LABEL: fcvt_wu_h_sat:1892; RV32ID: # %bb.0: # %start1893; RV32ID-NEXT: addi sp, sp, -161894; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1895; RV32ID-NEXT: call __extendhfsf21896; RV32ID-NEXT: fcvt.wu.s a0, fa0, rtz1897; RV32ID-NEXT: feq.s a1, fa0, fa01898; RV32ID-NEXT: seqz a1, a11899; RV32ID-NEXT: addi a1, a1, -11900; RV32ID-NEXT: and a0, a1, a01901; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1902; RV32ID-NEXT: addi sp, sp, 161903; RV32ID-NEXT: ret1904;1905; RV64ID-LABEL: fcvt_wu_h_sat:1906; RV64ID: # %bb.0: # %start1907; RV64ID-NEXT: addi sp, sp, -161908; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill1909; RV64ID-NEXT: call __extendhfsf21910; RV64ID-NEXT: fcvt.wu.s a0, fa0, rtz1911; RV64ID-NEXT: feq.s a1, fa0, fa01912; RV64ID-NEXT: seqz a1, a11913; RV64ID-NEXT: addi a1, a1, -11914; RV64ID-NEXT: and a0, a0, a11915; RV64ID-NEXT: slli a0, a0, 321916; RV64ID-NEXT: srli a0, a0, 321917; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload1918; RV64ID-NEXT: addi sp, sp, 161919; RV64ID-NEXT: ret1920;1921; CHECK32-IZFHMIN-LABEL: fcvt_wu_h_sat:1922; CHECK32-IZFHMIN: # %bb.0: # %start1923; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa01924; CHECK32-IZFHMIN-NEXT: fcvt.wu.s a0, fa5, rtz1925; CHECK32-IZFHMIN-NEXT: feq.s a1, fa5, fa51926; CHECK32-IZFHMIN-NEXT: seqz a1, a11927; CHECK32-IZFHMIN-NEXT: addi a1, a1, -11928; CHECK32-IZFHMIN-NEXT: and a0, a1, a01929; CHECK32-IZFHMIN-NEXT: ret1930;1931; CHECK64-IZFHMIN-LABEL: fcvt_wu_h_sat:1932; CHECK64-IZFHMIN: # %bb.0: # %start1933; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa01934; CHECK64-IZFHMIN-NEXT: fcvt.wu.s a0, fa5, rtz1935; CHECK64-IZFHMIN-NEXT: feq.s a1, fa5, fa51936; CHECK64-IZFHMIN-NEXT: seqz a1, a11937; CHECK64-IZFHMIN-NEXT: addi a1, a1, -11938; CHECK64-IZFHMIN-NEXT: and a0, a0, a11939; CHECK64-IZFHMIN-NEXT: slli a0, a0, 321940; CHECK64-IZFHMIN-NEXT: srli a0, a0, 321941; CHECK64-IZFHMIN-NEXT: ret1942;1943; CHECK32-IZHINXMIN-LABEL: fcvt_wu_h_sat:1944; CHECK32-IZHINXMIN: # %bb.0: # %start1945; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a01946; CHECK32-IZHINXMIN-NEXT: fcvt.wu.s a1, a0, rtz1947; CHECK32-IZHINXMIN-NEXT: feq.s a0, a0, a01948; CHECK32-IZHINXMIN-NEXT: seqz a0, a01949; CHECK32-IZHINXMIN-NEXT: addi a0, a0, -11950; CHECK32-IZHINXMIN-NEXT: and a0, a0, a11951; CHECK32-IZHINXMIN-NEXT: ret1952;1953; CHECK64-IZHINXMIN-LABEL: fcvt_wu_h_sat:1954; CHECK64-IZHINXMIN: # %bb.0: # %start1955; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a01956; CHECK64-IZHINXMIN-NEXT: fcvt.wu.s a1, a0, rtz1957; CHECK64-IZHINXMIN-NEXT: feq.s a0, a0, a01958; CHECK64-IZHINXMIN-NEXT: seqz a0, a01959; CHECK64-IZHINXMIN-NEXT: addi a0, a0, -11960; CHECK64-IZHINXMIN-NEXT: and a0, a1, a01961; CHECK64-IZHINXMIN-NEXT: slli a0, a0, 321962; CHECK64-IZHINXMIN-NEXT: srli a0, a0, 321963; CHECK64-IZHINXMIN-NEXT: ret1964;1965; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_wu_h_sat:1966; CHECK32-IZDINXZHINXMIN: # %bb.0: # %start1967; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a01968; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.wu.s a1, a0, rtz1969; CHECK32-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a01970; CHECK32-IZDINXZHINXMIN-NEXT: seqz a0, a01971; CHECK32-IZDINXZHINXMIN-NEXT: addi a0, a0, -11972; CHECK32-IZDINXZHINXMIN-NEXT: and a0, a0, a11973; CHECK32-IZDINXZHINXMIN-NEXT: ret1974;1975; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_wu_h_sat:1976; CHECK64-IZDINXZHINXMIN: # %bb.0: # %start1977; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a01978; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.wu.s a1, a0, rtz1979; CHECK64-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a01980; CHECK64-IZDINXZHINXMIN-NEXT: seqz a0, a01981; CHECK64-IZDINXZHINXMIN-NEXT: addi a0, a0, -11982; CHECK64-IZDINXZHINXMIN-NEXT: and a0, a1, a01983; CHECK64-IZDINXZHINXMIN-NEXT: slli a0, a0, 321984; CHECK64-IZDINXZHINXMIN-NEXT: srli a0, a0, 321985; CHECK64-IZDINXZHINXMIN-NEXT: ret1986start:1987 %0 = tail call i32 @llvm.fptoui.sat.i32.f16(half %a)1988 ret i32 %01989}1990 1991define i64 @fcvt_l_h(half %a) nounwind {1992; RV32IZFH-LABEL: fcvt_l_h:1993; RV32IZFH: # %bb.0:1994; RV32IZFH-NEXT: addi sp, sp, -161995; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill1996; RV32IZFH-NEXT: call __fixhfdi1997; RV32IZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload1998; RV32IZFH-NEXT: addi sp, sp, 161999; RV32IZFH-NEXT: ret2000;2001; RV64IZFH-LABEL: fcvt_l_h:2002; RV64IZFH: # %bb.0:2003; RV64IZFH-NEXT: fcvt.l.h a0, fa0, rtz2004; RV64IZFH-NEXT: ret2005;2006; RV32IDZFH-LABEL: fcvt_l_h:2007; RV32IDZFH: # %bb.0:2008; RV32IDZFH-NEXT: addi sp, sp, -162009; RV32IDZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2010; RV32IDZFH-NEXT: call __fixhfdi2011; RV32IDZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2012; RV32IDZFH-NEXT: addi sp, sp, 162013; RV32IDZFH-NEXT: ret2014;2015; RV64IDZFH-LABEL: fcvt_l_h:2016; RV64IDZFH: # %bb.0:2017; RV64IDZFH-NEXT: fcvt.l.h a0, fa0, rtz2018; RV64IDZFH-NEXT: ret2019;2020; RV32IZHINX-LABEL: fcvt_l_h:2021; RV32IZHINX: # %bb.0:2022; RV32IZHINX-NEXT: addi sp, sp, -162023; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2024; RV32IZHINX-NEXT: call __fixhfdi2025; RV32IZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2026; RV32IZHINX-NEXT: addi sp, sp, 162027; RV32IZHINX-NEXT: ret2028;2029; RV64IZHINX-LABEL: fcvt_l_h:2030; RV64IZHINX: # %bb.0:2031; RV64IZHINX-NEXT: fcvt.l.h a0, a0, rtz2032; RV64IZHINX-NEXT: ret2033;2034; RV32IZDINXZHINX-LABEL: fcvt_l_h:2035; RV32IZDINXZHINX: # %bb.0:2036; RV32IZDINXZHINX-NEXT: addi sp, sp, -162037; RV32IZDINXZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2038; RV32IZDINXZHINX-NEXT: call __fixhfdi2039; RV32IZDINXZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2040; RV32IZDINXZHINX-NEXT: addi sp, sp, 162041; RV32IZDINXZHINX-NEXT: ret2042;2043; RV64IZDINXZHINX-LABEL: fcvt_l_h:2044; RV64IZDINXZHINX: # %bb.0:2045; RV64IZDINXZHINX-NEXT: fcvt.l.h a0, a0, rtz2046; RV64IZDINXZHINX-NEXT: ret2047;2048; RV32I-LABEL: fcvt_l_h:2049; RV32I: # %bb.0:2050; RV32I-NEXT: addi sp, sp, -162051; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2052; RV32I-NEXT: call __extendhfsf22053; RV32I-NEXT: call __fixsfdi2054; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2055; RV32I-NEXT: addi sp, sp, 162056; RV32I-NEXT: ret2057;2058; RV64I-LABEL: fcvt_l_h:2059; RV64I: # %bb.0:2060; RV64I-NEXT: addi sp, sp, -162061; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2062; RV64I-NEXT: slli a0, a0, 482063; RV64I-NEXT: srli a0, a0, 482064; RV64I-NEXT: call __extendhfsf22065; RV64I-NEXT: call __fixsfdi2066; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2067; RV64I-NEXT: addi sp, sp, 162068; RV64I-NEXT: ret2069;2070; RV32ID-ILP32-LABEL: fcvt_l_h:2071; RV32ID-ILP32: # %bb.0:2072; RV32ID-ILP32-NEXT: addi sp, sp, -162073; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2074; RV32ID-ILP32-NEXT: call __extendhfsf22075; RV32ID-ILP32-NEXT: call __fixsfdi2076; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2077; RV32ID-ILP32-NEXT: addi sp, sp, 162078; RV32ID-ILP32-NEXT: ret2079;2080; RV64ID-LP64-LABEL: fcvt_l_h:2081; RV64ID-LP64: # %bb.0:2082; RV64ID-LP64-NEXT: addi sp, sp, -162083; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2084; RV64ID-LP64-NEXT: call __extendhfsf22085; RV64ID-LP64-NEXT: fmv.w.x fa5, a02086; RV64ID-LP64-NEXT: fcvt.l.s a0, fa5, rtz2087; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2088; RV64ID-LP64-NEXT: addi sp, sp, 162089; RV64ID-LP64-NEXT: ret2090;2091; RV32ID-LABEL: fcvt_l_h:2092; RV32ID: # %bb.0:2093; RV32ID-NEXT: addi sp, sp, -162094; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2095; RV32ID-NEXT: call __extendhfsf22096; RV32ID-NEXT: call __fixsfdi2097; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2098; RV32ID-NEXT: addi sp, sp, 162099; RV32ID-NEXT: ret2100;2101; RV64ID-LABEL: fcvt_l_h:2102; RV64ID: # %bb.0:2103; RV64ID-NEXT: addi sp, sp, -162104; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2105; RV64ID-NEXT: call __extendhfsf22106; RV64ID-NEXT: fcvt.l.s a0, fa0, rtz2107; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2108; RV64ID-NEXT: addi sp, sp, 162109; RV64ID-NEXT: ret2110;2111; CHECK32-IZFHMIN-LABEL: fcvt_l_h:2112; CHECK32-IZFHMIN: # %bb.0:2113; CHECK32-IZFHMIN-NEXT: addi sp, sp, -162114; CHECK32-IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2115; CHECK32-IZFHMIN-NEXT: call __fixhfdi2116; CHECK32-IZFHMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2117; CHECK32-IZFHMIN-NEXT: addi sp, sp, 162118; CHECK32-IZFHMIN-NEXT: ret2119;2120; CHECK64-IZFHMIN-LABEL: fcvt_l_h:2121; CHECK64-IZFHMIN: # %bb.0:2122; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa02123; CHECK64-IZFHMIN-NEXT: fcvt.l.s a0, fa5, rtz2124; CHECK64-IZFHMIN-NEXT: ret2125;2126; CHECK32-IZHINXMIN-LABEL: fcvt_l_h:2127; CHECK32-IZHINXMIN: # %bb.0:2128; CHECK32-IZHINXMIN-NEXT: addi sp, sp, -162129; CHECK32-IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2130; CHECK32-IZHINXMIN-NEXT: call __fixhfdi2131; CHECK32-IZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2132; CHECK32-IZHINXMIN-NEXT: addi sp, sp, 162133; CHECK32-IZHINXMIN-NEXT: ret2134;2135; CHECK64-IZHINXMIN-LABEL: fcvt_l_h:2136; CHECK64-IZHINXMIN: # %bb.0:2137; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a02138; CHECK64-IZHINXMIN-NEXT: fcvt.l.s a0, a0, rtz2139; CHECK64-IZHINXMIN-NEXT: ret2140;2141; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_l_h:2142; CHECK32-IZDINXZHINXMIN: # %bb.0:2143; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, -162144; CHECK32-IZDINXZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2145; CHECK32-IZDINXZHINXMIN-NEXT: call __fixhfdi2146; CHECK32-IZDINXZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2147; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, 162148; CHECK32-IZDINXZHINXMIN-NEXT: ret2149;2150; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_l_h:2151; CHECK64-IZDINXZHINXMIN: # %bb.0:2152; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a02153; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.l.s a0, a0, rtz2154; CHECK64-IZDINXZHINXMIN-NEXT: ret2155 %1 = fptosi half %a to i642156 ret i64 %12157}2158 2159define i64 @fcvt_l_h_sat(half %a) nounwind {2160; RV32IZFH-LABEL: fcvt_l_h_sat:2161; RV32IZFH: # %bb.0: # %start2162; RV32IZFH-NEXT: addi sp, sp, -162163; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2164; RV32IZFH-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2165; RV32IZFH-NEXT: fsw fs0, 4(sp) # 4-byte Folded Spill2166; RV32IZFH-NEXT: fcvt.s.h fs0, fa02167; RV32IZFH-NEXT: lui a0, 9134082168; RV32IZFH-NEXT: fmv.w.x fa5, a02169; RV32IZFH-NEXT: fle.s s0, fa5, fs02170; RV32IZFH-NEXT: fmv.s fa0, fs02171; RV32IZFH-NEXT: call __fixsfdi2172; RV32IZFH-NEXT: lui a3, 5242882173; RV32IZFH-NEXT: lui a2, 5242882174; RV32IZFH-NEXT: beqz s0, .LBB10_22175; RV32IZFH-NEXT: # %bb.1: # %start2176; RV32IZFH-NEXT: mv a2, a12177; RV32IZFH-NEXT: .LBB10_2: # %start2178; RV32IZFH-NEXT: lui a1, 3891202179; RV32IZFH-NEXT: addi a1, a1, -12180; RV32IZFH-NEXT: fmv.w.x fa5, a12181; RV32IZFH-NEXT: flt.s a1, fa5, fs02182; RV32IZFH-NEXT: beqz a1, .LBB10_42183; RV32IZFH-NEXT: # %bb.3:2184; RV32IZFH-NEXT: addi a2, a3, -12185; RV32IZFH-NEXT: .LBB10_4: # %start2186; RV32IZFH-NEXT: feq.s a3, fs0, fs02187; RV32IZFH-NEXT: neg a4, s02188; RV32IZFH-NEXT: neg a5, a12189; RV32IZFH-NEXT: neg a3, a32190; RV32IZFH-NEXT: and a0, a4, a02191; RV32IZFH-NEXT: and a1, a3, a22192; RV32IZFH-NEXT: or a0, a5, a02193; RV32IZFH-NEXT: and a0, a3, a02194; RV32IZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2195; RV32IZFH-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2196; RV32IZFH-NEXT: flw fs0, 4(sp) # 4-byte Folded Reload2197; RV32IZFH-NEXT: addi sp, sp, 162198; RV32IZFH-NEXT: ret2199;2200; RV64IZFH-LABEL: fcvt_l_h_sat:2201; RV64IZFH: # %bb.0: # %start2202; RV64IZFH-NEXT: fcvt.l.h a0, fa0, rtz2203; RV64IZFH-NEXT: feq.h a1, fa0, fa02204; RV64IZFH-NEXT: seqz a1, a12205; RV64IZFH-NEXT: addi a1, a1, -12206; RV64IZFH-NEXT: and a0, a1, a02207; RV64IZFH-NEXT: ret2208;2209; RV32IDZFH-LABEL: fcvt_l_h_sat:2210; RV32IDZFH: # %bb.0: # %start2211; RV32IDZFH-NEXT: addi sp, sp, -162212; RV32IDZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2213; RV32IDZFH-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2214; RV32IDZFH-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill2215; RV32IDZFH-NEXT: fcvt.s.h fs0, fa02216; RV32IDZFH-NEXT: lui a0, 9134082217; RV32IDZFH-NEXT: fmv.w.x fa5, a02218; RV32IDZFH-NEXT: fle.s s0, fa5, fs02219; RV32IDZFH-NEXT: fmv.s fa0, fs02220; RV32IDZFH-NEXT: call __fixsfdi2221; RV32IDZFH-NEXT: lui a3, 5242882222; RV32IDZFH-NEXT: lui a2, 5242882223; RV32IDZFH-NEXT: beqz s0, .LBB10_22224; RV32IDZFH-NEXT: # %bb.1: # %start2225; RV32IDZFH-NEXT: mv a2, a12226; RV32IDZFH-NEXT: .LBB10_2: # %start2227; RV32IDZFH-NEXT: lui a1, 3891202228; RV32IDZFH-NEXT: addi a1, a1, -12229; RV32IDZFH-NEXT: fmv.w.x fa5, a12230; RV32IDZFH-NEXT: flt.s a1, fa5, fs02231; RV32IDZFH-NEXT: beqz a1, .LBB10_42232; RV32IDZFH-NEXT: # %bb.3:2233; RV32IDZFH-NEXT: addi a2, a3, -12234; RV32IDZFH-NEXT: .LBB10_4: # %start2235; RV32IDZFH-NEXT: feq.s a3, fs0, fs02236; RV32IDZFH-NEXT: neg a4, s02237; RV32IDZFH-NEXT: neg a5, a12238; RV32IDZFH-NEXT: neg a3, a32239; RV32IDZFH-NEXT: and a0, a4, a02240; RV32IDZFH-NEXT: and a1, a3, a22241; RV32IDZFH-NEXT: or a0, a5, a02242; RV32IDZFH-NEXT: and a0, a3, a02243; RV32IDZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2244; RV32IDZFH-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2245; RV32IDZFH-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload2246; RV32IDZFH-NEXT: addi sp, sp, 162247; RV32IDZFH-NEXT: ret2248;2249; RV64IDZFH-LABEL: fcvt_l_h_sat:2250; RV64IDZFH: # %bb.0: # %start2251; RV64IDZFH-NEXT: fcvt.l.h a0, fa0, rtz2252; RV64IDZFH-NEXT: feq.h a1, fa0, fa02253; RV64IDZFH-NEXT: seqz a1, a12254; RV64IDZFH-NEXT: addi a1, a1, -12255; RV64IDZFH-NEXT: and a0, a1, a02256; RV64IDZFH-NEXT: ret2257;2258; RV32IZHINX-LABEL: fcvt_l_h_sat:2259; RV32IZHINX: # %bb.0: # %start2260; RV32IZHINX-NEXT: addi sp, sp, -162261; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2262; RV32IZHINX-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2263; RV32IZHINX-NEXT: sw s1, 4(sp) # 4-byte Folded Spill2264; RV32IZHINX-NEXT: fcvt.s.h s0, a02265; RV32IZHINX-NEXT: lui a0, 9134082266; RV32IZHINX-NEXT: fle.s s1, a0, s02267; RV32IZHINX-NEXT: mv a0, s02268; RV32IZHINX-NEXT: call __fixsfdi2269; RV32IZHINX-NEXT: lui a3, 5242882270; RV32IZHINX-NEXT: lui a2, 5242882271; RV32IZHINX-NEXT: beqz s1, .LBB10_22272; RV32IZHINX-NEXT: # %bb.1: # %start2273; RV32IZHINX-NEXT: mv a2, a12274; RV32IZHINX-NEXT: .LBB10_2: # %start2275; RV32IZHINX-NEXT: lui a1, 3891202276; RV32IZHINX-NEXT: addi a1, a1, -12277; RV32IZHINX-NEXT: flt.s a1, a1, s02278; RV32IZHINX-NEXT: beqz a1, .LBB10_42279; RV32IZHINX-NEXT: # %bb.3:2280; RV32IZHINX-NEXT: addi a2, a3, -12281; RV32IZHINX-NEXT: .LBB10_4: # %start2282; RV32IZHINX-NEXT: feq.s a3, s0, s02283; RV32IZHINX-NEXT: neg a4, s12284; RV32IZHINX-NEXT: neg a5, a12285; RV32IZHINX-NEXT: neg a3, a32286; RV32IZHINX-NEXT: and a0, a4, a02287; RV32IZHINX-NEXT: and a1, a3, a22288; RV32IZHINX-NEXT: or a0, a5, a02289; RV32IZHINX-NEXT: and a0, a3, a02290; RV32IZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2291; RV32IZHINX-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2292; RV32IZHINX-NEXT: lw s1, 4(sp) # 4-byte Folded Reload2293; RV32IZHINX-NEXT: addi sp, sp, 162294; RV32IZHINX-NEXT: ret2295;2296; RV64IZHINX-LABEL: fcvt_l_h_sat:2297; RV64IZHINX: # %bb.0: # %start2298; RV64IZHINX-NEXT: fcvt.l.h a1, a0, rtz2299; RV64IZHINX-NEXT: feq.h a0, a0, a02300; RV64IZHINX-NEXT: seqz a0, a02301; RV64IZHINX-NEXT: addi a0, a0, -12302; RV64IZHINX-NEXT: and a0, a0, a12303; RV64IZHINX-NEXT: ret2304;2305; RV32IZDINXZHINX-LABEL: fcvt_l_h_sat:2306; RV32IZDINXZHINX: # %bb.0: # %start2307; RV32IZDINXZHINX-NEXT: addi sp, sp, -162308; RV32IZDINXZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2309; RV32IZDINXZHINX-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2310; RV32IZDINXZHINX-NEXT: sw s1, 4(sp) # 4-byte Folded Spill2311; RV32IZDINXZHINX-NEXT: fcvt.s.h s0, a02312; RV32IZDINXZHINX-NEXT: lui a0, 9134082313; RV32IZDINXZHINX-NEXT: fle.s s1, a0, s02314; RV32IZDINXZHINX-NEXT: mv a0, s02315; RV32IZDINXZHINX-NEXT: call __fixsfdi2316; RV32IZDINXZHINX-NEXT: lui a3, 5242882317; RV32IZDINXZHINX-NEXT: lui a2, 5242882318; RV32IZDINXZHINX-NEXT: beqz s1, .LBB10_22319; RV32IZDINXZHINX-NEXT: # %bb.1: # %start2320; RV32IZDINXZHINX-NEXT: mv a2, a12321; RV32IZDINXZHINX-NEXT: .LBB10_2: # %start2322; RV32IZDINXZHINX-NEXT: lui a1, 3891202323; RV32IZDINXZHINX-NEXT: addi a1, a1, -12324; RV32IZDINXZHINX-NEXT: flt.s a1, a1, s02325; RV32IZDINXZHINX-NEXT: beqz a1, .LBB10_42326; RV32IZDINXZHINX-NEXT: # %bb.3:2327; RV32IZDINXZHINX-NEXT: addi a2, a3, -12328; RV32IZDINXZHINX-NEXT: .LBB10_4: # %start2329; RV32IZDINXZHINX-NEXT: feq.s a3, s0, s02330; RV32IZDINXZHINX-NEXT: neg a4, s12331; RV32IZDINXZHINX-NEXT: neg a5, a12332; RV32IZDINXZHINX-NEXT: neg a3, a32333; RV32IZDINXZHINX-NEXT: and a0, a4, a02334; RV32IZDINXZHINX-NEXT: and a1, a3, a22335; RV32IZDINXZHINX-NEXT: or a0, a5, a02336; RV32IZDINXZHINX-NEXT: and a0, a3, a02337; RV32IZDINXZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2338; RV32IZDINXZHINX-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2339; RV32IZDINXZHINX-NEXT: lw s1, 4(sp) # 4-byte Folded Reload2340; RV32IZDINXZHINX-NEXT: addi sp, sp, 162341; RV32IZDINXZHINX-NEXT: ret2342;2343; RV64IZDINXZHINX-LABEL: fcvt_l_h_sat:2344; RV64IZDINXZHINX: # %bb.0: # %start2345; RV64IZDINXZHINX-NEXT: fcvt.l.h a1, a0, rtz2346; RV64IZDINXZHINX-NEXT: feq.h a0, a0, a02347; RV64IZDINXZHINX-NEXT: seqz a0, a02348; RV64IZDINXZHINX-NEXT: addi a0, a0, -12349; RV64IZDINXZHINX-NEXT: and a0, a0, a12350; RV64IZDINXZHINX-NEXT: ret2351;2352; RV32I-LABEL: fcvt_l_h_sat:2353; RV32I: # %bb.0: # %start2354; RV32I-NEXT: addi sp, sp, -322355; RV32I-NEXT: sw ra, 28(sp) # 4-byte Folded Spill2356; RV32I-NEXT: sw s0, 24(sp) # 4-byte Folded Spill2357; RV32I-NEXT: sw s1, 20(sp) # 4-byte Folded Spill2358; RV32I-NEXT: sw s2, 16(sp) # 4-byte Folded Spill2359; RV32I-NEXT: sw s3, 12(sp) # 4-byte Folded Spill2360; RV32I-NEXT: sw s4, 8(sp) # 4-byte Folded Spill2361; RV32I-NEXT: sw s5, 4(sp) # 4-byte Folded Spill2362; RV32I-NEXT: call __extendhfsf22363; RV32I-NEXT: mv s2, a02364; RV32I-NEXT: lui a1, 9134082365; RV32I-NEXT: call __gesf22366; RV32I-NEXT: mv s0, a02367; RV32I-NEXT: mv a0, s22368; RV32I-NEXT: call __fixsfdi2369; RV32I-NEXT: mv s1, a02370; RV32I-NEXT: mv s3, a12371; RV32I-NEXT: lui s5, 5242882372; RV32I-NEXT: bgez s0, .LBB10_22373; RV32I-NEXT: # %bb.1: # %start2374; RV32I-NEXT: lui s3, 5242882375; RV32I-NEXT: .LBB10_2: # %start2376; RV32I-NEXT: lui a1, 3891202377; RV32I-NEXT: addi a1, a1, -12378; RV32I-NEXT: mv a0, s22379; RV32I-NEXT: call __gtsf22380; RV32I-NEXT: mv s4, a02381; RV32I-NEXT: blez a0, .LBB10_42382; RV32I-NEXT: # %bb.3: # %start2383; RV32I-NEXT: addi s3, s5, -12384; RV32I-NEXT: .LBB10_4: # %start2385; RV32I-NEXT: mv a0, s22386; RV32I-NEXT: mv a1, s22387; RV32I-NEXT: call __unordsf22388; RV32I-NEXT: snez a0, a02389; RV32I-NEXT: sgtz a1, s42390; RV32I-NEXT: srli s0, s0, 312391; RV32I-NEXT: addi a0, a0, -12392; RV32I-NEXT: neg a2, a12393; RV32I-NEXT: addi s0, s0, -12394; RV32I-NEXT: and a1, a0, s32395; RV32I-NEXT: and s0, s0, s12396; RV32I-NEXT: or a2, a2, s02397; RV32I-NEXT: and a0, a0, a22398; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload2399; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload2400; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload2401; RV32I-NEXT: lw s2, 16(sp) # 4-byte Folded Reload2402; RV32I-NEXT: lw s3, 12(sp) # 4-byte Folded Reload2403; RV32I-NEXT: lw s4, 8(sp) # 4-byte Folded Reload2404; RV32I-NEXT: lw s5, 4(sp) # 4-byte Folded Reload2405; RV32I-NEXT: addi sp, sp, 322406; RV32I-NEXT: ret2407;2408; RV64I-LABEL: fcvt_l_h_sat:2409; RV64I: # %bb.0: # %start2410; RV64I-NEXT: addi sp, sp, -482411; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill2412; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill2413; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill2414; RV64I-NEXT: sd s2, 16(sp) # 8-byte Folded Spill2415; RV64I-NEXT: sd s3, 8(sp) # 8-byte Folded Spill2416; RV64I-NEXT: slli a0, a0, 482417; RV64I-NEXT: srli a0, a0, 482418; RV64I-NEXT: call __extendhfsf22419; RV64I-NEXT: mv s0, a02420; RV64I-NEXT: lui a1, 9134082421; RV64I-NEXT: call __gesf22422; RV64I-NEXT: mv s2, a02423; RV64I-NEXT: mv a0, s02424; RV64I-NEXT: call __fixsfdi2425; RV64I-NEXT: mv s1, a02426; RV64I-NEXT: li s3, -12427; RV64I-NEXT: bgez s2, .LBB10_22428; RV64I-NEXT: # %bb.1: # %start2429; RV64I-NEXT: slli s1, s3, 632430; RV64I-NEXT: .LBB10_2: # %start2431; RV64I-NEXT: lui a1, 3891202432; RV64I-NEXT: addi a1, a1, -12433; RV64I-NEXT: mv a0, s02434; RV64I-NEXT: call __gtsf22435; RV64I-NEXT: blez a0, .LBB10_42436; RV64I-NEXT: # %bb.3: # %start2437; RV64I-NEXT: srli s1, s3, 12438; RV64I-NEXT: .LBB10_4: # %start2439; RV64I-NEXT: mv a0, s02440; RV64I-NEXT: mv a1, s02441; RV64I-NEXT: call __unordsf22442; RV64I-NEXT: snez a0, a02443; RV64I-NEXT: addi a0, a0, -12444; RV64I-NEXT: and a0, a0, s12445; RV64I-NEXT: ld ra, 40(sp) # 8-byte Folded Reload2446; RV64I-NEXT: ld s0, 32(sp) # 8-byte Folded Reload2447; RV64I-NEXT: ld s1, 24(sp) # 8-byte Folded Reload2448; RV64I-NEXT: ld s2, 16(sp) # 8-byte Folded Reload2449; RV64I-NEXT: ld s3, 8(sp) # 8-byte Folded Reload2450; RV64I-NEXT: addi sp, sp, 482451; RV64I-NEXT: ret2452;2453; RV32ID-ILP32-LABEL: fcvt_l_h_sat:2454; RV32ID-ILP32: # %bb.0: # %start2455; RV32ID-ILP32-NEXT: addi sp, sp, -162456; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2457; RV32ID-ILP32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2458; RV32ID-ILP32-NEXT: call __extendhfsf22459; RV32ID-ILP32-NEXT: fmv.w.x fa4, a02460; RV32ID-ILP32-NEXT: lui a1, 9134082461; RV32ID-ILP32-NEXT: fmv.w.x fa5, a12462; RV32ID-ILP32-NEXT: fsw fa4, 4(sp) # 4-byte Folded Spill2463; RV32ID-ILP32-NEXT: fle.s s0, fa5, fa42464; RV32ID-ILP32-NEXT: call __fixsfdi2465; RV32ID-ILP32-NEXT: lui a3, 5242882466; RV32ID-ILP32-NEXT: lui a2, 5242882467; RV32ID-ILP32-NEXT: beqz s0, .LBB10_22468; RV32ID-ILP32-NEXT: # %bb.1: # %start2469; RV32ID-ILP32-NEXT: mv a2, a12470; RV32ID-ILP32-NEXT: .LBB10_2: # %start2471; RV32ID-ILP32-NEXT: lui a1, 3891202472; RV32ID-ILP32-NEXT: addi a1, a1, -12473; RV32ID-ILP32-NEXT: fmv.w.x fa5, a12474; RV32ID-ILP32-NEXT: flw fa4, 4(sp) # 4-byte Folded Reload2475; RV32ID-ILP32-NEXT: flt.s a1, fa5, fa42476; RV32ID-ILP32-NEXT: fmv.s fa5, fa42477; RV32ID-ILP32-NEXT: beqz a1, .LBB10_42478; RV32ID-ILP32-NEXT: # %bb.3:2479; RV32ID-ILP32-NEXT: addi a2, a3, -12480; RV32ID-ILP32-NEXT: .LBB10_4: # %start2481; RV32ID-ILP32-NEXT: feq.s a3, fa5, fa52482; RV32ID-ILP32-NEXT: neg a4, a12483; RV32ID-ILP32-NEXT: neg a1, s02484; RV32ID-ILP32-NEXT: neg a3, a32485; RV32ID-ILP32-NEXT: and a0, a1, a02486; RV32ID-ILP32-NEXT: and a1, a3, a22487; RV32ID-ILP32-NEXT: or a0, a4, a02488; RV32ID-ILP32-NEXT: and a0, a3, a02489; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2490; RV32ID-ILP32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2491; RV32ID-ILP32-NEXT: addi sp, sp, 162492; RV32ID-ILP32-NEXT: ret2493;2494; RV64ID-LP64-LABEL: fcvt_l_h_sat:2495; RV64ID-LP64: # %bb.0: # %start2496; RV64ID-LP64-NEXT: addi sp, sp, -162497; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2498; RV64ID-LP64-NEXT: call __extendhfsf22499; RV64ID-LP64-NEXT: fmv.w.x fa5, a02500; RV64ID-LP64-NEXT: fcvt.l.s a0, fa5, rtz2501; RV64ID-LP64-NEXT: feq.s a1, fa5, fa52502; RV64ID-LP64-NEXT: seqz a1, a12503; RV64ID-LP64-NEXT: addi a1, a1, -12504; RV64ID-LP64-NEXT: and a0, a1, a02505; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2506; RV64ID-LP64-NEXT: addi sp, sp, 162507; RV64ID-LP64-NEXT: ret2508;2509; RV32ID-LABEL: fcvt_l_h_sat:2510; RV32ID: # %bb.0: # %start2511; RV32ID-NEXT: addi sp, sp, -162512; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2513; RV32ID-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2514; RV32ID-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill2515; RV32ID-NEXT: call __extendhfsf22516; RV32ID-NEXT: fmv.s fs0, fa02517; RV32ID-NEXT: lui a0, 9134082518; RV32ID-NEXT: fmv.w.x fa5, a02519; RV32ID-NEXT: fle.s s0, fa5, fa02520; RV32ID-NEXT: call __fixsfdi2521; RV32ID-NEXT: lui a3, 5242882522; RV32ID-NEXT: lui a2, 5242882523; RV32ID-NEXT: beqz s0, .LBB10_22524; RV32ID-NEXT: # %bb.1: # %start2525; RV32ID-NEXT: mv a2, a12526; RV32ID-NEXT: .LBB10_2: # %start2527; RV32ID-NEXT: lui a1, 3891202528; RV32ID-NEXT: addi a1, a1, -12529; RV32ID-NEXT: fmv.w.x fa5, a12530; RV32ID-NEXT: flt.s a1, fa5, fs02531; RV32ID-NEXT: beqz a1, .LBB10_42532; RV32ID-NEXT: # %bb.3:2533; RV32ID-NEXT: addi a2, a3, -12534; RV32ID-NEXT: .LBB10_4: # %start2535; RV32ID-NEXT: feq.s a3, fs0, fs02536; RV32ID-NEXT: neg a4, s02537; RV32ID-NEXT: neg a5, a12538; RV32ID-NEXT: neg a3, a32539; RV32ID-NEXT: and a0, a4, a02540; RV32ID-NEXT: and a1, a3, a22541; RV32ID-NEXT: or a0, a5, a02542; RV32ID-NEXT: and a0, a3, a02543; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2544; RV32ID-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2545; RV32ID-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload2546; RV32ID-NEXT: addi sp, sp, 162547; RV32ID-NEXT: ret2548;2549; RV64ID-LABEL: fcvt_l_h_sat:2550; RV64ID: # %bb.0: # %start2551; RV64ID-NEXT: addi sp, sp, -162552; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2553; RV64ID-NEXT: call __extendhfsf22554; RV64ID-NEXT: fcvt.l.s a0, fa0, rtz2555; RV64ID-NEXT: feq.s a1, fa0, fa02556; RV64ID-NEXT: seqz a1, a12557; RV64ID-NEXT: addi a1, a1, -12558; RV64ID-NEXT: and a0, a1, a02559; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2560; RV64ID-NEXT: addi sp, sp, 162561; RV64ID-NEXT: ret2562;2563; RV32IFZFHMIN-LABEL: fcvt_l_h_sat:2564; RV32IFZFHMIN: # %bb.0: # %start2565; RV32IFZFHMIN-NEXT: addi sp, sp, -162566; RV32IFZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2567; RV32IFZFHMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2568; RV32IFZFHMIN-NEXT: fsw fs0, 4(sp) # 4-byte Folded Spill2569; RV32IFZFHMIN-NEXT: fcvt.s.h fs0, fa02570; RV32IFZFHMIN-NEXT: lui a0, 9134082571; RV32IFZFHMIN-NEXT: fmv.w.x fa5, a02572; RV32IFZFHMIN-NEXT: fle.s s0, fa5, fs02573; RV32IFZFHMIN-NEXT: fmv.s fa0, fs02574; RV32IFZFHMIN-NEXT: call __fixsfdi2575; RV32IFZFHMIN-NEXT: lui a3, 5242882576; RV32IFZFHMIN-NEXT: lui a2, 5242882577; RV32IFZFHMIN-NEXT: beqz s0, .LBB10_22578; RV32IFZFHMIN-NEXT: # %bb.1: # %start2579; RV32IFZFHMIN-NEXT: mv a2, a12580; RV32IFZFHMIN-NEXT: .LBB10_2: # %start2581; RV32IFZFHMIN-NEXT: lui a1, 3891202582; RV32IFZFHMIN-NEXT: addi a1, a1, -12583; RV32IFZFHMIN-NEXT: fmv.w.x fa5, a12584; RV32IFZFHMIN-NEXT: flt.s a1, fa5, fs02585; RV32IFZFHMIN-NEXT: beqz a1, .LBB10_42586; RV32IFZFHMIN-NEXT: # %bb.3:2587; RV32IFZFHMIN-NEXT: addi a2, a3, -12588; RV32IFZFHMIN-NEXT: .LBB10_4: # %start2589; RV32IFZFHMIN-NEXT: feq.s a3, fs0, fs02590; RV32IFZFHMIN-NEXT: neg a4, s02591; RV32IFZFHMIN-NEXT: neg a5, a12592; RV32IFZFHMIN-NEXT: neg a3, a32593; RV32IFZFHMIN-NEXT: and a0, a4, a02594; RV32IFZFHMIN-NEXT: and a1, a3, a22595; RV32IFZFHMIN-NEXT: or a0, a5, a02596; RV32IFZFHMIN-NEXT: and a0, a3, a02597; RV32IFZFHMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2598; RV32IFZFHMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2599; RV32IFZFHMIN-NEXT: flw fs0, 4(sp) # 4-byte Folded Reload2600; RV32IFZFHMIN-NEXT: addi sp, sp, 162601; RV32IFZFHMIN-NEXT: ret2602;2603; CHECK64-IZFHMIN-LABEL: fcvt_l_h_sat:2604; CHECK64-IZFHMIN: # %bb.0: # %start2605; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa02606; CHECK64-IZFHMIN-NEXT: fcvt.l.s a0, fa5, rtz2607; CHECK64-IZFHMIN-NEXT: feq.s a1, fa5, fa52608; CHECK64-IZFHMIN-NEXT: seqz a1, a12609; CHECK64-IZFHMIN-NEXT: addi a1, a1, -12610; CHECK64-IZFHMIN-NEXT: and a0, a1, a02611; CHECK64-IZFHMIN-NEXT: ret2612;2613; RV32IDZFHMIN-LABEL: fcvt_l_h_sat:2614; RV32IDZFHMIN: # %bb.0: # %start2615; RV32IDZFHMIN-NEXT: addi sp, sp, -162616; RV32IDZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2617; RV32IDZFHMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2618; RV32IDZFHMIN-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill2619; RV32IDZFHMIN-NEXT: fcvt.s.h fs0, fa02620; RV32IDZFHMIN-NEXT: lui a0, 9134082621; RV32IDZFHMIN-NEXT: fmv.w.x fa5, a02622; RV32IDZFHMIN-NEXT: fle.s s0, fa5, fs02623; RV32IDZFHMIN-NEXT: fmv.s fa0, fs02624; RV32IDZFHMIN-NEXT: call __fixsfdi2625; RV32IDZFHMIN-NEXT: lui a3, 5242882626; RV32IDZFHMIN-NEXT: lui a2, 5242882627; RV32IDZFHMIN-NEXT: beqz s0, .LBB10_22628; RV32IDZFHMIN-NEXT: # %bb.1: # %start2629; RV32IDZFHMIN-NEXT: mv a2, a12630; RV32IDZFHMIN-NEXT: .LBB10_2: # %start2631; RV32IDZFHMIN-NEXT: lui a1, 3891202632; RV32IDZFHMIN-NEXT: addi a1, a1, -12633; RV32IDZFHMIN-NEXT: fmv.w.x fa5, a12634; RV32IDZFHMIN-NEXT: flt.s a1, fa5, fs02635; RV32IDZFHMIN-NEXT: beqz a1, .LBB10_42636; RV32IDZFHMIN-NEXT: # %bb.3:2637; RV32IDZFHMIN-NEXT: addi a2, a3, -12638; RV32IDZFHMIN-NEXT: .LBB10_4: # %start2639; RV32IDZFHMIN-NEXT: feq.s a3, fs0, fs02640; RV32IDZFHMIN-NEXT: neg a4, s02641; RV32IDZFHMIN-NEXT: neg a5, a12642; RV32IDZFHMIN-NEXT: neg a3, a32643; RV32IDZFHMIN-NEXT: and a0, a4, a02644; RV32IDZFHMIN-NEXT: and a1, a3, a22645; RV32IDZFHMIN-NEXT: or a0, a5, a02646; RV32IDZFHMIN-NEXT: and a0, a3, a02647; RV32IDZFHMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2648; RV32IDZFHMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2649; RV32IDZFHMIN-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload2650; RV32IDZFHMIN-NEXT: addi sp, sp, 162651; RV32IDZFHMIN-NEXT: ret2652;2653; CHECK32-IZHINXMIN-LABEL: fcvt_l_h_sat:2654; CHECK32-IZHINXMIN: # %bb.0: # %start2655; CHECK32-IZHINXMIN-NEXT: addi sp, sp, -162656; CHECK32-IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2657; CHECK32-IZHINXMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2658; CHECK32-IZHINXMIN-NEXT: sw s1, 4(sp) # 4-byte Folded Spill2659; CHECK32-IZHINXMIN-NEXT: fcvt.s.h s0, a02660; CHECK32-IZHINXMIN-NEXT: lui a0, 9134082661; CHECK32-IZHINXMIN-NEXT: fle.s s1, a0, s02662; CHECK32-IZHINXMIN-NEXT: mv a0, s02663; CHECK32-IZHINXMIN-NEXT: call __fixsfdi2664; CHECK32-IZHINXMIN-NEXT: lui a3, 5242882665; CHECK32-IZHINXMIN-NEXT: lui a2, 5242882666; CHECK32-IZHINXMIN-NEXT: beqz s1, .LBB10_22667; CHECK32-IZHINXMIN-NEXT: # %bb.1: # %start2668; CHECK32-IZHINXMIN-NEXT: mv a2, a12669; CHECK32-IZHINXMIN-NEXT: .LBB10_2: # %start2670; CHECK32-IZHINXMIN-NEXT: lui a1, 3891202671; CHECK32-IZHINXMIN-NEXT: addi a1, a1, -12672; CHECK32-IZHINXMIN-NEXT: flt.s a1, a1, s02673; CHECK32-IZHINXMIN-NEXT: beqz a1, .LBB10_42674; CHECK32-IZHINXMIN-NEXT: # %bb.3:2675; CHECK32-IZHINXMIN-NEXT: addi a2, a3, -12676; CHECK32-IZHINXMIN-NEXT: .LBB10_4: # %start2677; CHECK32-IZHINXMIN-NEXT: feq.s a3, s0, s02678; CHECK32-IZHINXMIN-NEXT: neg a4, s12679; CHECK32-IZHINXMIN-NEXT: neg a5, a12680; CHECK32-IZHINXMIN-NEXT: neg a3, a32681; CHECK32-IZHINXMIN-NEXT: and a0, a4, a02682; CHECK32-IZHINXMIN-NEXT: and a1, a3, a22683; CHECK32-IZHINXMIN-NEXT: or a0, a5, a02684; CHECK32-IZHINXMIN-NEXT: and a0, a3, a02685; CHECK32-IZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2686; CHECK32-IZHINXMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2687; CHECK32-IZHINXMIN-NEXT: lw s1, 4(sp) # 4-byte Folded Reload2688; CHECK32-IZHINXMIN-NEXT: addi sp, sp, 162689; CHECK32-IZHINXMIN-NEXT: ret2690;2691; CHECK64-IZHINXMIN-LABEL: fcvt_l_h_sat:2692; CHECK64-IZHINXMIN: # %bb.0: # %start2693; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a02694; CHECK64-IZHINXMIN-NEXT: fcvt.l.s a1, a0, rtz2695; CHECK64-IZHINXMIN-NEXT: feq.s a0, a0, a02696; CHECK64-IZHINXMIN-NEXT: seqz a0, a02697; CHECK64-IZHINXMIN-NEXT: addi a0, a0, -12698; CHECK64-IZHINXMIN-NEXT: and a0, a0, a12699; CHECK64-IZHINXMIN-NEXT: ret2700;2701; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_l_h_sat:2702; CHECK32-IZDINXZHINXMIN: # %bb.0: # %start2703; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, -162704; CHECK32-IZDINXZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2705; CHECK32-IZDINXZHINXMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2706; CHECK32-IZDINXZHINXMIN-NEXT: sw s1, 4(sp) # 4-byte Folded Spill2707; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h s0, a02708; CHECK32-IZDINXZHINXMIN-NEXT: lui a0, 9134082709; CHECK32-IZDINXZHINXMIN-NEXT: fle.s s1, a0, s02710; CHECK32-IZDINXZHINXMIN-NEXT: mv a0, s02711; CHECK32-IZDINXZHINXMIN-NEXT: call __fixsfdi2712; CHECK32-IZDINXZHINXMIN-NEXT: lui a3, 5242882713; CHECK32-IZDINXZHINXMIN-NEXT: lui a2, 5242882714; CHECK32-IZDINXZHINXMIN-NEXT: beqz s1, .LBB10_22715; CHECK32-IZDINXZHINXMIN-NEXT: # %bb.1: # %start2716; CHECK32-IZDINXZHINXMIN-NEXT: mv a2, a12717; CHECK32-IZDINXZHINXMIN-NEXT: .LBB10_2: # %start2718; CHECK32-IZDINXZHINXMIN-NEXT: lui a1, 3891202719; CHECK32-IZDINXZHINXMIN-NEXT: addi a1, a1, -12720; CHECK32-IZDINXZHINXMIN-NEXT: flt.s a1, a1, s02721; CHECK32-IZDINXZHINXMIN-NEXT: beqz a1, .LBB10_42722; CHECK32-IZDINXZHINXMIN-NEXT: # %bb.3:2723; CHECK32-IZDINXZHINXMIN-NEXT: addi a2, a3, -12724; CHECK32-IZDINXZHINXMIN-NEXT: .LBB10_4: # %start2725; CHECK32-IZDINXZHINXMIN-NEXT: feq.s a3, s0, s02726; CHECK32-IZDINXZHINXMIN-NEXT: neg a4, s12727; CHECK32-IZDINXZHINXMIN-NEXT: neg a5, a12728; CHECK32-IZDINXZHINXMIN-NEXT: neg a3, a32729; CHECK32-IZDINXZHINXMIN-NEXT: and a0, a4, a02730; CHECK32-IZDINXZHINXMIN-NEXT: and a1, a3, a22731; CHECK32-IZDINXZHINXMIN-NEXT: or a0, a5, a02732; CHECK32-IZDINXZHINXMIN-NEXT: and a0, a3, a02733; CHECK32-IZDINXZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2734; CHECK32-IZDINXZHINXMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2735; CHECK32-IZDINXZHINXMIN-NEXT: lw s1, 4(sp) # 4-byte Folded Reload2736; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, 162737; CHECK32-IZDINXZHINXMIN-NEXT: ret2738;2739; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_l_h_sat:2740; CHECK64-IZDINXZHINXMIN: # %bb.0: # %start2741; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a02742; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.l.s a1, a0, rtz2743; CHECK64-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a02744; CHECK64-IZDINXZHINXMIN-NEXT: seqz a0, a02745; CHECK64-IZDINXZHINXMIN-NEXT: addi a0, a0, -12746; CHECK64-IZDINXZHINXMIN-NEXT: and a0, a0, a12747; CHECK64-IZDINXZHINXMIN-NEXT: ret2748start:2749 %0 = tail call i64 @llvm.fptosi.sat.i64.f16(half %a)2750 ret i64 %02751}2752 2753define i64 @fcvt_lu_h(half %a) nounwind {2754; RV32IZFH-LABEL: fcvt_lu_h:2755; RV32IZFH: # %bb.0:2756; RV32IZFH-NEXT: addi sp, sp, -162757; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2758; RV32IZFH-NEXT: call __fixunshfdi2759; RV32IZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2760; RV32IZFH-NEXT: addi sp, sp, 162761; RV32IZFH-NEXT: ret2762;2763; RV64IZFH-LABEL: fcvt_lu_h:2764; RV64IZFH: # %bb.0:2765; RV64IZFH-NEXT: fcvt.lu.h a0, fa0, rtz2766; RV64IZFH-NEXT: ret2767;2768; RV32IDZFH-LABEL: fcvt_lu_h:2769; RV32IDZFH: # %bb.0:2770; RV32IDZFH-NEXT: addi sp, sp, -162771; RV32IDZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2772; RV32IDZFH-NEXT: call __fixunshfdi2773; RV32IDZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2774; RV32IDZFH-NEXT: addi sp, sp, 162775; RV32IDZFH-NEXT: ret2776;2777; RV64IDZFH-LABEL: fcvt_lu_h:2778; RV64IDZFH: # %bb.0:2779; RV64IDZFH-NEXT: fcvt.lu.h a0, fa0, rtz2780; RV64IDZFH-NEXT: ret2781;2782; RV32IZHINX-LABEL: fcvt_lu_h:2783; RV32IZHINX: # %bb.0:2784; RV32IZHINX-NEXT: addi sp, sp, -162785; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2786; RV32IZHINX-NEXT: call __fixunshfdi2787; RV32IZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2788; RV32IZHINX-NEXT: addi sp, sp, 162789; RV32IZHINX-NEXT: ret2790;2791; RV64IZHINX-LABEL: fcvt_lu_h:2792; RV64IZHINX: # %bb.0:2793; RV64IZHINX-NEXT: fcvt.lu.h a0, a0, rtz2794; RV64IZHINX-NEXT: ret2795;2796; RV32IZDINXZHINX-LABEL: fcvt_lu_h:2797; RV32IZDINXZHINX: # %bb.0:2798; RV32IZDINXZHINX-NEXT: addi sp, sp, -162799; RV32IZDINXZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2800; RV32IZDINXZHINX-NEXT: call __fixunshfdi2801; RV32IZDINXZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2802; RV32IZDINXZHINX-NEXT: addi sp, sp, 162803; RV32IZDINXZHINX-NEXT: ret2804;2805; RV64IZDINXZHINX-LABEL: fcvt_lu_h:2806; RV64IZDINXZHINX: # %bb.0:2807; RV64IZDINXZHINX-NEXT: fcvt.lu.h a0, a0, rtz2808; RV64IZDINXZHINX-NEXT: ret2809;2810; RV32I-LABEL: fcvt_lu_h:2811; RV32I: # %bb.0:2812; RV32I-NEXT: addi sp, sp, -162813; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2814; RV32I-NEXT: call __extendhfsf22815; RV32I-NEXT: call __fixunssfdi2816; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2817; RV32I-NEXT: addi sp, sp, 162818; RV32I-NEXT: ret2819;2820; RV64I-LABEL: fcvt_lu_h:2821; RV64I: # %bb.0:2822; RV64I-NEXT: addi sp, sp, -162823; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2824; RV64I-NEXT: slli a0, a0, 482825; RV64I-NEXT: srli a0, a0, 482826; RV64I-NEXT: call __extendhfsf22827; RV64I-NEXT: call __fixunssfdi2828; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2829; RV64I-NEXT: addi sp, sp, 162830; RV64I-NEXT: ret2831;2832; RV32ID-ILP32-LABEL: fcvt_lu_h:2833; RV32ID-ILP32: # %bb.0:2834; RV32ID-ILP32-NEXT: addi sp, sp, -162835; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2836; RV32ID-ILP32-NEXT: call __extendhfsf22837; RV32ID-ILP32-NEXT: call __fixunssfdi2838; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2839; RV32ID-ILP32-NEXT: addi sp, sp, 162840; RV32ID-ILP32-NEXT: ret2841;2842; RV64ID-LP64-LABEL: fcvt_lu_h:2843; RV64ID-LP64: # %bb.0:2844; RV64ID-LP64-NEXT: addi sp, sp, -162845; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2846; RV64ID-LP64-NEXT: call __extendhfsf22847; RV64ID-LP64-NEXT: fmv.w.x fa5, a02848; RV64ID-LP64-NEXT: fcvt.lu.s a0, fa5, rtz2849; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2850; RV64ID-LP64-NEXT: addi sp, sp, 162851; RV64ID-LP64-NEXT: ret2852;2853; RV32ID-LABEL: fcvt_lu_h:2854; RV32ID: # %bb.0:2855; RV32ID-NEXT: addi sp, sp, -162856; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2857; RV32ID-NEXT: call __extendhfsf22858; RV32ID-NEXT: call __fixunssfdi2859; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2860; RV32ID-NEXT: addi sp, sp, 162861; RV32ID-NEXT: ret2862;2863; RV64ID-LABEL: fcvt_lu_h:2864; RV64ID: # %bb.0:2865; RV64ID-NEXT: addi sp, sp, -162866; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill2867; RV64ID-NEXT: call __extendhfsf22868; RV64ID-NEXT: fcvt.lu.s a0, fa0, rtz2869; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload2870; RV64ID-NEXT: addi sp, sp, 162871; RV64ID-NEXT: ret2872;2873; CHECK32-IZFHMIN-LABEL: fcvt_lu_h:2874; CHECK32-IZFHMIN: # %bb.0:2875; CHECK32-IZFHMIN-NEXT: addi sp, sp, -162876; CHECK32-IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2877; CHECK32-IZFHMIN-NEXT: call __fixunshfdi2878; CHECK32-IZFHMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2879; CHECK32-IZFHMIN-NEXT: addi sp, sp, 162880; CHECK32-IZFHMIN-NEXT: ret2881;2882; CHECK64-IZFHMIN-LABEL: fcvt_lu_h:2883; CHECK64-IZFHMIN: # %bb.0:2884; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa02885; CHECK64-IZFHMIN-NEXT: fcvt.lu.s a0, fa5, rtz2886; CHECK64-IZFHMIN-NEXT: ret2887;2888; CHECK32-IZHINXMIN-LABEL: fcvt_lu_h:2889; CHECK32-IZHINXMIN: # %bb.0:2890; CHECK32-IZHINXMIN-NEXT: addi sp, sp, -162891; CHECK32-IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2892; CHECK32-IZHINXMIN-NEXT: call __fixunshfdi2893; CHECK32-IZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2894; CHECK32-IZHINXMIN-NEXT: addi sp, sp, 162895; CHECK32-IZHINXMIN-NEXT: ret2896;2897; CHECK64-IZHINXMIN-LABEL: fcvt_lu_h:2898; CHECK64-IZHINXMIN: # %bb.0:2899; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a02900; CHECK64-IZHINXMIN-NEXT: fcvt.lu.s a0, a0, rtz2901; CHECK64-IZHINXMIN-NEXT: ret2902;2903; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_lu_h:2904; CHECK32-IZDINXZHINXMIN: # %bb.0:2905; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, -162906; CHECK32-IZDINXZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2907; CHECK32-IZDINXZHINXMIN-NEXT: call __fixunshfdi2908; CHECK32-IZDINXZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2909; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, 162910; CHECK32-IZDINXZHINXMIN-NEXT: ret2911;2912; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_lu_h:2913; CHECK64-IZDINXZHINXMIN: # %bb.0:2914; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a02915; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.lu.s a0, a0, rtz2916; CHECK64-IZDINXZHINXMIN-NEXT: ret2917 %1 = fptoui half %a to i642918 ret i64 %12919}2920 2921define i64 @fcvt_lu_h_sat(half %a) nounwind {2922; RV32IZFH-LABEL: fcvt_lu_h_sat:2923; RV32IZFH: # %bb.0: # %start2924; RV32IZFH-NEXT: addi sp, sp, -162925; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2926; RV32IZFH-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2927; RV32IZFH-NEXT: fsw fs0, 4(sp) # 4-byte Folded Spill2928; RV32IZFH-NEXT: fcvt.s.h fs0, fa02929; RV32IZFH-NEXT: fmv.w.x fa5, zero2930; RV32IZFH-NEXT: fle.s a0, fa5, fs02931; RV32IZFH-NEXT: neg s0, a02932; RV32IZFH-NEXT: fmv.s fa0, fs02933; RV32IZFH-NEXT: call __fixunssfdi2934; RV32IZFH-NEXT: and a0, s0, a02935; RV32IZFH-NEXT: lui a2, 3911682936; RV32IZFH-NEXT: and a1, s0, a12937; RV32IZFH-NEXT: addi a2, a2, -12938; RV32IZFH-NEXT: fmv.w.x fa5, a22939; RV32IZFH-NEXT: flt.s a2, fa5, fs02940; RV32IZFH-NEXT: neg a2, a22941; RV32IZFH-NEXT: or a0, a2, a02942; RV32IZFH-NEXT: or a1, a2, a12943; RV32IZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2944; RV32IZFH-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2945; RV32IZFH-NEXT: flw fs0, 4(sp) # 4-byte Folded Reload2946; RV32IZFH-NEXT: addi sp, sp, 162947; RV32IZFH-NEXT: ret2948;2949; RV64IZFH-LABEL: fcvt_lu_h_sat:2950; RV64IZFH: # %bb.0: # %start2951; RV64IZFH-NEXT: fcvt.lu.h a0, fa0, rtz2952; RV64IZFH-NEXT: feq.h a1, fa0, fa02953; RV64IZFH-NEXT: seqz a1, a12954; RV64IZFH-NEXT: addi a1, a1, -12955; RV64IZFH-NEXT: and a0, a1, a02956; RV64IZFH-NEXT: ret2957;2958; RV32IDZFH-LABEL: fcvt_lu_h_sat:2959; RV32IDZFH: # %bb.0: # %start2960; RV32IDZFH-NEXT: addi sp, sp, -162961; RV32IDZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2962; RV32IDZFH-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2963; RV32IDZFH-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill2964; RV32IDZFH-NEXT: fcvt.s.h fs0, fa02965; RV32IDZFH-NEXT: fmv.w.x fa5, zero2966; RV32IDZFH-NEXT: fle.s a0, fa5, fs02967; RV32IDZFH-NEXT: neg s0, a02968; RV32IDZFH-NEXT: fmv.s fa0, fs02969; RV32IDZFH-NEXT: call __fixunssfdi2970; RV32IDZFH-NEXT: and a0, s0, a02971; RV32IDZFH-NEXT: lui a2, 3911682972; RV32IDZFH-NEXT: and a1, s0, a12973; RV32IDZFH-NEXT: addi a2, a2, -12974; RV32IDZFH-NEXT: fmv.w.x fa5, a22975; RV32IDZFH-NEXT: flt.s a2, fa5, fs02976; RV32IDZFH-NEXT: neg a2, a22977; RV32IDZFH-NEXT: or a0, a2, a02978; RV32IDZFH-NEXT: or a1, a2, a12979; RV32IDZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload2980; RV32IDZFH-NEXT: lw s0, 8(sp) # 4-byte Folded Reload2981; RV32IDZFH-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload2982; RV32IDZFH-NEXT: addi sp, sp, 162983; RV32IDZFH-NEXT: ret2984;2985; RV64IDZFH-LABEL: fcvt_lu_h_sat:2986; RV64IDZFH: # %bb.0: # %start2987; RV64IDZFH-NEXT: fcvt.lu.h a0, fa0, rtz2988; RV64IDZFH-NEXT: feq.h a1, fa0, fa02989; RV64IDZFH-NEXT: seqz a1, a12990; RV64IDZFH-NEXT: addi a1, a1, -12991; RV64IDZFH-NEXT: and a0, a1, a02992; RV64IDZFH-NEXT: ret2993;2994; RV32IZHINX-LABEL: fcvt_lu_h_sat:2995; RV32IZHINX: # %bb.0: # %start2996; RV32IZHINX-NEXT: addi sp, sp, -162997; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill2998; RV32IZHINX-NEXT: sw s0, 8(sp) # 4-byte Folded Spill2999; RV32IZHINX-NEXT: sw s1, 4(sp) # 4-byte Folded Spill3000; RV32IZHINX-NEXT: fcvt.s.h s0, a03001; RV32IZHINX-NEXT: fle.s a0, zero, s03002; RV32IZHINX-NEXT: neg s1, a03003; RV32IZHINX-NEXT: mv a0, s03004; RV32IZHINX-NEXT: call __fixunssfdi3005; RV32IZHINX-NEXT: and a0, s1, a03006; RV32IZHINX-NEXT: lui a2, 3911683007; RV32IZHINX-NEXT: and a1, s1, a13008; RV32IZHINX-NEXT: addi a2, a2, -13009; RV32IZHINX-NEXT: flt.s a2, a2, s03010; RV32IZHINX-NEXT: neg a2, a23011; RV32IZHINX-NEXT: or a0, a2, a03012; RV32IZHINX-NEXT: or a1, a2, a13013; RV32IZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3014; RV32IZHINX-NEXT: lw s0, 8(sp) # 4-byte Folded Reload3015; RV32IZHINX-NEXT: lw s1, 4(sp) # 4-byte Folded Reload3016; RV32IZHINX-NEXT: addi sp, sp, 163017; RV32IZHINX-NEXT: ret3018;3019; RV64IZHINX-LABEL: fcvt_lu_h_sat:3020; RV64IZHINX: # %bb.0: # %start3021; RV64IZHINX-NEXT: fcvt.lu.h a1, a0, rtz3022; RV64IZHINX-NEXT: feq.h a0, a0, a03023; RV64IZHINX-NEXT: seqz a0, a03024; RV64IZHINX-NEXT: addi a0, a0, -13025; RV64IZHINX-NEXT: and a0, a0, a13026; RV64IZHINX-NEXT: ret3027;3028; RV32IZDINXZHINX-LABEL: fcvt_lu_h_sat:3029; RV32IZDINXZHINX: # %bb.0: # %start3030; RV32IZDINXZHINX-NEXT: addi sp, sp, -163031; RV32IZDINXZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3032; RV32IZDINXZHINX-NEXT: sw s0, 8(sp) # 4-byte Folded Spill3033; RV32IZDINXZHINX-NEXT: sw s1, 4(sp) # 4-byte Folded Spill3034; RV32IZDINXZHINX-NEXT: fcvt.s.h s0, a03035; RV32IZDINXZHINX-NEXT: fle.s a0, zero, s03036; RV32IZDINXZHINX-NEXT: neg s1, a03037; RV32IZDINXZHINX-NEXT: mv a0, s03038; RV32IZDINXZHINX-NEXT: call __fixunssfdi3039; RV32IZDINXZHINX-NEXT: and a0, s1, a03040; RV32IZDINXZHINX-NEXT: lui a2, 3911683041; RV32IZDINXZHINX-NEXT: and a1, s1, a13042; RV32IZDINXZHINX-NEXT: addi a2, a2, -13043; RV32IZDINXZHINX-NEXT: flt.s a2, a2, s03044; RV32IZDINXZHINX-NEXT: neg a2, a23045; RV32IZDINXZHINX-NEXT: or a0, a2, a03046; RV32IZDINXZHINX-NEXT: or a1, a2, a13047; RV32IZDINXZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3048; RV32IZDINXZHINX-NEXT: lw s0, 8(sp) # 4-byte Folded Reload3049; RV32IZDINXZHINX-NEXT: lw s1, 4(sp) # 4-byte Folded Reload3050; RV32IZDINXZHINX-NEXT: addi sp, sp, 163051; RV32IZDINXZHINX-NEXT: ret3052;3053; RV64IZDINXZHINX-LABEL: fcvt_lu_h_sat:3054; RV64IZDINXZHINX: # %bb.0: # %start3055; RV64IZDINXZHINX-NEXT: fcvt.lu.h a1, a0, rtz3056; RV64IZDINXZHINX-NEXT: feq.h a0, a0, a03057; RV64IZDINXZHINX-NEXT: seqz a0, a03058; RV64IZDINXZHINX-NEXT: addi a0, a0, -13059; RV64IZDINXZHINX-NEXT: and a0, a0, a13060; RV64IZDINXZHINX-NEXT: ret3061;3062; RV32I-LABEL: fcvt_lu_h_sat:3063; RV32I: # %bb.0: # %start3064; RV32I-NEXT: addi sp, sp, -163065; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3066; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill3067; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill3068; RV32I-NEXT: sw s2, 0(sp) # 4-byte Folded Spill3069; RV32I-NEXT: call __extendhfsf23070; RV32I-NEXT: mv s0, a03071; RV32I-NEXT: lui a1, 3911683072; RV32I-NEXT: addi a1, a1, -13073; RV32I-NEXT: call __gtsf23074; RV32I-NEXT: sgtz a0, a03075; RV32I-NEXT: neg s1, a03076; RV32I-NEXT: mv a0, s03077; RV32I-NEXT: li a1, 03078; RV32I-NEXT: call __gesf23079; RV32I-NEXT: srli a0, a0, 313080; RV32I-NEXT: addi s2, a0, -13081; RV32I-NEXT: mv a0, s03082; RV32I-NEXT: call __fixunssfdi3083; RV32I-NEXT: and a0, s2, a03084; RV32I-NEXT: and a1, s2, a13085; RV32I-NEXT: or a0, s1, a03086; RV32I-NEXT: or a1, s1, a13087; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3088; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload3089; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload3090; RV32I-NEXT: lw s2, 0(sp) # 4-byte Folded Reload3091; RV32I-NEXT: addi sp, sp, 163092; RV32I-NEXT: ret3093;3094; RV64I-LABEL: fcvt_lu_h_sat:3095; RV64I: # %bb.0: # %start3096; RV64I-NEXT: addi sp, sp, -323097; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill3098; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill3099; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill3100; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill3101; RV64I-NEXT: slli a0, a0, 483102; RV64I-NEXT: srli a0, a0, 483103; RV64I-NEXT: call __extendhfsf23104; RV64I-NEXT: mv s0, a03105; RV64I-NEXT: lui a1, 3911683106; RV64I-NEXT: addi a1, a1, -13107; RV64I-NEXT: call __gtsf23108; RV64I-NEXT: sgtz a0, a03109; RV64I-NEXT: neg s1, a03110; RV64I-NEXT: mv a0, s03111; RV64I-NEXT: li a1, 03112; RV64I-NEXT: call __gesf23113; RV64I-NEXT: srli a0, a0, 633114; RV64I-NEXT: addi s2, a0, -13115; RV64I-NEXT: mv a0, s03116; RV64I-NEXT: call __fixunssfdi3117; RV64I-NEXT: and a0, s2, a03118; RV64I-NEXT: or a0, s1, a03119; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload3120; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload3121; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload3122; RV64I-NEXT: ld s2, 0(sp) # 8-byte Folded Reload3123; RV64I-NEXT: addi sp, sp, 323124; RV64I-NEXT: ret3125;3126; RV32ID-ILP32-LABEL: fcvt_lu_h_sat:3127; RV32ID-ILP32: # %bb.0: # %start3128; RV32ID-ILP32-NEXT: addi sp, sp, -163129; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3130; RV32ID-ILP32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill3131; RV32ID-ILP32-NEXT: sw s1, 4(sp) # 4-byte Folded Spill3132; RV32ID-ILP32-NEXT: call __extendhfsf23133; RV32ID-ILP32-NEXT: fmv.w.x fa5, a03134; RV32ID-ILP32-NEXT: lui a1, 3911683135; RV32ID-ILP32-NEXT: fmv.w.x fa4, zero3136; RV32ID-ILP32-NEXT: addi a1, a1, -13137; RV32ID-ILP32-NEXT: fle.s a2, fa4, fa53138; RV32ID-ILP32-NEXT: fmv.w.x fa4, a13139; RV32ID-ILP32-NEXT: flt.s a1, fa4, fa53140; RV32ID-ILP32-NEXT: neg s0, a13141; RV32ID-ILP32-NEXT: neg s1, a23142; RV32ID-ILP32-NEXT: call __fixunssfdi3143; RV32ID-ILP32-NEXT: and a0, s1, a03144; RV32ID-ILP32-NEXT: and a1, s1, a13145; RV32ID-ILP32-NEXT: or a0, s0, a03146; RV32ID-ILP32-NEXT: or a1, s0, a13147; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3148; RV32ID-ILP32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload3149; RV32ID-ILP32-NEXT: lw s1, 4(sp) # 4-byte Folded Reload3150; RV32ID-ILP32-NEXT: addi sp, sp, 163151; RV32ID-ILP32-NEXT: ret3152;3153; RV64ID-LP64-LABEL: fcvt_lu_h_sat:3154; RV64ID-LP64: # %bb.0: # %start3155; RV64ID-LP64-NEXT: addi sp, sp, -163156; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3157; RV64ID-LP64-NEXT: call __extendhfsf23158; RV64ID-LP64-NEXT: fmv.w.x fa5, a03159; RV64ID-LP64-NEXT: fcvt.lu.s a0, fa5, rtz3160; RV64ID-LP64-NEXT: feq.s a1, fa5, fa53161; RV64ID-LP64-NEXT: seqz a1, a13162; RV64ID-LP64-NEXT: addi a1, a1, -13163; RV64ID-LP64-NEXT: and a0, a1, a03164; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3165; RV64ID-LP64-NEXT: addi sp, sp, 163166; RV64ID-LP64-NEXT: ret3167;3168; RV32ID-LABEL: fcvt_lu_h_sat:3169; RV32ID: # %bb.0: # %start3170; RV32ID-NEXT: addi sp, sp, -163171; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3172; RV32ID-NEXT: sw s0, 8(sp) # 4-byte Folded Spill3173; RV32ID-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill3174; RV32ID-NEXT: call __extendhfsf23175; RV32ID-NEXT: fmv.s fs0, fa03176; RV32ID-NEXT: fmv.w.x fa5, zero3177; RV32ID-NEXT: fle.s a0, fa5, fa03178; RV32ID-NEXT: neg s0, a03179; RV32ID-NEXT: call __fixunssfdi3180; RV32ID-NEXT: and a0, s0, a03181; RV32ID-NEXT: lui a2, 3911683182; RV32ID-NEXT: and a1, s0, a13183; RV32ID-NEXT: addi a2, a2, -13184; RV32ID-NEXT: fmv.w.x fa5, a23185; RV32ID-NEXT: flt.s a2, fa5, fs03186; RV32ID-NEXT: neg a2, a23187; RV32ID-NEXT: or a0, a2, a03188; RV32ID-NEXT: or a1, a2, a13189; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3190; RV32ID-NEXT: lw s0, 8(sp) # 4-byte Folded Reload3191; RV32ID-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload3192; RV32ID-NEXT: addi sp, sp, 163193; RV32ID-NEXT: ret3194;3195; RV64ID-LABEL: fcvt_lu_h_sat:3196; RV64ID: # %bb.0: # %start3197; RV64ID-NEXT: addi sp, sp, -163198; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3199; RV64ID-NEXT: call __extendhfsf23200; RV64ID-NEXT: fcvt.lu.s a0, fa0, rtz3201; RV64ID-NEXT: feq.s a1, fa0, fa03202; RV64ID-NEXT: seqz a1, a13203; RV64ID-NEXT: addi a1, a1, -13204; RV64ID-NEXT: and a0, a1, a03205; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3206; RV64ID-NEXT: addi sp, sp, 163207; RV64ID-NEXT: ret3208;3209; RV32IFZFHMIN-LABEL: fcvt_lu_h_sat:3210; RV32IFZFHMIN: # %bb.0: # %start3211; RV32IFZFHMIN-NEXT: addi sp, sp, -163212; RV32IFZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3213; RV32IFZFHMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill3214; RV32IFZFHMIN-NEXT: fsw fs0, 4(sp) # 4-byte Folded Spill3215; RV32IFZFHMIN-NEXT: fcvt.s.h fs0, fa03216; RV32IFZFHMIN-NEXT: fmv.w.x fa5, zero3217; RV32IFZFHMIN-NEXT: fle.s a0, fa5, fs03218; RV32IFZFHMIN-NEXT: neg s0, a03219; RV32IFZFHMIN-NEXT: fmv.s fa0, fs03220; RV32IFZFHMIN-NEXT: call __fixunssfdi3221; RV32IFZFHMIN-NEXT: and a0, s0, a03222; RV32IFZFHMIN-NEXT: lui a2, 3911683223; RV32IFZFHMIN-NEXT: and a1, s0, a13224; RV32IFZFHMIN-NEXT: addi a2, a2, -13225; RV32IFZFHMIN-NEXT: fmv.w.x fa5, a23226; RV32IFZFHMIN-NEXT: flt.s a2, fa5, fs03227; RV32IFZFHMIN-NEXT: neg a2, a23228; RV32IFZFHMIN-NEXT: or a0, a2, a03229; RV32IFZFHMIN-NEXT: or a1, a2, a13230; RV32IFZFHMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3231; RV32IFZFHMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload3232; RV32IFZFHMIN-NEXT: flw fs0, 4(sp) # 4-byte Folded Reload3233; RV32IFZFHMIN-NEXT: addi sp, sp, 163234; RV32IFZFHMIN-NEXT: ret3235;3236; CHECK64-IZFHMIN-LABEL: fcvt_lu_h_sat:3237; CHECK64-IZFHMIN: # %bb.0: # %start3238; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa03239; CHECK64-IZFHMIN-NEXT: fcvt.lu.s a0, fa5, rtz3240; CHECK64-IZFHMIN-NEXT: feq.s a1, fa5, fa53241; CHECK64-IZFHMIN-NEXT: seqz a1, a13242; CHECK64-IZFHMIN-NEXT: addi a1, a1, -13243; CHECK64-IZFHMIN-NEXT: and a0, a1, a03244; CHECK64-IZFHMIN-NEXT: ret3245;3246; RV32IDZFHMIN-LABEL: fcvt_lu_h_sat:3247; RV32IDZFHMIN: # %bb.0: # %start3248; RV32IDZFHMIN-NEXT: addi sp, sp, -163249; RV32IDZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3250; RV32IDZFHMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill3251; RV32IDZFHMIN-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill3252; RV32IDZFHMIN-NEXT: fcvt.s.h fs0, fa03253; RV32IDZFHMIN-NEXT: fmv.w.x fa5, zero3254; RV32IDZFHMIN-NEXT: fle.s a0, fa5, fs03255; RV32IDZFHMIN-NEXT: neg s0, a03256; RV32IDZFHMIN-NEXT: fmv.s fa0, fs03257; RV32IDZFHMIN-NEXT: call __fixunssfdi3258; RV32IDZFHMIN-NEXT: and a0, s0, a03259; RV32IDZFHMIN-NEXT: lui a2, 3911683260; RV32IDZFHMIN-NEXT: and a1, s0, a13261; RV32IDZFHMIN-NEXT: addi a2, a2, -13262; RV32IDZFHMIN-NEXT: fmv.w.x fa5, a23263; RV32IDZFHMIN-NEXT: flt.s a2, fa5, fs03264; RV32IDZFHMIN-NEXT: neg a2, a23265; RV32IDZFHMIN-NEXT: or a0, a2, a03266; RV32IDZFHMIN-NEXT: or a1, a2, a13267; RV32IDZFHMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3268; RV32IDZFHMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload3269; RV32IDZFHMIN-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload3270; RV32IDZFHMIN-NEXT: addi sp, sp, 163271; RV32IDZFHMIN-NEXT: ret3272;3273; CHECK32-IZHINXMIN-LABEL: fcvt_lu_h_sat:3274; CHECK32-IZHINXMIN: # %bb.0: # %start3275; CHECK32-IZHINXMIN-NEXT: addi sp, sp, -163276; CHECK32-IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3277; CHECK32-IZHINXMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill3278; CHECK32-IZHINXMIN-NEXT: sw s1, 4(sp) # 4-byte Folded Spill3279; CHECK32-IZHINXMIN-NEXT: fcvt.s.h s0, a03280; CHECK32-IZHINXMIN-NEXT: fle.s a0, zero, s03281; CHECK32-IZHINXMIN-NEXT: neg s1, a03282; CHECK32-IZHINXMIN-NEXT: mv a0, s03283; CHECK32-IZHINXMIN-NEXT: call __fixunssfdi3284; CHECK32-IZHINXMIN-NEXT: and a0, s1, a03285; CHECK32-IZHINXMIN-NEXT: lui a2, 3911683286; CHECK32-IZHINXMIN-NEXT: and a1, s1, a13287; CHECK32-IZHINXMIN-NEXT: addi a2, a2, -13288; CHECK32-IZHINXMIN-NEXT: flt.s a2, a2, s03289; CHECK32-IZHINXMIN-NEXT: neg a2, a23290; CHECK32-IZHINXMIN-NEXT: or a0, a2, a03291; CHECK32-IZHINXMIN-NEXT: or a1, a2, a13292; CHECK32-IZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3293; CHECK32-IZHINXMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload3294; CHECK32-IZHINXMIN-NEXT: lw s1, 4(sp) # 4-byte Folded Reload3295; CHECK32-IZHINXMIN-NEXT: addi sp, sp, 163296; CHECK32-IZHINXMIN-NEXT: ret3297;3298; CHECK64-IZHINXMIN-LABEL: fcvt_lu_h_sat:3299; CHECK64-IZHINXMIN: # %bb.0: # %start3300; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a03301; CHECK64-IZHINXMIN-NEXT: fcvt.lu.s a1, a0, rtz3302; CHECK64-IZHINXMIN-NEXT: feq.s a0, a0, a03303; CHECK64-IZHINXMIN-NEXT: seqz a0, a03304; CHECK64-IZHINXMIN-NEXT: addi a0, a0, -13305; CHECK64-IZHINXMIN-NEXT: and a0, a0, a13306; CHECK64-IZHINXMIN-NEXT: ret3307;3308; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_lu_h_sat:3309; CHECK32-IZDINXZHINXMIN: # %bb.0: # %start3310; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, -163311; CHECK32-IZDINXZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3312; CHECK32-IZDINXZHINXMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill3313; CHECK32-IZDINXZHINXMIN-NEXT: sw s1, 4(sp) # 4-byte Folded Spill3314; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h s0, a03315; CHECK32-IZDINXZHINXMIN-NEXT: fle.s a0, zero, s03316; CHECK32-IZDINXZHINXMIN-NEXT: neg s1, a03317; CHECK32-IZDINXZHINXMIN-NEXT: mv a0, s03318; CHECK32-IZDINXZHINXMIN-NEXT: call __fixunssfdi3319; CHECK32-IZDINXZHINXMIN-NEXT: and a0, s1, a03320; CHECK32-IZDINXZHINXMIN-NEXT: lui a2, 3911683321; CHECK32-IZDINXZHINXMIN-NEXT: and a1, s1, a13322; CHECK32-IZDINXZHINXMIN-NEXT: addi a2, a2, -13323; CHECK32-IZDINXZHINXMIN-NEXT: flt.s a2, a2, s03324; CHECK32-IZDINXZHINXMIN-NEXT: neg a2, a23325; CHECK32-IZDINXZHINXMIN-NEXT: or a0, a2, a03326; CHECK32-IZDINXZHINXMIN-NEXT: or a1, a2, a13327; CHECK32-IZDINXZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3328; CHECK32-IZDINXZHINXMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload3329; CHECK32-IZDINXZHINXMIN-NEXT: lw s1, 4(sp) # 4-byte Folded Reload3330; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, 163331; CHECK32-IZDINXZHINXMIN-NEXT: ret3332;3333; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_lu_h_sat:3334; CHECK64-IZDINXZHINXMIN: # %bb.0: # %start3335; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a03336; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.lu.s a1, a0, rtz3337; CHECK64-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a03338; CHECK64-IZDINXZHINXMIN-NEXT: seqz a0, a03339; CHECK64-IZDINXZHINXMIN-NEXT: addi a0, a0, -13340; CHECK64-IZDINXZHINXMIN-NEXT: and a0, a0, a13341; CHECK64-IZDINXZHINXMIN-NEXT: ret3342start:3343 %0 = tail call i64 @llvm.fptoui.sat.i64.f16(half %a)3344 ret i64 %03345}3346 3347define half @fcvt_h_si(i16 %a) nounwind {3348; RV32IZFH-LABEL: fcvt_h_si:3349; RV32IZFH: # %bb.0:3350; RV32IZFH-NEXT: slli a0, a0, 163351; RV32IZFH-NEXT: srai a0, a0, 163352; RV32IZFH-NEXT: fcvt.h.w fa0, a03353; RV32IZFH-NEXT: ret3354;3355; RV64IZFH-LABEL: fcvt_h_si:3356; RV64IZFH: # %bb.0:3357; RV64IZFH-NEXT: slli a0, a0, 483358; RV64IZFH-NEXT: srai a0, a0, 483359; RV64IZFH-NEXT: fcvt.h.w fa0, a03360; RV64IZFH-NEXT: ret3361;3362; RV32IDZFH-LABEL: fcvt_h_si:3363; RV32IDZFH: # %bb.0:3364; RV32IDZFH-NEXT: slli a0, a0, 163365; RV32IDZFH-NEXT: srai a0, a0, 163366; RV32IDZFH-NEXT: fcvt.h.w fa0, a03367; RV32IDZFH-NEXT: ret3368;3369; RV64IDZFH-LABEL: fcvt_h_si:3370; RV64IDZFH: # %bb.0:3371; RV64IDZFH-NEXT: slli a0, a0, 483372; RV64IDZFH-NEXT: srai a0, a0, 483373; RV64IDZFH-NEXT: fcvt.h.w fa0, a03374; RV64IDZFH-NEXT: ret3375;3376; RV32IZHINX-LABEL: fcvt_h_si:3377; RV32IZHINX: # %bb.0:3378; RV32IZHINX-NEXT: slli a0, a0, 163379; RV32IZHINX-NEXT: srai a0, a0, 163380; RV32IZHINX-NEXT: fcvt.h.w a0, a03381; RV32IZHINX-NEXT: ret3382;3383; RV64IZHINX-LABEL: fcvt_h_si:3384; RV64IZHINX: # %bb.0:3385; RV64IZHINX-NEXT: slli a0, a0, 483386; RV64IZHINX-NEXT: srai a0, a0, 483387; RV64IZHINX-NEXT: fcvt.h.w a0, a03388; RV64IZHINX-NEXT: ret3389;3390; RV32IZDINXZHINX-LABEL: fcvt_h_si:3391; RV32IZDINXZHINX: # %bb.0:3392; RV32IZDINXZHINX-NEXT: slli a0, a0, 163393; RV32IZDINXZHINX-NEXT: srai a0, a0, 163394; RV32IZDINXZHINX-NEXT: fcvt.h.w a0, a03395; RV32IZDINXZHINX-NEXT: ret3396;3397; RV64IZDINXZHINX-LABEL: fcvt_h_si:3398; RV64IZDINXZHINX: # %bb.0:3399; RV64IZDINXZHINX-NEXT: slli a0, a0, 483400; RV64IZDINXZHINX-NEXT: srai a0, a0, 483401; RV64IZDINXZHINX-NEXT: fcvt.h.w a0, a03402; RV64IZDINXZHINX-NEXT: ret3403;3404; RV32I-LABEL: fcvt_h_si:3405; RV32I: # %bb.0:3406; RV32I-NEXT: addi sp, sp, -163407; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3408; RV32I-NEXT: slli a0, a0, 163409; RV32I-NEXT: srai a0, a0, 163410; RV32I-NEXT: call __floatsisf3411; RV32I-NEXT: call __truncsfhf23412; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3413; RV32I-NEXT: addi sp, sp, 163414; RV32I-NEXT: ret3415;3416; RV64I-LABEL: fcvt_h_si:3417; RV64I: # %bb.0:3418; RV64I-NEXT: addi sp, sp, -163419; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3420; RV64I-NEXT: slli a0, a0, 483421; RV64I-NEXT: srai a0, a0, 483422; RV64I-NEXT: call __floatsisf3423; RV64I-NEXT: call __truncsfhf23424; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3425; RV64I-NEXT: addi sp, sp, 163426; RV64I-NEXT: ret3427;3428; RV32ID-ILP32-LABEL: fcvt_h_si:3429; RV32ID-ILP32: # %bb.0:3430; RV32ID-ILP32-NEXT: addi sp, sp, -163431; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3432; RV32ID-ILP32-NEXT: slli a0, a0, 163433; RV32ID-ILP32-NEXT: srai a0, a0, 163434; RV32ID-ILP32-NEXT: fcvt.s.w fa5, a03435; RV32ID-ILP32-NEXT: fmv.x.w a0, fa53436; RV32ID-ILP32-NEXT: call __truncsfhf23437; RV32ID-ILP32-NEXT: lui a1, 10485603438; RV32ID-ILP32-NEXT: or a0, a0, a13439; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3440; RV32ID-ILP32-NEXT: addi sp, sp, 163441; RV32ID-ILP32-NEXT: ret3442;3443; RV64ID-LP64-LABEL: fcvt_h_si:3444; RV64ID-LP64: # %bb.0:3445; RV64ID-LP64-NEXT: addi sp, sp, -163446; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3447; RV64ID-LP64-NEXT: slli a0, a0, 483448; RV64ID-LP64-NEXT: srai a0, a0, 483449; RV64ID-LP64-NEXT: fcvt.s.w fa5, a03450; RV64ID-LP64-NEXT: fmv.x.w a0, fa53451; RV64ID-LP64-NEXT: call __truncsfhf23452; RV64ID-LP64-NEXT: lui a1, 10485603453; RV64ID-LP64-NEXT: or a0, a0, a13454; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3455; RV64ID-LP64-NEXT: addi sp, sp, 163456; RV64ID-LP64-NEXT: ret3457;3458; RV32ID-LABEL: fcvt_h_si:3459; RV32ID: # %bb.0:3460; RV32ID-NEXT: addi sp, sp, -163461; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3462; RV32ID-NEXT: slli a0, a0, 163463; RV32ID-NEXT: srai a0, a0, 163464; RV32ID-NEXT: fcvt.s.w fa0, a03465; RV32ID-NEXT: call __truncsfhf23466; RV32ID-NEXT: fmv.x.w a0, fa03467; RV32ID-NEXT: lui a1, 10485603468; RV32ID-NEXT: or a0, a0, a13469; RV32ID-NEXT: fmv.w.x fa0, a03470; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3471; RV32ID-NEXT: addi sp, sp, 163472; RV32ID-NEXT: ret3473;3474; RV64ID-LABEL: fcvt_h_si:3475; RV64ID: # %bb.0:3476; RV64ID-NEXT: addi sp, sp, -163477; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3478; RV64ID-NEXT: slli a0, a0, 483479; RV64ID-NEXT: srai a0, a0, 483480; RV64ID-NEXT: fcvt.s.w fa0, a03481; RV64ID-NEXT: call __truncsfhf23482; RV64ID-NEXT: fmv.x.w a0, fa03483; RV64ID-NEXT: lui a1, 10485603484; RV64ID-NEXT: or a0, a0, a13485; RV64ID-NEXT: fmv.w.x fa0, a03486; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3487; RV64ID-NEXT: addi sp, sp, 163488; RV64ID-NEXT: ret3489;3490; CHECK32-IZFHMIN-LABEL: fcvt_h_si:3491; CHECK32-IZFHMIN: # %bb.0:3492; CHECK32-IZFHMIN-NEXT: slli a0, a0, 163493; CHECK32-IZFHMIN-NEXT: srai a0, a0, 163494; CHECK32-IZFHMIN-NEXT: fcvt.s.w fa5, a03495; CHECK32-IZFHMIN-NEXT: fcvt.h.s fa0, fa53496; CHECK32-IZFHMIN-NEXT: ret3497;3498; CHECK64-IZFHMIN-LABEL: fcvt_h_si:3499; CHECK64-IZFHMIN: # %bb.0:3500; CHECK64-IZFHMIN-NEXT: slli a0, a0, 483501; CHECK64-IZFHMIN-NEXT: srai a0, a0, 483502; CHECK64-IZFHMIN-NEXT: fcvt.s.w fa5, a03503; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa0, fa53504; CHECK64-IZFHMIN-NEXT: ret3505;3506; CHECK32-IZHINXMIN-LABEL: fcvt_h_si:3507; CHECK32-IZHINXMIN: # %bb.0:3508; CHECK32-IZHINXMIN-NEXT: slli a0, a0, 163509; CHECK32-IZHINXMIN-NEXT: srai a0, a0, 163510; CHECK32-IZHINXMIN-NEXT: fcvt.s.w a0, a03511; CHECK32-IZHINXMIN-NEXT: fcvt.h.s a0, a03512; CHECK32-IZHINXMIN-NEXT: ret3513;3514; CHECK64-IZHINXMIN-LABEL: fcvt_h_si:3515; CHECK64-IZHINXMIN: # %bb.0:3516; CHECK64-IZHINXMIN-NEXT: slli a0, a0, 483517; CHECK64-IZHINXMIN-NEXT: srai a0, a0, 483518; CHECK64-IZHINXMIN-NEXT: fcvt.s.w a0, a03519; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a0, a03520; CHECK64-IZHINXMIN-NEXT: ret3521;3522; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_si:3523; CHECK32-IZDINXZHINXMIN: # %bb.0:3524; CHECK32-IZDINXZHINXMIN-NEXT: slli a0, a0, 163525; CHECK32-IZDINXZHINXMIN-NEXT: srai a0, a0, 163526; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.w a0, a03527; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a03528; CHECK32-IZDINXZHINXMIN-NEXT: ret3529;3530; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_si:3531; CHECK64-IZDINXZHINXMIN: # %bb.0:3532; CHECK64-IZDINXZHINXMIN-NEXT: slli a0, a0, 483533; CHECK64-IZDINXZHINXMIN-NEXT: srai a0, a0, 483534; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.w a0, a03535; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a03536; CHECK64-IZDINXZHINXMIN-NEXT: ret3537 %1 = sitofp i16 %a to half3538 ret half %13539}3540 3541define half @fcvt_h_si_signext(i16 signext %a) nounwind {3542; CHECKIZFH-LABEL: fcvt_h_si_signext:3543; CHECKIZFH: # %bb.0:3544; CHECKIZFH-NEXT: fcvt.h.w fa0, a03545; CHECKIZFH-NEXT: ret3546;3547; RV32IDZFH-LABEL: fcvt_h_si_signext:3548; RV32IDZFH: # %bb.0:3549; RV32IDZFH-NEXT: fcvt.h.w fa0, a03550; RV32IDZFH-NEXT: ret3551;3552; RV64IDZFH-LABEL: fcvt_h_si_signext:3553; RV64IDZFH: # %bb.0:3554; RV64IDZFH-NEXT: fcvt.h.w fa0, a03555; RV64IDZFH-NEXT: ret3556;3557; CHECKIZHINX-LABEL: fcvt_h_si_signext:3558; CHECKIZHINX: # %bb.0:3559; CHECKIZHINX-NEXT: fcvt.h.w a0, a03560; CHECKIZHINX-NEXT: ret3561;3562; CHECKIZDINXZHINX-LABEL: fcvt_h_si_signext:3563; CHECKIZDINXZHINX: # %bb.0:3564; CHECKIZDINXZHINX-NEXT: fcvt.h.w a0, a03565; CHECKIZDINXZHINX-NEXT: ret3566;3567; RV32I-LABEL: fcvt_h_si_signext:3568; RV32I: # %bb.0:3569; RV32I-NEXT: addi sp, sp, -163570; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3571; RV32I-NEXT: call __floatsisf3572; RV32I-NEXT: call __truncsfhf23573; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3574; RV32I-NEXT: addi sp, sp, 163575; RV32I-NEXT: ret3576;3577; RV64I-LABEL: fcvt_h_si_signext:3578; RV64I: # %bb.0:3579; RV64I-NEXT: addi sp, sp, -163580; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3581; RV64I-NEXT: call __floatsisf3582; RV64I-NEXT: call __truncsfhf23583; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3584; RV64I-NEXT: addi sp, sp, 163585; RV64I-NEXT: ret3586;3587; RV32ID-ILP32-LABEL: fcvt_h_si_signext:3588; RV32ID-ILP32: # %bb.0:3589; RV32ID-ILP32-NEXT: addi sp, sp, -163590; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3591; RV32ID-ILP32-NEXT: fcvt.s.w fa5, a03592; RV32ID-ILP32-NEXT: fmv.x.w a0, fa53593; RV32ID-ILP32-NEXT: call __truncsfhf23594; RV32ID-ILP32-NEXT: lui a1, 10485603595; RV32ID-ILP32-NEXT: or a0, a0, a13596; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3597; RV32ID-ILP32-NEXT: addi sp, sp, 163598; RV32ID-ILP32-NEXT: ret3599;3600; RV64ID-LP64-LABEL: fcvt_h_si_signext:3601; RV64ID-LP64: # %bb.0:3602; RV64ID-LP64-NEXT: addi sp, sp, -163603; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3604; RV64ID-LP64-NEXT: fcvt.s.w fa5, a03605; RV64ID-LP64-NEXT: fmv.x.w a0, fa53606; RV64ID-LP64-NEXT: call __truncsfhf23607; RV64ID-LP64-NEXT: lui a1, 10485603608; RV64ID-LP64-NEXT: or a0, a0, a13609; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3610; RV64ID-LP64-NEXT: addi sp, sp, 163611; RV64ID-LP64-NEXT: ret3612;3613; RV32ID-LABEL: fcvt_h_si_signext:3614; RV32ID: # %bb.0:3615; RV32ID-NEXT: addi sp, sp, -163616; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3617; RV32ID-NEXT: fcvt.s.w fa0, a03618; RV32ID-NEXT: call __truncsfhf23619; RV32ID-NEXT: fmv.x.w a0, fa03620; RV32ID-NEXT: lui a1, 10485603621; RV32ID-NEXT: or a0, a0, a13622; RV32ID-NEXT: fmv.w.x fa0, a03623; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3624; RV32ID-NEXT: addi sp, sp, 163625; RV32ID-NEXT: ret3626;3627; RV64ID-LABEL: fcvt_h_si_signext:3628; RV64ID: # %bb.0:3629; RV64ID-NEXT: addi sp, sp, -163630; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3631; RV64ID-NEXT: fcvt.s.w fa0, a03632; RV64ID-NEXT: call __truncsfhf23633; RV64ID-NEXT: fmv.x.w a0, fa03634; RV64ID-NEXT: lui a1, 10485603635; RV64ID-NEXT: or a0, a0, a13636; RV64ID-NEXT: fmv.w.x fa0, a03637; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3638; RV64ID-NEXT: addi sp, sp, 163639; RV64ID-NEXT: ret3640;3641; CHECK32-IZFHMIN-LABEL: fcvt_h_si_signext:3642; CHECK32-IZFHMIN: # %bb.0:3643; CHECK32-IZFHMIN-NEXT: fcvt.s.w fa5, a03644; CHECK32-IZFHMIN-NEXT: fcvt.h.s fa0, fa53645; CHECK32-IZFHMIN-NEXT: ret3646;3647; CHECK64-IZFHMIN-LABEL: fcvt_h_si_signext:3648; CHECK64-IZFHMIN: # %bb.0:3649; CHECK64-IZFHMIN-NEXT: fcvt.s.w fa5, a03650; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa0, fa53651; CHECK64-IZFHMIN-NEXT: ret3652;3653; CHECK32-IZHINXMIN-LABEL: fcvt_h_si_signext:3654; CHECK32-IZHINXMIN: # %bb.0:3655; CHECK32-IZHINXMIN-NEXT: fcvt.s.w a0, a03656; CHECK32-IZHINXMIN-NEXT: fcvt.h.s a0, a03657; CHECK32-IZHINXMIN-NEXT: ret3658;3659; CHECK64-IZHINXMIN-LABEL: fcvt_h_si_signext:3660; CHECK64-IZHINXMIN: # %bb.0:3661; CHECK64-IZHINXMIN-NEXT: fcvt.s.w a0, a03662; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a0, a03663; CHECK64-IZHINXMIN-NEXT: ret3664;3665; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_si_signext:3666; CHECK32-IZDINXZHINXMIN: # %bb.0:3667; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.w a0, a03668; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a03669; CHECK32-IZDINXZHINXMIN-NEXT: ret3670;3671; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_si_signext:3672; CHECK64-IZDINXZHINXMIN: # %bb.0:3673; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.w a0, a03674; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a03675; CHECK64-IZDINXZHINXMIN-NEXT: ret3676 %1 = sitofp i16 %a to half3677 ret half %13678}3679 3680define half @fcvt_h_ui(i16 %a) nounwind {3681; RV32IZFH-LABEL: fcvt_h_ui:3682; RV32IZFH: # %bb.0:3683; RV32IZFH-NEXT: slli a0, a0, 163684; RV32IZFH-NEXT: srli a0, a0, 163685; RV32IZFH-NEXT: fcvt.h.wu fa0, a03686; RV32IZFH-NEXT: ret3687;3688; RV64IZFH-LABEL: fcvt_h_ui:3689; RV64IZFH: # %bb.0:3690; RV64IZFH-NEXT: slli a0, a0, 483691; RV64IZFH-NEXT: srli a0, a0, 483692; RV64IZFH-NEXT: fcvt.h.wu fa0, a03693; RV64IZFH-NEXT: ret3694;3695; RV32IDZFH-LABEL: fcvt_h_ui:3696; RV32IDZFH: # %bb.0:3697; RV32IDZFH-NEXT: slli a0, a0, 163698; RV32IDZFH-NEXT: srli a0, a0, 163699; RV32IDZFH-NEXT: fcvt.h.wu fa0, a03700; RV32IDZFH-NEXT: ret3701;3702; RV64IDZFH-LABEL: fcvt_h_ui:3703; RV64IDZFH: # %bb.0:3704; RV64IDZFH-NEXT: slli a0, a0, 483705; RV64IDZFH-NEXT: srli a0, a0, 483706; RV64IDZFH-NEXT: fcvt.h.wu fa0, a03707; RV64IDZFH-NEXT: ret3708;3709; RV32IZHINX-LABEL: fcvt_h_ui:3710; RV32IZHINX: # %bb.0:3711; RV32IZHINX-NEXT: slli a0, a0, 163712; RV32IZHINX-NEXT: srli a0, a0, 163713; RV32IZHINX-NEXT: fcvt.h.wu a0, a03714; RV32IZHINX-NEXT: ret3715;3716; RV64IZHINX-LABEL: fcvt_h_ui:3717; RV64IZHINX: # %bb.0:3718; RV64IZHINX-NEXT: slli a0, a0, 483719; RV64IZHINX-NEXT: srli a0, a0, 483720; RV64IZHINX-NEXT: fcvt.h.wu a0, a03721; RV64IZHINX-NEXT: ret3722;3723; RV32IZDINXZHINX-LABEL: fcvt_h_ui:3724; RV32IZDINXZHINX: # %bb.0:3725; RV32IZDINXZHINX-NEXT: slli a0, a0, 163726; RV32IZDINXZHINX-NEXT: srli a0, a0, 163727; RV32IZDINXZHINX-NEXT: fcvt.h.wu a0, a03728; RV32IZDINXZHINX-NEXT: ret3729;3730; RV64IZDINXZHINX-LABEL: fcvt_h_ui:3731; RV64IZDINXZHINX: # %bb.0:3732; RV64IZDINXZHINX-NEXT: slli a0, a0, 483733; RV64IZDINXZHINX-NEXT: srli a0, a0, 483734; RV64IZDINXZHINX-NEXT: fcvt.h.wu a0, a03735; RV64IZDINXZHINX-NEXT: ret3736;3737; RV32I-LABEL: fcvt_h_ui:3738; RV32I: # %bb.0:3739; RV32I-NEXT: addi sp, sp, -163740; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3741; RV32I-NEXT: slli a0, a0, 163742; RV32I-NEXT: srli a0, a0, 163743; RV32I-NEXT: call __floatunsisf3744; RV32I-NEXT: call __truncsfhf23745; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3746; RV32I-NEXT: addi sp, sp, 163747; RV32I-NEXT: ret3748;3749; RV64I-LABEL: fcvt_h_ui:3750; RV64I: # %bb.0:3751; RV64I-NEXT: addi sp, sp, -163752; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3753; RV64I-NEXT: slli a0, a0, 483754; RV64I-NEXT: srli a0, a0, 483755; RV64I-NEXT: call __floatunsisf3756; RV64I-NEXT: call __truncsfhf23757; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3758; RV64I-NEXT: addi sp, sp, 163759; RV64I-NEXT: ret3760;3761; RV32ID-ILP32-LABEL: fcvt_h_ui:3762; RV32ID-ILP32: # %bb.0:3763; RV32ID-ILP32-NEXT: addi sp, sp, -163764; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3765; RV32ID-ILP32-NEXT: slli a0, a0, 163766; RV32ID-ILP32-NEXT: srli a0, a0, 163767; RV32ID-ILP32-NEXT: fcvt.s.wu fa5, a03768; RV32ID-ILP32-NEXT: fmv.x.w a0, fa53769; RV32ID-ILP32-NEXT: call __truncsfhf23770; RV32ID-ILP32-NEXT: lui a1, 10485603771; RV32ID-ILP32-NEXT: or a0, a0, a13772; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3773; RV32ID-ILP32-NEXT: addi sp, sp, 163774; RV32ID-ILP32-NEXT: ret3775;3776; RV64ID-LP64-LABEL: fcvt_h_ui:3777; RV64ID-LP64: # %bb.0:3778; RV64ID-LP64-NEXT: addi sp, sp, -163779; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3780; RV64ID-LP64-NEXT: slli a0, a0, 483781; RV64ID-LP64-NEXT: srli a0, a0, 483782; RV64ID-LP64-NEXT: fcvt.s.wu fa5, a03783; RV64ID-LP64-NEXT: fmv.x.w a0, fa53784; RV64ID-LP64-NEXT: call __truncsfhf23785; RV64ID-LP64-NEXT: lui a1, 10485603786; RV64ID-LP64-NEXT: or a0, a0, a13787; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3788; RV64ID-LP64-NEXT: addi sp, sp, 163789; RV64ID-LP64-NEXT: ret3790;3791; RV32ID-LABEL: fcvt_h_ui:3792; RV32ID: # %bb.0:3793; RV32ID-NEXT: addi sp, sp, -163794; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3795; RV32ID-NEXT: slli a0, a0, 163796; RV32ID-NEXT: srli a0, a0, 163797; RV32ID-NEXT: fcvt.s.wu fa0, a03798; RV32ID-NEXT: call __truncsfhf23799; RV32ID-NEXT: fmv.x.w a0, fa03800; RV32ID-NEXT: lui a1, 10485603801; RV32ID-NEXT: or a0, a0, a13802; RV32ID-NEXT: fmv.w.x fa0, a03803; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3804; RV32ID-NEXT: addi sp, sp, 163805; RV32ID-NEXT: ret3806;3807; RV64ID-LABEL: fcvt_h_ui:3808; RV64ID: # %bb.0:3809; RV64ID-NEXT: addi sp, sp, -163810; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3811; RV64ID-NEXT: slli a0, a0, 483812; RV64ID-NEXT: srli a0, a0, 483813; RV64ID-NEXT: fcvt.s.wu fa0, a03814; RV64ID-NEXT: call __truncsfhf23815; RV64ID-NEXT: fmv.x.w a0, fa03816; RV64ID-NEXT: lui a1, 10485603817; RV64ID-NEXT: or a0, a0, a13818; RV64ID-NEXT: fmv.w.x fa0, a03819; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3820; RV64ID-NEXT: addi sp, sp, 163821; RV64ID-NEXT: ret3822;3823; CHECK32-IZFHMIN-LABEL: fcvt_h_ui:3824; CHECK32-IZFHMIN: # %bb.0:3825; CHECK32-IZFHMIN-NEXT: slli a0, a0, 163826; CHECK32-IZFHMIN-NEXT: srli a0, a0, 163827; CHECK32-IZFHMIN-NEXT: fcvt.s.wu fa5, a03828; CHECK32-IZFHMIN-NEXT: fcvt.h.s fa0, fa53829; CHECK32-IZFHMIN-NEXT: ret3830;3831; CHECK64-IZFHMIN-LABEL: fcvt_h_ui:3832; CHECK64-IZFHMIN: # %bb.0:3833; CHECK64-IZFHMIN-NEXT: slli a0, a0, 483834; CHECK64-IZFHMIN-NEXT: srli a0, a0, 483835; CHECK64-IZFHMIN-NEXT: fcvt.s.wu fa5, a03836; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa0, fa53837; CHECK64-IZFHMIN-NEXT: ret3838;3839; CHECK32-IZHINXMIN-LABEL: fcvt_h_ui:3840; CHECK32-IZHINXMIN: # %bb.0:3841; CHECK32-IZHINXMIN-NEXT: slli a0, a0, 163842; CHECK32-IZHINXMIN-NEXT: srli a0, a0, 163843; CHECK32-IZHINXMIN-NEXT: fcvt.s.wu a0, a03844; CHECK32-IZHINXMIN-NEXT: fcvt.h.s a0, a03845; CHECK32-IZHINXMIN-NEXT: ret3846;3847; CHECK64-IZHINXMIN-LABEL: fcvt_h_ui:3848; CHECK64-IZHINXMIN: # %bb.0:3849; CHECK64-IZHINXMIN-NEXT: slli a0, a0, 483850; CHECK64-IZHINXMIN-NEXT: srli a0, a0, 483851; CHECK64-IZHINXMIN-NEXT: fcvt.s.wu a0, a03852; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a0, a03853; CHECK64-IZHINXMIN-NEXT: ret3854;3855; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_ui:3856; CHECK32-IZDINXZHINXMIN: # %bb.0:3857; CHECK32-IZDINXZHINXMIN-NEXT: slli a0, a0, 163858; CHECK32-IZDINXZHINXMIN-NEXT: srli a0, a0, 163859; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.wu a0, a03860; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a03861; CHECK32-IZDINXZHINXMIN-NEXT: ret3862;3863; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_ui:3864; CHECK64-IZDINXZHINXMIN: # %bb.0:3865; CHECK64-IZDINXZHINXMIN-NEXT: slli a0, a0, 483866; CHECK64-IZDINXZHINXMIN-NEXT: srli a0, a0, 483867; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.wu a0, a03868; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a03869; CHECK64-IZDINXZHINXMIN-NEXT: ret3870 %1 = uitofp i16 %a to half3871 ret half %13872}3873 3874define half @fcvt_h_ui_zeroext(i16 zeroext %a) nounwind {3875; CHECKIZFH-LABEL: fcvt_h_ui_zeroext:3876; CHECKIZFH: # %bb.0:3877; CHECKIZFH-NEXT: fcvt.h.wu fa0, a03878; CHECKIZFH-NEXT: ret3879;3880; RV32IDZFH-LABEL: fcvt_h_ui_zeroext:3881; RV32IDZFH: # %bb.0:3882; RV32IDZFH-NEXT: fcvt.h.wu fa0, a03883; RV32IDZFH-NEXT: ret3884;3885; RV64IDZFH-LABEL: fcvt_h_ui_zeroext:3886; RV64IDZFH: # %bb.0:3887; RV64IDZFH-NEXT: fcvt.h.wu fa0, a03888; RV64IDZFH-NEXT: ret3889;3890; CHECKIZHINX-LABEL: fcvt_h_ui_zeroext:3891; CHECKIZHINX: # %bb.0:3892; CHECKIZHINX-NEXT: fcvt.h.wu a0, a03893; CHECKIZHINX-NEXT: ret3894;3895; CHECKIZDINXZHINX-LABEL: fcvt_h_ui_zeroext:3896; CHECKIZDINXZHINX: # %bb.0:3897; CHECKIZDINXZHINX-NEXT: fcvt.h.wu a0, a03898; CHECKIZDINXZHINX-NEXT: ret3899;3900; RV32I-LABEL: fcvt_h_ui_zeroext:3901; RV32I: # %bb.0:3902; RV32I-NEXT: addi sp, sp, -163903; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3904; RV32I-NEXT: call __floatunsisf3905; RV32I-NEXT: call __truncsfhf23906; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3907; RV32I-NEXT: addi sp, sp, 163908; RV32I-NEXT: ret3909;3910; RV64I-LABEL: fcvt_h_ui_zeroext:3911; RV64I: # %bb.0:3912; RV64I-NEXT: addi sp, sp, -163913; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3914; RV64I-NEXT: call __floatunsisf3915; RV64I-NEXT: call __truncsfhf23916; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3917; RV64I-NEXT: addi sp, sp, 163918; RV64I-NEXT: ret3919;3920; RV32ID-ILP32-LABEL: fcvt_h_ui_zeroext:3921; RV32ID-ILP32: # %bb.0:3922; RV32ID-ILP32-NEXT: addi sp, sp, -163923; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3924; RV32ID-ILP32-NEXT: fcvt.s.wu fa5, a03925; RV32ID-ILP32-NEXT: fmv.x.w a0, fa53926; RV32ID-ILP32-NEXT: call __truncsfhf23927; RV32ID-ILP32-NEXT: lui a1, 10485603928; RV32ID-ILP32-NEXT: or a0, a0, a13929; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3930; RV32ID-ILP32-NEXT: addi sp, sp, 163931; RV32ID-ILP32-NEXT: ret3932;3933; RV64ID-LP64-LABEL: fcvt_h_ui_zeroext:3934; RV64ID-LP64: # %bb.0:3935; RV64ID-LP64-NEXT: addi sp, sp, -163936; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3937; RV64ID-LP64-NEXT: fcvt.s.wu fa5, a03938; RV64ID-LP64-NEXT: fmv.x.w a0, fa53939; RV64ID-LP64-NEXT: call __truncsfhf23940; RV64ID-LP64-NEXT: lui a1, 10485603941; RV64ID-LP64-NEXT: or a0, a0, a13942; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3943; RV64ID-LP64-NEXT: addi sp, sp, 163944; RV64ID-LP64-NEXT: ret3945;3946; RV32ID-LABEL: fcvt_h_ui_zeroext:3947; RV32ID: # %bb.0:3948; RV32ID-NEXT: addi sp, sp, -163949; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill3950; RV32ID-NEXT: fcvt.s.wu fa0, a03951; RV32ID-NEXT: call __truncsfhf23952; RV32ID-NEXT: fmv.x.w a0, fa03953; RV32ID-NEXT: lui a1, 10485603954; RV32ID-NEXT: or a0, a0, a13955; RV32ID-NEXT: fmv.w.x fa0, a03956; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload3957; RV32ID-NEXT: addi sp, sp, 163958; RV32ID-NEXT: ret3959;3960; RV64ID-LABEL: fcvt_h_ui_zeroext:3961; RV64ID: # %bb.0:3962; RV64ID-NEXT: addi sp, sp, -163963; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill3964; RV64ID-NEXT: fcvt.s.wu fa0, a03965; RV64ID-NEXT: call __truncsfhf23966; RV64ID-NEXT: fmv.x.w a0, fa03967; RV64ID-NEXT: lui a1, 10485603968; RV64ID-NEXT: or a0, a0, a13969; RV64ID-NEXT: fmv.w.x fa0, a03970; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload3971; RV64ID-NEXT: addi sp, sp, 163972; RV64ID-NEXT: ret3973;3974; CHECK32-IZFHMIN-LABEL: fcvt_h_ui_zeroext:3975; CHECK32-IZFHMIN: # %bb.0:3976; CHECK32-IZFHMIN-NEXT: fcvt.s.wu fa5, a03977; CHECK32-IZFHMIN-NEXT: fcvt.h.s fa0, fa53978; CHECK32-IZFHMIN-NEXT: ret3979;3980; CHECK64-IZFHMIN-LABEL: fcvt_h_ui_zeroext:3981; CHECK64-IZFHMIN: # %bb.0:3982; CHECK64-IZFHMIN-NEXT: fcvt.s.wu fa5, a03983; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa0, fa53984; CHECK64-IZFHMIN-NEXT: ret3985;3986; CHECK32-IZHINXMIN-LABEL: fcvt_h_ui_zeroext:3987; CHECK32-IZHINXMIN: # %bb.0:3988; CHECK32-IZHINXMIN-NEXT: fcvt.s.wu a0, a03989; CHECK32-IZHINXMIN-NEXT: fcvt.h.s a0, a03990; CHECK32-IZHINXMIN-NEXT: ret3991;3992; CHECK64-IZHINXMIN-LABEL: fcvt_h_ui_zeroext:3993; CHECK64-IZHINXMIN: # %bb.0:3994; CHECK64-IZHINXMIN-NEXT: fcvt.s.wu a0, a03995; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a0, a03996; CHECK64-IZHINXMIN-NEXT: ret3997;3998; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_ui_zeroext:3999; CHECK32-IZDINXZHINXMIN: # %bb.0:4000; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.wu a0, a04001; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a04002; CHECK32-IZDINXZHINXMIN-NEXT: ret4003;4004; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_ui_zeroext:4005; CHECK64-IZDINXZHINXMIN: # %bb.0:4006; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.wu a0, a04007; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a04008; CHECK64-IZDINXZHINXMIN-NEXT: ret4009 %1 = uitofp i16 %a to half4010 ret half %14011}4012 4013define half @fcvt_h_w(i32 %a) nounwind {4014; CHECKIZFH-LABEL: fcvt_h_w:4015; CHECKIZFH: # %bb.0:4016; CHECKIZFH-NEXT: fcvt.h.w fa0, a04017; CHECKIZFH-NEXT: ret4018;4019; RV32IDZFH-LABEL: fcvt_h_w:4020; RV32IDZFH: # %bb.0:4021; RV32IDZFH-NEXT: fcvt.h.w fa0, a04022; RV32IDZFH-NEXT: ret4023;4024; RV64IDZFH-LABEL: fcvt_h_w:4025; RV64IDZFH: # %bb.0:4026; RV64IDZFH-NEXT: fcvt.h.w fa0, a04027; RV64IDZFH-NEXT: ret4028;4029; CHECKIZHINX-LABEL: fcvt_h_w:4030; CHECKIZHINX: # %bb.0:4031; CHECKIZHINX-NEXT: fcvt.h.w a0, a04032; CHECKIZHINX-NEXT: ret4033;4034; CHECKIZDINXZHINX-LABEL: fcvt_h_w:4035; CHECKIZDINXZHINX: # %bb.0:4036; CHECKIZDINXZHINX-NEXT: fcvt.h.w a0, a04037; CHECKIZDINXZHINX-NEXT: ret4038;4039; RV32I-LABEL: fcvt_h_w:4040; RV32I: # %bb.0:4041; RV32I-NEXT: addi sp, sp, -164042; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4043; RV32I-NEXT: call __floatsisf4044; RV32I-NEXT: call __truncsfhf24045; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4046; RV32I-NEXT: addi sp, sp, 164047; RV32I-NEXT: ret4048;4049; RV64I-LABEL: fcvt_h_w:4050; RV64I: # %bb.0:4051; RV64I-NEXT: addi sp, sp, -164052; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4053; RV64I-NEXT: sext.w a0, a04054; RV64I-NEXT: call __floatsisf4055; RV64I-NEXT: call __truncsfhf24056; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4057; RV64I-NEXT: addi sp, sp, 164058; RV64I-NEXT: ret4059;4060; RV32ID-ILP32-LABEL: fcvt_h_w:4061; RV32ID-ILP32: # %bb.0:4062; RV32ID-ILP32-NEXT: addi sp, sp, -164063; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4064; RV32ID-ILP32-NEXT: fcvt.s.w fa5, a04065; RV32ID-ILP32-NEXT: fmv.x.w a0, fa54066; RV32ID-ILP32-NEXT: call __truncsfhf24067; RV32ID-ILP32-NEXT: lui a1, 10485604068; RV32ID-ILP32-NEXT: or a0, a0, a14069; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4070; RV32ID-ILP32-NEXT: addi sp, sp, 164071; RV32ID-ILP32-NEXT: ret4072;4073; RV64ID-LP64-LABEL: fcvt_h_w:4074; RV64ID-LP64: # %bb.0:4075; RV64ID-LP64-NEXT: addi sp, sp, -164076; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4077; RV64ID-LP64-NEXT: fcvt.s.w fa5, a04078; RV64ID-LP64-NEXT: fmv.x.w a0, fa54079; RV64ID-LP64-NEXT: call __truncsfhf24080; RV64ID-LP64-NEXT: lui a1, 10485604081; RV64ID-LP64-NEXT: or a0, a0, a14082; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4083; RV64ID-LP64-NEXT: addi sp, sp, 164084; RV64ID-LP64-NEXT: ret4085;4086; RV32ID-LABEL: fcvt_h_w:4087; RV32ID: # %bb.0:4088; RV32ID-NEXT: addi sp, sp, -164089; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4090; RV32ID-NEXT: fcvt.s.w fa0, a04091; RV32ID-NEXT: call __truncsfhf24092; RV32ID-NEXT: fmv.x.w a0, fa04093; RV32ID-NEXT: lui a1, 10485604094; RV32ID-NEXT: or a0, a0, a14095; RV32ID-NEXT: fmv.w.x fa0, a04096; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4097; RV32ID-NEXT: addi sp, sp, 164098; RV32ID-NEXT: ret4099;4100; RV64ID-LABEL: fcvt_h_w:4101; RV64ID: # %bb.0:4102; RV64ID-NEXT: addi sp, sp, -164103; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4104; RV64ID-NEXT: fcvt.s.w fa0, a04105; RV64ID-NEXT: call __truncsfhf24106; RV64ID-NEXT: fmv.x.w a0, fa04107; RV64ID-NEXT: lui a1, 10485604108; RV64ID-NEXT: or a0, a0, a14109; RV64ID-NEXT: fmv.w.x fa0, a04110; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4111; RV64ID-NEXT: addi sp, sp, 164112; RV64ID-NEXT: ret4113;4114; CHECK32-IZFHMIN-LABEL: fcvt_h_w:4115; CHECK32-IZFHMIN: # %bb.0:4116; CHECK32-IZFHMIN-NEXT: fcvt.s.w fa5, a04117; CHECK32-IZFHMIN-NEXT: fcvt.h.s fa0, fa54118; CHECK32-IZFHMIN-NEXT: ret4119;4120; CHECK64-IZFHMIN-LABEL: fcvt_h_w:4121; CHECK64-IZFHMIN: # %bb.0:4122; CHECK64-IZFHMIN-NEXT: fcvt.s.w fa5, a04123; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa0, fa54124; CHECK64-IZFHMIN-NEXT: ret4125;4126; CHECK32-IZHINXMIN-LABEL: fcvt_h_w:4127; CHECK32-IZHINXMIN: # %bb.0:4128; CHECK32-IZHINXMIN-NEXT: fcvt.s.w a0, a04129; CHECK32-IZHINXMIN-NEXT: fcvt.h.s a0, a04130; CHECK32-IZHINXMIN-NEXT: ret4131;4132; CHECK64-IZHINXMIN-LABEL: fcvt_h_w:4133; CHECK64-IZHINXMIN: # %bb.0:4134; CHECK64-IZHINXMIN-NEXT: fcvt.s.w a0, a04135; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a0, a04136; CHECK64-IZHINXMIN-NEXT: ret4137;4138; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_w:4139; CHECK32-IZDINXZHINXMIN: # %bb.0:4140; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.w a0, a04141; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a04142; CHECK32-IZDINXZHINXMIN-NEXT: ret4143;4144; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_w:4145; CHECK64-IZDINXZHINXMIN: # %bb.0:4146; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.w a0, a04147; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a04148; CHECK64-IZDINXZHINXMIN-NEXT: ret4149 %1 = sitofp i32 %a to half4150 ret half %14151}4152 4153define half @fcvt_h_w_load(ptr %p) nounwind {4154; CHECKIZFH-LABEL: fcvt_h_w_load:4155; CHECKIZFH: # %bb.0:4156; CHECKIZFH-NEXT: lw a0, 0(a0)4157; CHECKIZFH-NEXT: fcvt.h.w fa0, a04158; CHECKIZFH-NEXT: ret4159;4160; RV32IDZFH-LABEL: fcvt_h_w_load:4161; RV32IDZFH: # %bb.0:4162; RV32IDZFH-NEXT: lw a0, 0(a0)4163; RV32IDZFH-NEXT: fcvt.h.w fa0, a04164; RV32IDZFH-NEXT: ret4165;4166; RV64IDZFH-LABEL: fcvt_h_w_load:4167; RV64IDZFH: # %bb.0:4168; RV64IDZFH-NEXT: lw a0, 0(a0)4169; RV64IDZFH-NEXT: fcvt.h.w fa0, a04170; RV64IDZFH-NEXT: ret4171;4172; CHECKIZHINX-LABEL: fcvt_h_w_load:4173; CHECKIZHINX: # %bb.0:4174; CHECKIZHINX-NEXT: lw a0, 0(a0)4175; CHECKIZHINX-NEXT: fcvt.h.w a0, a04176; CHECKIZHINX-NEXT: ret4177;4178; CHECKIZDINXZHINX-LABEL: fcvt_h_w_load:4179; CHECKIZDINXZHINX: # %bb.0:4180; CHECKIZDINXZHINX-NEXT: lw a0, 0(a0)4181; CHECKIZDINXZHINX-NEXT: fcvt.h.w a0, a04182; CHECKIZDINXZHINX-NEXT: ret4183;4184; RV32I-LABEL: fcvt_h_w_load:4185; RV32I: # %bb.0:4186; RV32I-NEXT: addi sp, sp, -164187; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4188; RV32I-NEXT: lw a0, 0(a0)4189; RV32I-NEXT: call __floatsisf4190; RV32I-NEXT: call __truncsfhf24191; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4192; RV32I-NEXT: addi sp, sp, 164193; RV32I-NEXT: ret4194;4195; RV64I-LABEL: fcvt_h_w_load:4196; RV64I: # %bb.0:4197; RV64I-NEXT: addi sp, sp, -164198; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4199; RV64I-NEXT: lw a0, 0(a0)4200; RV64I-NEXT: call __floatsisf4201; RV64I-NEXT: call __truncsfhf24202; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4203; RV64I-NEXT: addi sp, sp, 164204; RV64I-NEXT: ret4205;4206; RV32ID-ILP32-LABEL: fcvt_h_w_load:4207; RV32ID-ILP32: # %bb.0:4208; RV32ID-ILP32-NEXT: addi sp, sp, -164209; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4210; RV32ID-ILP32-NEXT: lw a0, 0(a0)4211; RV32ID-ILP32-NEXT: fcvt.s.w fa5, a04212; RV32ID-ILP32-NEXT: fmv.x.w a0, fa54213; RV32ID-ILP32-NEXT: call __truncsfhf24214; RV32ID-ILP32-NEXT: lui a1, 10485604215; RV32ID-ILP32-NEXT: or a0, a0, a14216; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4217; RV32ID-ILP32-NEXT: addi sp, sp, 164218; RV32ID-ILP32-NEXT: ret4219;4220; RV64ID-LP64-LABEL: fcvt_h_w_load:4221; RV64ID-LP64: # %bb.0:4222; RV64ID-LP64-NEXT: addi sp, sp, -164223; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4224; RV64ID-LP64-NEXT: lw a0, 0(a0)4225; RV64ID-LP64-NEXT: fcvt.s.w fa5, a04226; RV64ID-LP64-NEXT: fmv.x.w a0, fa54227; RV64ID-LP64-NEXT: call __truncsfhf24228; RV64ID-LP64-NEXT: lui a1, 10485604229; RV64ID-LP64-NEXT: or a0, a0, a14230; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4231; RV64ID-LP64-NEXT: addi sp, sp, 164232; RV64ID-LP64-NEXT: ret4233;4234; RV32ID-LABEL: fcvt_h_w_load:4235; RV32ID: # %bb.0:4236; RV32ID-NEXT: addi sp, sp, -164237; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4238; RV32ID-NEXT: lw a0, 0(a0)4239; RV32ID-NEXT: fcvt.s.w fa0, a04240; RV32ID-NEXT: call __truncsfhf24241; RV32ID-NEXT: fmv.x.w a0, fa04242; RV32ID-NEXT: lui a1, 10485604243; RV32ID-NEXT: or a0, a0, a14244; RV32ID-NEXT: fmv.w.x fa0, a04245; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4246; RV32ID-NEXT: addi sp, sp, 164247; RV32ID-NEXT: ret4248;4249; RV64ID-LABEL: fcvt_h_w_load:4250; RV64ID: # %bb.0:4251; RV64ID-NEXT: addi sp, sp, -164252; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4253; RV64ID-NEXT: lw a0, 0(a0)4254; RV64ID-NEXT: fcvt.s.w fa0, a04255; RV64ID-NEXT: call __truncsfhf24256; RV64ID-NEXT: fmv.x.w a0, fa04257; RV64ID-NEXT: lui a1, 10485604258; RV64ID-NEXT: or a0, a0, a14259; RV64ID-NEXT: fmv.w.x fa0, a04260; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4261; RV64ID-NEXT: addi sp, sp, 164262; RV64ID-NEXT: ret4263;4264; CHECK32-IZFHMIN-LABEL: fcvt_h_w_load:4265; CHECK32-IZFHMIN: # %bb.0:4266; CHECK32-IZFHMIN-NEXT: lw a0, 0(a0)4267; CHECK32-IZFHMIN-NEXT: fcvt.s.w fa5, a04268; CHECK32-IZFHMIN-NEXT: fcvt.h.s fa0, fa54269; CHECK32-IZFHMIN-NEXT: ret4270;4271; CHECK64-IZFHMIN-LABEL: fcvt_h_w_load:4272; CHECK64-IZFHMIN: # %bb.0:4273; CHECK64-IZFHMIN-NEXT: lw a0, 0(a0)4274; CHECK64-IZFHMIN-NEXT: fcvt.s.w fa5, a04275; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa0, fa54276; CHECK64-IZFHMIN-NEXT: ret4277;4278; CHECK32-IZHINXMIN-LABEL: fcvt_h_w_load:4279; CHECK32-IZHINXMIN: # %bb.0:4280; CHECK32-IZHINXMIN-NEXT: lw a0, 0(a0)4281; CHECK32-IZHINXMIN-NEXT: fcvt.s.w a0, a04282; CHECK32-IZHINXMIN-NEXT: fcvt.h.s a0, a04283; CHECK32-IZHINXMIN-NEXT: ret4284;4285; CHECK64-IZHINXMIN-LABEL: fcvt_h_w_load:4286; CHECK64-IZHINXMIN: # %bb.0:4287; CHECK64-IZHINXMIN-NEXT: lw a0, 0(a0)4288; CHECK64-IZHINXMIN-NEXT: fcvt.s.w a0, a04289; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a0, a04290; CHECK64-IZHINXMIN-NEXT: ret4291;4292; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_w_load:4293; CHECK32-IZDINXZHINXMIN: # %bb.0:4294; CHECK32-IZDINXZHINXMIN-NEXT: lw a0, 0(a0)4295; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.w a0, a04296; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a04297; CHECK32-IZDINXZHINXMIN-NEXT: ret4298;4299; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_w_load:4300; CHECK64-IZDINXZHINXMIN: # %bb.0:4301; CHECK64-IZDINXZHINXMIN-NEXT: lw a0, 0(a0)4302; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.w a0, a04303; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a04304; CHECK64-IZDINXZHINXMIN-NEXT: ret4305 %a = load i32, ptr %p4306 %1 = sitofp i32 %a to half4307 ret half %14308}4309 4310define half @fcvt_h_wu(i32 %a) nounwind {4311; CHECKIZFH-LABEL: fcvt_h_wu:4312; CHECKIZFH: # %bb.0:4313; CHECKIZFH-NEXT: fcvt.h.wu fa0, a04314; CHECKIZFH-NEXT: ret4315;4316; RV32IDZFH-LABEL: fcvt_h_wu:4317; RV32IDZFH: # %bb.0:4318; RV32IDZFH-NEXT: fcvt.h.wu fa0, a04319; RV32IDZFH-NEXT: ret4320;4321; RV64IDZFH-LABEL: fcvt_h_wu:4322; RV64IDZFH: # %bb.0:4323; RV64IDZFH-NEXT: fcvt.h.wu fa0, a04324; RV64IDZFH-NEXT: ret4325;4326; CHECKIZHINX-LABEL: fcvt_h_wu:4327; CHECKIZHINX: # %bb.0:4328; CHECKIZHINX-NEXT: fcvt.h.wu a0, a04329; CHECKIZHINX-NEXT: ret4330;4331; CHECKIZDINXZHINX-LABEL: fcvt_h_wu:4332; CHECKIZDINXZHINX: # %bb.0:4333; CHECKIZDINXZHINX-NEXT: fcvt.h.wu a0, a04334; CHECKIZDINXZHINX-NEXT: ret4335;4336; RV32I-LABEL: fcvt_h_wu:4337; RV32I: # %bb.0:4338; RV32I-NEXT: addi sp, sp, -164339; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4340; RV32I-NEXT: call __floatunsisf4341; RV32I-NEXT: call __truncsfhf24342; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4343; RV32I-NEXT: addi sp, sp, 164344; RV32I-NEXT: ret4345;4346; RV64I-LABEL: fcvt_h_wu:4347; RV64I: # %bb.0:4348; RV64I-NEXT: addi sp, sp, -164349; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4350; RV64I-NEXT: sext.w a0, a04351; RV64I-NEXT: call __floatunsisf4352; RV64I-NEXT: call __truncsfhf24353; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4354; RV64I-NEXT: addi sp, sp, 164355; RV64I-NEXT: ret4356;4357; RV32ID-ILP32-LABEL: fcvt_h_wu:4358; RV32ID-ILP32: # %bb.0:4359; RV32ID-ILP32-NEXT: addi sp, sp, -164360; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4361; RV32ID-ILP32-NEXT: fcvt.s.wu fa5, a04362; RV32ID-ILP32-NEXT: fmv.x.w a0, fa54363; RV32ID-ILP32-NEXT: call __truncsfhf24364; RV32ID-ILP32-NEXT: lui a1, 10485604365; RV32ID-ILP32-NEXT: or a0, a0, a14366; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4367; RV32ID-ILP32-NEXT: addi sp, sp, 164368; RV32ID-ILP32-NEXT: ret4369;4370; RV64ID-LP64-LABEL: fcvt_h_wu:4371; RV64ID-LP64: # %bb.0:4372; RV64ID-LP64-NEXT: addi sp, sp, -164373; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4374; RV64ID-LP64-NEXT: fcvt.s.wu fa5, a04375; RV64ID-LP64-NEXT: fmv.x.w a0, fa54376; RV64ID-LP64-NEXT: call __truncsfhf24377; RV64ID-LP64-NEXT: lui a1, 10485604378; RV64ID-LP64-NEXT: or a0, a0, a14379; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4380; RV64ID-LP64-NEXT: addi sp, sp, 164381; RV64ID-LP64-NEXT: ret4382;4383; RV32ID-LABEL: fcvt_h_wu:4384; RV32ID: # %bb.0:4385; RV32ID-NEXT: addi sp, sp, -164386; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4387; RV32ID-NEXT: fcvt.s.wu fa0, a04388; RV32ID-NEXT: call __truncsfhf24389; RV32ID-NEXT: fmv.x.w a0, fa04390; RV32ID-NEXT: lui a1, 10485604391; RV32ID-NEXT: or a0, a0, a14392; RV32ID-NEXT: fmv.w.x fa0, a04393; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4394; RV32ID-NEXT: addi sp, sp, 164395; RV32ID-NEXT: ret4396;4397; RV64ID-LABEL: fcvt_h_wu:4398; RV64ID: # %bb.0:4399; RV64ID-NEXT: addi sp, sp, -164400; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4401; RV64ID-NEXT: fcvt.s.wu fa0, a04402; RV64ID-NEXT: call __truncsfhf24403; RV64ID-NEXT: fmv.x.w a0, fa04404; RV64ID-NEXT: lui a1, 10485604405; RV64ID-NEXT: or a0, a0, a14406; RV64ID-NEXT: fmv.w.x fa0, a04407; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4408; RV64ID-NEXT: addi sp, sp, 164409; RV64ID-NEXT: ret4410;4411; CHECK32-IZFHMIN-LABEL: fcvt_h_wu:4412; CHECK32-IZFHMIN: # %bb.0:4413; CHECK32-IZFHMIN-NEXT: fcvt.s.wu fa5, a04414; CHECK32-IZFHMIN-NEXT: fcvt.h.s fa0, fa54415; CHECK32-IZFHMIN-NEXT: ret4416;4417; CHECK64-IZFHMIN-LABEL: fcvt_h_wu:4418; CHECK64-IZFHMIN: # %bb.0:4419; CHECK64-IZFHMIN-NEXT: fcvt.s.wu fa5, a04420; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa0, fa54421; CHECK64-IZFHMIN-NEXT: ret4422;4423; CHECK32-IZHINXMIN-LABEL: fcvt_h_wu:4424; CHECK32-IZHINXMIN: # %bb.0:4425; CHECK32-IZHINXMIN-NEXT: fcvt.s.wu a0, a04426; CHECK32-IZHINXMIN-NEXT: fcvt.h.s a0, a04427; CHECK32-IZHINXMIN-NEXT: ret4428;4429; CHECK64-IZHINXMIN-LABEL: fcvt_h_wu:4430; CHECK64-IZHINXMIN: # %bb.0:4431; CHECK64-IZHINXMIN-NEXT: fcvt.s.wu a0, a04432; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a0, a04433; CHECK64-IZHINXMIN-NEXT: ret4434;4435; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_wu:4436; CHECK32-IZDINXZHINXMIN: # %bb.0:4437; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.wu a0, a04438; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a04439; CHECK32-IZDINXZHINXMIN-NEXT: ret4440;4441; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_wu:4442; CHECK64-IZDINXZHINXMIN: # %bb.0:4443; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.wu a0, a04444; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a04445; CHECK64-IZDINXZHINXMIN-NEXT: ret4446 %1 = uitofp i32 %a to half4447 ret half %14448}4449 4450define half @fcvt_h_wu_load(ptr %p) nounwind {4451; CHECKIZFH-LABEL: fcvt_h_wu_load:4452; CHECKIZFH: # %bb.0:4453; CHECKIZFH-NEXT: lw a0, 0(a0)4454; CHECKIZFH-NEXT: fcvt.h.wu fa0, a04455; CHECKIZFH-NEXT: ret4456;4457; RV32IDZFH-LABEL: fcvt_h_wu_load:4458; RV32IDZFH: # %bb.0:4459; RV32IDZFH-NEXT: lw a0, 0(a0)4460; RV32IDZFH-NEXT: fcvt.h.wu fa0, a04461; RV32IDZFH-NEXT: ret4462;4463; RV64IDZFH-LABEL: fcvt_h_wu_load:4464; RV64IDZFH: # %bb.0:4465; RV64IDZFH-NEXT: lw a0, 0(a0)4466; RV64IDZFH-NEXT: fcvt.h.wu fa0, a04467; RV64IDZFH-NEXT: ret4468;4469; CHECKIZHINX-LABEL: fcvt_h_wu_load:4470; CHECKIZHINX: # %bb.0:4471; CHECKIZHINX-NEXT: lw a0, 0(a0)4472; CHECKIZHINX-NEXT: fcvt.h.wu a0, a04473; CHECKIZHINX-NEXT: ret4474;4475; CHECKIZDINXZHINX-LABEL: fcvt_h_wu_load:4476; CHECKIZDINXZHINX: # %bb.0:4477; CHECKIZDINXZHINX-NEXT: lw a0, 0(a0)4478; CHECKIZDINXZHINX-NEXT: fcvt.h.wu a0, a04479; CHECKIZDINXZHINX-NEXT: ret4480;4481; RV32I-LABEL: fcvt_h_wu_load:4482; RV32I: # %bb.0:4483; RV32I-NEXT: addi sp, sp, -164484; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4485; RV32I-NEXT: lw a0, 0(a0)4486; RV32I-NEXT: call __floatunsisf4487; RV32I-NEXT: call __truncsfhf24488; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4489; RV32I-NEXT: addi sp, sp, 164490; RV32I-NEXT: ret4491;4492; RV64I-LABEL: fcvt_h_wu_load:4493; RV64I: # %bb.0:4494; RV64I-NEXT: addi sp, sp, -164495; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4496; RV64I-NEXT: lw a0, 0(a0)4497; RV64I-NEXT: call __floatunsisf4498; RV64I-NEXT: call __truncsfhf24499; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4500; RV64I-NEXT: addi sp, sp, 164501; RV64I-NEXT: ret4502;4503; RV32ID-ILP32-LABEL: fcvt_h_wu_load:4504; RV32ID-ILP32: # %bb.0:4505; RV32ID-ILP32-NEXT: addi sp, sp, -164506; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4507; RV32ID-ILP32-NEXT: lw a0, 0(a0)4508; RV32ID-ILP32-NEXT: fcvt.s.wu fa5, a04509; RV32ID-ILP32-NEXT: fmv.x.w a0, fa54510; RV32ID-ILP32-NEXT: call __truncsfhf24511; RV32ID-ILP32-NEXT: lui a1, 10485604512; RV32ID-ILP32-NEXT: or a0, a0, a14513; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4514; RV32ID-ILP32-NEXT: addi sp, sp, 164515; RV32ID-ILP32-NEXT: ret4516;4517; RV64ID-LP64-LABEL: fcvt_h_wu_load:4518; RV64ID-LP64: # %bb.0:4519; RV64ID-LP64-NEXT: addi sp, sp, -164520; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4521; RV64ID-LP64-NEXT: lw a0, 0(a0)4522; RV64ID-LP64-NEXT: fcvt.s.wu fa5, a04523; RV64ID-LP64-NEXT: fmv.x.w a0, fa54524; RV64ID-LP64-NEXT: call __truncsfhf24525; RV64ID-LP64-NEXT: lui a1, 10485604526; RV64ID-LP64-NEXT: or a0, a0, a14527; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4528; RV64ID-LP64-NEXT: addi sp, sp, 164529; RV64ID-LP64-NEXT: ret4530;4531; RV32ID-LABEL: fcvt_h_wu_load:4532; RV32ID: # %bb.0:4533; RV32ID-NEXT: addi sp, sp, -164534; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4535; RV32ID-NEXT: lw a0, 0(a0)4536; RV32ID-NEXT: fcvt.s.wu fa0, a04537; RV32ID-NEXT: call __truncsfhf24538; RV32ID-NEXT: fmv.x.w a0, fa04539; RV32ID-NEXT: lui a1, 10485604540; RV32ID-NEXT: or a0, a0, a14541; RV32ID-NEXT: fmv.w.x fa0, a04542; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4543; RV32ID-NEXT: addi sp, sp, 164544; RV32ID-NEXT: ret4545;4546; RV64ID-LABEL: fcvt_h_wu_load:4547; RV64ID: # %bb.0:4548; RV64ID-NEXT: addi sp, sp, -164549; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4550; RV64ID-NEXT: lw a0, 0(a0)4551; RV64ID-NEXT: fcvt.s.wu fa0, a04552; RV64ID-NEXT: call __truncsfhf24553; RV64ID-NEXT: fmv.x.w a0, fa04554; RV64ID-NEXT: lui a1, 10485604555; RV64ID-NEXT: or a0, a0, a14556; RV64ID-NEXT: fmv.w.x fa0, a04557; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4558; RV64ID-NEXT: addi sp, sp, 164559; RV64ID-NEXT: ret4560;4561; CHECK32-IZFHMIN-LABEL: fcvt_h_wu_load:4562; CHECK32-IZFHMIN: # %bb.0:4563; CHECK32-IZFHMIN-NEXT: lw a0, 0(a0)4564; CHECK32-IZFHMIN-NEXT: fcvt.s.wu fa5, a04565; CHECK32-IZFHMIN-NEXT: fcvt.h.s fa0, fa54566; CHECK32-IZFHMIN-NEXT: ret4567;4568; CHECK64-IZFHMIN-LABEL: fcvt_h_wu_load:4569; CHECK64-IZFHMIN: # %bb.0:4570; CHECK64-IZFHMIN-NEXT: lw a0, 0(a0)4571; CHECK64-IZFHMIN-NEXT: fcvt.s.wu fa5, a04572; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa0, fa54573; CHECK64-IZFHMIN-NEXT: ret4574;4575; CHECK32-IZHINXMIN-LABEL: fcvt_h_wu_load:4576; CHECK32-IZHINXMIN: # %bb.0:4577; CHECK32-IZHINXMIN-NEXT: lw a0, 0(a0)4578; CHECK32-IZHINXMIN-NEXT: fcvt.s.wu a0, a04579; CHECK32-IZHINXMIN-NEXT: fcvt.h.s a0, a04580; CHECK32-IZHINXMIN-NEXT: ret4581;4582; CHECK64-IZHINXMIN-LABEL: fcvt_h_wu_load:4583; CHECK64-IZHINXMIN: # %bb.0:4584; CHECK64-IZHINXMIN-NEXT: lw a0, 0(a0)4585; CHECK64-IZHINXMIN-NEXT: fcvt.s.wu a0, a04586; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a0, a04587; CHECK64-IZHINXMIN-NEXT: ret4588;4589; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_wu_load:4590; CHECK32-IZDINXZHINXMIN: # %bb.0:4591; CHECK32-IZDINXZHINXMIN-NEXT: lw a0, 0(a0)4592; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.wu a0, a04593; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a04594; CHECK32-IZDINXZHINXMIN-NEXT: ret4595;4596; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_wu_load:4597; CHECK64-IZDINXZHINXMIN: # %bb.0:4598; CHECK64-IZDINXZHINXMIN-NEXT: lw a0, 0(a0)4599; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.wu a0, a04600; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a04601; CHECK64-IZDINXZHINXMIN-NEXT: ret4602 %a = load i32, ptr %p4603 %1 = uitofp i32 %a to half4604 ret half %14605}4606 4607define half @fcvt_h_l(i64 %a) nounwind {4608; RV32IZFH-LABEL: fcvt_h_l:4609; RV32IZFH: # %bb.0:4610; RV32IZFH-NEXT: addi sp, sp, -164611; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4612; RV32IZFH-NEXT: call __floatdihf4613; RV32IZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4614; RV32IZFH-NEXT: addi sp, sp, 164615; RV32IZFH-NEXT: ret4616;4617; RV64IZFH-LABEL: fcvt_h_l:4618; RV64IZFH: # %bb.0:4619; RV64IZFH-NEXT: fcvt.h.l fa0, a04620; RV64IZFH-NEXT: ret4621;4622; RV32IDZFH-LABEL: fcvt_h_l:4623; RV32IDZFH: # %bb.0:4624; RV32IDZFH-NEXT: addi sp, sp, -164625; RV32IDZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4626; RV32IDZFH-NEXT: call __floatdihf4627; RV32IDZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4628; RV32IDZFH-NEXT: addi sp, sp, 164629; RV32IDZFH-NEXT: ret4630;4631; RV64IDZFH-LABEL: fcvt_h_l:4632; RV64IDZFH: # %bb.0:4633; RV64IDZFH-NEXT: fcvt.h.l fa0, a04634; RV64IDZFH-NEXT: ret4635;4636; RV32IZHINX-LABEL: fcvt_h_l:4637; RV32IZHINX: # %bb.0:4638; RV32IZHINX-NEXT: addi sp, sp, -164639; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4640; RV32IZHINX-NEXT: call __floatdihf4641; RV32IZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4642; RV32IZHINX-NEXT: addi sp, sp, 164643; RV32IZHINX-NEXT: ret4644;4645; RV64IZHINX-LABEL: fcvt_h_l:4646; RV64IZHINX: # %bb.0:4647; RV64IZHINX-NEXT: fcvt.h.l a0, a04648; RV64IZHINX-NEXT: ret4649;4650; RV32IZDINXZHINX-LABEL: fcvt_h_l:4651; RV32IZDINXZHINX: # %bb.0:4652; RV32IZDINXZHINX-NEXT: addi sp, sp, -164653; RV32IZDINXZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4654; RV32IZDINXZHINX-NEXT: call __floatdihf4655; RV32IZDINXZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4656; RV32IZDINXZHINX-NEXT: addi sp, sp, 164657; RV32IZDINXZHINX-NEXT: ret4658;4659; RV64IZDINXZHINX-LABEL: fcvt_h_l:4660; RV64IZDINXZHINX: # %bb.0:4661; RV64IZDINXZHINX-NEXT: fcvt.h.l a0, a04662; RV64IZDINXZHINX-NEXT: ret4663;4664; RV32I-LABEL: fcvt_h_l:4665; RV32I: # %bb.0:4666; RV32I-NEXT: addi sp, sp, -164667; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4668; RV32I-NEXT: call __floatdisf4669; RV32I-NEXT: call __truncsfhf24670; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4671; RV32I-NEXT: addi sp, sp, 164672; RV32I-NEXT: ret4673;4674; RV64I-LABEL: fcvt_h_l:4675; RV64I: # %bb.0:4676; RV64I-NEXT: addi sp, sp, -164677; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4678; RV64I-NEXT: call __floatdisf4679; RV64I-NEXT: call __truncsfhf24680; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4681; RV64I-NEXT: addi sp, sp, 164682; RV64I-NEXT: ret4683;4684; RV32ID-ILP32-LABEL: fcvt_h_l:4685; RV32ID-ILP32: # %bb.0:4686; RV32ID-ILP32-NEXT: addi sp, sp, -164687; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4688; RV32ID-ILP32-NEXT: call __floatdisf4689; RV32ID-ILP32-NEXT: call __truncsfhf24690; RV32ID-ILP32-NEXT: lui a1, 10485604691; RV32ID-ILP32-NEXT: or a0, a0, a14692; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4693; RV32ID-ILP32-NEXT: addi sp, sp, 164694; RV32ID-ILP32-NEXT: ret4695;4696; RV64ID-LP64-LABEL: fcvt_h_l:4697; RV64ID-LP64: # %bb.0:4698; RV64ID-LP64-NEXT: addi sp, sp, -164699; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4700; RV64ID-LP64-NEXT: fcvt.s.l fa5, a04701; RV64ID-LP64-NEXT: fmv.x.w a0, fa54702; RV64ID-LP64-NEXT: call __truncsfhf24703; RV64ID-LP64-NEXT: lui a1, 10485604704; RV64ID-LP64-NEXT: or a0, a0, a14705; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4706; RV64ID-LP64-NEXT: addi sp, sp, 164707; RV64ID-LP64-NEXT: ret4708;4709; RV32ID-LABEL: fcvt_h_l:4710; RV32ID: # %bb.0:4711; RV32ID-NEXT: addi sp, sp, -164712; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4713; RV32ID-NEXT: call __floatdisf4714; RV32ID-NEXT: call __truncsfhf24715; RV32ID-NEXT: fmv.x.w a0, fa04716; RV32ID-NEXT: lui a1, 10485604717; RV32ID-NEXT: or a0, a0, a14718; RV32ID-NEXT: fmv.w.x fa0, a04719; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4720; RV32ID-NEXT: addi sp, sp, 164721; RV32ID-NEXT: ret4722;4723; RV64ID-LABEL: fcvt_h_l:4724; RV64ID: # %bb.0:4725; RV64ID-NEXT: addi sp, sp, -164726; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4727; RV64ID-NEXT: fcvt.s.l fa0, a04728; RV64ID-NEXT: call __truncsfhf24729; RV64ID-NEXT: fmv.x.w a0, fa04730; RV64ID-NEXT: lui a1, 10485604731; RV64ID-NEXT: or a0, a0, a14732; RV64ID-NEXT: fmv.w.x fa0, a04733; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4734; RV64ID-NEXT: addi sp, sp, 164735; RV64ID-NEXT: ret4736;4737; CHECK32-IZFHMIN-LABEL: fcvt_h_l:4738; CHECK32-IZFHMIN: # %bb.0:4739; CHECK32-IZFHMIN-NEXT: addi sp, sp, -164740; CHECK32-IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4741; CHECK32-IZFHMIN-NEXT: call __floatdihf4742; CHECK32-IZFHMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4743; CHECK32-IZFHMIN-NEXT: addi sp, sp, 164744; CHECK32-IZFHMIN-NEXT: ret4745;4746; CHECK64-IZFHMIN-LABEL: fcvt_h_l:4747; CHECK64-IZFHMIN: # %bb.0:4748; CHECK64-IZFHMIN-NEXT: fcvt.s.l fa5, a04749; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa0, fa54750; CHECK64-IZFHMIN-NEXT: ret4751;4752; CHECK32-IZHINXMIN-LABEL: fcvt_h_l:4753; CHECK32-IZHINXMIN: # %bb.0:4754; CHECK32-IZHINXMIN-NEXT: addi sp, sp, -164755; CHECK32-IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4756; CHECK32-IZHINXMIN-NEXT: call __floatdihf4757; CHECK32-IZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4758; CHECK32-IZHINXMIN-NEXT: addi sp, sp, 164759; CHECK32-IZHINXMIN-NEXT: ret4760;4761; CHECK64-IZHINXMIN-LABEL: fcvt_h_l:4762; CHECK64-IZHINXMIN: # %bb.0:4763; CHECK64-IZHINXMIN-NEXT: fcvt.s.l a0, a04764; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a0, a04765; CHECK64-IZHINXMIN-NEXT: ret4766;4767; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_l:4768; CHECK32-IZDINXZHINXMIN: # %bb.0:4769; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, -164770; CHECK32-IZDINXZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4771; CHECK32-IZDINXZHINXMIN-NEXT: call __floatdihf4772; CHECK32-IZDINXZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4773; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, 164774; CHECK32-IZDINXZHINXMIN-NEXT: ret4775;4776; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_l:4777; CHECK64-IZDINXZHINXMIN: # %bb.0:4778; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.l a0, a04779; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a04780; CHECK64-IZDINXZHINXMIN-NEXT: ret4781 %1 = sitofp i64 %a to half4782 ret half %14783}4784 4785define half @fcvt_h_lu(i64 %a) nounwind {4786; RV32IZFH-LABEL: fcvt_h_lu:4787; RV32IZFH: # %bb.0:4788; RV32IZFH-NEXT: addi sp, sp, -164789; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4790; RV32IZFH-NEXT: call __floatundihf4791; RV32IZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4792; RV32IZFH-NEXT: addi sp, sp, 164793; RV32IZFH-NEXT: ret4794;4795; RV64IZFH-LABEL: fcvt_h_lu:4796; RV64IZFH: # %bb.0:4797; RV64IZFH-NEXT: fcvt.h.lu fa0, a04798; RV64IZFH-NEXT: ret4799;4800; RV32IDZFH-LABEL: fcvt_h_lu:4801; RV32IDZFH: # %bb.0:4802; RV32IDZFH-NEXT: addi sp, sp, -164803; RV32IDZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4804; RV32IDZFH-NEXT: call __floatundihf4805; RV32IDZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4806; RV32IDZFH-NEXT: addi sp, sp, 164807; RV32IDZFH-NEXT: ret4808;4809; RV64IDZFH-LABEL: fcvt_h_lu:4810; RV64IDZFH: # %bb.0:4811; RV64IDZFH-NEXT: fcvt.h.lu fa0, a04812; RV64IDZFH-NEXT: ret4813;4814; RV32IZHINX-LABEL: fcvt_h_lu:4815; RV32IZHINX: # %bb.0:4816; RV32IZHINX-NEXT: addi sp, sp, -164817; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4818; RV32IZHINX-NEXT: call __floatundihf4819; RV32IZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4820; RV32IZHINX-NEXT: addi sp, sp, 164821; RV32IZHINX-NEXT: ret4822;4823; RV64IZHINX-LABEL: fcvt_h_lu:4824; RV64IZHINX: # %bb.0:4825; RV64IZHINX-NEXT: fcvt.h.lu a0, a04826; RV64IZHINX-NEXT: ret4827;4828; RV32IZDINXZHINX-LABEL: fcvt_h_lu:4829; RV32IZDINXZHINX: # %bb.0:4830; RV32IZDINXZHINX-NEXT: addi sp, sp, -164831; RV32IZDINXZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4832; RV32IZDINXZHINX-NEXT: call __floatundihf4833; RV32IZDINXZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4834; RV32IZDINXZHINX-NEXT: addi sp, sp, 164835; RV32IZDINXZHINX-NEXT: ret4836;4837; RV64IZDINXZHINX-LABEL: fcvt_h_lu:4838; RV64IZDINXZHINX: # %bb.0:4839; RV64IZDINXZHINX-NEXT: fcvt.h.lu a0, a04840; RV64IZDINXZHINX-NEXT: ret4841;4842; RV32I-LABEL: fcvt_h_lu:4843; RV32I: # %bb.0:4844; RV32I-NEXT: addi sp, sp, -164845; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4846; RV32I-NEXT: call __floatundisf4847; RV32I-NEXT: call __truncsfhf24848; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4849; RV32I-NEXT: addi sp, sp, 164850; RV32I-NEXT: ret4851;4852; RV64I-LABEL: fcvt_h_lu:4853; RV64I: # %bb.0:4854; RV64I-NEXT: addi sp, sp, -164855; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4856; RV64I-NEXT: call __floatundisf4857; RV64I-NEXT: call __truncsfhf24858; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4859; RV64I-NEXT: addi sp, sp, 164860; RV64I-NEXT: ret4861;4862; RV32ID-ILP32-LABEL: fcvt_h_lu:4863; RV32ID-ILP32: # %bb.0:4864; RV32ID-ILP32-NEXT: addi sp, sp, -164865; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4866; RV32ID-ILP32-NEXT: call __floatundisf4867; RV32ID-ILP32-NEXT: call __truncsfhf24868; RV32ID-ILP32-NEXT: lui a1, 10485604869; RV32ID-ILP32-NEXT: or a0, a0, a14870; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4871; RV32ID-ILP32-NEXT: addi sp, sp, 164872; RV32ID-ILP32-NEXT: ret4873;4874; RV64ID-LP64-LABEL: fcvt_h_lu:4875; RV64ID-LP64: # %bb.0:4876; RV64ID-LP64-NEXT: addi sp, sp, -164877; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4878; RV64ID-LP64-NEXT: fcvt.s.lu fa5, a04879; RV64ID-LP64-NEXT: fmv.x.w a0, fa54880; RV64ID-LP64-NEXT: call __truncsfhf24881; RV64ID-LP64-NEXT: lui a1, 10485604882; RV64ID-LP64-NEXT: or a0, a0, a14883; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4884; RV64ID-LP64-NEXT: addi sp, sp, 164885; RV64ID-LP64-NEXT: ret4886;4887; RV32ID-LABEL: fcvt_h_lu:4888; RV32ID: # %bb.0:4889; RV32ID-NEXT: addi sp, sp, -164890; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4891; RV32ID-NEXT: call __floatundisf4892; RV32ID-NEXT: call __truncsfhf24893; RV32ID-NEXT: fmv.x.w a0, fa04894; RV32ID-NEXT: lui a1, 10485604895; RV32ID-NEXT: or a0, a0, a14896; RV32ID-NEXT: fmv.w.x fa0, a04897; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4898; RV32ID-NEXT: addi sp, sp, 164899; RV32ID-NEXT: ret4900;4901; RV64ID-LABEL: fcvt_h_lu:4902; RV64ID: # %bb.0:4903; RV64ID-NEXT: addi sp, sp, -164904; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill4905; RV64ID-NEXT: fcvt.s.lu fa0, a04906; RV64ID-NEXT: call __truncsfhf24907; RV64ID-NEXT: fmv.x.w a0, fa04908; RV64ID-NEXT: lui a1, 10485604909; RV64ID-NEXT: or a0, a0, a14910; RV64ID-NEXT: fmv.w.x fa0, a04911; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload4912; RV64ID-NEXT: addi sp, sp, 164913; RV64ID-NEXT: ret4914;4915; CHECK32-IZFHMIN-LABEL: fcvt_h_lu:4916; CHECK32-IZFHMIN: # %bb.0:4917; CHECK32-IZFHMIN-NEXT: addi sp, sp, -164918; CHECK32-IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4919; CHECK32-IZFHMIN-NEXT: call __floatundihf4920; CHECK32-IZFHMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4921; CHECK32-IZFHMIN-NEXT: addi sp, sp, 164922; CHECK32-IZFHMIN-NEXT: ret4923;4924; CHECK64-IZFHMIN-LABEL: fcvt_h_lu:4925; CHECK64-IZFHMIN: # %bb.0:4926; CHECK64-IZFHMIN-NEXT: fcvt.s.lu fa5, a04927; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa0, fa54928; CHECK64-IZFHMIN-NEXT: ret4929;4930; CHECK32-IZHINXMIN-LABEL: fcvt_h_lu:4931; CHECK32-IZHINXMIN: # %bb.0:4932; CHECK32-IZHINXMIN-NEXT: addi sp, sp, -164933; CHECK32-IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4934; CHECK32-IZHINXMIN-NEXT: call __floatundihf4935; CHECK32-IZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4936; CHECK32-IZHINXMIN-NEXT: addi sp, sp, 164937; CHECK32-IZHINXMIN-NEXT: ret4938;4939; CHECK64-IZHINXMIN-LABEL: fcvt_h_lu:4940; CHECK64-IZHINXMIN: # %bb.0:4941; CHECK64-IZHINXMIN-NEXT: fcvt.s.lu a0, a04942; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a0, a04943; CHECK64-IZHINXMIN-NEXT: ret4944;4945; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_lu:4946; CHECK32-IZDINXZHINXMIN: # %bb.0:4947; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, -164948; CHECK32-IZDINXZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4949; CHECK32-IZDINXZHINXMIN-NEXT: call __floatundihf4950; CHECK32-IZDINXZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4951; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, 164952; CHECK32-IZDINXZHINXMIN-NEXT: ret4953;4954; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_lu:4955; CHECK64-IZDINXZHINXMIN: # %bb.0:4956; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.lu a0, a04957; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a04958; CHECK64-IZDINXZHINXMIN-NEXT: ret4959 %1 = uitofp i64 %a to half4960 ret half %14961}4962 4963define half @fcvt_h_s(float %a) nounwind {4964; CHECKIZFH-LABEL: fcvt_h_s:4965; CHECKIZFH: # %bb.0:4966; CHECKIZFH-NEXT: fcvt.h.s fa0, fa04967; CHECKIZFH-NEXT: ret4968;4969; RV32IDZFH-LABEL: fcvt_h_s:4970; RV32IDZFH: # %bb.0:4971; RV32IDZFH-NEXT: fcvt.h.s fa0, fa04972; RV32IDZFH-NEXT: ret4973;4974; RV64IDZFH-LABEL: fcvt_h_s:4975; RV64IDZFH: # %bb.0:4976; RV64IDZFH-NEXT: fcvt.h.s fa0, fa04977; RV64IDZFH-NEXT: ret4978;4979; CHECKIZHINX-LABEL: fcvt_h_s:4980; CHECKIZHINX: # %bb.0:4981; CHECKIZHINX-NEXT: fcvt.h.s a0, a04982; CHECKIZHINX-NEXT: ret4983;4984; CHECKIZDINXZHINX-LABEL: fcvt_h_s:4985; CHECKIZDINXZHINX: # %bb.0:4986; CHECKIZDINXZHINX-NEXT: fcvt.h.s a0, a04987; CHECKIZDINXZHINX-NEXT: ret4988;4989; RV32I-LABEL: fcvt_h_s:4990; RV32I: # %bb.0:4991; RV32I-NEXT: addi sp, sp, -164992; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill4993; RV32I-NEXT: call __truncsfhf24994; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload4995; RV32I-NEXT: addi sp, sp, 164996; RV32I-NEXT: ret4997;4998; RV64I-LABEL: fcvt_h_s:4999; RV64I: # %bb.0:5000; RV64I-NEXT: addi sp, sp, -165001; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5002; RV64I-NEXT: call __truncsfhf25003; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5004; RV64I-NEXT: addi sp, sp, 165005; RV64I-NEXT: ret5006;5007; RV32ID-ILP32-LABEL: fcvt_h_s:5008; RV32ID-ILP32: # %bb.0:5009; RV32ID-ILP32-NEXT: addi sp, sp, -165010; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5011; RV32ID-ILP32-NEXT: call __truncsfhf25012; RV32ID-ILP32-NEXT: lui a1, 10485605013; RV32ID-ILP32-NEXT: or a0, a0, a15014; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5015; RV32ID-ILP32-NEXT: addi sp, sp, 165016; RV32ID-ILP32-NEXT: ret5017;5018; RV64ID-LP64-LABEL: fcvt_h_s:5019; RV64ID-LP64: # %bb.0:5020; RV64ID-LP64-NEXT: addi sp, sp, -165021; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5022; RV64ID-LP64-NEXT: call __truncsfhf25023; RV64ID-LP64-NEXT: lui a1, 10485605024; RV64ID-LP64-NEXT: or a0, a0, a15025; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5026; RV64ID-LP64-NEXT: addi sp, sp, 165027; RV64ID-LP64-NEXT: ret5028;5029; RV32ID-LABEL: fcvt_h_s:5030; RV32ID: # %bb.0:5031; RV32ID-NEXT: addi sp, sp, -165032; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5033; RV32ID-NEXT: call __truncsfhf25034; RV32ID-NEXT: fmv.x.w a0, fa05035; RV32ID-NEXT: lui a1, 10485605036; RV32ID-NEXT: or a0, a0, a15037; RV32ID-NEXT: fmv.w.x fa0, a05038; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5039; RV32ID-NEXT: addi sp, sp, 165040; RV32ID-NEXT: ret5041;5042; RV64ID-LABEL: fcvt_h_s:5043; RV64ID: # %bb.0:5044; RV64ID-NEXT: addi sp, sp, -165045; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5046; RV64ID-NEXT: call __truncsfhf25047; RV64ID-NEXT: fmv.x.w a0, fa05048; RV64ID-NEXT: lui a1, 10485605049; RV64ID-NEXT: or a0, a0, a15050; RV64ID-NEXT: fmv.w.x fa0, a05051; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5052; RV64ID-NEXT: addi sp, sp, 165053; RV64ID-NEXT: ret5054;5055; CHECK32-IZFHMIN-LABEL: fcvt_h_s:5056; CHECK32-IZFHMIN: # %bb.0:5057; CHECK32-IZFHMIN-NEXT: fcvt.h.s fa0, fa05058; CHECK32-IZFHMIN-NEXT: ret5059;5060; CHECK64-IZFHMIN-LABEL: fcvt_h_s:5061; CHECK64-IZFHMIN: # %bb.0:5062; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa0, fa05063; CHECK64-IZFHMIN-NEXT: ret5064;5065; CHECK32-IZHINXMIN-LABEL: fcvt_h_s:5066; CHECK32-IZHINXMIN: # %bb.0:5067; CHECK32-IZHINXMIN-NEXT: fcvt.h.s a0, a05068; CHECK32-IZHINXMIN-NEXT: ret5069;5070; CHECK64-IZHINXMIN-LABEL: fcvt_h_s:5071; CHECK64-IZHINXMIN: # %bb.0:5072; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a0, a05073; CHECK64-IZHINXMIN-NEXT: ret5074;5075; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_s:5076; CHECK32-IZDINXZHINXMIN: # %bb.0:5077; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a05078; CHECK32-IZDINXZHINXMIN-NEXT: ret5079;5080; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_s:5081; CHECK64-IZDINXZHINXMIN: # %bb.0:5082; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a0, a05083; CHECK64-IZDINXZHINXMIN-NEXT: ret5084 %1 = fptrunc float %a to half5085 ret half %15086}5087 5088define float @fcvt_s_h(half %a) nounwind {5089; CHECKIZFH-LABEL: fcvt_s_h:5090; CHECKIZFH: # %bb.0:5091; CHECKIZFH-NEXT: fcvt.s.h fa0, fa05092; CHECKIZFH-NEXT: ret5093;5094; RV32IDZFH-LABEL: fcvt_s_h:5095; RV32IDZFH: # %bb.0:5096; RV32IDZFH-NEXT: fcvt.s.h fa0, fa05097; RV32IDZFH-NEXT: ret5098;5099; RV64IDZFH-LABEL: fcvt_s_h:5100; RV64IDZFH: # %bb.0:5101; RV64IDZFH-NEXT: fcvt.s.h fa0, fa05102; RV64IDZFH-NEXT: ret5103;5104; CHECKIZHINX-LABEL: fcvt_s_h:5105; CHECKIZHINX: # %bb.0:5106; CHECKIZHINX-NEXT: fcvt.s.h a0, a05107; CHECKIZHINX-NEXT: ret5108;5109; CHECKIZDINXZHINX-LABEL: fcvt_s_h:5110; CHECKIZDINXZHINX: # %bb.0:5111; CHECKIZDINXZHINX-NEXT: fcvt.s.h a0, a05112; CHECKIZDINXZHINX-NEXT: ret5113;5114; RV32I-LABEL: fcvt_s_h:5115; RV32I: # %bb.0:5116; RV32I-NEXT: addi sp, sp, -165117; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5118; RV32I-NEXT: call __extendhfsf25119; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5120; RV32I-NEXT: addi sp, sp, 165121; RV32I-NEXT: ret5122;5123; RV64I-LABEL: fcvt_s_h:5124; RV64I: # %bb.0:5125; RV64I-NEXT: addi sp, sp, -165126; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5127; RV64I-NEXT: call __extendhfsf25128; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5129; RV64I-NEXT: addi sp, sp, 165130; RV64I-NEXT: ret5131;5132; RV32ID-ILP32-LABEL: fcvt_s_h:5133; RV32ID-ILP32: # %bb.0:5134; RV32ID-ILP32-NEXT: addi sp, sp, -165135; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5136; RV32ID-ILP32-NEXT: call __extendhfsf25137; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5138; RV32ID-ILP32-NEXT: addi sp, sp, 165139; RV32ID-ILP32-NEXT: ret5140;5141; RV64ID-LP64-LABEL: fcvt_s_h:5142; RV64ID-LP64: # %bb.0:5143; RV64ID-LP64-NEXT: addi sp, sp, -165144; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5145; RV64ID-LP64-NEXT: call __extendhfsf25146; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5147; RV64ID-LP64-NEXT: addi sp, sp, 165148; RV64ID-LP64-NEXT: ret5149;5150; RV32ID-LABEL: fcvt_s_h:5151; RV32ID: # %bb.0:5152; RV32ID-NEXT: addi sp, sp, -165153; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5154; RV32ID-NEXT: call __extendhfsf25155; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5156; RV32ID-NEXT: addi sp, sp, 165157; RV32ID-NEXT: ret5158;5159; RV64ID-LABEL: fcvt_s_h:5160; RV64ID: # %bb.0:5161; RV64ID-NEXT: addi sp, sp, -165162; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5163; RV64ID-NEXT: call __extendhfsf25164; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5165; RV64ID-NEXT: addi sp, sp, 165166; RV64ID-NEXT: ret5167;5168; CHECK32-IZFHMIN-LABEL: fcvt_s_h:5169; CHECK32-IZFHMIN: # %bb.0:5170; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa0, fa05171; CHECK32-IZFHMIN-NEXT: ret5172;5173; CHECK64-IZFHMIN-LABEL: fcvt_s_h:5174; CHECK64-IZFHMIN: # %bb.0:5175; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa0, fa05176; CHECK64-IZFHMIN-NEXT: ret5177;5178; CHECK32-IZHINXMIN-LABEL: fcvt_s_h:5179; CHECK32-IZHINXMIN: # %bb.0:5180; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a05181; CHECK32-IZHINXMIN-NEXT: ret5182;5183; CHECK64-IZHINXMIN-LABEL: fcvt_s_h:5184; CHECK64-IZHINXMIN: # %bb.0:5185; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a05186; CHECK64-IZHINXMIN-NEXT: ret5187;5188; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_s_h:5189; CHECK32-IZDINXZHINXMIN: # %bb.0:5190; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a05191; CHECK32-IZDINXZHINXMIN-NEXT: ret5192;5193; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_s_h:5194; CHECK64-IZDINXZHINXMIN: # %bb.0:5195; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a05196; CHECK64-IZDINXZHINXMIN-NEXT: ret5197 %1 = fpext half %a to float5198 ret float %15199}5200 5201define half @fcvt_h_d(double %a) nounwind {5202; RV32IZFH-LABEL: fcvt_h_d:5203; RV32IZFH: # %bb.0:5204; RV32IZFH-NEXT: addi sp, sp, -165205; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5206; RV32IZFH-NEXT: call __truncdfhf25207; RV32IZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5208; RV32IZFH-NEXT: addi sp, sp, 165209; RV32IZFH-NEXT: ret5210;5211; RV64IZFH-LABEL: fcvt_h_d:5212; RV64IZFH: # %bb.0:5213; RV64IZFH-NEXT: addi sp, sp, -165214; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5215; RV64IZFH-NEXT: call __truncdfhf25216; RV64IZFH-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5217; RV64IZFH-NEXT: addi sp, sp, 165218; RV64IZFH-NEXT: ret5219;5220; RV32IDZFH-LABEL: fcvt_h_d:5221; RV32IDZFH: # %bb.0:5222; RV32IDZFH-NEXT: fcvt.h.d fa0, fa05223; RV32IDZFH-NEXT: ret5224;5225; RV64IDZFH-LABEL: fcvt_h_d:5226; RV64IDZFH: # %bb.0:5227; RV64IDZFH-NEXT: fcvt.h.d fa0, fa05228; RV64IDZFH-NEXT: ret5229;5230; RV32IZHINX-LABEL: fcvt_h_d:5231; RV32IZHINX: # %bb.0:5232; RV32IZHINX-NEXT: addi sp, sp, -165233; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5234; RV32IZHINX-NEXT: call __truncdfhf25235; RV32IZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5236; RV32IZHINX-NEXT: addi sp, sp, 165237; RV32IZHINX-NEXT: ret5238;5239; RV64IZHINX-LABEL: fcvt_h_d:5240; RV64IZHINX: # %bb.0:5241; RV64IZHINX-NEXT: addi sp, sp, -165242; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5243; RV64IZHINX-NEXT: call __truncdfhf25244; RV64IZHINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5245; RV64IZHINX-NEXT: addi sp, sp, 165246; RV64IZHINX-NEXT: ret5247;5248; CHECKIZDINXZHINX-LABEL: fcvt_h_d:5249; CHECKIZDINXZHINX: # %bb.0:5250; CHECKIZDINXZHINX-NEXT: fcvt.h.d a0, a05251; CHECKIZDINXZHINX-NEXT: ret5252;5253; RV32I-LABEL: fcvt_h_d:5254; RV32I: # %bb.0:5255; RV32I-NEXT: addi sp, sp, -165256; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5257; RV32I-NEXT: call __truncdfhf25258; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5259; RV32I-NEXT: addi sp, sp, 165260; RV32I-NEXT: ret5261;5262; RV64I-LABEL: fcvt_h_d:5263; RV64I: # %bb.0:5264; RV64I-NEXT: addi sp, sp, -165265; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5266; RV64I-NEXT: call __truncdfhf25267; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5268; RV64I-NEXT: addi sp, sp, 165269; RV64I-NEXT: ret5270;5271; RV32ID-ILP32-LABEL: fcvt_h_d:5272; RV32ID-ILP32: # %bb.0:5273; RV32ID-ILP32-NEXT: addi sp, sp, -165274; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5275; RV32ID-ILP32-NEXT: call __truncdfhf25276; RV32ID-ILP32-NEXT: lui a1, 10485605277; RV32ID-ILP32-NEXT: or a0, a0, a15278; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5279; RV32ID-ILP32-NEXT: addi sp, sp, 165280; RV32ID-ILP32-NEXT: ret5281;5282; RV64ID-LP64-LABEL: fcvt_h_d:5283; RV64ID-LP64: # %bb.0:5284; RV64ID-LP64-NEXT: addi sp, sp, -165285; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5286; RV64ID-LP64-NEXT: call __truncdfhf25287; RV64ID-LP64-NEXT: lui a1, 10485605288; RV64ID-LP64-NEXT: or a0, a0, a15289; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5290; RV64ID-LP64-NEXT: addi sp, sp, 165291; RV64ID-LP64-NEXT: ret5292;5293; RV32ID-LABEL: fcvt_h_d:5294; RV32ID: # %bb.0:5295; RV32ID-NEXT: addi sp, sp, -165296; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5297; RV32ID-NEXT: call __truncdfhf25298; RV32ID-NEXT: fmv.x.w a0, fa05299; RV32ID-NEXT: lui a1, 10485605300; RV32ID-NEXT: or a0, a0, a15301; RV32ID-NEXT: fmv.w.x fa0, a05302; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5303; RV32ID-NEXT: addi sp, sp, 165304; RV32ID-NEXT: ret5305;5306; RV64ID-LABEL: fcvt_h_d:5307; RV64ID: # %bb.0:5308; RV64ID-NEXT: addi sp, sp, -165309; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5310; RV64ID-NEXT: call __truncdfhf25311; RV64ID-NEXT: fmv.x.w a0, fa05312; RV64ID-NEXT: lui a1, 10485605313; RV64ID-NEXT: or a0, a0, a15314; RV64ID-NEXT: fmv.w.x fa0, a05315; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5316; RV64ID-NEXT: addi sp, sp, 165317; RV64ID-NEXT: ret5318;5319; RV32IFZFHMIN-LABEL: fcvt_h_d:5320; RV32IFZFHMIN: # %bb.0:5321; RV32IFZFHMIN-NEXT: addi sp, sp, -165322; RV32IFZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5323; RV32IFZFHMIN-NEXT: call __truncdfhf25324; RV32IFZFHMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5325; RV32IFZFHMIN-NEXT: addi sp, sp, 165326; RV32IFZFHMIN-NEXT: ret5327;5328; RV64IFZFHMIN-LABEL: fcvt_h_d:5329; RV64IFZFHMIN: # %bb.0:5330; RV64IFZFHMIN-NEXT: addi sp, sp, -165331; RV64IFZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5332; RV64IFZFHMIN-NEXT: call __truncdfhf25333; RV64IFZFHMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5334; RV64IFZFHMIN-NEXT: addi sp, sp, 165335; RV64IFZFHMIN-NEXT: ret5336;5337; RV32IDZFHMIN-LABEL: fcvt_h_d:5338; RV32IDZFHMIN: # %bb.0:5339; RV32IDZFHMIN-NEXT: fcvt.h.d fa0, fa05340; RV32IDZFHMIN-NEXT: ret5341;5342; RV64IDZFHMIN-LABEL: fcvt_h_d:5343; RV64IDZFHMIN: # %bb.0:5344; RV64IDZFHMIN-NEXT: fcvt.h.d fa0, fa05345; RV64IDZFHMIN-NEXT: ret5346;5347; CHECK32-IZHINXMIN-LABEL: fcvt_h_d:5348; CHECK32-IZHINXMIN: # %bb.0:5349; CHECK32-IZHINXMIN-NEXT: addi sp, sp, -165350; CHECK32-IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5351; CHECK32-IZHINXMIN-NEXT: call __truncdfhf25352; CHECK32-IZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5353; CHECK32-IZHINXMIN-NEXT: addi sp, sp, 165354; CHECK32-IZHINXMIN-NEXT: ret5355;5356; CHECK64-IZHINXMIN-LABEL: fcvt_h_d:5357; CHECK64-IZHINXMIN: # %bb.0:5358; CHECK64-IZHINXMIN-NEXT: addi sp, sp, -165359; CHECK64-IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5360; CHECK64-IZHINXMIN-NEXT: call __truncdfhf25361; CHECK64-IZHINXMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5362; CHECK64-IZHINXMIN-NEXT: addi sp, sp, 165363; CHECK64-IZHINXMIN-NEXT: ret5364;5365; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_d:5366; CHECK32-IZDINXZHINXMIN: # %bb.0:5367; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.h.d a0, a05368; CHECK32-IZDINXZHINXMIN-NEXT: ret5369;5370; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_d:5371; CHECK64-IZDINXZHINXMIN: # %bb.0:5372; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.d a0, a05373; CHECK64-IZDINXZHINXMIN-NEXT: ret5374 %1 = fptrunc double %a to half5375 ret half %15376}5377 5378define double @fcvt_d_h(half %a) nounwind {5379; RV32IZFH-LABEL: fcvt_d_h:5380; RV32IZFH: # %bb.0:5381; RV32IZFH-NEXT: addi sp, sp, -165382; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5383; RV32IZFH-NEXT: fcvt.s.h fa0, fa05384; RV32IZFH-NEXT: call __extendsfdf25385; RV32IZFH-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5386; RV32IZFH-NEXT: addi sp, sp, 165387; RV32IZFH-NEXT: ret5388;5389; RV64IZFH-LABEL: fcvt_d_h:5390; RV64IZFH: # %bb.0:5391; RV64IZFH-NEXT: addi sp, sp, -165392; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5393; RV64IZFH-NEXT: fcvt.s.h fa0, fa05394; RV64IZFH-NEXT: call __extendsfdf25395; RV64IZFH-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5396; RV64IZFH-NEXT: addi sp, sp, 165397; RV64IZFH-NEXT: ret5398;5399; RV32IDZFH-LABEL: fcvt_d_h:5400; RV32IDZFH: # %bb.0:5401; RV32IDZFH-NEXT: fcvt.d.h fa0, fa05402; RV32IDZFH-NEXT: ret5403;5404; RV64IDZFH-LABEL: fcvt_d_h:5405; RV64IDZFH: # %bb.0:5406; RV64IDZFH-NEXT: fcvt.d.h fa0, fa05407; RV64IDZFH-NEXT: ret5408;5409; RV32IZHINX-LABEL: fcvt_d_h:5410; RV32IZHINX: # %bb.0:5411; RV32IZHINX-NEXT: addi sp, sp, -165412; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5413; RV32IZHINX-NEXT: fcvt.s.h a0, a05414; RV32IZHINX-NEXT: call __extendsfdf25415; RV32IZHINX-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5416; RV32IZHINX-NEXT: addi sp, sp, 165417; RV32IZHINX-NEXT: ret5418;5419; RV64IZHINX-LABEL: fcvt_d_h:5420; RV64IZHINX: # %bb.0:5421; RV64IZHINX-NEXT: addi sp, sp, -165422; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5423; RV64IZHINX-NEXT: fcvt.s.h a0, a05424; RV64IZHINX-NEXT: call __extendsfdf25425; RV64IZHINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5426; RV64IZHINX-NEXT: addi sp, sp, 165427; RV64IZHINX-NEXT: ret5428;5429; CHECKIZDINXZHINX-LABEL: fcvt_d_h:5430; CHECKIZDINXZHINX: # %bb.0:5431; CHECKIZDINXZHINX-NEXT: fcvt.d.h a0, a05432; CHECKIZDINXZHINX-NEXT: ret5433;5434; RV32I-LABEL: fcvt_d_h:5435; RV32I: # %bb.0:5436; RV32I-NEXT: addi sp, sp, -165437; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5438; RV32I-NEXT: call __extendhfsf25439; RV32I-NEXT: call __extendsfdf25440; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5441; RV32I-NEXT: addi sp, sp, 165442; RV32I-NEXT: ret5443;5444; RV64I-LABEL: fcvt_d_h:5445; RV64I: # %bb.0:5446; RV64I-NEXT: addi sp, sp, -165447; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5448; RV64I-NEXT: call __extendhfsf25449; RV64I-NEXT: call __extendsfdf25450; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5451; RV64I-NEXT: addi sp, sp, 165452; RV64I-NEXT: ret5453;5454; RV32ID-ILP32-LABEL: fcvt_d_h:5455; RV32ID-ILP32: # %bb.0:5456; RV32ID-ILP32-NEXT: addi sp, sp, -165457; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5458; RV32ID-ILP32-NEXT: call __extendhfsf25459; RV32ID-ILP32-NEXT: fmv.w.x fa5, a05460; RV32ID-ILP32-NEXT: fcvt.d.s fa5, fa55461; RV32ID-ILP32-NEXT: fsd fa5, 0(sp)5462; RV32ID-ILP32-NEXT: lw a0, 0(sp)5463; RV32ID-ILP32-NEXT: lw a1, 4(sp)5464; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5465; RV32ID-ILP32-NEXT: addi sp, sp, 165466; RV32ID-ILP32-NEXT: ret5467;5468; RV64ID-LP64-LABEL: fcvt_d_h:5469; RV64ID-LP64: # %bb.0:5470; RV64ID-LP64-NEXT: addi sp, sp, -165471; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5472; RV64ID-LP64-NEXT: call __extendhfsf25473; RV64ID-LP64-NEXT: fmv.w.x fa5, a05474; RV64ID-LP64-NEXT: fcvt.d.s fa5, fa55475; RV64ID-LP64-NEXT: fmv.x.d a0, fa55476; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5477; RV64ID-LP64-NEXT: addi sp, sp, 165478; RV64ID-LP64-NEXT: ret5479;5480; RV32ID-LABEL: fcvt_d_h:5481; RV32ID: # %bb.0:5482; RV32ID-NEXT: addi sp, sp, -165483; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5484; RV32ID-NEXT: call __extendhfsf25485; RV32ID-NEXT: fcvt.d.s fa0, fa05486; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5487; RV32ID-NEXT: addi sp, sp, 165488; RV32ID-NEXT: ret5489;5490; RV64ID-LABEL: fcvt_d_h:5491; RV64ID: # %bb.0:5492; RV64ID-NEXT: addi sp, sp, -165493; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5494; RV64ID-NEXT: call __extendhfsf25495; RV64ID-NEXT: fcvt.d.s fa0, fa05496; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5497; RV64ID-NEXT: addi sp, sp, 165498; RV64ID-NEXT: ret5499;5500; RV32IFZFHMIN-LABEL: fcvt_d_h:5501; RV32IFZFHMIN: # %bb.0:5502; RV32IFZFHMIN-NEXT: addi sp, sp, -165503; RV32IFZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5504; RV32IFZFHMIN-NEXT: fcvt.s.h fa0, fa05505; RV32IFZFHMIN-NEXT: call __extendsfdf25506; RV32IFZFHMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5507; RV32IFZFHMIN-NEXT: addi sp, sp, 165508; RV32IFZFHMIN-NEXT: ret5509;5510; RV64IFZFHMIN-LABEL: fcvt_d_h:5511; RV64IFZFHMIN: # %bb.0:5512; RV64IFZFHMIN-NEXT: addi sp, sp, -165513; RV64IFZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5514; RV64IFZFHMIN-NEXT: fcvt.s.h fa0, fa05515; RV64IFZFHMIN-NEXT: call __extendsfdf25516; RV64IFZFHMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5517; RV64IFZFHMIN-NEXT: addi sp, sp, 165518; RV64IFZFHMIN-NEXT: ret5519;5520; RV32IDZFHMIN-LABEL: fcvt_d_h:5521; RV32IDZFHMIN: # %bb.0:5522; RV32IDZFHMIN-NEXT: fcvt.d.h fa0, fa05523; RV32IDZFHMIN-NEXT: ret5524;5525; RV64IDZFHMIN-LABEL: fcvt_d_h:5526; RV64IDZFHMIN: # %bb.0:5527; RV64IDZFHMIN-NEXT: fcvt.d.h fa0, fa05528; RV64IDZFHMIN-NEXT: ret5529;5530; CHECK32-IZHINXMIN-LABEL: fcvt_d_h:5531; CHECK32-IZHINXMIN: # %bb.0:5532; CHECK32-IZHINXMIN-NEXT: addi sp, sp, -165533; CHECK32-IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5534; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a05535; CHECK32-IZHINXMIN-NEXT: call __extendsfdf25536; CHECK32-IZHINXMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5537; CHECK32-IZHINXMIN-NEXT: addi sp, sp, 165538; CHECK32-IZHINXMIN-NEXT: ret5539;5540; CHECK64-IZHINXMIN-LABEL: fcvt_d_h:5541; CHECK64-IZHINXMIN: # %bb.0:5542; CHECK64-IZHINXMIN-NEXT: addi sp, sp, -165543; CHECK64-IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill5544; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a05545; CHECK64-IZHINXMIN-NEXT: call __extendsfdf25546; CHECK64-IZHINXMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload5547; CHECK64-IZHINXMIN-NEXT: addi sp, sp, 165548; CHECK64-IZHINXMIN-NEXT: ret5549;5550; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_d_h:5551; CHECK32-IZDINXZHINXMIN: # %bb.0:5552; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.d.h a0, a05553; CHECK32-IZDINXZHINXMIN-NEXT: ret5554;5555; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_d_h:5556; CHECK64-IZDINXZHINXMIN: # %bb.0:5557; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.d.h a0, a05558; CHECK64-IZDINXZHINXMIN-NEXT: ret5559 %1 = fpext half %a to double5560 ret double %15561}5562 5563define half @bitcast_h_i16(i16 %a) nounwind {5564; CHECKIZFH-LABEL: bitcast_h_i16:5565; CHECKIZFH: # %bb.0:5566; CHECKIZFH-NEXT: fmv.h.x fa0, a05567; CHECKIZFH-NEXT: ret5568;5569; RV32IDZFH-LABEL: bitcast_h_i16:5570; RV32IDZFH: # %bb.0:5571; RV32IDZFH-NEXT: fmv.h.x fa0, a05572; RV32IDZFH-NEXT: ret5573;5574; RV64IDZFH-LABEL: bitcast_h_i16:5575; RV64IDZFH: # %bb.0:5576; RV64IDZFH-NEXT: fmv.h.x fa0, a05577; RV64IDZFH-NEXT: ret5578;5579; CHECKIZHINX-LABEL: bitcast_h_i16:5580; CHECKIZHINX: # %bb.0:5581; CHECKIZHINX-NEXT: # kill: def $x10_h killed $x10_h killed $x105582; CHECKIZHINX-NEXT: ret5583;5584; CHECKIZDINXZHINX-LABEL: bitcast_h_i16:5585; CHECKIZDINXZHINX: # %bb.0:5586; CHECKIZDINXZHINX-NEXT: # kill: def $x10_h killed $x10_h killed $x105587; CHECKIZDINXZHINX-NEXT: ret5588;5589; RV32I-LABEL: bitcast_h_i16:5590; RV32I: # %bb.0:5591; RV32I-NEXT: ret5592;5593; RV64I-LABEL: bitcast_h_i16:5594; RV64I: # %bb.0:5595; RV64I-NEXT: ret5596;5597; RV32ID-ILP32-LABEL: bitcast_h_i16:5598; RV32ID-ILP32: # %bb.0:5599; RV32ID-ILP32-NEXT: lui a1, 10485605600; RV32ID-ILP32-NEXT: or a0, a0, a15601; RV32ID-ILP32-NEXT: ret5602;5603; RV64ID-LP64-LABEL: bitcast_h_i16:5604; RV64ID-LP64: # %bb.0:5605; RV64ID-LP64-NEXT: lui a1, 10485605606; RV64ID-LP64-NEXT: or a0, a0, a15607; RV64ID-LP64-NEXT: ret5608;5609; RV32ID-LABEL: bitcast_h_i16:5610; RV32ID: # %bb.0:5611; RV32ID-NEXT: lui a1, 10485605612; RV32ID-NEXT: or a0, a0, a15613; RV32ID-NEXT: fmv.w.x fa0, a05614; RV32ID-NEXT: ret5615;5616; RV64ID-LABEL: bitcast_h_i16:5617; RV64ID: # %bb.0:5618; RV64ID-NEXT: lui a1, 10485605619; RV64ID-NEXT: or a0, a0, a15620; RV64ID-NEXT: fmv.w.x fa0, a05621; RV64ID-NEXT: ret5622;5623; CHECK32-IZFHMIN-LABEL: bitcast_h_i16:5624; CHECK32-IZFHMIN: # %bb.0:5625; CHECK32-IZFHMIN-NEXT: fmv.h.x fa0, a05626; CHECK32-IZFHMIN-NEXT: ret5627;5628; CHECK64-IZFHMIN-LABEL: bitcast_h_i16:5629; CHECK64-IZFHMIN: # %bb.0:5630; CHECK64-IZFHMIN-NEXT: fmv.h.x fa0, a05631; CHECK64-IZFHMIN-NEXT: ret5632;5633; CHECK32-IZHINXMIN-LABEL: bitcast_h_i16:5634; CHECK32-IZHINXMIN: # %bb.0:5635; CHECK32-IZHINXMIN-NEXT: # kill: def $x10_h killed $x10_h killed $x105636; CHECK32-IZHINXMIN-NEXT: ret5637;5638; CHECK64-IZHINXMIN-LABEL: bitcast_h_i16:5639; CHECK64-IZHINXMIN: # %bb.0:5640; CHECK64-IZHINXMIN-NEXT: # kill: def $x10_h killed $x10_h killed $x105641; CHECK64-IZHINXMIN-NEXT: ret5642;5643; CHECK32-IZDINXZHINXMIN-LABEL: bitcast_h_i16:5644; CHECK32-IZDINXZHINXMIN: # %bb.0:5645; CHECK32-IZDINXZHINXMIN-NEXT: # kill: def $x10_h killed $x10_h killed $x105646; CHECK32-IZDINXZHINXMIN-NEXT: ret5647;5648; CHECK64-IZDINXZHINXMIN-LABEL: bitcast_h_i16:5649; CHECK64-IZDINXZHINXMIN: # %bb.0:5650; CHECK64-IZDINXZHINXMIN-NEXT: # kill: def $x10_h killed $x10_h killed $x105651; CHECK64-IZDINXZHINXMIN-NEXT: ret5652 %1 = bitcast i16 %a to half5653 ret half %15654}5655 5656define i16 @bitcast_i16_h(half %a) nounwind {5657; CHECKIZFH-LABEL: bitcast_i16_h:5658; CHECKIZFH: # %bb.0:5659; CHECKIZFH-NEXT: fmv.x.h a0, fa05660; CHECKIZFH-NEXT: ret5661;5662; RV32IDZFH-LABEL: bitcast_i16_h:5663; RV32IDZFH: # %bb.0:5664; RV32IDZFH-NEXT: fmv.x.h a0, fa05665; RV32IDZFH-NEXT: ret5666;5667; RV64IDZFH-LABEL: bitcast_i16_h:5668; RV64IDZFH: # %bb.0:5669; RV64IDZFH-NEXT: fmv.x.h a0, fa05670; RV64IDZFH-NEXT: ret5671;5672; CHECKIZHINX-LABEL: bitcast_i16_h:5673; CHECKIZHINX: # %bb.0:5674; CHECKIZHINX-NEXT: # kill: def $x10_h killed $x10_h def $x105675; CHECKIZHINX-NEXT: ret5676;5677; CHECKIZDINXZHINX-LABEL: bitcast_i16_h:5678; CHECKIZDINXZHINX: # %bb.0:5679; CHECKIZDINXZHINX-NEXT: # kill: def $x10_h killed $x10_h def $x105680; CHECKIZDINXZHINX-NEXT: ret5681;5682; RV32I-LABEL: bitcast_i16_h:5683; RV32I: # %bb.0:5684; RV32I-NEXT: ret5685;5686; RV64I-LABEL: bitcast_i16_h:5687; RV64I: # %bb.0:5688; RV64I-NEXT: ret5689;5690; RV32ID-ILP32-LABEL: bitcast_i16_h:5691; RV32ID-ILP32: # %bb.0:5692; RV32ID-ILP32-NEXT: ret5693;5694; RV64ID-LP64-LABEL: bitcast_i16_h:5695; RV64ID-LP64: # %bb.0:5696; RV64ID-LP64-NEXT: ret5697;5698; RV32ID-LABEL: bitcast_i16_h:5699; RV32ID: # %bb.0:5700; RV32ID-NEXT: fmv.x.w a0, fa05701; RV32ID-NEXT: ret5702;5703; RV64ID-LABEL: bitcast_i16_h:5704; RV64ID: # %bb.0:5705; RV64ID-NEXT: fmv.x.w a0, fa05706; RV64ID-NEXT: ret5707;5708; CHECK32-IZFHMIN-LABEL: bitcast_i16_h:5709; CHECK32-IZFHMIN: # %bb.0:5710; CHECK32-IZFHMIN-NEXT: fmv.x.h a0, fa05711; CHECK32-IZFHMIN-NEXT: ret5712;5713; CHECK64-IZFHMIN-LABEL: bitcast_i16_h:5714; CHECK64-IZFHMIN: # %bb.0:5715; CHECK64-IZFHMIN-NEXT: fmv.x.h a0, fa05716; CHECK64-IZFHMIN-NEXT: ret5717;5718; CHECK32-IZHINXMIN-LABEL: bitcast_i16_h:5719; CHECK32-IZHINXMIN: # %bb.0:5720; CHECK32-IZHINXMIN-NEXT: # kill: def $x10_h killed $x10_h def $x105721; CHECK32-IZHINXMIN-NEXT: ret5722;5723; CHECK64-IZHINXMIN-LABEL: bitcast_i16_h:5724; CHECK64-IZHINXMIN: # %bb.0:5725; CHECK64-IZHINXMIN-NEXT: # kill: def $x10_h killed $x10_h def $x105726; CHECK64-IZHINXMIN-NEXT: ret5727;5728; CHECK32-IZDINXZHINXMIN-LABEL: bitcast_i16_h:5729; CHECK32-IZDINXZHINXMIN: # %bb.0:5730; CHECK32-IZDINXZHINXMIN-NEXT: # kill: def $x10_h killed $x10_h def $x105731; CHECK32-IZDINXZHINXMIN-NEXT: ret5732;5733; CHECK64-IZDINXZHINXMIN-LABEL: bitcast_i16_h:5734; CHECK64-IZDINXZHINXMIN: # %bb.0:5735; CHECK64-IZDINXZHINXMIN-NEXT: # kill: def $x10_h killed $x10_h def $x105736; CHECK64-IZDINXZHINXMIN-NEXT: ret5737 %1 = bitcast half %a to i165738 ret i16 %15739}5740 5741; Make sure we select W version of addi on RV64.5742define signext i32 @fcvt_h_w_demanded_bits(i32 signext %0, ptr %1) nounwind {5743; RV32IZFH-LABEL: fcvt_h_w_demanded_bits:5744; RV32IZFH: # %bb.0:5745; RV32IZFH-NEXT: addi a0, a0, 15746; RV32IZFH-NEXT: fcvt.h.w fa5, a05747; RV32IZFH-NEXT: fsh fa5, 0(a1)5748; RV32IZFH-NEXT: ret5749;5750; RV64IZFH-LABEL: fcvt_h_w_demanded_bits:5751; RV64IZFH: # %bb.0:5752; RV64IZFH-NEXT: addiw a0, a0, 15753; RV64IZFH-NEXT: fcvt.h.w fa5, a05754; RV64IZFH-NEXT: fsh fa5, 0(a1)5755; RV64IZFH-NEXT: ret5756;5757; RV32IDZFH-LABEL: fcvt_h_w_demanded_bits:5758; RV32IDZFH: # %bb.0:5759; RV32IDZFH-NEXT: addi a0, a0, 15760; RV32IDZFH-NEXT: fcvt.h.w fa5, a05761; RV32IDZFH-NEXT: fsh fa5, 0(a1)5762; RV32IDZFH-NEXT: ret5763;5764; RV64IDZFH-LABEL: fcvt_h_w_demanded_bits:5765; RV64IDZFH: # %bb.0:5766; RV64IDZFH-NEXT: addiw a0, a0, 15767; RV64IDZFH-NEXT: fcvt.h.w fa5, a05768; RV64IDZFH-NEXT: fsh fa5, 0(a1)5769; RV64IDZFH-NEXT: ret5770;5771; RV32IZHINX-LABEL: fcvt_h_w_demanded_bits:5772; RV32IZHINX: # %bb.0:5773; RV32IZHINX-NEXT: addi a0, a0, 15774; RV32IZHINX-NEXT: fcvt.h.w a2, a05775; RV32IZHINX-NEXT: sh a2, 0(a1)5776; RV32IZHINX-NEXT: ret5777;5778; RV64IZHINX-LABEL: fcvt_h_w_demanded_bits:5779; RV64IZHINX: # %bb.0:5780; RV64IZHINX-NEXT: addiw a0, a0, 15781; RV64IZHINX-NEXT: fcvt.h.w a2, a05782; RV64IZHINX-NEXT: sh a2, 0(a1)5783; RV64IZHINX-NEXT: ret5784;5785; RV32IZDINXZHINX-LABEL: fcvt_h_w_demanded_bits:5786; RV32IZDINXZHINX: # %bb.0:5787; RV32IZDINXZHINX-NEXT: addi a0, a0, 15788; RV32IZDINXZHINX-NEXT: fcvt.h.w a2, a05789; RV32IZDINXZHINX-NEXT: sh a2, 0(a1)5790; RV32IZDINXZHINX-NEXT: ret5791;5792; RV64IZDINXZHINX-LABEL: fcvt_h_w_demanded_bits:5793; RV64IZDINXZHINX: # %bb.0:5794; RV64IZDINXZHINX-NEXT: addiw a0, a0, 15795; RV64IZDINXZHINX-NEXT: fcvt.h.w a2, a05796; RV64IZDINXZHINX-NEXT: sh a2, 0(a1)5797; RV64IZDINXZHINX-NEXT: ret5798;5799; RV32I-LABEL: fcvt_h_w_demanded_bits:5800; RV32I: # %bb.0:5801; RV32I-NEXT: addi sp, sp, -165802; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5803; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill5804; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill5805; RV32I-NEXT: mv s0, a15806; RV32I-NEXT: addi s1, a0, 15807; RV32I-NEXT: mv a0, s15808; RV32I-NEXT: call __floatsisf5809; RV32I-NEXT: call __truncsfhf25810; RV32I-NEXT: sh a0, 0(s0)5811; RV32I-NEXT: mv a0, s15812; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5813; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload5814; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload5815; RV32I-NEXT: addi sp, sp, 165816; RV32I-NEXT: ret5817;5818; RV64I-LABEL: fcvt_h_w_demanded_bits:5819; RV64I: # %bb.0:5820; RV64I-NEXT: addi sp, sp, -325821; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill5822; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill5823; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill5824; RV64I-NEXT: mv s0, a15825; RV64I-NEXT: addiw s1, a0, 15826; RV64I-NEXT: mv a0, s15827; RV64I-NEXT: call __floatsisf5828; RV64I-NEXT: call __truncsfhf25829; RV64I-NEXT: sh a0, 0(s0)5830; RV64I-NEXT: mv a0, s15831; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload5832; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload5833; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload5834; RV64I-NEXT: addi sp, sp, 325835; RV64I-NEXT: ret5836;5837; RV32ID-ILP32-LABEL: fcvt_h_w_demanded_bits:5838; RV32ID-ILP32: # %bb.0:5839; RV32ID-ILP32-NEXT: addi sp, sp, -165840; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5841; RV32ID-ILP32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill5842; RV32ID-ILP32-NEXT: sw s1, 4(sp) # 4-byte Folded Spill5843; RV32ID-ILP32-NEXT: mv s0, a15844; RV32ID-ILP32-NEXT: addi s1, a0, 15845; RV32ID-ILP32-NEXT: fcvt.s.w fa5, s15846; RV32ID-ILP32-NEXT: fmv.x.w a0, fa55847; RV32ID-ILP32-NEXT: call __truncsfhf25848; RV32ID-ILP32-NEXT: sh a0, 0(s0)5849; RV32ID-ILP32-NEXT: mv a0, s15850; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5851; RV32ID-ILP32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload5852; RV32ID-ILP32-NEXT: lw s1, 4(sp) # 4-byte Folded Reload5853; RV32ID-ILP32-NEXT: addi sp, sp, 165854; RV32ID-ILP32-NEXT: ret5855;5856; RV64ID-LP64-LABEL: fcvt_h_w_demanded_bits:5857; RV64ID-LP64: # %bb.0:5858; RV64ID-LP64-NEXT: addi sp, sp, -325859; RV64ID-LP64-NEXT: sd ra, 24(sp) # 8-byte Folded Spill5860; RV64ID-LP64-NEXT: sd s0, 16(sp) # 8-byte Folded Spill5861; RV64ID-LP64-NEXT: sd s1, 8(sp) # 8-byte Folded Spill5862; RV64ID-LP64-NEXT: mv s0, a15863; RV64ID-LP64-NEXT: addiw s1, a0, 15864; RV64ID-LP64-NEXT: fcvt.s.w fa5, s15865; RV64ID-LP64-NEXT: fmv.x.w a0, fa55866; RV64ID-LP64-NEXT: call __truncsfhf25867; RV64ID-LP64-NEXT: sh a0, 0(s0)5868; RV64ID-LP64-NEXT: mv a0, s15869; RV64ID-LP64-NEXT: ld ra, 24(sp) # 8-byte Folded Reload5870; RV64ID-LP64-NEXT: ld s0, 16(sp) # 8-byte Folded Reload5871; RV64ID-LP64-NEXT: ld s1, 8(sp) # 8-byte Folded Reload5872; RV64ID-LP64-NEXT: addi sp, sp, 325873; RV64ID-LP64-NEXT: ret5874;5875; RV32ID-LABEL: fcvt_h_w_demanded_bits:5876; RV32ID: # %bb.0:5877; RV32ID-NEXT: addi sp, sp, -165878; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill5879; RV32ID-NEXT: sw s0, 8(sp) # 4-byte Folded Spill5880; RV32ID-NEXT: sw s1, 4(sp) # 4-byte Folded Spill5881; RV32ID-NEXT: mv s0, a15882; RV32ID-NEXT: addi s1, a0, 15883; RV32ID-NEXT: fcvt.s.w fa0, s15884; RV32ID-NEXT: call __truncsfhf25885; RV32ID-NEXT: fmv.x.w a0, fa05886; RV32ID-NEXT: sh a0, 0(s0)5887; RV32ID-NEXT: mv a0, s15888; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload5889; RV32ID-NEXT: lw s0, 8(sp) # 4-byte Folded Reload5890; RV32ID-NEXT: lw s1, 4(sp) # 4-byte Folded Reload5891; RV32ID-NEXT: addi sp, sp, 165892; RV32ID-NEXT: ret5893;5894; RV64ID-LABEL: fcvt_h_w_demanded_bits:5895; RV64ID: # %bb.0:5896; RV64ID-NEXT: addi sp, sp, -325897; RV64ID-NEXT: sd ra, 24(sp) # 8-byte Folded Spill5898; RV64ID-NEXT: sd s0, 16(sp) # 8-byte Folded Spill5899; RV64ID-NEXT: sd s1, 8(sp) # 8-byte Folded Spill5900; RV64ID-NEXT: mv s0, a15901; RV64ID-NEXT: addiw s1, a0, 15902; RV64ID-NEXT: fcvt.s.w fa0, s15903; RV64ID-NEXT: call __truncsfhf25904; RV64ID-NEXT: fmv.x.w a0, fa05905; RV64ID-NEXT: sh a0, 0(s0)5906; RV64ID-NEXT: mv a0, s15907; RV64ID-NEXT: ld ra, 24(sp) # 8-byte Folded Reload5908; RV64ID-NEXT: ld s0, 16(sp) # 8-byte Folded Reload5909; RV64ID-NEXT: ld s1, 8(sp) # 8-byte Folded Reload5910; RV64ID-NEXT: addi sp, sp, 325911; RV64ID-NEXT: ret5912;5913; CHECK32-IZFHMIN-LABEL: fcvt_h_w_demanded_bits:5914; CHECK32-IZFHMIN: # %bb.0:5915; CHECK32-IZFHMIN-NEXT: addi a0, a0, 15916; CHECK32-IZFHMIN-NEXT: fcvt.s.w fa5, a05917; CHECK32-IZFHMIN-NEXT: fcvt.h.s fa5, fa55918; CHECK32-IZFHMIN-NEXT: fsh fa5, 0(a1)5919; CHECK32-IZFHMIN-NEXT: ret5920;5921; CHECK64-IZFHMIN-LABEL: fcvt_h_w_demanded_bits:5922; CHECK64-IZFHMIN: # %bb.0:5923; CHECK64-IZFHMIN-NEXT: addiw a0, a0, 15924; CHECK64-IZFHMIN-NEXT: fcvt.s.w fa5, a05925; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa5, fa55926; CHECK64-IZFHMIN-NEXT: fsh fa5, 0(a1)5927; CHECK64-IZFHMIN-NEXT: ret5928;5929; CHECK32-IZHINXMIN-LABEL: fcvt_h_w_demanded_bits:5930; CHECK32-IZHINXMIN: # %bb.0:5931; CHECK32-IZHINXMIN-NEXT: addi a0, a0, 15932; CHECK32-IZHINXMIN-NEXT: fcvt.s.w a2, a05933; CHECK32-IZHINXMIN-NEXT: fcvt.h.s a2, a25934; CHECK32-IZHINXMIN-NEXT: sh a2, 0(a1)5935; CHECK32-IZHINXMIN-NEXT: ret5936;5937; CHECK64-IZHINXMIN-LABEL: fcvt_h_w_demanded_bits:5938; CHECK64-IZHINXMIN: # %bb.0:5939; CHECK64-IZHINXMIN-NEXT: addiw a0, a0, 15940; CHECK64-IZHINXMIN-NEXT: fcvt.s.w a2, a05941; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a2, a25942; CHECK64-IZHINXMIN-NEXT: sh a2, 0(a1)5943; CHECK64-IZHINXMIN-NEXT: ret5944;5945; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_w_demanded_bits:5946; CHECK32-IZDINXZHINXMIN: # %bb.0:5947; CHECK32-IZDINXZHINXMIN-NEXT: addi a0, a0, 15948; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.w a2, a05949; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.h.s a2, a25950; CHECK32-IZDINXZHINXMIN-NEXT: sh a2, 0(a1)5951; CHECK32-IZDINXZHINXMIN-NEXT: ret5952;5953; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_w_demanded_bits:5954; CHECK64-IZDINXZHINXMIN: # %bb.0:5955; CHECK64-IZDINXZHINXMIN-NEXT: addiw a0, a0, 15956; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.w a2, a05957; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a2, a25958; CHECK64-IZDINXZHINXMIN-NEXT: sh a2, 0(a1)5959; CHECK64-IZDINXZHINXMIN-NEXT: ret5960 %3 = add i32 %0, 15961 %4 = sitofp i32 %3 to half5962 store half %4, ptr %1, align 25963 ret i32 %35964}5965 5966; Make sure we select W version of addi on RV64.5967define signext i32 @fcvt_h_wu_demanded_bits(i32 signext %0, ptr %1) nounwind {5968; RV32IZFH-LABEL: fcvt_h_wu_demanded_bits:5969; RV32IZFH: # %bb.0:5970; RV32IZFH-NEXT: addi a0, a0, 15971; RV32IZFH-NEXT: fcvt.h.wu fa5, a05972; RV32IZFH-NEXT: fsh fa5, 0(a1)5973; RV32IZFH-NEXT: ret5974;5975; RV64IZFH-LABEL: fcvt_h_wu_demanded_bits:5976; RV64IZFH: # %bb.0:5977; RV64IZFH-NEXT: addiw a0, a0, 15978; RV64IZFH-NEXT: fcvt.h.wu fa5, a05979; RV64IZFH-NEXT: fsh fa5, 0(a1)5980; RV64IZFH-NEXT: ret5981;5982; RV32IDZFH-LABEL: fcvt_h_wu_demanded_bits:5983; RV32IDZFH: # %bb.0:5984; RV32IDZFH-NEXT: addi a0, a0, 15985; RV32IDZFH-NEXT: fcvt.h.wu fa5, a05986; RV32IDZFH-NEXT: fsh fa5, 0(a1)5987; RV32IDZFH-NEXT: ret5988;5989; RV64IDZFH-LABEL: fcvt_h_wu_demanded_bits:5990; RV64IDZFH: # %bb.0:5991; RV64IDZFH-NEXT: addiw a0, a0, 15992; RV64IDZFH-NEXT: fcvt.h.wu fa5, a05993; RV64IDZFH-NEXT: fsh fa5, 0(a1)5994; RV64IDZFH-NEXT: ret5995;5996; RV32IZHINX-LABEL: fcvt_h_wu_demanded_bits:5997; RV32IZHINX: # %bb.0:5998; RV32IZHINX-NEXT: addi a0, a0, 15999; RV32IZHINX-NEXT: fcvt.h.wu a2, a06000; RV32IZHINX-NEXT: sh a2, 0(a1)6001; RV32IZHINX-NEXT: ret6002;6003; RV64IZHINX-LABEL: fcvt_h_wu_demanded_bits:6004; RV64IZHINX: # %bb.0:6005; RV64IZHINX-NEXT: addiw a0, a0, 16006; RV64IZHINX-NEXT: fcvt.h.wu a2, a06007; RV64IZHINX-NEXT: sh a2, 0(a1)6008; RV64IZHINX-NEXT: ret6009;6010; RV32IZDINXZHINX-LABEL: fcvt_h_wu_demanded_bits:6011; RV32IZDINXZHINX: # %bb.0:6012; RV32IZDINXZHINX-NEXT: addi a0, a0, 16013; RV32IZDINXZHINX-NEXT: fcvt.h.wu a2, a06014; RV32IZDINXZHINX-NEXT: sh a2, 0(a1)6015; RV32IZDINXZHINX-NEXT: ret6016;6017; RV64IZDINXZHINX-LABEL: fcvt_h_wu_demanded_bits:6018; RV64IZDINXZHINX: # %bb.0:6019; RV64IZDINXZHINX-NEXT: addiw a0, a0, 16020; RV64IZDINXZHINX-NEXT: fcvt.h.wu a2, a06021; RV64IZDINXZHINX-NEXT: sh a2, 0(a1)6022; RV64IZDINXZHINX-NEXT: ret6023;6024; RV32I-LABEL: fcvt_h_wu_demanded_bits:6025; RV32I: # %bb.0:6026; RV32I-NEXT: addi sp, sp, -166027; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill6028; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill6029; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill6030; RV32I-NEXT: mv s0, a16031; RV32I-NEXT: addi s1, a0, 16032; RV32I-NEXT: mv a0, s16033; RV32I-NEXT: call __floatunsisf6034; RV32I-NEXT: call __truncsfhf26035; RV32I-NEXT: sh a0, 0(s0)6036; RV32I-NEXT: mv a0, s16037; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload6038; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload6039; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload6040; RV32I-NEXT: addi sp, sp, 166041; RV32I-NEXT: ret6042;6043; RV64I-LABEL: fcvt_h_wu_demanded_bits:6044; RV64I: # %bb.0:6045; RV64I-NEXT: addi sp, sp, -326046; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill6047; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill6048; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill6049; RV64I-NEXT: mv s0, a16050; RV64I-NEXT: addiw s1, a0, 16051; RV64I-NEXT: mv a0, s16052; RV64I-NEXT: call __floatunsisf6053; RV64I-NEXT: call __truncsfhf26054; RV64I-NEXT: sh a0, 0(s0)6055; RV64I-NEXT: mv a0, s16056; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload6057; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload6058; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload6059; RV64I-NEXT: addi sp, sp, 326060; RV64I-NEXT: ret6061;6062; RV32ID-ILP32-LABEL: fcvt_h_wu_demanded_bits:6063; RV32ID-ILP32: # %bb.0:6064; RV32ID-ILP32-NEXT: addi sp, sp, -166065; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill6066; RV32ID-ILP32-NEXT: sw s0, 8(sp) # 4-byte Folded Spill6067; RV32ID-ILP32-NEXT: sw s1, 4(sp) # 4-byte Folded Spill6068; RV32ID-ILP32-NEXT: mv s0, a16069; RV32ID-ILP32-NEXT: addi s1, a0, 16070; RV32ID-ILP32-NEXT: fcvt.s.wu fa5, s16071; RV32ID-ILP32-NEXT: fmv.x.w a0, fa56072; RV32ID-ILP32-NEXT: call __truncsfhf26073; RV32ID-ILP32-NEXT: sh a0, 0(s0)6074; RV32ID-ILP32-NEXT: mv a0, s16075; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload6076; RV32ID-ILP32-NEXT: lw s0, 8(sp) # 4-byte Folded Reload6077; RV32ID-ILP32-NEXT: lw s1, 4(sp) # 4-byte Folded Reload6078; RV32ID-ILP32-NEXT: addi sp, sp, 166079; RV32ID-ILP32-NEXT: ret6080;6081; RV64ID-LP64-LABEL: fcvt_h_wu_demanded_bits:6082; RV64ID-LP64: # %bb.0:6083; RV64ID-LP64-NEXT: addi sp, sp, -326084; RV64ID-LP64-NEXT: sd ra, 24(sp) # 8-byte Folded Spill6085; RV64ID-LP64-NEXT: sd s0, 16(sp) # 8-byte Folded Spill6086; RV64ID-LP64-NEXT: sd s1, 8(sp) # 8-byte Folded Spill6087; RV64ID-LP64-NEXT: mv s0, a16088; RV64ID-LP64-NEXT: addiw s1, a0, 16089; RV64ID-LP64-NEXT: fcvt.s.wu fa5, s16090; RV64ID-LP64-NEXT: fmv.x.w a0, fa56091; RV64ID-LP64-NEXT: call __truncsfhf26092; RV64ID-LP64-NEXT: sh a0, 0(s0)6093; RV64ID-LP64-NEXT: mv a0, s16094; RV64ID-LP64-NEXT: ld ra, 24(sp) # 8-byte Folded Reload6095; RV64ID-LP64-NEXT: ld s0, 16(sp) # 8-byte Folded Reload6096; RV64ID-LP64-NEXT: ld s1, 8(sp) # 8-byte Folded Reload6097; RV64ID-LP64-NEXT: addi sp, sp, 326098; RV64ID-LP64-NEXT: ret6099;6100; RV32ID-LABEL: fcvt_h_wu_demanded_bits:6101; RV32ID: # %bb.0:6102; RV32ID-NEXT: addi sp, sp, -166103; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill6104; RV32ID-NEXT: sw s0, 8(sp) # 4-byte Folded Spill6105; RV32ID-NEXT: sw s1, 4(sp) # 4-byte Folded Spill6106; RV32ID-NEXT: mv s0, a16107; RV32ID-NEXT: addi s1, a0, 16108; RV32ID-NEXT: fcvt.s.wu fa0, s16109; RV32ID-NEXT: call __truncsfhf26110; RV32ID-NEXT: fmv.x.w a0, fa06111; RV32ID-NEXT: sh a0, 0(s0)6112; RV32ID-NEXT: mv a0, s16113; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload6114; RV32ID-NEXT: lw s0, 8(sp) # 4-byte Folded Reload6115; RV32ID-NEXT: lw s1, 4(sp) # 4-byte Folded Reload6116; RV32ID-NEXT: addi sp, sp, 166117; RV32ID-NEXT: ret6118;6119; RV64ID-LABEL: fcvt_h_wu_demanded_bits:6120; RV64ID: # %bb.0:6121; RV64ID-NEXT: addi sp, sp, -326122; RV64ID-NEXT: sd ra, 24(sp) # 8-byte Folded Spill6123; RV64ID-NEXT: sd s0, 16(sp) # 8-byte Folded Spill6124; RV64ID-NEXT: sd s1, 8(sp) # 8-byte Folded Spill6125; RV64ID-NEXT: mv s0, a16126; RV64ID-NEXT: addiw s1, a0, 16127; RV64ID-NEXT: fcvt.s.wu fa0, s16128; RV64ID-NEXT: call __truncsfhf26129; RV64ID-NEXT: fmv.x.w a0, fa06130; RV64ID-NEXT: sh a0, 0(s0)6131; RV64ID-NEXT: mv a0, s16132; RV64ID-NEXT: ld ra, 24(sp) # 8-byte Folded Reload6133; RV64ID-NEXT: ld s0, 16(sp) # 8-byte Folded Reload6134; RV64ID-NEXT: ld s1, 8(sp) # 8-byte Folded Reload6135; RV64ID-NEXT: addi sp, sp, 326136; RV64ID-NEXT: ret6137;6138; CHECK32-IZFHMIN-LABEL: fcvt_h_wu_demanded_bits:6139; CHECK32-IZFHMIN: # %bb.0:6140; CHECK32-IZFHMIN-NEXT: addi a0, a0, 16141; CHECK32-IZFHMIN-NEXT: fcvt.s.wu fa5, a06142; CHECK32-IZFHMIN-NEXT: fcvt.h.s fa5, fa56143; CHECK32-IZFHMIN-NEXT: fsh fa5, 0(a1)6144; CHECK32-IZFHMIN-NEXT: ret6145;6146; CHECK64-IZFHMIN-LABEL: fcvt_h_wu_demanded_bits:6147; CHECK64-IZFHMIN: # %bb.0:6148; CHECK64-IZFHMIN-NEXT: addiw a0, a0, 16149; CHECK64-IZFHMIN-NEXT: fcvt.s.wu fa5, a06150; CHECK64-IZFHMIN-NEXT: fcvt.h.s fa5, fa56151; CHECK64-IZFHMIN-NEXT: fsh fa5, 0(a1)6152; CHECK64-IZFHMIN-NEXT: ret6153;6154; CHECK32-IZHINXMIN-LABEL: fcvt_h_wu_demanded_bits:6155; CHECK32-IZHINXMIN: # %bb.0:6156; CHECK32-IZHINXMIN-NEXT: addi a0, a0, 16157; CHECK32-IZHINXMIN-NEXT: fcvt.s.wu a2, a06158; CHECK32-IZHINXMIN-NEXT: fcvt.h.s a2, a26159; CHECK32-IZHINXMIN-NEXT: sh a2, 0(a1)6160; CHECK32-IZHINXMIN-NEXT: ret6161;6162; CHECK64-IZHINXMIN-LABEL: fcvt_h_wu_demanded_bits:6163; CHECK64-IZHINXMIN: # %bb.0:6164; CHECK64-IZHINXMIN-NEXT: addiw a0, a0, 16165; CHECK64-IZHINXMIN-NEXT: fcvt.s.wu a2, a06166; CHECK64-IZHINXMIN-NEXT: fcvt.h.s a2, a26167; CHECK64-IZHINXMIN-NEXT: sh a2, 0(a1)6168; CHECK64-IZHINXMIN-NEXT: ret6169;6170; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_wu_demanded_bits:6171; CHECK32-IZDINXZHINXMIN: # %bb.0:6172; CHECK32-IZDINXZHINXMIN-NEXT: addi a0, a0, 16173; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.wu a2, a06174; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.h.s a2, a26175; CHECK32-IZDINXZHINXMIN-NEXT: sh a2, 0(a1)6176; CHECK32-IZDINXZHINXMIN-NEXT: ret6177;6178; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_wu_demanded_bits:6179; CHECK64-IZDINXZHINXMIN: # %bb.0:6180; CHECK64-IZDINXZHINXMIN-NEXT: addiw a0, a0, 16181; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.wu a2, a06182; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.h.s a2, a26183; CHECK64-IZDINXZHINXMIN-NEXT: sh a2, 0(a1)6184; CHECK64-IZDINXZHINXMIN-NEXT: ret6185 %3 = add i32 %0, 16186 %4 = uitofp i32 %3 to half6187 store half %4, ptr %1, align 26188 ret i32 %36189}6190 6191define signext i16 @fcvt_w_s_i16(half %a) nounwind {6192; RV32IZFH-LABEL: fcvt_w_s_i16:6193; RV32IZFH: # %bb.0:6194; RV32IZFH-NEXT: fcvt.w.h a0, fa0, rtz6195; RV32IZFH-NEXT: ret6196;6197; RV64IZFH-LABEL: fcvt_w_s_i16:6198; RV64IZFH: # %bb.0:6199; RV64IZFH-NEXT: fcvt.l.h a0, fa0, rtz6200; RV64IZFH-NEXT: ret6201;6202; RV32IDZFH-LABEL: fcvt_w_s_i16:6203; RV32IDZFH: # %bb.0:6204; RV32IDZFH-NEXT: fcvt.w.h a0, fa0, rtz6205; RV32IDZFH-NEXT: ret6206;6207; RV64IDZFH-LABEL: fcvt_w_s_i16:6208; RV64IDZFH: # %bb.0:6209; RV64IDZFH-NEXT: fcvt.l.h a0, fa0, rtz6210; RV64IDZFH-NEXT: ret6211;6212; RV32IZHINX-LABEL: fcvt_w_s_i16:6213; RV32IZHINX: # %bb.0:6214; RV32IZHINX-NEXT: fcvt.w.h a0, a0, rtz6215; RV32IZHINX-NEXT: ret6216;6217; RV64IZHINX-LABEL: fcvt_w_s_i16:6218; RV64IZHINX: # %bb.0:6219; RV64IZHINX-NEXT: fcvt.l.h a0, a0, rtz6220; RV64IZHINX-NEXT: ret6221;6222; RV32IZDINXZHINX-LABEL: fcvt_w_s_i16:6223; RV32IZDINXZHINX: # %bb.0:6224; RV32IZDINXZHINX-NEXT: fcvt.w.h a0, a0, rtz6225; RV32IZDINXZHINX-NEXT: ret6226;6227; RV64IZDINXZHINX-LABEL: fcvt_w_s_i16:6228; RV64IZDINXZHINX: # %bb.0:6229; RV64IZDINXZHINX-NEXT: fcvt.l.h a0, a0, rtz6230; RV64IZDINXZHINX-NEXT: ret6231;6232; RV32I-LABEL: fcvt_w_s_i16:6233; RV32I: # %bb.0:6234; RV32I-NEXT: addi sp, sp, -166235; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill6236; RV32I-NEXT: slli a0, a0, 166237; RV32I-NEXT: srli a0, a0, 166238; RV32I-NEXT: call __extendhfsf26239; RV32I-NEXT: call __fixsfsi6240; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload6241; RV32I-NEXT: addi sp, sp, 166242; RV32I-NEXT: ret6243;6244; RV64I-LABEL: fcvt_w_s_i16:6245; RV64I: # %bb.0:6246; RV64I-NEXT: addi sp, sp, -166247; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill6248; RV64I-NEXT: slli a0, a0, 486249; RV64I-NEXT: srli a0, a0, 486250; RV64I-NEXT: call __extendhfsf26251; RV64I-NEXT: call __fixsfdi6252; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload6253; RV64I-NEXT: addi sp, sp, 166254; RV64I-NEXT: ret6255;6256; RV32ID-ILP32-LABEL: fcvt_w_s_i16:6257; RV32ID-ILP32: # %bb.0:6258; RV32ID-ILP32-NEXT: addi sp, sp, -166259; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill6260; RV32ID-ILP32-NEXT: call __extendhfsf26261; RV32ID-ILP32-NEXT: fmv.w.x fa5, a06262; RV32ID-ILP32-NEXT: fcvt.w.s a0, fa5, rtz6263; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload6264; RV32ID-ILP32-NEXT: addi sp, sp, 166265; RV32ID-ILP32-NEXT: ret6266;6267; RV64ID-LP64-LABEL: fcvt_w_s_i16:6268; RV64ID-LP64: # %bb.0:6269; RV64ID-LP64-NEXT: addi sp, sp, -166270; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill6271; RV64ID-LP64-NEXT: call __extendhfsf26272; RV64ID-LP64-NEXT: fmv.w.x fa5, a06273; RV64ID-LP64-NEXT: fcvt.l.s a0, fa5, rtz6274; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload6275; RV64ID-LP64-NEXT: addi sp, sp, 166276; RV64ID-LP64-NEXT: ret6277;6278; RV32ID-LABEL: fcvt_w_s_i16:6279; RV32ID: # %bb.0:6280; RV32ID-NEXT: addi sp, sp, -166281; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill6282; RV32ID-NEXT: call __extendhfsf26283; RV32ID-NEXT: fcvt.w.s a0, fa0, rtz6284; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload6285; RV32ID-NEXT: addi sp, sp, 166286; RV32ID-NEXT: ret6287;6288; RV64ID-LABEL: fcvt_w_s_i16:6289; RV64ID: # %bb.0:6290; RV64ID-NEXT: addi sp, sp, -166291; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill6292; RV64ID-NEXT: call __extendhfsf26293; RV64ID-NEXT: fcvt.l.s a0, fa0, rtz6294; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload6295; RV64ID-NEXT: addi sp, sp, 166296; RV64ID-NEXT: ret6297;6298; CHECK32-IZFHMIN-LABEL: fcvt_w_s_i16:6299; CHECK32-IZFHMIN: # %bb.0:6300; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa06301; CHECK32-IZFHMIN-NEXT: fcvt.w.s a0, fa5, rtz6302; CHECK32-IZFHMIN-NEXT: ret6303;6304; CHECK64-IZFHMIN-LABEL: fcvt_w_s_i16:6305; CHECK64-IZFHMIN: # %bb.0:6306; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa06307; CHECK64-IZFHMIN-NEXT: fcvt.l.s a0, fa5, rtz6308; CHECK64-IZFHMIN-NEXT: ret6309;6310; CHECK32-IZHINXMIN-LABEL: fcvt_w_s_i16:6311; CHECK32-IZHINXMIN: # %bb.0:6312; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a06313; CHECK32-IZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz6314; CHECK32-IZHINXMIN-NEXT: ret6315;6316; CHECK64-IZHINXMIN-LABEL: fcvt_w_s_i16:6317; CHECK64-IZHINXMIN: # %bb.0:6318; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a06319; CHECK64-IZHINXMIN-NEXT: fcvt.l.s a0, a0, rtz6320; CHECK64-IZHINXMIN-NEXT: ret6321;6322; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_w_s_i16:6323; CHECK32-IZDINXZHINXMIN: # %bb.0:6324; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a06325; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz6326; CHECK32-IZDINXZHINXMIN-NEXT: ret6327;6328; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_w_s_i16:6329; CHECK64-IZDINXZHINXMIN: # %bb.0:6330; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a06331; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.l.s a0, a0, rtz6332; CHECK64-IZDINXZHINXMIN-NEXT: ret6333 %1 = fptosi half %a to i166334 ret i16 %16335}6336 6337define signext i16 @fcvt_w_s_sat_i16(half %a) nounwind {6338; RV32IZFH-LABEL: fcvt_w_s_sat_i16:6339; RV32IZFH: # %bb.0: # %start6340; RV32IZFH-NEXT: fcvt.s.h fa5, fa06341; RV32IZFH-NEXT: lui a0, 8151046342; RV32IZFH-NEXT: lui a1, 2908166343; RV32IZFH-NEXT: fmv.w.x fa4, a06344; RV32IZFH-NEXT: feq.s a0, fa5, fa56345; RV32IZFH-NEXT: addi a1, a1, -5126346; RV32IZFH-NEXT: neg a0, a06347; RV32IZFH-NEXT: fmax.s fa5, fa5, fa46348; RV32IZFH-NEXT: fmv.w.x fa4, a16349; RV32IZFH-NEXT: fmin.s fa5, fa5, fa46350; RV32IZFH-NEXT: fcvt.w.s a1, fa5, rtz6351; RV32IZFH-NEXT: and a0, a0, a16352; RV32IZFH-NEXT: ret6353;6354; RV64IZFH-LABEL: fcvt_w_s_sat_i16:6355; RV64IZFH: # %bb.0: # %start6356; RV64IZFH-NEXT: fcvt.s.h fa5, fa06357; RV64IZFH-NEXT: lui a0, 8151046358; RV64IZFH-NEXT: lui a1, 2908166359; RV64IZFH-NEXT: fmv.w.x fa4, a06360; RV64IZFH-NEXT: feq.s a0, fa5, fa56361; RV64IZFH-NEXT: addi a1, a1, -5126362; RV64IZFH-NEXT: neg a0, a06363; RV64IZFH-NEXT: fmax.s fa5, fa5, fa46364; RV64IZFH-NEXT: fmv.w.x fa4, a16365; RV64IZFH-NEXT: fmin.s fa5, fa5, fa46366; RV64IZFH-NEXT: fcvt.l.s a1, fa5, rtz6367; RV64IZFH-NEXT: and a0, a0, a16368; RV64IZFH-NEXT: ret6369;6370; RV32IDZFH-LABEL: fcvt_w_s_sat_i16:6371; RV32IDZFH: # %bb.0: # %start6372; RV32IDZFH-NEXT: fcvt.s.h fa5, fa06373; RV32IDZFH-NEXT: lui a0, 8151046374; RV32IDZFH-NEXT: lui a1, 2908166375; RV32IDZFH-NEXT: fmv.w.x fa4, a06376; RV32IDZFH-NEXT: feq.s a0, fa5, fa56377; RV32IDZFH-NEXT: addi a1, a1, -5126378; RV32IDZFH-NEXT: neg a0, a06379; RV32IDZFH-NEXT: fmax.s fa5, fa5, fa46380; RV32IDZFH-NEXT: fmv.w.x fa4, a16381; RV32IDZFH-NEXT: fmin.s fa5, fa5, fa46382; RV32IDZFH-NEXT: fcvt.w.s a1, fa5, rtz6383; RV32IDZFH-NEXT: and a0, a0, a16384; RV32IDZFH-NEXT: ret6385;6386; RV64IDZFH-LABEL: fcvt_w_s_sat_i16:6387; RV64IDZFH: # %bb.0: # %start6388; RV64IDZFH-NEXT: fcvt.s.h fa5, fa06389; RV64IDZFH-NEXT: lui a0, 8151046390; RV64IDZFH-NEXT: lui a1, 2908166391; RV64IDZFH-NEXT: fmv.w.x fa4, a06392; RV64IDZFH-NEXT: feq.s a0, fa5, fa56393; RV64IDZFH-NEXT: addi a1, a1, -5126394; RV64IDZFH-NEXT: neg a0, a06395; RV64IDZFH-NEXT: fmax.s fa5, fa5, fa46396; RV64IDZFH-NEXT: fmv.w.x fa4, a16397; RV64IDZFH-NEXT: fmin.s fa5, fa5, fa46398; RV64IDZFH-NEXT: fcvt.l.s a1, fa5, rtz6399; RV64IDZFH-NEXT: and a0, a0, a16400; RV64IDZFH-NEXT: ret6401;6402; RV32IZHINX-LABEL: fcvt_w_s_sat_i16:6403; RV32IZHINX: # %bb.0: # %start6404; RV32IZHINX-NEXT: fcvt.s.h a0, a06405; RV32IZHINX-NEXT: lui a1, 8151046406; RV32IZHINX-NEXT: lui a2, 2908166407; RV32IZHINX-NEXT: fmax.s a1, a0, a16408; RV32IZHINX-NEXT: feq.s a0, a0, a06409; RV32IZHINX-NEXT: addi a2, a2, -5126410; RV32IZHINX-NEXT: neg a0, a06411; RV32IZHINX-NEXT: fmin.s a1, a1, a26412; RV32IZHINX-NEXT: fcvt.w.s a1, a1, rtz6413; RV32IZHINX-NEXT: and a0, a0, a16414; RV32IZHINX-NEXT: ret6415;6416; RV64IZHINX-LABEL: fcvt_w_s_sat_i16:6417; RV64IZHINX: # %bb.0: # %start6418; RV64IZHINX-NEXT: fcvt.s.h a0, a06419; RV64IZHINX-NEXT: lui a1, 8151046420; RV64IZHINX-NEXT: lui a2, 2908166421; RV64IZHINX-NEXT: fmax.s a1, a0, a16422; RV64IZHINX-NEXT: feq.s a0, a0, a06423; RV64IZHINX-NEXT: addi a2, a2, -5126424; RV64IZHINX-NEXT: neg a0, a06425; RV64IZHINX-NEXT: fmin.s a1, a1, a26426; RV64IZHINX-NEXT: fcvt.l.s a1, a1, rtz6427; RV64IZHINX-NEXT: and a0, a0, a16428; RV64IZHINX-NEXT: ret6429;6430; RV32IZDINXZHINX-LABEL: fcvt_w_s_sat_i16:6431; RV32IZDINXZHINX: # %bb.0: # %start6432; RV32IZDINXZHINX-NEXT: fcvt.s.h a0, a06433; RV32IZDINXZHINX-NEXT: lui a1, 8151046434; RV32IZDINXZHINX-NEXT: lui a2, 2908166435; RV32IZDINXZHINX-NEXT: fmax.s a1, a0, a16436; RV32IZDINXZHINX-NEXT: feq.s a0, a0, a06437; RV32IZDINXZHINX-NEXT: addi a2, a2, -5126438; RV32IZDINXZHINX-NEXT: neg a0, a06439; RV32IZDINXZHINX-NEXT: fmin.s a1, a1, a26440; RV32IZDINXZHINX-NEXT: fcvt.w.s a1, a1, rtz6441; RV32IZDINXZHINX-NEXT: and a0, a0, a16442; RV32IZDINXZHINX-NEXT: ret6443;6444; RV64IZDINXZHINX-LABEL: fcvt_w_s_sat_i16:6445; RV64IZDINXZHINX: # %bb.0: # %start6446; RV64IZDINXZHINX-NEXT: fcvt.s.h a0, a06447; RV64IZDINXZHINX-NEXT: lui a1, 8151046448; RV64IZDINXZHINX-NEXT: lui a2, 2908166449; RV64IZDINXZHINX-NEXT: fmax.s a1, a0, a16450; RV64IZDINXZHINX-NEXT: feq.s a0, a0, a06451; RV64IZDINXZHINX-NEXT: addi a2, a2, -5126452; RV64IZDINXZHINX-NEXT: neg a0, a06453; RV64IZDINXZHINX-NEXT: fmin.s a1, a1, a26454; RV64IZDINXZHINX-NEXT: fcvt.l.s a1, a1, rtz6455; RV64IZDINXZHINX-NEXT: and a0, a0, a16456; RV64IZDINXZHINX-NEXT: ret6457;6458; RV32I-LABEL: fcvt_w_s_sat_i16:6459; RV32I: # %bb.0: # %start6460; RV32I-NEXT: addi sp, sp, -166461; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill6462; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill6463; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill6464; RV32I-NEXT: sw s2, 0(sp) # 4-byte Folded Spill6465; RV32I-NEXT: slli a0, a0, 166466; RV32I-NEXT: srli a0, a0, 166467; RV32I-NEXT: call __extendhfsf26468; RV32I-NEXT: mv s0, a06469; RV32I-NEXT: lui a1, 8151046470; RV32I-NEXT: call __gesf26471; RV32I-NEXT: mv s2, a06472; RV32I-NEXT: mv a0, s06473; RV32I-NEXT: call __fixsfsi6474; RV32I-NEXT: mv s1, a06475; RV32I-NEXT: bgez s2, .LBB32_26476; RV32I-NEXT: # %bb.1: # %start6477; RV32I-NEXT: lui s1, 10485686478; RV32I-NEXT: .LBB32_2: # %start6479; RV32I-NEXT: lui a1, 2908166480; RV32I-NEXT: addi a1, a1, -5126481; RV32I-NEXT: mv a0, s06482; RV32I-NEXT: call __gtsf26483; RV32I-NEXT: blez a0, .LBB32_46484; RV32I-NEXT: # %bb.3: # %start6485; RV32I-NEXT: lui s1, 86486; RV32I-NEXT: addi s1, s1, -16487; RV32I-NEXT: .LBB32_4: # %start6488; RV32I-NEXT: mv a0, s06489; RV32I-NEXT: mv a1, s06490; RV32I-NEXT: call __unordsf26491; RV32I-NEXT: snez a0, a06492; RV32I-NEXT: addi a0, a0, -16493; RV32I-NEXT: and a0, a0, s16494; RV32I-NEXT: slli a0, a0, 166495; RV32I-NEXT: srai a0, a0, 166496; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload6497; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload6498; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload6499; RV32I-NEXT: lw s2, 0(sp) # 4-byte Folded Reload6500; RV32I-NEXT: addi sp, sp, 166501; RV32I-NEXT: ret6502;6503; RV64I-LABEL: fcvt_w_s_sat_i16:6504; RV64I: # %bb.0: # %start6505; RV64I-NEXT: addi sp, sp, -326506; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill6507; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill6508; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill6509; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill6510; RV64I-NEXT: slli a0, a0, 486511; RV64I-NEXT: srli a0, a0, 486512; RV64I-NEXT: call __extendhfsf26513; RV64I-NEXT: mv s0, a06514; RV64I-NEXT: lui a1, 8151046515; RV64I-NEXT: call __gesf26516; RV64I-NEXT: mv s2, a06517; RV64I-NEXT: mv a0, s06518; RV64I-NEXT: call __fixsfdi6519; RV64I-NEXT: mv s1, a06520; RV64I-NEXT: bgez s2, .LBB32_26521; RV64I-NEXT: # %bb.1: # %start6522; RV64I-NEXT: lui s1, 10485686523; RV64I-NEXT: .LBB32_2: # %start6524; RV64I-NEXT: lui a1, 2908166525; RV64I-NEXT: addi a1, a1, -5126526; RV64I-NEXT: mv a0, s06527; RV64I-NEXT: call __gtsf26528; RV64I-NEXT: blez a0, .LBB32_46529; RV64I-NEXT: # %bb.3: # %start6530; RV64I-NEXT: lui s1, 86531; RV64I-NEXT: addi s1, s1, -16532; RV64I-NEXT: .LBB32_4: # %start6533; RV64I-NEXT: mv a0, s06534; RV64I-NEXT: mv a1, s06535; RV64I-NEXT: call __unordsf26536; RV64I-NEXT: snez a0, a06537; RV64I-NEXT: addi a0, a0, -16538; RV64I-NEXT: and a0, a0, s16539; RV64I-NEXT: slli a0, a0, 486540; RV64I-NEXT: srai a0, a0, 486541; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload6542; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload6543; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload6544; RV64I-NEXT: ld s2, 0(sp) # 8-byte Folded Reload6545; RV64I-NEXT: addi sp, sp, 326546; RV64I-NEXT: ret6547;6548; RV32ID-ILP32-LABEL: fcvt_w_s_sat_i16:6549; RV32ID-ILP32: # %bb.0: # %start6550; RV32ID-ILP32-NEXT: addi sp, sp, -166551; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill6552; RV32ID-ILP32-NEXT: call __extendhfsf26553; RV32ID-ILP32-NEXT: fmv.w.x fa5, a06554; RV32ID-ILP32-NEXT: lui a0, 8151046555; RV32ID-ILP32-NEXT: lui a1, 2908166556; RV32ID-ILP32-NEXT: fmv.w.x fa4, a06557; RV32ID-ILP32-NEXT: feq.s a0, fa5, fa56558; RV32ID-ILP32-NEXT: addi a1, a1, -5126559; RV32ID-ILP32-NEXT: neg a0, a06560; RV32ID-ILP32-NEXT: fmax.s fa5, fa5, fa46561; RV32ID-ILP32-NEXT: fmv.w.x fa4, a16562; RV32ID-ILP32-NEXT: fmin.s fa5, fa5, fa46563; RV32ID-ILP32-NEXT: fcvt.w.s a1, fa5, rtz6564; RV32ID-ILP32-NEXT: and a0, a0, a16565; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload6566; RV32ID-ILP32-NEXT: addi sp, sp, 166567; RV32ID-ILP32-NEXT: ret6568;6569; RV64ID-LP64-LABEL: fcvt_w_s_sat_i16:6570; RV64ID-LP64: # %bb.0: # %start6571; RV64ID-LP64-NEXT: addi sp, sp, -166572; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill6573; RV64ID-LP64-NEXT: call __extendhfsf26574; RV64ID-LP64-NEXT: fmv.w.x fa5, a06575; RV64ID-LP64-NEXT: lui a0, 8151046576; RV64ID-LP64-NEXT: lui a1, 2908166577; RV64ID-LP64-NEXT: fmv.w.x fa4, a06578; RV64ID-LP64-NEXT: feq.s a0, fa5, fa56579; RV64ID-LP64-NEXT: addi a1, a1, -5126580; RV64ID-LP64-NEXT: neg a0, a06581; RV64ID-LP64-NEXT: fmax.s fa5, fa5, fa46582; RV64ID-LP64-NEXT: fmv.w.x fa4, a16583; RV64ID-LP64-NEXT: fmin.s fa5, fa5, fa46584; RV64ID-LP64-NEXT: fcvt.l.s a1, fa5, rtz6585; RV64ID-LP64-NEXT: and a0, a0, a16586; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload6587; RV64ID-LP64-NEXT: addi sp, sp, 166588; RV64ID-LP64-NEXT: ret6589;6590; RV32ID-LABEL: fcvt_w_s_sat_i16:6591; RV32ID: # %bb.0: # %start6592; RV32ID-NEXT: addi sp, sp, -166593; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill6594; RV32ID-NEXT: call __extendhfsf26595; RV32ID-NEXT: feq.s a0, fa0, fa06596; RV32ID-NEXT: lui a1, 8151046597; RV32ID-NEXT: fmv.w.x fa5, a16598; RV32ID-NEXT: lui a1, 2908166599; RV32ID-NEXT: neg a0, a06600; RV32ID-NEXT: addi a1, a1, -5126601; RV32ID-NEXT: fmax.s fa5, fa0, fa56602; RV32ID-NEXT: fmv.w.x fa4, a16603; RV32ID-NEXT: fmin.s fa5, fa5, fa46604; RV32ID-NEXT: fcvt.w.s a1, fa5, rtz6605; RV32ID-NEXT: and a0, a0, a16606; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload6607; RV32ID-NEXT: addi sp, sp, 166608; RV32ID-NEXT: ret6609;6610; RV64ID-LABEL: fcvt_w_s_sat_i16:6611; RV64ID: # %bb.0: # %start6612; RV64ID-NEXT: addi sp, sp, -166613; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill6614; RV64ID-NEXT: call __extendhfsf26615; RV64ID-NEXT: feq.s a0, fa0, fa06616; RV64ID-NEXT: lui a1, 8151046617; RV64ID-NEXT: fmv.w.x fa5, a16618; RV64ID-NEXT: lui a1, 2908166619; RV64ID-NEXT: neg a0, a06620; RV64ID-NEXT: addi a1, a1, -5126621; RV64ID-NEXT: fmax.s fa5, fa0, fa56622; RV64ID-NEXT: fmv.w.x fa4, a16623; RV64ID-NEXT: fmin.s fa5, fa5, fa46624; RV64ID-NEXT: fcvt.l.s a1, fa5, rtz6625; RV64ID-NEXT: and a0, a0, a16626; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload6627; RV64ID-NEXT: addi sp, sp, 166628; RV64ID-NEXT: ret6629;6630; CHECK32-IZFHMIN-LABEL: fcvt_w_s_sat_i16:6631; CHECK32-IZFHMIN: # %bb.0: # %start6632; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa06633; CHECK32-IZFHMIN-NEXT: lui a0, 8151046634; CHECK32-IZFHMIN-NEXT: lui a1, 2908166635; CHECK32-IZFHMIN-NEXT: fmv.w.x fa4, a06636; CHECK32-IZFHMIN-NEXT: feq.s a0, fa5, fa56637; CHECK32-IZFHMIN-NEXT: addi a1, a1, -5126638; CHECK32-IZFHMIN-NEXT: neg a0, a06639; CHECK32-IZFHMIN-NEXT: fmax.s fa5, fa5, fa46640; CHECK32-IZFHMIN-NEXT: fmv.w.x fa4, a16641; CHECK32-IZFHMIN-NEXT: fmin.s fa5, fa5, fa46642; CHECK32-IZFHMIN-NEXT: fcvt.w.s a1, fa5, rtz6643; CHECK32-IZFHMIN-NEXT: and a0, a0, a16644; CHECK32-IZFHMIN-NEXT: ret6645;6646; CHECK64-IZFHMIN-LABEL: fcvt_w_s_sat_i16:6647; CHECK64-IZFHMIN: # %bb.0: # %start6648; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa06649; CHECK64-IZFHMIN-NEXT: lui a0, 8151046650; CHECK64-IZFHMIN-NEXT: lui a1, 2908166651; CHECK64-IZFHMIN-NEXT: fmv.w.x fa4, a06652; CHECK64-IZFHMIN-NEXT: feq.s a0, fa5, fa56653; CHECK64-IZFHMIN-NEXT: addi a1, a1, -5126654; CHECK64-IZFHMIN-NEXT: neg a0, a06655; CHECK64-IZFHMIN-NEXT: fmax.s fa5, fa5, fa46656; CHECK64-IZFHMIN-NEXT: fmv.w.x fa4, a16657; CHECK64-IZFHMIN-NEXT: fmin.s fa5, fa5, fa46658; CHECK64-IZFHMIN-NEXT: fcvt.l.s a1, fa5, rtz6659; CHECK64-IZFHMIN-NEXT: and a0, a0, a16660; CHECK64-IZFHMIN-NEXT: ret6661;6662; CHECK32-IZHINXMIN-LABEL: fcvt_w_s_sat_i16:6663; CHECK32-IZHINXMIN: # %bb.0: # %start6664; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a06665; CHECK32-IZHINXMIN-NEXT: lui a1, 8151046666; CHECK32-IZHINXMIN-NEXT: lui a2, 2908166667; CHECK32-IZHINXMIN-NEXT: fmax.s a1, a0, a16668; CHECK32-IZHINXMIN-NEXT: feq.s a0, a0, a06669; CHECK32-IZHINXMIN-NEXT: addi a2, a2, -5126670; CHECK32-IZHINXMIN-NEXT: neg a0, a06671; CHECK32-IZHINXMIN-NEXT: fmin.s a1, a1, a26672; CHECK32-IZHINXMIN-NEXT: fcvt.w.s a1, a1, rtz6673; CHECK32-IZHINXMIN-NEXT: and a0, a0, a16674; CHECK32-IZHINXMIN-NEXT: ret6675;6676; CHECK64-IZHINXMIN-LABEL: fcvt_w_s_sat_i16:6677; CHECK64-IZHINXMIN: # %bb.0: # %start6678; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a06679; CHECK64-IZHINXMIN-NEXT: lui a1, 8151046680; CHECK64-IZHINXMIN-NEXT: lui a2, 2908166681; CHECK64-IZHINXMIN-NEXT: fmax.s a1, a0, a16682; CHECK64-IZHINXMIN-NEXT: feq.s a0, a0, a06683; CHECK64-IZHINXMIN-NEXT: addi a2, a2, -5126684; CHECK64-IZHINXMIN-NEXT: neg a0, a06685; CHECK64-IZHINXMIN-NEXT: fmin.s a1, a1, a26686; CHECK64-IZHINXMIN-NEXT: fcvt.l.s a1, a1, rtz6687; CHECK64-IZHINXMIN-NEXT: and a0, a0, a16688; CHECK64-IZHINXMIN-NEXT: ret6689;6690; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_w_s_sat_i16:6691; CHECK32-IZDINXZHINXMIN: # %bb.0: # %start6692; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a06693; CHECK32-IZDINXZHINXMIN-NEXT: lui a1, 8151046694; CHECK32-IZDINXZHINXMIN-NEXT: lui a2, 2908166695; CHECK32-IZDINXZHINXMIN-NEXT: fmax.s a1, a0, a16696; CHECK32-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a06697; CHECK32-IZDINXZHINXMIN-NEXT: addi a2, a2, -5126698; CHECK32-IZDINXZHINXMIN-NEXT: neg a0, a06699; CHECK32-IZDINXZHINXMIN-NEXT: fmin.s a1, a1, a26700; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.w.s a1, a1, rtz6701; CHECK32-IZDINXZHINXMIN-NEXT: and a0, a0, a16702; CHECK32-IZDINXZHINXMIN-NEXT: ret6703;6704; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_w_s_sat_i16:6705; CHECK64-IZDINXZHINXMIN: # %bb.0: # %start6706; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a06707; CHECK64-IZDINXZHINXMIN-NEXT: lui a1, 8151046708; CHECK64-IZDINXZHINXMIN-NEXT: lui a2, 2908166709; CHECK64-IZDINXZHINXMIN-NEXT: fmax.s a1, a0, a16710; CHECK64-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a06711; CHECK64-IZDINXZHINXMIN-NEXT: addi a2, a2, -5126712; CHECK64-IZDINXZHINXMIN-NEXT: neg a0, a06713; CHECK64-IZDINXZHINXMIN-NEXT: fmin.s a1, a1, a26714; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.l.s a1, a1, rtz6715; CHECK64-IZDINXZHINXMIN-NEXT: and a0, a0, a16716; CHECK64-IZDINXZHINXMIN-NEXT: ret6717start:6718 %0 = tail call i16 @llvm.fptosi.sat.i16.f16(half %a)6719 ret i16 %06720}6721 6722define zeroext i16 @fcvt_wu_s_i16(half %a) nounwind {6723; RV32IZFH-LABEL: fcvt_wu_s_i16:6724; RV32IZFH: # %bb.0:6725; RV32IZFH-NEXT: fcvt.wu.h a0, fa0, rtz6726; RV32IZFH-NEXT: ret6727;6728; RV64IZFH-LABEL: fcvt_wu_s_i16:6729; RV64IZFH: # %bb.0:6730; RV64IZFH-NEXT: fcvt.lu.h a0, fa0, rtz6731; RV64IZFH-NEXT: ret6732;6733; RV32IDZFH-LABEL: fcvt_wu_s_i16:6734; RV32IDZFH: # %bb.0:6735; RV32IDZFH-NEXT: fcvt.wu.h a0, fa0, rtz6736; RV32IDZFH-NEXT: ret6737;6738; RV64IDZFH-LABEL: fcvt_wu_s_i16:6739; RV64IDZFH: # %bb.0:6740; RV64IDZFH-NEXT: fcvt.lu.h a0, fa0, rtz6741; RV64IDZFH-NEXT: ret6742;6743; RV32IZHINX-LABEL: fcvt_wu_s_i16:6744; RV32IZHINX: # %bb.0:6745; RV32IZHINX-NEXT: fcvt.wu.h a0, a0, rtz6746; RV32IZHINX-NEXT: ret6747;6748; RV64IZHINX-LABEL: fcvt_wu_s_i16:6749; RV64IZHINX: # %bb.0:6750; RV64IZHINX-NEXT: fcvt.lu.h a0, a0, rtz6751; RV64IZHINX-NEXT: ret6752;6753; RV32IZDINXZHINX-LABEL: fcvt_wu_s_i16:6754; RV32IZDINXZHINX: # %bb.0:6755; RV32IZDINXZHINX-NEXT: fcvt.wu.h a0, a0, rtz6756; RV32IZDINXZHINX-NEXT: ret6757;6758; RV64IZDINXZHINX-LABEL: fcvt_wu_s_i16:6759; RV64IZDINXZHINX: # %bb.0:6760; RV64IZDINXZHINX-NEXT: fcvt.lu.h a0, a0, rtz6761; RV64IZDINXZHINX-NEXT: ret6762;6763; RV32I-LABEL: fcvt_wu_s_i16:6764; RV32I: # %bb.0:6765; RV32I-NEXT: addi sp, sp, -166766; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill6767; RV32I-NEXT: slli a0, a0, 166768; RV32I-NEXT: srli a0, a0, 166769; RV32I-NEXT: call __extendhfsf26770; RV32I-NEXT: call __fixunssfsi6771; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload6772; RV32I-NEXT: addi sp, sp, 166773; RV32I-NEXT: ret6774;6775; RV64I-LABEL: fcvt_wu_s_i16:6776; RV64I: # %bb.0:6777; RV64I-NEXT: addi sp, sp, -166778; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill6779; RV64I-NEXT: slli a0, a0, 486780; RV64I-NEXT: srli a0, a0, 486781; RV64I-NEXT: call __extendhfsf26782; RV64I-NEXT: call __fixunssfdi6783; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload6784; RV64I-NEXT: addi sp, sp, 166785; RV64I-NEXT: ret6786;6787; RV32ID-ILP32-LABEL: fcvt_wu_s_i16:6788; RV32ID-ILP32: # %bb.0:6789; RV32ID-ILP32-NEXT: addi sp, sp, -166790; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill6791; RV32ID-ILP32-NEXT: call __extendhfsf26792; RV32ID-ILP32-NEXT: fmv.w.x fa5, a06793; RV32ID-ILP32-NEXT: fcvt.wu.s a0, fa5, rtz6794; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload6795; RV32ID-ILP32-NEXT: addi sp, sp, 166796; RV32ID-ILP32-NEXT: ret6797;6798; RV64ID-LP64-LABEL: fcvt_wu_s_i16:6799; RV64ID-LP64: # %bb.0:6800; RV64ID-LP64-NEXT: addi sp, sp, -166801; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill6802; RV64ID-LP64-NEXT: call __extendhfsf26803; RV64ID-LP64-NEXT: fmv.w.x fa5, a06804; RV64ID-LP64-NEXT: fcvt.lu.s a0, fa5, rtz6805; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload6806; RV64ID-LP64-NEXT: addi sp, sp, 166807; RV64ID-LP64-NEXT: ret6808;6809; RV32ID-LABEL: fcvt_wu_s_i16:6810; RV32ID: # %bb.0:6811; RV32ID-NEXT: addi sp, sp, -166812; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill6813; RV32ID-NEXT: call __extendhfsf26814; RV32ID-NEXT: fcvt.wu.s a0, fa0, rtz6815; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload6816; RV32ID-NEXT: addi sp, sp, 166817; RV32ID-NEXT: ret6818;6819; RV64ID-LABEL: fcvt_wu_s_i16:6820; RV64ID: # %bb.0:6821; RV64ID-NEXT: addi sp, sp, -166822; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill6823; RV64ID-NEXT: call __extendhfsf26824; RV64ID-NEXT: fcvt.lu.s a0, fa0, rtz6825; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload6826; RV64ID-NEXT: addi sp, sp, 166827; RV64ID-NEXT: ret6828;6829; CHECK32-IZFHMIN-LABEL: fcvt_wu_s_i16:6830; CHECK32-IZFHMIN: # %bb.0:6831; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa06832; CHECK32-IZFHMIN-NEXT: fcvt.w.s a0, fa5, rtz6833; CHECK32-IZFHMIN-NEXT: ret6834;6835; CHECK64-IZFHMIN-LABEL: fcvt_wu_s_i16:6836; CHECK64-IZFHMIN: # %bb.0:6837; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa06838; CHECK64-IZFHMIN-NEXT: fcvt.lu.s a0, fa5, rtz6839; CHECK64-IZFHMIN-NEXT: ret6840;6841; CHECK32-IZHINXMIN-LABEL: fcvt_wu_s_i16:6842; CHECK32-IZHINXMIN: # %bb.0:6843; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a06844; CHECK32-IZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz6845; CHECK32-IZHINXMIN-NEXT: ret6846;6847; CHECK64-IZHINXMIN-LABEL: fcvt_wu_s_i16:6848; CHECK64-IZHINXMIN: # %bb.0:6849; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a06850; CHECK64-IZHINXMIN-NEXT: fcvt.lu.s a0, a0, rtz6851; CHECK64-IZHINXMIN-NEXT: ret6852;6853; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_wu_s_i16:6854; CHECK32-IZDINXZHINXMIN: # %bb.0:6855; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a06856; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz6857; CHECK32-IZDINXZHINXMIN-NEXT: ret6858;6859; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_wu_s_i16:6860; CHECK64-IZDINXZHINXMIN: # %bb.0:6861; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a06862; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.lu.s a0, a0, rtz6863; CHECK64-IZDINXZHINXMIN-NEXT: ret6864 %1 = fptoui half %a to i166865 ret i16 %16866}6867 6868define zeroext i16 @fcvt_wu_s_sat_i16(half %a) nounwind {6869; RV32IZFH-LABEL: fcvt_wu_s_sat_i16:6870; RV32IZFH: # %bb.0: # %start6871; RV32IZFH-NEXT: fcvt.s.h fa5, fa06872; RV32IZFH-NEXT: fmv.w.x fa4, zero6873; RV32IZFH-NEXT: lui a0, 2928646874; RV32IZFH-NEXT: fmax.s fa5, fa5, fa46875; RV32IZFH-NEXT: addi a0, a0, -2566876; RV32IZFH-NEXT: fmv.w.x fa4, a06877; RV32IZFH-NEXT: fmin.s fa5, fa5, fa46878; RV32IZFH-NEXT: fcvt.wu.s a0, fa5, rtz6879; RV32IZFH-NEXT: ret6880;6881; RV64IZFH-LABEL: fcvt_wu_s_sat_i16:6882; RV64IZFH: # %bb.0: # %start6883; RV64IZFH-NEXT: fcvt.s.h fa5, fa06884; RV64IZFH-NEXT: fmv.w.x fa4, zero6885; RV64IZFH-NEXT: lui a0, 2928646886; RV64IZFH-NEXT: fmax.s fa5, fa5, fa46887; RV64IZFH-NEXT: addi a0, a0, -2566888; RV64IZFH-NEXT: fmv.w.x fa4, a06889; RV64IZFH-NEXT: fmin.s fa5, fa5, fa46890; RV64IZFH-NEXT: fcvt.lu.s a0, fa5, rtz6891; RV64IZFH-NEXT: ret6892;6893; RV32IDZFH-LABEL: fcvt_wu_s_sat_i16:6894; RV32IDZFH: # %bb.0: # %start6895; RV32IDZFH-NEXT: fcvt.s.h fa5, fa06896; RV32IDZFH-NEXT: fmv.w.x fa4, zero6897; RV32IDZFH-NEXT: lui a0, 2928646898; RV32IDZFH-NEXT: fmax.s fa5, fa5, fa46899; RV32IDZFH-NEXT: addi a0, a0, -2566900; RV32IDZFH-NEXT: fmv.w.x fa4, a06901; RV32IDZFH-NEXT: fmin.s fa5, fa5, fa46902; RV32IDZFH-NEXT: fcvt.wu.s a0, fa5, rtz6903; RV32IDZFH-NEXT: ret6904;6905; RV64IDZFH-LABEL: fcvt_wu_s_sat_i16:6906; RV64IDZFH: # %bb.0: # %start6907; RV64IDZFH-NEXT: fcvt.s.h fa5, fa06908; RV64IDZFH-NEXT: fmv.w.x fa4, zero6909; RV64IDZFH-NEXT: lui a0, 2928646910; RV64IDZFH-NEXT: fmax.s fa5, fa5, fa46911; RV64IDZFH-NEXT: addi a0, a0, -2566912; RV64IDZFH-NEXT: fmv.w.x fa4, a06913; RV64IDZFH-NEXT: fmin.s fa5, fa5, fa46914; RV64IDZFH-NEXT: fcvt.lu.s a0, fa5, rtz6915; RV64IDZFH-NEXT: ret6916;6917; RV32IZHINX-LABEL: fcvt_wu_s_sat_i16:6918; RV32IZHINX: # %bb.0: # %start6919; RV32IZHINX-NEXT: fcvt.s.h a0, a06920; RV32IZHINX-NEXT: lui a1, 2928646921; RV32IZHINX-NEXT: fmax.s a0, a0, zero6922; RV32IZHINX-NEXT: addi a1, a1, -2566923; RV32IZHINX-NEXT: fmin.s a0, a0, a16924; RV32IZHINX-NEXT: fcvt.wu.s a0, a0, rtz6925; RV32IZHINX-NEXT: ret6926;6927; RV64IZHINX-LABEL: fcvt_wu_s_sat_i16:6928; RV64IZHINX: # %bb.0: # %start6929; RV64IZHINX-NEXT: fcvt.s.h a0, a06930; RV64IZHINX-NEXT: lui a1, 2928646931; RV64IZHINX-NEXT: fmax.s a0, a0, zero6932; RV64IZHINX-NEXT: addi a1, a1, -2566933; RV64IZHINX-NEXT: fmin.s a0, a0, a16934; RV64IZHINX-NEXT: fcvt.lu.s a0, a0, rtz6935; RV64IZHINX-NEXT: ret6936;6937; RV32IZDINXZHINX-LABEL: fcvt_wu_s_sat_i16:6938; RV32IZDINXZHINX: # %bb.0: # %start6939; RV32IZDINXZHINX-NEXT: fcvt.s.h a0, a06940; RV32IZDINXZHINX-NEXT: lui a1, 2928646941; RV32IZDINXZHINX-NEXT: fmax.s a0, a0, zero6942; RV32IZDINXZHINX-NEXT: addi a1, a1, -2566943; RV32IZDINXZHINX-NEXT: fmin.s a0, a0, a16944; RV32IZDINXZHINX-NEXT: fcvt.wu.s a0, a0, rtz6945; RV32IZDINXZHINX-NEXT: ret6946;6947; RV64IZDINXZHINX-LABEL: fcvt_wu_s_sat_i16:6948; RV64IZDINXZHINX: # %bb.0: # %start6949; RV64IZDINXZHINX-NEXT: fcvt.s.h a0, a06950; RV64IZDINXZHINX-NEXT: lui a1, 2928646951; RV64IZDINXZHINX-NEXT: fmax.s a0, a0, zero6952; RV64IZDINXZHINX-NEXT: addi a1, a1, -2566953; RV64IZDINXZHINX-NEXT: fmin.s a0, a0, a16954; RV64IZDINXZHINX-NEXT: fcvt.lu.s a0, a0, rtz6955; RV64IZDINXZHINX-NEXT: ret6956;6957; RV32I-LABEL: fcvt_wu_s_sat_i16:6958; RV32I: # %bb.0: # %start6959; RV32I-NEXT: addi sp, sp, -326960; RV32I-NEXT: sw ra, 28(sp) # 4-byte Folded Spill6961; RV32I-NEXT: sw s0, 24(sp) # 4-byte Folded Spill6962; RV32I-NEXT: sw s1, 20(sp) # 4-byte Folded Spill6963; RV32I-NEXT: sw s2, 16(sp) # 4-byte Folded Spill6964; RV32I-NEXT: sw s3, 12(sp) # 4-byte Folded Spill6965; RV32I-NEXT: lui s3, 166966; RV32I-NEXT: addi s3, s3, -16967; RV32I-NEXT: and a0, a0, s36968; RV32I-NEXT: call __extendhfsf26969; RV32I-NEXT: mv s2, a06970; RV32I-NEXT: call __fixunssfsi6971; RV32I-NEXT: mv s0, a06972; RV32I-NEXT: mv a0, s26973; RV32I-NEXT: li a1, 06974; RV32I-NEXT: call __gesf26975; RV32I-NEXT: mv s1, a06976; RV32I-NEXT: lui a1, 2928646977; RV32I-NEXT: addi a1, a1, -2566978; RV32I-NEXT: mv a0, s26979; RV32I-NEXT: call __gtsf26980; RV32I-NEXT: blez a0, .LBB34_26981; RV32I-NEXT: # %bb.1: # %start6982; RV32I-NEXT: mv a0, s36983; RV32I-NEXT: j .LBB34_36984; RV32I-NEXT: .LBB34_2:6985; RV32I-NEXT: srli s1, s1, 316986; RV32I-NEXT: addi a0, s1, -16987; RV32I-NEXT: and a0, a0, s06988; RV32I-NEXT: .LBB34_3: # %start6989; RV32I-NEXT: and a0, a0, s36990; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload6991; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload6992; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload6993; RV32I-NEXT: lw s2, 16(sp) # 4-byte Folded Reload6994; RV32I-NEXT: lw s3, 12(sp) # 4-byte Folded Reload6995; RV32I-NEXT: addi sp, sp, 326996; RV32I-NEXT: ret6997;6998; RV64I-LABEL: fcvt_wu_s_sat_i16:6999; RV64I: # %bb.0: # %start7000; RV64I-NEXT: addi sp, sp, -487001; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill7002; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill7003; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill7004; RV64I-NEXT: sd s2, 16(sp) # 8-byte Folded Spill7005; RV64I-NEXT: sd s3, 8(sp) # 8-byte Folded Spill7006; RV64I-NEXT: lui s3, 167007; RV64I-NEXT: addi s3, s3, -17008; RV64I-NEXT: and a0, a0, s37009; RV64I-NEXT: call __extendhfsf27010; RV64I-NEXT: mv s2, a07011; RV64I-NEXT: call __fixunssfdi7012; RV64I-NEXT: mv s0, a07013; RV64I-NEXT: mv a0, s27014; RV64I-NEXT: li a1, 07015; RV64I-NEXT: call __gesf27016; RV64I-NEXT: mv s1, a07017; RV64I-NEXT: lui a1, 2928647018; RV64I-NEXT: addi a1, a1, -2567019; RV64I-NEXT: mv a0, s27020; RV64I-NEXT: call __gtsf27021; RV64I-NEXT: blez a0, .LBB34_27022; RV64I-NEXT: # %bb.1: # %start7023; RV64I-NEXT: mv a0, s37024; RV64I-NEXT: j .LBB34_37025; RV64I-NEXT: .LBB34_2:7026; RV64I-NEXT: srli s1, s1, 637027; RV64I-NEXT: addi a0, s1, -17028; RV64I-NEXT: and a0, a0, s07029; RV64I-NEXT: .LBB34_3: # %start7030; RV64I-NEXT: and a0, a0, s37031; RV64I-NEXT: ld ra, 40(sp) # 8-byte Folded Reload7032; RV64I-NEXT: ld s0, 32(sp) # 8-byte Folded Reload7033; RV64I-NEXT: ld s1, 24(sp) # 8-byte Folded Reload7034; RV64I-NEXT: ld s2, 16(sp) # 8-byte Folded Reload7035; RV64I-NEXT: ld s3, 8(sp) # 8-byte Folded Reload7036; RV64I-NEXT: addi sp, sp, 487037; RV64I-NEXT: ret7038;7039; RV32ID-ILP32-LABEL: fcvt_wu_s_sat_i16:7040; RV32ID-ILP32: # %bb.0: # %start7041; RV32ID-ILP32-NEXT: addi sp, sp, -167042; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7043; RV32ID-ILP32-NEXT: call __extendhfsf27044; RV32ID-ILP32-NEXT: fmv.w.x fa5, a07045; RV32ID-ILP32-NEXT: fmv.w.x fa4, zero7046; RV32ID-ILP32-NEXT: lui a0, 2928647047; RV32ID-ILP32-NEXT: fmax.s fa5, fa5, fa47048; RV32ID-ILP32-NEXT: addi a0, a0, -2567049; RV32ID-ILP32-NEXT: fmv.w.x fa4, a07050; RV32ID-ILP32-NEXT: fmin.s fa5, fa5, fa47051; RV32ID-ILP32-NEXT: fcvt.wu.s a0, fa5, rtz7052; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7053; RV32ID-ILP32-NEXT: addi sp, sp, 167054; RV32ID-ILP32-NEXT: ret7055;7056; RV64ID-LP64-LABEL: fcvt_wu_s_sat_i16:7057; RV64ID-LP64: # %bb.0: # %start7058; RV64ID-LP64-NEXT: addi sp, sp, -167059; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill7060; RV64ID-LP64-NEXT: call __extendhfsf27061; RV64ID-LP64-NEXT: fmv.w.x fa5, a07062; RV64ID-LP64-NEXT: fmv.w.x fa4, zero7063; RV64ID-LP64-NEXT: lui a0, 2928647064; RV64ID-LP64-NEXT: fmax.s fa5, fa5, fa47065; RV64ID-LP64-NEXT: addi a0, a0, -2567066; RV64ID-LP64-NEXT: fmv.w.x fa4, a07067; RV64ID-LP64-NEXT: fmin.s fa5, fa5, fa47068; RV64ID-LP64-NEXT: fcvt.lu.s a0, fa5, rtz7069; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload7070; RV64ID-LP64-NEXT: addi sp, sp, 167071; RV64ID-LP64-NEXT: ret7072;7073; RV32ID-LABEL: fcvt_wu_s_sat_i16:7074; RV32ID: # %bb.0: # %start7075; RV32ID-NEXT: addi sp, sp, -167076; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7077; RV32ID-NEXT: call __extendhfsf27078; RV32ID-NEXT: fmv.w.x fa5, zero7079; RV32ID-NEXT: lui a0, 2928647080; RV32ID-NEXT: fmax.s fa5, fa0, fa57081; RV32ID-NEXT: addi a0, a0, -2567082; RV32ID-NEXT: fmv.w.x fa4, a07083; RV32ID-NEXT: fmin.s fa5, fa5, fa47084; RV32ID-NEXT: fcvt.wu.s a0, fa5, rtz7085; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7086; RV32ID-NEXT: addi sp, sp, 167087; RV32ID-NEXT: ret7088;7089; RV64ID-LABEL: fcvt_wu_s_sat_i16:7090; RV64ID: # %bb.0: # %start7091; RV64ID-NEXT: addi sp, sp, -167092; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill7093; RV64ID-NEXT: call __extendhfsf27094; RV64ID-NEXT: fmv.w.x fa5, zero7095; RV64ID-NEXT: lui a0, 2928647096; RV64ID-NEXT: fmax.s fa5, fa0, fa57097; RV64ID-NEXT: addi a0, a0, -2567098; RV64ID-NEXT: fmv.w.x fa4, a07099; RV64ID-NEXT: fmin.s fa5, fa5, fa47100; RV64ID-NEXT: fcvt.lu.s a0, fa5, rtz7101; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload7102; RV64ID-NEXT: addi sp, sp, 167103; RV64ID-NEXT: ret7104;7105; CHECK32-IZFHMIN-LABEL: fcvt_wu_s_sat_i16:7106; CHECK32-IZFHMIN: # %bb.0: # %start7107; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa07108; CHECK32-IZFHMIN-NEXT: fmv.w.x fa4, zero7109; CHECK32-IZFHMIN-NEXT: lui a0, 2928647110; CHECK32-IZFHMIN-NEXT: fmax.s fa5, fa5, fa47111; CHECK32-IZFHMIN-NEXT: addi a0, a0, -2567112; CHECK32-IZFHMIN-NEXT: fmv.w.x fa4, a07113; CHECK32-IZFHMIN-NEXT: fmin.s fa5, fa5, fa47114; CHECK32-IZFHMIN-NEXT: fcvt.wu.s a0, fa5, rtz7115; CHECK32-IZFHMIN-NEXT: ret7116;7117; CHECK64-IZFHMIN-LABEL: fcvt_wu_s_sat_i16:7118; CHECK64-IZFHMIN: # %bb.0: # %start7119; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa07120; CHECK64-IZFHMIN-NEXT: fmv.w.x fa4, zero7121; CHECK64-IZFHMIN-NEXT: lui a0, 2928647122; CHECK64-IZFHMIN-NEXT: fmax.s fa5, fa5, fa47123; CHECK64-IZFHMIN-NEXT: addi a0, a0, -2567124; CHECK64-IZFHMIN-NEXT: fmv.w.x fa4, a07125; CHECK64-IZFHMIN-NEXT: fmin.s fa5, fa5, fa47126; CHECK64-IZFHMIN-NEXT: fcvt.lu.s a0, fa5, rtz7127; CHECK64-IZFHMIN-NEXT: ret7128;7129; CHECK32-IZHINXMIN-LABEL: fcvt_wu_s_sat_i16:7130; CHECK32-IZHINXMIN: # %bb.0: # %start7131; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a07132; CHECK32-IZHINXMIN-NEXT: lui a1, 2928647133; CHECK32-IZHINXMIN-NEXT: fmax.s a0, a0, zero7134; CHECK32-IZHINXMIN-NEXT: addi a1, a1, -2567135; CHECK32-IZHINXMIN-NEXT: fmin.s a0, a0, a17136; CHECK32-IZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz7137; CHECK32-IZHINXMIN-NEXT: ret7138;7139; CHECK64-IZHINXMIN-LABEL: fcvt_wu_s_sat_i16:7140; CHECK64-IZHINXMIN: # %bb.0: # %start7141; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a07142; CHECK64-IZHINXMIN-NEXT: lui a1, 2928647143; CHECK64-IZHINXMIN-NEXT: fmax.s a0, a0, zero7144; CHECK64-IZHINXMIN-NEXT: addi a1, a1, -2567145; CHECK64-IZHINXMIN-NEXT: fmin.s a0, a0, a17146; CHECK64-IZHINXMIN-NEXT: fcvt.lu.s a0, a0, rtz7147; CHECK64-IZHINXMIN-NEXT: ret7148;7149; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_wu_s_sat_i16:7150; CHECK32-IZDINXZHINXMIN: # %bb.0: # %start7151; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a07152; CHECK32-IZDINXZHINXMIN-NEXT: lui a1, 2928647153; CHECK32-IZDINXZHINXMIN-NEXT: fmax.s a0, a0, zero7154; CHECK32-IZDINXZHINXMIN-NEXT: addi a1, a1, -2567155; CHECK32-IZDINXZHINXMIN-NEXT: fmin.s a0, a0, a17156; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz7157; CHECK32-IZDINXZHINXMIN-NEXT: ret7158;7159; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_wu_s_sat_i16:7160; CHECK64-IZDINXZHINXMIN: # %bb.0: # %start7161; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a07162; CHECK64-IZDINXZHINXMIN-NEXT: lui a1, 2928647163; CHECK64-IZDINXZHINXMIN-NEXT: fmax.s a0, a0, zero7164; CHECK64-IZDINXZHINXMIN-NEXT: addi a1, a1, -2567165; CHECK64-IZDINXZHINXMIN-NEXT: fmin.s a0, a0, a17166; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.lu.s a0, a0, rtz7167; CHECK64-IZDINXZHINXMIN-NEXT: ret7168start:7169 %0 = tail call i16 @llvm.fptoui.sat.i16.f16(half %a)7170 ret i16 %07171}7172 7173define signext i8 @fcvt_w_s_i8(half %a) nounwind {7174; RV32IZFH-LABEL: fcvt_w_s_i8:7175; RV32IZFH: # %bb.0:7176; RV32IZFH-NEXT: fcvt.w.h a0, fa0, rtz7177; RV32IZFH-NEXT: ret7178;7179; RV64IZFH-LABEL: fcvt_w_s_i8:7180; RV64IZFH: # %bb.0:7181; RV64IZFH-NEXT: fcvt.l.h a0, fa0, rtz7182; RV64IZFH-NEXT: ret7183;7184; RV32IDZFH-LABEL: fcvt_w_s_i8:7185; RV32IDZFH: # %bb.0:7186; RV32IDZFH-NEXT: fcvt.w.h a0, fa0, rtz7187; RV32IDZFH-NEXT: ret7188;7189; RV64IDZFH-LABEL: fcvt_w_s_i8:7190; RV64IDZFH: # %bb.0:7191; RV64IDZFH-NEXT: fcvt.l.h a0, fa0, rtz7192; RV64IDZFH-NEXT: ret7193;7194; RV32IZHINX-LABEL: fcvt_w_s_i8:7195; RV32IZHINX: # %bb.0:7196; RV32IZHINX-NEXT: fcvt.w.h a0, a0, rtz7197; RV32IZHINX-NEXT: ret7198;7199; RV64IZHINX-LABEL: fcvt_w_s_i8:7200; RV64IZHINX: # %bb.0:7201; RV64IZHINX-NEXT: fcvt.l.h a0, a0, rtz7202; RV64IZHINX-NEXT: ret7203;7204; RV32IZDINXZHINX-LABEL: fcvt_w_s_i8:7205; RV32IZDINXZHINX: # %bb.0:7206; RV32IZDINXZHINX-NEXT: fcvt.w.h a0, a0, rtz7207; RV32IZDINXZHINX-NEXT: ret7208;7209; RV64IZDINXZHINX-LABEL: fcvt_w_s_i8:7210; RV64IZDINXZHINX: # %bb.0:7211; RV64IZDINXZHINX-NEXT: fcvt.l.h a0, a0, rtz7212; RV64IZDINXZHINX-NEXT: ret7213;7214; RV32I-LABEL: fcvt_w_s_i8:7215; RV32I: # %bb.0:7216; RV32I-NEXT: addi sp, sp, -167217; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7218; RV32I-NEXT: slli a0, a0, 167219; RV32I-NEXT: srli a0, a0, 167220; RV32I-NEXT: call __extendhfsf27221; RV32I-NEXT: call __fixsfsi7222; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7223; RV32I-NEXT: addi sp, sp, 167224; RV32I-NEXT: ret7225;7226; RV64I-LABEL: fcvt_w_s_i8:7227; RV64I: # %bb.0:7228; RV64I-NEXT: addi sp, sp, -167229; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill7230; RV64I-NEXT: slli a0, a0, 487231; RV64I-NEXT: srli a0, a0, 487232; RV64I-NEXT: call __extendhfsf27233; RV64I-NEXT: call __fixsfdi7234; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload7235; RV64I-NEXT: addi sp, sp, 167236; RV64I-NEXT: ret7237;7238; RV32ID-ILP32-LABEL: fcvt_w_s_i8:7239; RV32ID-ILP32: # %bb.0:7240; RV32ID-ILP32-NEXT: addi sp, sp, -167241; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7242; RV32ID-ILP32-NEXT: call __extendhfsf27243; RV32ID-ILP32-NEXT: fmv.w.x fa5, a07244; RV32ID-ILP32-NEXT: fcvt.w.s a0, fa5, rtz7245; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7246; RV32ID-ILP32-NEXT: addi sp, sp, 167247; RV32ID-ILP32-NEXT: ret7248;7249; RV64ID-LP64-LABEL: fcvt_w_s_i8:7250; RV64ID-LP64: # %bb.0:7251; RV64ID-LP64-NEXT: addi sp, sp, -167252; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill7253; RV64ID-LP64-NEXT: call __extendhfsf27254; RV64ID-LP64-NEXT: fmv.w.x fa5, a07255; RV64ID-LP64-NEXT: fcvt.l.s a0, fa5, rtz7256; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload7257; RV64ID-LP64-NEXT: addi sp, sp, 167258; RV64ID-LP64-NEXT: ret7259;7260; RV32ID-LABEL: fcvt_w_s_i8:7261; RV32ID: # %bb.0:7262; RV32ID-NEXT: addi sp, sp, -167263; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7264; RV32ID-NEXT: call __extendhfsf27265; RV32ID-NEXT: fcvt.w.s a0, fa0, rtz7266; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7267; RV32ID-NEXT: addi sp, sp, 167268; RV32ID-NEXT: ret7269;7270; RV64ID-LABEL: fcvt_w_s_i8:7271; RV64ID: # %bb.0:7272; RV64ID-NEXT: addi sp, sp, -167273; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill7274; RV64ID-NEXT: call __extendhfsf27275; RV64ID-NEXT: fcvt.l.s a0, fa0, rtz7276; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload7277; RV64ID-NEXT: addi sp, sp, 167278; RV64ID-NEXT: ret7279;7280; CHECK32-IZFHMIN-LABEL: fcvt_w_s_i8:7281; CHECK32-IZFHMIN: # %bb.0:7282; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa07283; CHECK32-IZFHMIN-NEXT: fcvt.w.s a0, fa5, rtz7284; CHECK32-IZFHMIN-NEXT: ret7285;7286; CHECK64-IZFHMIN-LABEL: fcvt_w_s_i8:7287; CHECK64-IZFHMIN: # %bb.0:7288; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa07289; CHECK64-IZFHMIN-NEXT: fcvt.l.s a0, fa5, rtz7290; CHECK64-IZFHMIN-NEXT: ret7291;7292; CHECK32-IZHINXMIN-LABEL: fcvt_w_s_i8:7293; CHECK32-IZHINXMIN: # %bb.0:7294; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a07295; CHECK32-IZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz7296; CHECK32-IZHINXMIN-NEXT: ret7297;7298; CHECK64-IZHINXMIN-LABEL: fcvt_w_s_i8:7299; CHECK64-IZHINXMIN: # %bb.0:7300; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a07301; CHECK64-IZHINXMIN-NEXT: fcvt.l.s a0, a0, rtz7302; CHECK64-IZHINXMIN-NEXT: ret7303;7304; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_w_s_i8:7305; CHECK32-IZDINXZHINXMIN: # %bb.0:7306; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a07307; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz7308; CHECK32-IZDINXZHINXMIN-NEXT: ret7309;7310; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_w_s_i8:7311; CHECK64-IZDINXZHINXMIN: # %bb.0:7312; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a07313; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.l.s a0, a0, rtz7314; CHECK64-IZDINXZHINXMIN-NEXT: ret7315 %1 = fptosi half %a to i87316 ret i8 %17317}7318 7319define signext i8 @fcvt_w_s_sat_i8(half %a) nounwind {7320; RV32IZFH-LABEL: fcvt_w_s_sat_i8:7321; RV32IZFH: # %bb.0: # %start7322; RV32IZFH-NEXT: fcvt.s.h fa5, fa07323; RV32IZFH-NEXT: lui a0, 7987207324; RV32IZFH-NEXT: lui a1, 2744007325; RV32IZFH-NEXT: fmv.w.x fa4, a07326; RV32IZFH-NEXT: feq.s a0, fa5, fa57327; RV32IZFH-NEXT: neg a0, a07328; RV32IZFH-NEXT: fmax.s fa5, fa5, fa47329; RV32IZFH-NEXT: fmv.w.x fa4, a17330; RV32IZFH-NEXT: fmin.s fa5, fa5, fa47331; RV32IZFH-NEXT: fcvt.w.s a1, fa5, rtz7332; RV32IZFH-NEXT: and a0, a0, a17333; RV32IZFH-NEXT: ret7334;7335; RV64IZFH-LABEL: fcvt_w_s_sat_i8:7336; RV64IZFH: # %bb.0: # %start7337; RV64IZFH-NEXT: fcvt.s.h fa5, fa07338; RV64IZFH-NEXT: lui a0, 7987207339; RV64IZFH-NEXT: lui a1, 2744007340; RV64IZFH-NEXT: fmv.w.x fa4, a07341; RV64IZFH-NEXT: feq.s a0, fa5, fa57342; RV64IZFH-NEXT: neg a0, a07343; RV64IZFH-NEXT: fmax.s fa5, fa5, fa47344; RV64IZFH-NEXT: fmv.w.x fa4, a17345; RV64IZFH-NEXT: fmin.s fa5, fa5, fa47346; RV64IZFH-NEXT: fcvt.l.s a1, fa5, rtz7347; RV64IZFH-NEXT: and a0, a0, a17348; RV64IZFH-NEXT: ret7349;7350; RV32IDZFH-LABEL: fcvt_w_s_sat_i8:7351; RV32IDZFH: # %bb.0: # %start7352; RV32IDZFH-NEXT: fcvt.s.h fa5, fa07353; RV32IDZFH-NEXT: lui a0, 7987207354; RV32IDZFH-NEXT: lui a1, 2744007355; RV32IDZFH-NEXT: fmv.w.x fa4, a07356; RV32IDZFH-NEXT: feq.s a0, fa5, fa57357; RV32IDZFH-NEXT: neg a0, a07358; RV32IDZFH-NEXT: fmax.s fa5, fa5, fa47359; RV32IDZFH-NEXT: fmv.w.x fa4, a17360; RV32IDZFH-NEXT: fmin.s fa5, fa5, fa47361; RV32IDZFH-NEXT: fcvt.w.s a1, fa5, rtz7362; RV32IDZFH-NEXT: and a0, a0, a17363; RV32IDZFH-NEXT: ret7364;7365; RV64IDZFH-LABEL: fcvt_w_s_sat_i8:7366; RV64IDZFH: # %bb.0: # %start7367; RV64IDZFH-NEXT: fcvt.s.h fa5, fa07368; RV64IDZFH-NEXT: lui a0, 7987207369; RV64IDZFH-NEXT: lui a1, 2744007370; RV64IDZFH-NEXT: fmv.w.x fa4, a07371; RV64IDZFH-NEXT: feq.s a0, fa5, fa57372; RV64IDZFH-NEXT: neg a0, a07373; RV64IDZFH-NEXT: fmax.s fa5, fa5, fa47374; RV64IDZFH-NEXT: fmv.w.x fa4, a17375; RV64IDZFH-NEXT: fmin.s fa5, fa5, fa47376; RV64IDZFH-NEXT: fcvt.l.s a1, fa5, rtz7377; RV64IDZFH-NEXT: and a0, a0, a17378; RV64IDZFH-NEXT: ret7379;7380; RV32IZHINX-LABEL: fcvt_w_s_sat_i8:7381; RV32IZHINX: # %bb.0: # %start7382; RV32IZHINX-NEXT: fcvt.s.h a0, a07383; RV32IZHINX-NEXT: lui a1, 7987207384; RV32IZHINX-NEXT: lui a2, 2744007385; RV32IZHINX-NEXT: fmax.s a1, a0, a17386; RV32IZHINX-NEXT: feq.s a0, a0, a07387; RV32IZHINX-NEXT: neg a0, a07388; RV32IZHINX-NEXT: fmin.s a1, a1, a27389; RV32IZHINX-NEXT: fcvt.w.s a1, a1, rtz7390; RV32IZHINX-NEXT: and a0, a0, a17391; RV32IZHINX-NEXT: ret7392;7393; RV64IZHINX-LABEL: fcvt_w_s_sat_i8:7394; RV64IZHINX: # %bb.0: # %start7395; RV64IZHINX-NEXT: fcvt.s.h a0, a07396; RV64IZHINX-NEXT: lui a1, 7987207397; RV64IZHINX-NEXT: lui a2, 2744007398; RV64IZHINX-NEXT: fmax.s a1, a0, a17399; RV64IZHINX-NEXT: feq.s a0, a0, a07400; RV64IZHINX-NEXT: neg a0, a07401; RV64IZHINX-NEXT: fmin.s a1, a1, a27402; RV64IZHINX-NEXT: fcvt.l.s a1, a1, rtz7403; RV64IZHINX-NEXT: and a0, a0, a17404; RV64IZHINX-NEXT: ret7405;7406; RV32IZDINXZHINX-LABEL: fcvt_w_s_sat_i8:7407; RV32IZDINXZHINX: # %bb.0: # %start7408; RV32IZDINXZHINX-NEXT: fcvt.s.h a0, a07409; RV32IZDINXZHINX-NEXT: lui a1, 7987207410; RV32IZDINXZHINX-NEXT: lui a2, 2744007411; RV32IZDINXZHINX-NEXT: fmax.s a1, a0, a17412; RV32IZDINXZHINX-NEXT: feq.s a0, a0, a07413; RV32IZDINXZHINX-NEXT: neg a0, a07414; RV32IZDINXZHINX-NEXT: fmin.s a1, a1, a27415; RV32IZDINXZHINX-NEXT: fcvt.w.s a1, a1, rtz7416; RV32IZDINXZHINX-NEXT: and a0, a0, a17417; RV32IZDINXZHINX-NEXT: ret7418;7419; RV64IZDINXZHINX-LABEL: fcvt_w_s_sat_i8:7420; RV64IZDINXZHINX: # %bb.0: # %start7421; RV64IZDINXZHINX-NEXT: fcvt.s.h a0, a07422; RV64IZDINXZHINX-NEXT: lui a1, 7987207423; RV64IZDINXZHINX-NEXT: lui a2, 2744007424; RV64IZDINXZHINX-NEXT: fmax.s a1, a0, a17425; RV64IZDINXZHINX-NEXT: feq.s a0, a0, a07426; RV64IZDINXZHINX-NEXT: neg a0, a07427; RV64IZDINXZHINX-NEXT: fmin.s a1, a1, a27428; RV64IZDINXZHINX-NEXT: fcvt.l.s a1, a1, rtz7429; RV64IZDINXZHINX-NEXT: and a0, a0, a17430; RV64IZDINXZHINX-NEXT: ret7431;7432; RV32I-LABEL: fcvt_w_s_sat_i8:7433; RV32I: # %bb.0: # %start7434; RV32I-NEXT: addi sp, sp, -167435; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7436; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill7437; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill7438; RV32I-NEXT: sw s2, 0(sp) # 4-byte Folded Spill7439; RV32I-NEXT: slli a0, a0, 167440; RV32I-NEXT: srli a0, a0, 167441; RV32I-NEXT: call __extendhfsf27442; RV32I-NEXT: mv s0, a07443; RV32I-NEXT: lui a1, 7987207444; RV32I-NEXT: call __gesf27445; RV32I-NEXT: mv s2, a07446; RV32I-NEXT: mv a0, s07447; RV32I-NEXT: call __fixsfsi7448; RV32I-NEXT: mv s1, a07449; RV32I-NEXT: bgez s2, .LBB36_27450; RV32I-NEXT: # %bb.1: # %start7451; RV32I-NEXT: li s1, -1287452; RV32I-NEXT: .LBB36_2: # %start7453; RV32I-NEXT: lui a1, 2744007454; RV32I-NEXT: mv a0, s07455; RV32I-NEXT: call __gtsf27456; RV32I-NEXT: blez a0, .LBB36_47457; RV32I-NEXT: # %bb.3: # %start7458; RV32I-NEXT: li s1, 1277459; RV32I-NEXT: .LBB36_4: # %start7460; RV32I-NEXT: mv a0, s07461; RV32I-NEXT: mv a1, s07462; RV32I-NEXT: call __unordsf27463; RV32I-NEXT: snez a0, a07464; RV32I-NEXT: addi a0, a0, -17465; RV32I-NEXT: and a0, a0, s17466; RV32I-NEXT: slli a0, a0, 247467; RV32I-NEXT: srai a0, a0, 247468; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7469; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload7470; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload7471; RV32I-NEXT: lw s2, 0(sp) # 4-byte Folded Reload7472; RV32I-NEXT: addi sp, sp, 167473; RV32I-NEXT: ret7474;7475; RV64I-LABEL: fcvt_w_s_sat_i8:7476; RV64I: # %bb.0: # %start7477; RV64I-NEXT: addi sp, sp, -327478; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill7479; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill7480; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill7481; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill7482; RV64I-NEXT: slli a0, a0, 487483; RV64I-NEXT: srli a0, a0, 487484; RV64I-NEXT: call __extendhfsf27485; RV64I-NEXT: mv s0, a07486; RV64I-NEXT: lui a1, 7987207487; RV64I-NEXT: call __gesf27488; RV64I-NEXT: mv s2, a07489; RV64I-NEXT: mv a0, s07490; RV64I-NEXT: call __fixsfdi7491; RV64I-NEXT: mv s1, a07492; RV64I-NEXT: bgez s2, .LBB36_27493; RV64I-NEXT: # %bb.1: # %start7494; RV64I-NEXT: li s1, -1287495; RV64I-NEXT: .LBB36_2: # %start7496; RV64I-NEXT: lui a1, 2744007497; RV64I-NEXT: mv a0, s07498; RV64I-NEXT: call __gtsf27499; RV64I-NEXT: blez a0, .LBB36_47500; RV64I-NEXT: # %bb.3: # %start7501; RV64I-NEXT: li s1, 1277502; RV64I-NEXT: .LBB36_4: # %start7503; RV64I-NEXT: mv a0, s07504; RV64I-NEXT: mv a1, s07505; RV64I-NEXT: call __unordsf27506; RV64I-NEXT: snez a0, a07507; RV64I-NEXT: addi a0, a0, -17508; RV64I-NEXT: and a0, a0, s17509; RV64I-NEXT: slli a0, a0, 567510; RV64I-NEXT: srai a0, a0, 567511; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload7512; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload7513; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload7514; RV64I-NEXT: ld s2, 0(sp) # 8-byte Folded Reload7515; RV64I-NEXT: addi sp, sp, 327516; RV64I-NEXT: ret7517;7518; RV32ID-ILP32-LABEL: fcvt_w_s_sat_i8:7519; RV32ID-ILP32: # %bb.0: # %start7520; RV32ID-ILP32-NEXT: addi sp, sp, -167521; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7522; RV32ID-ILP32-NEXT: call __extendhfsf27523; RV32ID-ILP32-NEXT: fmv.w.x fa5, a07524; RV32ID-ILP32-NEXT: lui a0, 7987207525; RV32ID-ILP32-NEXT: lui a1, 2744007526; RV32ID-ILP32-NEXT: fmv.w.x fa4, a07527; RV32ID-ILP32-NEXT: feq.s a0, fa5, fa57528; RV32ID-ILP32-NEXT: neg a0, a07529; RV32ID-ILP32-NEXT: fmax.s fa5, fa5, fa47530; RV32ID-ILP32-NEXT: fmv.w.x fa4, a17531; RV32ID-ILP32-NEXT: fmin.s fa5, fa5, fa47532; RV32ID-ILP32-NEXT: fcvt.w.s a1, fa5, rtz7533; RV32ID-ILP32-NEXT: and a0, a0, a17534; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7535; RV32ID-ILP32-NEXT: addi sp, sp, 167536; RV32ID-ILP32-NEXT: ret7537;7538; RV64ID-LP64-LABEL: fcvt_w_s_sat_i8:7539; RV64ID-LP64: # %bb.0: # %start7540; RV64ID-LP64-NEXT: addi sp, sp, -167541; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill7542; RV64ID-LP64-NEXT: call __extendhfsf27543; RV64ID-LP64-NEXT: fmv.w.x fa5, a07544; RV64ID-LP64-NEXT: lui a0, 7987207545; RV64ID-LP64-NEXT: lui a1, 2744007546; RV64ID-LP64-NEXT: fmv.w.x fa4, a07547; RV64ID-LP64-NEXT: feq.s a0, fa5, fa57548; RV64ID-LP64-NEXT: neg a0, a07549; RV64ID-LP64-NEXT: fmax.s fa5, fa5, fa47550; RV64ID-LP64-NEXT: fmv.w.x fa4, a17551; RV64ID-LP64-NEXT: fmin.s fa5, fa5, fa47552; RV64ID-LP64-NEXT: fcvt.l.s a1, fa5, rtz7553; RV64ID-LP64-NEXT: and a0, a0, a17554; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload7555; RV64ID-LP64-NEXT: addi sp, sp, 167556; RV64ID-LP64-NEXT: ret7557;7558; RV32ID-LABEL: fcvt_w_s_sat_i8:7559; RV32ID: # %bb.0: # %start7560; RV32ID-NEXT: addi sp, sp, -167561; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7562; RV32ID-NEXT: call __extendhfsf27563; RV32ID-NEXT: feq.s a0, fa0, fa07564; RV32ID-NEXT: lui a1, 7987207565; RV32ID-NEXT: fmv.w.x fa5, a17566; RV32ID-NEXT: lui a1, 2744007567; RV32ID-NEXT: neg a0, a07568; RV32ID-NEXT: fmax.s fa5, fa0, fa57569; RV32ID-NEXT: fmv.w.x fa4, a17570; RV32ID-NEXT: fmin.s fa5, fa5, fa47571; RV32ID-NEXT: fcvt.w.s a1, fa5, rtz7572; RV32ID-NEXT: and a0, a0, a17573; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7574; RV32ID-NEXT: addi sp, sp, 167575; RV32ID-NEXT: ret7576;7577; RV64ID-LABEL: fcvt_w_s_sat_i8:7578; RV64ID: # %bb.0: # %start7579; RV64ID-NEXT: addi sp, sp, -167580; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill7581; RV64ID-NEXT: call __extendhfsf27582; RV64ID-NEXT: feq.s a0, fa0, fa07583; RV64ID-NEXT: lui a1, 7987207584; RV64ID-NEXT: fmv.w.x fa5, a17585; RV64ID-NEXT: lui a1, 2744007586; RV64ID-NEXT: neg a0, a07587; RV64ID-NEXT: fmax.s fa5, fa0, fa57588; RV64ID-NEXT: fmv.w.x fa4, a17589; RV64ID-NEXT: fmin.s fa5, fa5, fa47590; RV64ID-NEXT: fcvt.l.s a1, fa5, rtz7591; RV64ID-NEXT: and a0, a0, a17592; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload7593; RV64ID-NEXT: addi sp, sp, 167594; RV64ID-NEXT: ret7595;7596; CHECK32-IZFHMIN-LABEL: fcvt_w_s_sat_i8:7597; CHECK32-IZFHMIN: # %bb.0: # %start7598; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa07599; CHECK32-IZFHMIN-NEXT: lui a0, 7987207600; CHECK32-IZFHMIN-NEXT: lui a1, 2744007601; CHECK32-IZFHMIN-NEXT: fmv.w.x fa4, a07602; CHECK32-IZFHMIN-NEXT: feq.s a0, fa5, fa57603; CHECK32-IZFHMIN-NEXT: neg a0, a07604; CHECK32-IZFHMIN-NEXT: fmax.s fa5, fa5, fa47605; CHECK32-IZFHMIN-NEXT: fmv.w.x fa4, a17606; CHECK32-IZFHMIN-NEXT: fmin.s fa5, fa5, fa47607; CHECK32-IZFHMIN-NEXT: fcvt.w.s a1, fa5, rtz7608; CHECK32-IZFHMIN-NEXT: and a0, a0, a17609; CHECK32-IZFHMIN-NEXT: ret7610;7611; CHECK64-IZFHMIN-LABEL: fcvt_w_s_sat_i8:7612; CHECK64-IZFHMIN: # %bb.0: # %start7613; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa07614; CHECK64-IZFHMIN-NEXT: lui a0, 7987207615; CHECK64-IZFHMIN-NEXT: lui a1, 2744007616; CHECK64-IZFHMIN-NEXT: fmv.w.x fa4, a07617; CHECK64-IZFHMIN-NEXT: feq.s a0, fa5, fa57618; CHECK64-IZFHMIN-NEXT: neg a0, a07619; CHECK64-IZFHMIN-NEXT: fmax.s fa5, fa5, fa47620; CHECK64-IZFHMIN-NEXT: fmv.w.x fa4, a17621; CHECK64-IZFHMIN-NEXT: fmin.s fa5, fa5, fa47622; CHECK64-IZFHMIN-NEXT: fcvt.l.s a1, fa5, rtz7623; CHECK64-IZFHMIN-NEXT: and a0, a0, a17624; CHECK64-IZFHMIN-NEXT: ret7625;7626; CHECK32-IZHINXMIN-LABEL: fcvt_w_s_sat_i8:7627; CHECK32-IZHINXMIN: # %bb.0: # %start7628; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a07629; CHECK32-IZHINXMIN-NEXT: lui a1, 7987207630; CHECK32-IZHINXMIN-NEXT: lui a2, 2744007631; CHECK32-IZHINXMIN-NEXT: fmax.s a1, a0, a17632; CHECK32-IZHINXMIN-NEXT: feq.s a0, a0, a07633; CHECK32-IZHINXMIN-NEXT: neg a0, a07634; CHECK32-IZHINXMIN-NEXT: fmin.s a1, a1, a27635; CHECK32-IZHINXMIN-NEXT: fcvt.w.s a1, a1, rtz7636; CHECK32-IZHINXMIN-NEXT: and a0, a0, a17637; CHECK32-IZHINXMIN-NEXT: ret7638;7639; CHECK64-IZHINXMIN-LABEL: fcvt_w_s_sat_i8:7640; CHECK64-IZHINXMIN: # %bb.0: # %start7641; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a07642; CHECK64-IZHINXMIN-NEXT: lui a1, 7987207643; CHECK64-IZHINXMIN-NEXT: lui a2, 2744007644; CHECK64-IZHINXMIN-NEXT: fmax.s a1, a0, a17645; CHECK64-IZHINXMIN-NEXT: feq.s a0, a0, a07646; CHECK64-IZHINXMIN-NEXT: neg a0, a07647; CHECK64-IZHINXMIN-NEXT: fmin.s a1, a1, a27648; CHECK64-IZHINXMIN-NEXT: fcvt.l.s a1, a1, rtz7649; CHECK64-IZHINXMIN-NEXT: and a0, a0, a17650; CHECK64-IZHINXMIN-NEXT: ret7651;7652; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_w_s_sat_i8:7653; CHECK32-IZDINXZHINXMIN: # %bb.0: # %start7654; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a07655; CHECK32-IZDINXZHINXMIN-NEXT: lui a1, 7987207656; CHECK32-IZDINXZHINXMIN-NEXT: lui a2, 2744007657; CHECK32-IZDINXZHINXMIN-NEXT: fmax.s a1, a0, a17658; CHECK32-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a07659; CHECK32-IZDINXZHINXMIN-NEXT: neg a0, a07660; CHECK32-IZDINXZHINXMIN-NEXT: fmin.s a1, a1, a27661; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.w.s a1, a1, rtz7662; CHECK32-IZDINXZHINXMIN-NEXT: and a0, a0, a17663; CHECK32-IZDINXZHINXMIN-NEXT: ret7664;7665; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_w_s_sat_i8:7666; CHECK64-IZDINXZHINXMIN: # %bb.0: # %start7667; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a07668; CHECK64-IZDINXZHINXMIN-NEXT: lui a1, 7987207669; CHECK64-IZDINXZHINXMIN-NEXT: lui a2, 2744007670; CHECK64-IZDINXZHINXMIN-NEXT: fmax.s a1, a0, a17671; CHECK64-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a07672; CHECK64-IZDINXZHINXMIN-NEXT: neg a0, a07673; CHECK64-IZDINXZHINXMIN-NEXT: fmin.s a1, a1, a27674; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.l.s a1, a1, rtz7675; CHECK64-IZDINXZHINXMIN-NEXT: and a0, a0, a17676; CHECK64-IZDINXZHINXMIN-NEXT: ret7677start:7678 %0 = tail call i8 @llvm.fptosi.sat.i8.f16(half %a)7679 ret i8 %07680}7681 7682define zeroext i8 @fcvt_wu_s_i8(half %a) nounwind {7683; RV32IZFH-LABEL: fcvt_wu_s_i8:7684; RV32IZFH: # %bb.0:7685; RV32IZFH-NEXT: fcvt.wu.h a0, fa0, rtz7686; RV32IZFH-NEXT: ret7687;7688; RV64IZFH-LABEL: fcvt_wu_s_i8:7689; RV64IZFH: # %bb.0:7690; RV64IZFH-NEXT: fcvt.lu.h a0, fa0, rtz7691; RV64IZFH-NEXT: ret7692;7693; RV32IDZFH-LABEL: fcvt_wu_s_i8:7694; RV32IDZFH: # %bb.0:7695; RV32IDZFH-NEXT: fcvt.wu.h a0, fa0, rtz7696; RV32IDZFH-NEXT: ret7697;7698; RV64IDZFH-LABEL: fcvt_wu_s_i8:7699; RV64IDZFH: # %bb.0:7700; RV64IDZFH-NEXT: fcvt.lu.h a0, fa0, rtz7701; RV64IDZFH-NEXT: ret7702;7703; RV32IZHINX-LABEL: fcvt_wu_s_i8:7704; RV32IZHINX: # %bb.0:7705; RV32IZHINX-NEXT: fcvt.wu.h a0, a0, rtz7706; RV32IZHINX-NEXT: ret7707;7708; RV64IZHINX-LABEL: fcvt_wu_s_i8:7709; RV64IZHINX: # %bb.0:7710; RV64IZHINX-NEXT: fcvt.lu.h a0, a0, rtz7711; RV64IZHINX-NEXT: ret7712;7713; RV32IZDINXZHINX-LABEL: fcvt_wu_s_i8:7714; RV32IZDINXZHINX: # %bb.0:7715; RV32IZDINXZHINX-NEXT: fcvt.wu.h a0, a0, rtz7716; RV32IZDINXZHINX-NEXT: ret7717;7718; RV64IZDINXZHINX-LABEL: fcvt_wu_s_i8:7719; RV64IZDINXZHINX: # %bb.0:7720; RV64IZDINXZHINX-NEXT: fcvt.lu.h a0, a0, rtz7721; RV64IZDINXZHINX-NEXT: ret7722;7723; RV32I-LABEL: fcvt_wu_s_i8:7724; RV32I: # %bb.0:7725; RV32I-NEXT: addi sp, sp, -167726; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7727; RV32I-NEXT: slli a0, a0, 167728; RV32I-NEXT: srli a0, a0, 167729; RV32I-NEXT: call __extendhfsf27730; RV32I-NEXT: call __fixunssfsi7731; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7732; RV32I-NEXT: addi sp, sp, 167733; RV32I-NEXT: ret7734;7735; RV64I-LABEL: fcvt_wu_s_i8:7736; RV64I: # %bb.0:7737; RV64I-NEXT: addi sp, sp, -167738; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill7739; RV64I-NEXT: slli a0, a0, 487740; RV64I-NEXT: srli a0, a0, 487741; RV64I-NEXT: call __extendhfsf27742; RV64I-NEXT: call __fixunssfdi7743; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload7744; RV64I-NEXT: addi sp, sp, 167745; RV64I-NEXT: ret7746;7747; RV32ID-ILP32-LABEL: fcvt_wu_s_i8:7748; RV32ID-ILP32: # %bb.0:7749; RV32ID-ILP32-NEXT: addi sp, sp, -167750; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7751; RV32ID-ILP32-NEXT: call __extendhfsf27752; RV32ID-ILP32-NEXT: fmv.w.x fa5, a07753; RV32ID-ILP32-NEXT: fcvt.wu.s a0, fa5, rtz7754; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7755; RV32ID-ILP32-NEXT: addi sp, sp, 167756; RV32ID-ILP32-NEXT: ret7757;7758; RV64ID-LP64-LABEL: fcvt_wu_s_i8:7759; RV64ID-LP64: # %bb.0:7760; RV64ID-LP64-NEXT: addi sp, sp, -167761; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill7762; RV64ID-LP64-NEXT: call __extendhfsf27763; RV64ID-LP64-NEXT: fmv.w.x fa5, a07764; RV64ID-LP64-NEXT: fcvt.lu.s a0, fa5, rtz7765; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload7766; RV64ID-LP64-NEXT: addi sp, sp, 167767; RV64ID-LP64-NEXT: ret7768;7769; RV32ID-LABEL: fcvt_wu_s_i8:7770; RV32ID: # %bb.0:7771; RV32ID-NEXT: addi sp, sp, -167772; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7773; RV32ID-NEXT: call __extendhfsf27774; RV32ID-NEXT: fcvt.wu.s a0, fa0, rtz7775; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7776; RV32ID-NEXT: addi sp, sp, 167777; RV32ID-NEXT: ret7778;7779; RV64ID-LABEL: fcvt_wu_s_i8:7780; RV64ID: # %bb.0:7781; RV64ID-NEXT: addi sp, sp, -167782; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill7783; RV64ID-NEXT: call __extendhfsf27784; RV64ID-NEXT: fcvt.lu.s a0, fa0, rtz7785; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload7786; RV64ID-NEXT: addi sp, sp, 167787; RV64ID-NEXT: ret7788;7789; CHECK32-IZFHMIN-LABEL: fcvt_wu_s_i8:7790; CHECK32-IZFHMIN: # %bb.0:7791; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa07792; CHECK32-IZFHMIN-NEXT: fcvt.w.s a0, fa5, rtz7793; CHECK32-IZFHMIN-NEXT: ret7794;7795; CHECK64-IZFHMIN-LABEL: fcvt_wu_s_i8:7796; CHECK64-IZFHMIN: # %bb.0:7797; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa07798; CHECK64-IZFHMIN-NEXT: fcvt.lu.s a0, fa5, rtz7799; CHECK64-IZFHMIN-NEXT: ret7800;7801; CHECK32-IZHINXMIN-LABEL: fcvt_wu_s_i8:7802; CHECK32-IZHINXMIN: # %bb.0:7803; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a07804; CHECK32-IZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz7805; CHECK32-IZHINXMIN-NEXT: ret7806;7807; CHECK64-IZHINXMIN-LABEL: fcvt_wu_s_i8:7808; CHECK64-IZHINXMIN: # %bb.0:7809; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a07810; CHECK64-IZHINXMIN-NEXT: fcvt.lu.s a0, a0, rtz7811; CHECK64-IZHINXMIN-NEXT: ret7812;7813; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_wu_s_i8:7814; CHECK32-IZDINXZHINXMIN: # %bb.0:7815; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a07816; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.w.s a0, a0, rtz7817; CHECK32-IZDINXZHINXMIN-NEXT: ret7818;7819; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_wu_s_i8:7820; CHECK64-IZDINXZHINXMIN: # %bb.0:7821; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a07822; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.lu.s a0, a0, rtz7823; CHECK64-IZDINXZHINXMIN-NEXT: ret7824 %1 = fptoui half %a to i87825 ret i8 %17826}7827 7828define zeroext i8 @fcvt_wu_s_sat_i8(half %a) nounwind {7829; RV32IZFH-LABEL: fcvt_wu_s_sat_i8:7830; RV32IZFH: # %bb.0: # %start7831; RV32IZFH-NEXT: fcvt.s.h fa5, fa07832; RV32IZFH-NEXT: fmv.w.x fa4, zero7833; RV32IZFH-NEXT: lui a0, 2764647834; RV32IZFH-NEXT: fmax.s fa5, fa5, fa47835; RV32IZFH-NEXT: fmv.w.x fa4, a07836; RV32IZFH-NEXT: fmin.s fa5, fa5, fa47837; RV32IZFH-NEXT: fcvt.wu.s a0, fa5, rtz7838; RV32IZFH-NEXT: ret7839;7840; RV64IZFH-LABEL: fcvt_wu_s_sat_i8:7841; RV64IZFH: # %bb.0: # %start7842; RV64IZFH-NEXT: fcvt.s.h fa5, fa07843; RV64IZFH-NEXT: fmv.w.x fa4, zero7844; RV64IZFH-NEXT: lui a0, 2764647845; RV64IZFH-NEXT: fmax.s fa5, fa5, fa47846; RV64IZFH-NEXT: fmv.w.x fa4, a07847; RV64IZFH-NEXT: fmin.s fa5, fa5, fa47848; RV64IZFH-NEXT: fcvt.lu.s a0, fa5, rtz7849; RV64IZFH-NEXT: ret7850;7851; RV32IDZFH-LABEL: fcvt_wu_s_sat_i8:7852; RV32IDZFH: # %bb.0: # %start7853; RV32IDZFH-NEXT: fcvt.s.h fa5, fa07854; RV32IDZFH-NEXT: fmv.w.x fa4, zero7855; RV32IDZFH-NEXT: lui a0, 2764647856; RV32IDZFH-NEXT: fmax.s fa5, fa5, fa47857; RV32IDZFH-NEXT: fmv.w.x fa4, a07858; RV32IDZFH-NEXT: fmin.s fa5, fa5, fa47859; RV32IDZFH-NEXT: fcvt.wu.s a0, fa5, rtz7860; RV32IDZFH-NEXT: ret7861;7862; RV64IDZFH-LABEL: fcvt_wu_s_sat_i8:7863; RV64IDZFH: # %bb.0: # %start7864; RV64IDZFH-NEXT: fcvt.s.h fa5, fa07865; RV64IDZFH-NEXT: fmv.w.x fa4, zero7866; RV64IDZFH-NEXT: lui a0, 2764647867; RV64IDZFH-NEXT: fmax.s fa5, fa5, fa47868; RV64IDZFH-NEXT: fmv.w.x fa4, a07869; RV64IDZFH-NEXT: fmin.s fa5, fa5, fa47870; RV64IDZFH-NEXT: fcvt.lu.s a0, fa5, rtz7871; RV64IDZFH-NEXT: ret7872;7873; RV32IZHINX-LABEL: fcvt_wu_s_sat_i8:7874; RV32IZHINX: # %bb.0: # %start7875; RV32IZHINX-NEXT: fcvt.s.h a0, a07876; RV32IZHINX-NEXT: fmax.s a0, a0, zero7877; RV32IZHINX-NEXT: lui a1, 2764647878; RV32IZHINX-NEXT: fmin.s a0, a0, a17879; RV32IZHINX-NEXT: fcvt.wu.s a0, a0, rtz7880; RV32IZHINX-NEXT: ret7881;7882; RV64IZHINX-LABEL: fcvt_wu_s_sat_i8:7883; RV64IZHINX: # %bb.0: # %start7884; RV64IZHINX-NEXT: fcvt.s.h a0, a07885; RV64IZHINX-NEXT: fmax.s a0, a0, zero7886; RV64IZHINX-NEXT: lui a1, 2764647887; RV64IZHINX-NEXT: fmin.s a0, a0, a17888; RV64IZHINX-NEXT: fcvt.lu.s a0, a0, rtz7889; RV64IZHINX-NEXT: ret7890;7891; RV32IZDINXZHINX-LABEL: fcvt_wu_s_sat_i8:7892; RV32IZDINXZHINX: # %bb.0: # %start7893; RV32IZDINXZHINX-NEXT: fcvt.s.h a0, a07894; RV32IZDINXZHINX-NEXT: fmax.s a0, a0, zero7895; RV32IZDINXZHINX-NEXT: lui a1, 2764647896; RV32IZDINXZHINX-NEXT: fmin.s a0, a0, a17897; RV32IZDINXZHINX-NEXT: fcvt.wu.s a0, a0, rtz7898; RV32IZDINXZHINX-NEXT: ret7899;7900; RV64IZDINXZHINX-LABEL: fcvt_wu_s_sat_i8:7901; RV64IZDINXZHINX: # %bb.0: # %start7902; RV64IZDINXZHINX-NEXT: fcvt.s.h a0, a07903; RV64IZDINXZHINX-NEXT: fmax.s a0, a0, zero7904; RV64IZDINXZHINX-NEXT: lui a1, 2764647905; RV64IZDINXZHINX-NEXT: fmin.s a0, a0, a17906; RV64IZDINXZHINX-NEXT: fcvt.lu.s a0, a0, rtz7907; RV64IZDINXZHINX-NEXT: ret7908;7909; RV32I-LABEL: fcvt_wu_s_sat_i8:7910; RV32I: # %bb.0: # %start7911; RV32I-NEXT: addi sp, sp, -167912; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7913; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill7914; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill7915; RV32I-NEXT: sw s2, 0(sp) # 4-byte Folded Spill7916; RV32I-NEXT: slli a0, a0, 167917; RV32I-NEXT: srli a0, a0, 167918; RV32I-NEXT: call __extendhfsf27919; RV32I-NEXT: mv s2, a07920; RV32I-NEXT: li a1, 07921; RV32I-NEXT: call __gesf27922; RV32I-NEXT: mv s0, a07923; RV32I-NEXT: mv a0, s27924; RV32I-NEXT: call __fixunssfsi7925; RV32I-NEXT: mv s1, a07926; RV32I-NEXT: lui a1, 2764647927; RV32I-NEXT: mv a0, s27928; RV32I-NEXT: call __gtsf27929; RV32I-NEXT: blez a0, .LBB38_27930; RV32I-NEXT: # %bb.1: # %start7931; RV32I-NEXT: li a0, 2557932; RV32I-NEXT: j .LBB38_37933; RV32I-NEXT: .LBB38_2:7934; RV32I-NEXT: srli s0, s0, 317935; RV32I-NEXT: addi a0, s0, -17936; RV32I-NEXT: and a0, a0, s17937; RV32I-NEXT: .LBB38_3: # %start7938; RV32I-NEXT: zext.b a0, a07939; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7940; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload7941; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload7942; RV32I-NEXT: lw s2, 0(sp) # 4-byte Folded Reload7943; RV32I-NEXT: addi sp, sp, 167944; RV32I-NEXT: ret7945;7946; RV64I-LABEL: fcvt_wu_s_sat_i8:7947; RV64I: # %bb.0: # %start7948; RV64I-NEXT: addi sp, sp, -327949; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill7950; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill7951; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill7952; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill7953; RV64I-NEXT: slli a0, a0, 487954; RV64I-NEXT: srli a0, a0, 487955; RV64I-NEXT: call __extendhfsf27956; RV64I-NEXT: mv s2, a07957; RV64I-NEXT: li a1, 07958; RV64I-NEXT: call __gesf27959; RV64I-NEXT: mv s0, a07960; RV64I-NEXT: mv a0, s27961; RV64I-NEXT: call __fixunssfdi7962; RV64I-NEXT: mv s1, a07963; RV64I-NEXT: lui a1, 2764647964; RV64I-NEXT: mv a0, s27965; RV64I-NEXT: call __gtsf27966; RV64I-NEXT: blez a0, .LBB38_27967; RV64I-NEXT: # %bb.1: # %start7968; RV64I-NEXT: li a0, 2557969; RV64I-NEXT: j .LBB38_37970; RV64I-NEXT: .LBB38_2:7971; RV64I-NEXT: srli s0, s0, 637972; RV64I-NEXT: addi a0, s0, -17973; RV64I-NEXT: and a0, a0, s17974; RV64I-NEXT: .LBB38_3: # %start7975; RV64I-NEXT: zext.b a0, a07976; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload7977; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload7978; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload7979; RV64I-NEXT: ld s2, 0(sp) # 8-byte Folded Reload7980; RV64I-NEXT: addi sp, sp, 327981; RV64I-NEXT: ret7982;7983; RV32ID-ILP32-LABEL: fcvt_wu_s_sat_i8:7984; RV32ID-ILP32: # %bb.0: # %start7985; RV32ID-ILP32-NEXT: addi sp, sp, -167986; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill7987; RV32ID-ILP32-NEXT: call __extendhfsf27988; RV32ID-ILP32-NEXT: fmv.w.x fa5, a07989; RV32ID-ILP32-NEXT: fmv.w.x fa4, zero7990; RV32ID-ILP32-NEXT: lui a0, 2764647991; RV32ID-ILP32-NEXT: fmax.s fa5, fa5, fa47992; RV32ID-ILP32-NEXT: fmv.w.x fa4, a07993; RV32ID-ILP32-NEXT: fmin.s fa5, fa5, fa47994; RV32ID-ILP32-NEXT: fcvt.wu.s a0, fa5, rtz7995; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload7996; RV32ID-ILP32-NEXT: addi sp, sp, 167997; RV32ID-ILP32-NEXT: ret7998;7999; RV64ID-LP64-LABEL: fcvt_wu_s_sat_i8:8000; RV64ID-LP64: # %bb.0: # %start8001; RV64ID-LP64-NEXT: addi sp, sp, -168002; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8003; RV64ID-LP64-NEXT: call __extendhfsf28004; RV64ID-LP64-NEXT: fmv.w.x fa5, a08005; RV64ID-LP64-NEXT: fmv.w.x fa4, zero8006; RV64ID-LP64-NEXT: lui a0, 2764648007; RV64ID-LP64-NEXT: fmax.s fa5, fa5, fa48008; RV64ID-LP64-NEXT: fmv.w.x fa4, a08009; RV64ID-LP64-NEXT: fmin.s fa5, fa5, fa48010; RV64ID-LP64-NEXT: fcvt.lu.s a0, fa5, rtz8011; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8012; RV64ID-LP64-NEXT: addi sp, sp, 168013; RV64ID-LP64-NEXT: ret8014;8015; RV32ID-LABEL: fcvt_wu_s_sat_i8:8016; RV32ID: # %bb.0: # %start8017; RV32ID-NEXT: addi sp, sp, -168018; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill8019; RV32ID-NEXT: call __extendhfsf28020; RV32ID-NEXT: fmv.w.x fa5, zero8021; RV32ID-NEXT: lui a0, 2764648022; RV32ID-NEXT: fmax.s fa5, fa0, fa58023; RV32ID-NEXT: fmv.w.x fa4, a08024; RV32ID-NEXT: fmin.s fa5, fa5, fa48025; RV32ID-NEXT: fcvt.wu.s a0, fa5, rtz8026; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload8027; RV32ID-NEXT: addi sp, sp, 168028; RV32ID-NEXT: ret8029;8030; RV64ID-LABEL: fcvt_wu_s_sat_i8:8031; RV64ID: # %bb.0: # %start8032; RV64ID-NEXT: addi sp, sp, -168033; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8034; RV64ID-NEXT: call __extendhfsf28035; RV64ID-NEXT: fmv.w.x fa5, zero8036; RV64ID-NEXT: lui a0, 2764648037; RV64ID-NEXT: fmax.s fa5, fa0, fa58038; RV64ID-NEXT: fmv.w.x fa4, a08039; RV64ID-NEXT: fmin.s fa5, fa5, fa48040; RV64ID-NEXT: fcvt.lu.s a0, fa5, rtz8041; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8042; RV64ID-NEXT: addi sp, sp, 168043; RV64ID-NEXT: ret8044;8045; CHECK32-IZFHMIN-LABEL: fcvt_wu_s_sat_i8:8046; CHECK32-IZFHMIN: # %bb.0: # %start8047; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa08048; CHECK32-IZFHMIN-NEXT: fmv.w.x fa4, zero8049; CHECK32-IZFHMIN-NEXT: lui a0, 2764648050; CHECK32-IZFHMIN-NEXT: fmax.s fa5, fa5, fa48051; CHECK32-IZFHMIN-NEXT: fmv.w.x fa4, a08052; CHECK32-IZFHMIN-NEXT: fmin.s fa5, fa5, fa48053; CHECK32-IZFHMIN-NEXT: fcvt.wu.s a0, fa5, rtz8054; CHECK32-IZFHMIN-NEXT: ret8055;8056; CHECK64-IZFHMIN-LABEL: fcvt_wu_s_sat_i8:8057; CHECK64-IZFHMIN: # %bb.0: # %start8058; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa08059; CHECK64-IZFHMIN-NEXT: fmv.w.x fa4, zero8060; CHECK64-IZFHMIN-NEXT: lui a0, 2764648061; CHECK64-IZFHMIN-NEXT: fmax.s fa5, fa5, fa48062; CHECK64-IZFHMIN-NEXT: fmv.w.x fa4, a08063; CHECK64-IZFHMIN-NEXT: fmin.s fa5, fa5, fa48064; CHECK64-IZFHMIN-NEXT: fcvt.lu.s a0, fa5, rtz8065; CHECK64-IZFHMIN-NEXT: ret8066;8067; CHECK32-IZHINXMIN-LABEL: fcvt_wu_s_sat_i8:8068; CHECK32-IZHINXMIN: # %bb.0: # %start8069; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a08070; CHECK32-IZHINXMIN-NEXT: fmax.s a0, a0, zero8071; CHECK32-IZHINXMIN-NEXT: lui a1, 2764648072; CHECK32-IZHINXMIN-NEXT: fmin.s a0, a0, a18073; CHECK32-IZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz8074; CHECK32-IZHINXMIN-NEXT: ret8075;8076; CHECK64-IZHINXMIN-LABEL: fcvt_wu_s_sat_i8:8077; CHECK64-IZHINXMIN: # %bb.0: # %start8078; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a08079; CHECK64-IZHINXMIN-NEXT: fmax.s a0, a0, zero8080; CHECK64-IZHINXMIN-NEXT: lui a1, 2764648081; CHECK64-IZHINXMIN-NEXT: fmin.s a0, a0, a18082; CHECK64-IZHINXMIN-NEXT: fcvt.lu.s a0, a0, rtz8083; CHECK64-IZHINXMIN-NEXT: ret8084;8085; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_wu_s_sat_i8:8086; CHECK32-IZDINXZHINXMIN: # %bb.0: # %start8087; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a08088; CHECK32-IZDINXZHINXMIN-NEXT: fmax.s a0, a0, zero8089; CHECK32-IZDINXZHINXMIN-NEXT: lui a1, 2764648090; CHECK32-IZDINXZHINXMIN-NEXT: fmin.s a0, a0, a18091; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.wu.s a0, a0, rtz8092; CHECK32-IZDINXZHINXMIN-NEXT: ret8093;8094; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_wu_s_sat_i8:8095; CHECK64-IZDINXZHINXMIN: # %bb.0: # %start8096; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a08097; CHECK64-IZDINXZHINXMIN-NEXT: fmax.s a0, a0, zero8098; CHECK64-IZDINXZHINXMIN-NEXT: lui a1, 2764648099; CHECK64-IZDINXZHINXMIN-NEXT: fmin.s a0, a0, a18100; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.lu.s a0, a0, rtz8101; CHECK64-IZDINXZHINXMIN-NEXT: ret8102start:8103 %0 = tail call i8 @llvm.fptoui.sat.i8.f16(half %a)8104 ret i8 %08105}8106 8107define zeroext i32 @fcvt_wu_h_sat_zext(half %a) nounwind {8108; RV32IZFH-LABEL: fcvt_wu_h_sat_zext:8109; RV32IZFH: # %bb.0: # %start8110; RV32IZFH-NEXT: fcvt.wu.h a0, fa0, rtz8111; RV32IZFH-NEXT: feq.h a1, fa0, fa08112; RV32IZFH-NEXT: seqz a1, a18113; RV32IZFH-NEXT: addi a1, a1, -18114; RV32IZFH-NEXT: and a0, a1, a08115; RV32IZFH-NEXT: ret8116;8117; RV64IZFH-LABEL: fcvt_wu_h_sat_zext:8118; RV64IZFH: # %bb.0: # %start8119; RV64IZFH-NEXT: fcvt.wu.h a0, fa0, rtz8120; RV64IZFH-NEXT: feq.h a1, fa0, fa08121; RV64IZFH-NEXT: seqz a1, a18122; RV64IZFH-NEXT: addi a1, a1, -18123; RV64IZFH-NEXT: and a0, a0, a18124; RV64IZFH-NEXT: slli a0, a0, 328125; RV64IZFH-NEXT: srli a0, a0, 328126; RV64IZFH-NEXT: ret8127;8128; RV32IDZFH-LABEL: fcvt_wu_h_sat_zext:8129; RV32IDZFH: # %bb.0: # %start8130; RV32IDZFH-NEXT: fcvt.wu.h a0, fa0, rtz8131; RV32IDZFH-NEXT: feq.h a1, fa0, fa08132; RV32IDZFH-NEXT: seqz a1, a18133; RV32IDZFH-NEXT: addi a1, a1, -18134; RV32IDZFH-NEXT: and a0, a1, a08135; RV32IDZFH-NEXT: ret8136;8137; RV64IDZFH-LABEL: fcvt_wu_h_sat_zext:8138; RV64IDZFH: # %bb.0: # %start8139; RV64IDZFH-NEXT: fcvt.wu.h a0, fa0, rtz8140; RV64IDZFH-NEXT: feq.h a1, fa0, fa08141; RV64IDZFH-NEXT: seqz a1, a18142; RV64IDZFH-NEXT: addi a1, a1, -18143; RV64IDZFH-NEXT: and a0, a0, a18144; RV64IDZFH-NEXT: slli a0, a0, 328145; RV64IDZFH-NEXT: srli a0, a0, 328146; RV64IDZFH-NEXT: ret8147;8148; RV32IZHINX-LABEL: fcvt_wu_h_sat_zext:8149; RV32IZHINX: # %bb.0: # %start8150; RV32IZHINX-NEXT: fcvt.wu.h a1, a0, rtz8151; RV32IZHINX-NEXT: feq.h a0, a0, a08152; RV32IZHINX-NEXT: seqz a0, a08153; RV32IZHINX-NEXT: addi a0, a0, -18154; RV32IZHINX-NEXT: and a0, a0, a18155; RV32IZHINX-NEXT: ret8156;8157; RV64IZHINX-LABEL: fcvt_wu_h_sat_zext:8158; RV64IZHINX: # %bb.0: # %start8159; RV64IZHINX-NEXT: fcvt.wu.h a1, a0, rtz8160; RV64IZHINX-NEXT: feq.h a0, a0, a08161; RV64IZHINX-NEXT: seqz a0, a08162; RV64IZHINX-NEXT: addi a0, a0, -18163; RV64IZHINX-NEXT: and a0, a1, a08164; RV64IZHINX-NEXT: slli a0, a0, 328165; RV64IZHINX-NEXT: srli a0, a0, 328166; RV64IZHINX-NEXT: ret8167;8168; RV32IZDINXZHINX-LABEL: fcvt_wu_h_sat_zext:8169; RV32IZDINXZHINX: # %bb.0: # %start8170; RV32IZDINXZHINX-NEXT: fcvt.wu.h a1, a0, rtz8171; RV32IZDINXZHINX-NEXT: feq.h a0, a0, a08172; RV32IZDINXZHINX-NEXT: seqz a0, a08173; RV32IZDINXZHINX-NEXT: addi a0, a0, -18174; RV32IZDINXZHINX-NEXT: and a0, a0, a18175; RV32IZDINXZHINX-NEXT: ret8176;8177; RV64IZDINXZHINX-LABEL: fcvt_wu_h_sat_zext:8178; RV64IZDINXZHINX: # %bb.0: # %start8179; RV64IZDINXZHINX-NEXT: fcvt.wu.h a1, a0, rtz8180; RV64IZDINXZHINX-NEXT: feq.h a0, a0, a08181; RV64IZDINXZHINX-NEXT: seqz a0, a08182; RV64IZDINXZHINX-NEXT: addi a0, a0, -18183; RV64IZDINXZHINX-NEXT: and a0, a1, a08184; RV64IZDINXZHINX-NEXT: slli a0, a0, 328185; RV64IZDINXZHINX-NEXT: srli a0, a0, 328186; RV64IZDINXZHINX-NEXT: ret8187;8188; RV32I-LABEL: fcvt_wu_h_sat_zext:8189; RV32I: # %bb.0: # %start8190; RV32I-NEXT: addi sp, sp, -168191; RV32I-NEXT: sw ra, 12(sp) # 4-byte Folded Spill8192; RV32I-NEXT: sw s0, 8(sp) # 4-byte Folded Spill8193; RV32I-NEXT: sw s1, 4(sp) # 4-byte Folded Spill8194; RV32I-NEXT: sw s2, 0(sp) # 4-byte Folded Spill8195; RV32I-NEXT: slli a0, a0, 168196; RV32I-NEXT: srli a0, a0, 168197; RV32I-NEXT: call __extendhfsf28198; RV32I-NEXT: mv s0, a08199; RV32I-NEXT: lui a1, 3256328200; RV32I-NEXT: addi a1, a1, -18201; RV32I-NEXT: call __gtsf28202; RV32I-NEXT: sgtz a0, a08203; RV32I-NEXT: neg s1, a08204; RV32I-NEXT: mv a0, s08205; RV32I-NEXT: li a1, 08206; RV32I-NEXT: call __gesf28207; RV32I-NEXT: srli a0, a0, 318208; RV32I-NEXT: addi s2, a0, -18209; RV32I-NEXT: mv a0, s08210; RV32I-NEXT: call __fixunssfsi8211; RV32I-NEXT: and a0, s2, a08212; RV32I-NEXT: or a0, s1, a08213; RV32I-NEXT: lw ra, 12(sp) # 4-byte Folded Reload8214; RV32I-NEXT: lw s0, 8(sp) # 4-byte Folded Reload8215; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload8216; RV32I-NEXT: lw s2, 0(sp) # 4-byte Folded Reload8217; RV32I-NEXT: addi sp, sp, 168218; RV32I-NEXT: ret8219;8220; RV64I-LABEL: fcvt_wu_h_sat_zext:8221; RV64I: # %bb.0: # %start8222; RV64I-NEXT: addi sp, sp, -328223; RV64I-NEXT: sd ra, 24(sp) # 8-byte Folded Spill8224; RV64I-NEXT: sd s0, 16(sp) # 8-byte Folded Spill8225; RV64I-NEXT: sd s1, 8(sp) # 8-byte Folded Spill8226; RV64I-NEXT: sd s2, 0(sp) # 8-byte Folded Spill8227; RV64I-NEXT: slli a0, a0, 488228; RV64I-NEXT: srli a0, a0, 488229; RV64I-NEXT: call __extendhfsf28230; RV64I-NEXT: mv s2, a08231; RV64I-NEXT: li a1, 08232; RV64I-NEXT: call __gesf28233; RV64I-NEXT: mv s0, a08234; RV64I-NEXT: mv a0, s28235; RV64I-NEXT: call __fixunssfdi8236; RV64I-NEXT: mv s1, a08237; RV64I-NEXT: lui a1, 3256328238; RV64I-NEXT: addi a1, a1, -18239; RV64I-NEXT: mv a0, s28240; RV64I-NEXT: call __gtsf28241; RV64I-NEXT: blez a0, .LBB39_28242; RV64I-NEXT: # %bb.1: # %start8243; RV64I-NEXT: li a0, -18244; RV64I-NEXT: srli a0, a0, 328245; RV64I-NEXT: j .LBB39_38246; RV64I-NEXT: .LBB39_2:8247; RV64I-NEXT: srli s0, s0, 638248; RV64I-NEXT: addi a0, s0, -18249; RV64I-NEXT: and a0, a0, s18250; RV64I-NEXT: .LBB39_3: # %start8251; RV64I-NEXT: slli a0, a0, 328252; RV64I-NEXT: srli a0, a0, 328253; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload8254; RV64I-NEXT: ld s0, 16(sp) # 8-byte Folded Reload8255; RV64I-NEXT: ld s1, 8(sp) # 8-byte Folded Reload8256; RV64I-NEXT: ld s2, 0(sp) # 8-byte Folded Reload8257; RV64I-NEXT: addi sp, sp, 328258; RV64I-NEXT: ret8259;8260; RV32ID-ILP32-LABEL: fcvt_wu_h_sat_zext:8261; RV32ID-ILP32: # %bb.0: # %start8262; RV32ID-ILP32-NEXT: addi sp, sp, -168263; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill8264; RV32ID-ILP32-NEXT: call __extendhfsf28265; RV32ID-ILP32-NEXT: fmv.w.x fa5, a08266; RV32ID-ILP32-NEXT: fcvt.wu.s a0, fa5, rtz8267; RV32ID-ILP32-NEXT: feq.s a1, fa5, fa58268; RV32ID-ILP32-NEXT: seqz a1, a18269; RV32ID-ILP32-NEXT: addi a1, a1, -18270; RV32ID-ILP32-NEXT: and a0, a1, a08271; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload8272; RV32ID-ILP32-NEXT: addi sp, sp, 168273; RV32ID-ILP32-NEXT: ret8274;8275; RV64ID-LP64-LABEL: fcvt_wu_h_sat_zext:8276; RV64ID-LP64: # %bb.0: # %start8277; RV64ID-LP64-NEXT: addi sp, sp, -168278; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8279; RV64ID-LP64-NEXT: call __extendhfsf28280; RV64ID-LP64-NEXT: fmv.w.x fa5, a08281; RV64ID-LP64-NEXT: fcvt.wu.s a0, fa5, rtz8282; RV64ID-LP64-NEXT: feq.s a1, fa5, fa58283; RV64ID-LP64-NEXT: seqz a1, a18284; RV64ID-LP64-NEXT: addi a1, a1, -18285; RV64ID-LP64-NEXT: and a0, a0, a18286; RV64ID-LP64-NEXT: slli a0, a0, 328287; RV64ID-LP64-NEXT: srli a0, a0, 328288; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8289; RV64ID-LP64-NEXT: addi sp, sp, 168290; RV64ID-LP64-NEXT: ret8291;8292; RV32ID-LABEL: fcvt_wu_h_sat_zext:8293; RV32ID: # %bb.0: # %start8294; RV32ID-NEXT: addi sp, sp, -168295; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill8296; RV32ID-NEXT: call __extendhfsf28297; RV32ID-NEXT: fcvt.wu.s a0, fa0, rtz8298; RV32ID-NEXT: feq.s a1, fa0, fa08299; RV32ID-NEXT: seqz a1, a18300; RV32ID-NEXT: addi a1, a1, -18301; RV32ID-NEXT: and a0, a1, a08302; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload8303; RV32ID-NEXT: addi sp, sp, 168304; RV32ID-NEXT: ret8305;8306; RV64ID-LABEL: fcvt_wu_h_sat_zext:8307; RV64ID: # %bb.0: # %start8308; RV64ID-NEXT: addi sp, sp, -168309; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8310; RV64ID-NEXT: call __extendhfsf28311; RV64ID-NEXT: fcvt.wu.s a0, fa0, rtz8312; RV64ID-NEXT: feq.s a1, fa0, fa08313; RV64ID-NEXT: seqz a1, a18314; RV64ID-NEXT: addi a1, a1, -18315; RV64ID-NEXT: and a0, a0, a18316; RV64ID-NEXT: slli a0, a0, 328317; RV64ID-NEXT: srli a0, a0, 328318; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8319; RV64ID-NEXT: addi sp, sp, 168320; RV64ID-NEXT: ret8321;8322; CHECK32-IZFHMIN-LABEL: fcvt_wu_h_sat_zext:8323; CHECK32-IZFHMIN: # %bb.0: # %start8324; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa08325; CHECK32-IZFHMIN-NEXT: fcvt.wu.s a0, fa5, rtz8326; CHECK32-IZFHMIN-NEXT: feq.s a1, fa5, fa58327; CHECK32-IZFHMIN-NEXT: seqz a1, a18328; CHECK32-IZFHMIN-NEXT: addi a1, a1, -18329; CHECK32-IZFHMIN-NEXT: and a0, a1, a08330; CHECK32-IZFHMIN-NEXT: ret8331;8332; CHECK64-IZFHMIN-LABEL: fcvt_wu_h_sat_zext:8333; CHECK64-IZFHMIN: # %bb.0: # %start8334; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa08335; CHECK64-IZFHMIN-NEXT: fcvt.wu.s a0, fa5, rtz8336; CHECK64-IZFHMIN-NEXT: feq.s a1, fa5, fa58337; CHECK64-IZFHMIN-NEXT: seqz a1, a18338; CHECK64-IZFHMIN-NEXT: addi a1, a1, -18339; CHECK64-IZFHMIN-NEXT: and a0, a0, a18340; CHECK64-IZFHMIN-NEXT: slli a0, a0, 328341; CHECK64-IZFHMIN-NEXT: srli a0, a0, 328342; CHECK64-IZFHMIN-NEXT: ret8343;8344; CHECK32-IZHINXMIN-LABEL: fcvt_wu_h_sat_zext:8345; CHECK32-IZHINXMIN: # %bb.0: # %start8346; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a08347; CHECK32-IZHINXMIN-NEXT: fcvt.wu.s a1, a0, rtz8348; CHECK32-IZHINXMIN-NEXT: feq.s a0, a0, a08349; CHECK32-IZHINXMIN-NEXT: seqz a0, a08350; CHECK32-IZHINXMIN-NEXT: addi a0, a0, -18351; CHECK32-IZHINXMIN-NEXT: and a0, a0, a18352; CHECK32-IZHINXMIN-NEXT: ret8353;8354; CHECK64-IZHINXMIN-LABEL: fcvt_wu_h_sat_zext:8355; CHECK64-IZHINXMIN: # %bb.0: # %start8356; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a08357; CHECK64-IZHINXMIN-NEXT: fcvt.wu.s a1, a0, rtz8358; CHECK64-IZHINXMIN-NEXT: feq.s a0, a0, a08359; CHECK64-IZHINXMIN-NEXT: seqz a0, a08360; CHECK64-IZHINXMIN-NEXT: addi a0, a0, -18361; CHECK64-IZHINXMIN-NEXT: and a0, a1, a08362; CHECK64-IZHINXMIN-NEXT: slli a0, a0, 328363; CHECK64-IZHINXMIN-NEXT: srli a0, a0, 328364; CHECK64-IZHINXMIN-NEXT: ret8365;8366; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_wu_h_sat_zext:8367; CHECK32-IZDINXZHINXMIN: # %bb.0: # %start8368; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a08369; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.wu.s a1, a0, rtz8370; CHECK32-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a08371; CHECK32-IZDINXZHINXMIN-NEXT: seqz a0, a08372; CHECK32-IZDINXZHINXMIN-NEXT: addi a0, a0, -18373; CHECK32-IZDINXZHINXMIN-NEXT: and a0, a0, a18374; CHECK32-IZDINXZHINXMIN-NEXT: ret8375;8376; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_wu_h_sat_zext:8377; CHECK64-IZDINXZHINXMIN: # %bb.0: # %start8378; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a08379; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.wu.s a1, a0, rtz8380; CHECK64-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a08381; CHECK64-IZDINXZHINXMIN-NEXT: seqz a0, a08382; CHECK64-IZDINXZHINXMIN-NEXT: addi a0, a0, -18383; CHECK64-IZDINXZHINXMIN-NEXT: and a0, a1, a08384; CHECK64-IZDINXZHINXMIN-NEXT: slli a0, a0, 328385; CHECK64-IZDINXZHINXMIN-NEXT: srli a0, a0, 328386; CHECK64-IZDINXZHINXMIN-NEXT: ret8387start:8388 %0 = tail call i32 @llvm.fptoui.sat.i32.f16(half %a)8389 ret i32 %08390}8391 8392define signext i32 @fcvt_w_h_sat_sext(half %a) nounwind {8393; CHECKIZFH-LABEL: fcvt_w_h_sat_sext:8394; CHECKIZFH: # %bb.0: # %start8395; CHECKIZFH-NEXT: fcvt.w.h a0, fa0, rtz8396; CHECKIZFH-NEXT: feq.h a1, fa0, fa08397; CHECKIZFH-NEXT: seqz a1, a18398; CHECKIZFH-NEXT: addi a1, a1, -18399; CHECKIZFH-NEXT: and a0, a1, a08400; CHECKIZFH-NEXT: ret8401;8402; RV32IDZFH-LABEL: fcvt_w_h_sat_sext:8403; RV32IDZFH: # %bb.0: # %start8404; RV32IDZFH-NEXT: fcvt.w.h a0, fa0, rtz8405; RV32IDZFH-NEXT: feq.h a1, fa0, fa08406; RV32IDZFH-NEXT: seqz a1, a18407; RV32IDZFH-NEXT: addi a1, a1, -18408; RV32IDZFH-NEXT: and a0, a1, a08409; RV32IDZFH-NEXT: ret8410;8411; RV64IDZFH-LABEL: fcvt_w_h_sat_sext:8412; RV64IDZFH: # %bb.0: # %start8413; RV64IDZFH-NEXT: fcvt.w.h a0, fa0, rtz8414; RV64IDZFH-NEXT: feq.h a1, fa0, fa08415; RV64IDZFH-NEXT: seqz a1, a18416; RV64IDZFH-NEXT: addi a1, a1, -18417; RV64IDZFH-NEXT: and a0, a1, a08418; RV64IDZFH-NEXT: ret8419;8420; CHECKIZHINX-LABEL: fcvt_w_h_sat_sext:8421; CHECKIZHINX: # %bb.0: # %start8422; CHECKIZHINX-NEXT: fcvt.w.h a1, a0, rtz8423; CHECKIZHINX-NEXT: feq.h a0, a0, a08424; CHECKIZHINX-NEXT: seqz a0, a08425; CHECKIZHINX-NEXT: addi a0, a0, -18426; CHECKIZHINX-NEXT: and a0, a0, a18427; CHECKIZHINX-NEXT: ret8428;8429; CHECKIZDINXZHINX-LABEL: fcvt_w_h_sat_sext:8430; CHECKIZDINXZHINX: # %bb.0: # %start8431; CHECKIZDINXZHINX-NEXT: fcvt.w.h a1, a0, rtz8432; CHECKIZDINXZHINX-NEXT: feq.h a0, a0, a08433; CHECKIZDINXZHINX-NEXT: seqz a0, a08434; CHECKIZDINXZHINX-NEXT: addi a0, a0, -18435; CHECKIZDINXZHINX-NEXT: and a0, a0, a18436; CHECKIZDINXZHINX-NEXT: ret8437;8438; RV32I-LABEL: fcvt_w_h_sat_sext:8439; RV32I: # %bb.0: # %start8440; RV32I-NEXT: addi sp, sp, -328441; RV32I-NEXT: sw ra, 28(sp) # 4-byte Folded Spill8442; RV32I-NEXT: sw s0, 24(sp) # 4-byte Folded Spill8443; RV32I-NEXT: sw s1, 20(sp) # 4-byte Folded Spill8444; RV32I-NEXT: sw s2, 16(sp) # 4-byte Folded Spill8445; RV32I-NEXT: sw s3, 12(sp) # 4-byte Folded Spill8446; RV32I-NEXT: slli a0, a0, 168447; RV32I-NEXT: srli a0, a0, 168448; RV32I-NEXT: call __extendhfsf28449; RV32I-NEXT: mv s0, a08450; RV32I-NEXT: lui a1, 8478728451; RV32I-NEXT: call __gesf28452; RV32I-NEXT: mv s2, a08453; RV32I-NEXT: mv a0, s08454; RV32I-NEXT: call __fixsfsi8455; RV32I-NEXT: mv s1, a08456; RV32I-NEXT: lui s3, 5242888457; RV32I-NEXT: bgez s2, .LBB40_28458; RV32I-NEXT: # %bb.1: # %start8459; RV32I-NEXT: lui s1, 5242888460; RV32I-NEXT: .LBB40_2: # %start8461; RV32I-NEXT: lui a1, 3235848462; RV32I-NEXT: addi a1, a1, -18463; RV32I-NEXT: mv a0, s08464; RV32I-NEXT: call __gtsf28465; RV32I-NEXT: blez a0, .LBB40_48466; RV32I-NEXT: # %bb.3: # %start8467; RV32I-NEXT: addi s1, s3, -18468; RV32I-NEXT: .LBB40_4: # %start8469; RV32I-NEXT: mv a0, s08470; RV32I-NEXT: mv a1, s08471; RV32I-NEXT: call __unordsf28472; RV32I-NEXT: snez a0, a08473; RV32I-NEXT: addi a0, a0, -18474; RV32I-NEXT: and a0, a0, s18475; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload8476; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload8477; RV32I-NEXT: lw s1, 20(sp) # 4-byte Folded Reload8478; RV32I-NEXT: lw s2, 16(sp) # 4-byte Folded Reload8479; RV32I-NEXT: lw s3, 12(sp) # 4-byte Folded Reload8480; RV32I-NEXT: addi sp, sp, 328481; RV32I-NEXT: ret8482;8483; RV64I-LABEL: fcvt_w_h_sat_sext:8484; RV64I: # %bb.0: # %start8485; RV64I-NEXT: addi sp, sp, -488486; RV64I-NEXT: sd ra, 40(sp) # 8-byte Folded Spill8487; RV64I-NEXT: sd s0, 32(sp) # 8-byte Folded Spill8488; RV64I-NEXT: sd s1, 24(sp) # 8-byte Folded Spill8489; RV64I-NEXT: sd s2, 16(sp) # 8-byte Folded Spill8490; RV64I-NEXT: sd s3, 8(sp) # 8-byte Folded Spill8491; RV64I-NEXT: slli a0, a0, 488492; RV64I-NEXT: srli a0, a0, 488493; RV64I-NEXT: call __extendhfsf28494; RV64I-NEXT: mv s0, a08495; RV64I-NEXT: lui a1, 8478728496; RV64I-NEXT: call __gesf28497; RV64I-NEXT: mv s2, a08498; RV64I-NEXT: mv a0, s08499; RV64I-NEXT: call __fixsfdi8500; RV64I-NEXT: mv s1, a08501; RV64I-NEXT: lui s3, 5242888502; RV64I-NEXT: bgez s2, .LBB40_28503; RV64I-NEXT: # %bb.1: # %start8504; RV64I-NEXT: lui s1, 5242888505; RV64I-NEXT: .LBB40_2: # %start8506; RV64I-NEXT: lui a1, 3235848507; RV64I-NEXT: addi a1, a1, -18508; RV64I-NEXT: mv a0, s08509; RV64I-NEXT: call __gtsf28510; RV64I-NEXT: blez a0, .LBB40_48511; RV64I-NEXT: # %bb.3: # %start8512; RV64I-NEXT: addi s1, s3, -18513; RV64I-NEXT: .LBB40_4: # %start8514; RV64I-NEXT: mv a0, s08515; RV64I-NEXT: mv a1, s08516; RV64I-NEXT: call __unordsf28517; RV64I-NEXT: snez a0, a08518; RV64I-NEXT: addi a0, a0, -18519; RV64I-NEXT: and a0, a0, s18520; RV64I-NEXT: sext.w a0, a08521; RV64I-NEXT: ld ra, 40(sp) # 8-byte Folded Reload8522; RV64I-NEXT: ld s0, 32(sp) # 8-byte Folded Reload8523; RV64I-NEXT: ld s1, 24(sp) # 8-byte Folded Reload8524; RV64I-NEXT: ld s2, 16(sp) # 8-byte Folded Reload8525; RV64I-NEXT: ld s3, 8(sp) # 8-byte Folded Reload8526; RV64I-NEXT: addi sp, sp, 488527; RV64I-NEXT: ret8528;8529; RV32ID-ILP32-LABEL: fcvt_w_h_sat_sext:8530; RV32ID-ILP32: # %bb.0: # %start8531; RV32ID-ILP32-NEXT: addi sp, sp, -168532; RV32ID-ILP32-NEXT: sw ra, 12(sp) # 4-byte Folded Spill8533; RV32ID-ILP32-NEXT: call __extendhfsf28534; RV32ID-ILP32-NEXT: fmv.w.x fa5, a08535; RV32ID-ILP32-NEXT: fcvt.w.s a0, fa5, rtz8536; RV32ID-ILP32-NEXT: feq.s a1, fa5, fa58537; RV32ID-ILP32-NEXT: seqz a1, a18538; RV32ID-ILP32-NEXT: addi a1, a1, -18539; RV32ID-ILP32-NEXT: and a0, a1, a08540; RV32ID-ILP32-NEXT: lw ra, 12(sp) # 4-byte Folded Reload8541; RV32ID-ILP32-NEXT: addi sp, sp, 168542; RV32ID-ILP32-NEXT: ret8543;8544; RV64ID-LP64-LABEL: fcvt_w_h_sat_sext:8545; RV64ID-LP64: # %bb.0: # %start8546; RV64ID-LP64-NEXT: addi sp, sp, -168547; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8548; RV64ID-LP64-NEXT: call __extendhfsf28549; RV64ID-LP64-NEXT: fmv.w.x fa5, a08550; RV64ID-LP64-NEXT: fcvt.w.s a0, fa5, rtz8551; RV64ID-LP64-NEXT: feq.s a1, fa5, fa58552; RV64ID-LP64-NEXT: seqz a1, a18553; RV64ID-LP64-NEXT: addi a1, a1, -18554; RV64ID-LP64-NEXT: and a0, a1, a08555; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8556; RV64ID-LP64-NEXT: addi sp, sp, 168557; RV64ID-LP64-NEXT: ret8558;8559; RV32ID-LABEL: fcvt_w_h_sat_sext:8560; RV32ID: # %bb.0: # %start8561; RV32ID-NEXT: addi sp, sp, -168562; RV32ID-NEXT: sw ra, 12(sp) # 4-byte Folded Spill8563; RV32ID-NEXT: call __extendhfsf28564; RV32ID-NEXT: fcvt.w.s a0, fa0, rtz8565; RV32ID-NEXT: feq.s a1, fa0, fa08566; RV32ID-NEXT: seqz a1, a18567; RV32ID-NEXT: addi a1, a1, -18568; RV32ID-NEXT: and a0, a1, a08569; RV32ID-NEXT: lw ra, 12(sp) # 4-byte Folded Reload8570; RV32ID-NEXT: addi sp, sp, 168571; RV32ID-NEXT: ret8572;8573; RV64ID-LABEL: fcvt_w_h_sat_sext:8574; RV64ID: # %bb.0: # %start8575; RV64ID-NEXT: addi sp, sp, -168576; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8577; RV64ID-NEXT: call __extendhfsf28578; RV64ID-NEXT: fcvt.w.s a0, fa0, rtz8579; RV64ID-NEXT: feq.s a1, fa0, fa08580; RV64ID-NEXT: seqz a1, a18581; RV64ID-NEXT: addi a1, a1, -18582; RV64ID-NEXT: and a0, a1, a08583; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8584; RV64ID-NEXT: addi sp, sp, 168585; RV64ID-NEXT: ret8586;8587; CHECK32-IZFHMIN-LABEL: fcvt_w_h_sat_sext:8588; CHECK32-IZFHMIN: # %bb.0: # %start8589; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa5, fa08590; CHECK32-IZFHMIN-NEXT: fcvt.w.s a0, fa5, rtz8591; CHECK32-IZFHMIN-NEXT: feq.s a1, fa5, fa58592; CHECK32-IZFHMIN-NEXT: seqz a1, a18593; CHECK32-IZFHMIN-NEXT: addi a1, a1, -18594; CHECK32-IZFHMIN-NEXT: and a0, a1, a08595; CHECK32-IZFHMIN-NEXT: ret8596;8597; CHECK64-IZFHMIN-LABEL: fcvt_w_h_sat_sext:8598; CHECK64-IZFHMIN: # %bb.0: # %start8599; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa5, fa08600; CHECK64-IZFHMIN-NEXT: fcvt.w.s a0, fa5, rtz8601; CHECK64-IZFHMIN-NEXT: feq.s a1, fa5, fa58602; CHECK64-IZFHMIN-NEXT: seqz a1, a18603; CHECK64-IZFHMIN-NEXT: addi a1, a1, -18604; CHECK64-IZFHMIN-NEXT: and a0, a1, a08605; CHECK64-IZFHMIN-NEXT: ret8606;8607; CHECK32-IZHINXMIN-LABEL: fcvt_w_h_sat_sext:8608; CHECK32-IZHINXMIN: # %bb.0: # %start8609; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a0, a08610; CHECK32-IZHINXMIN-NEXT: fcvt.w.s a1, a0, rtz8611; CHECK32-IZHINXMIN-NEXT: feq.s a0, a0, a08612; CHECK32-IZHINXMIN-NEXT: seqz a0, a08613; CHECK32-IZHINXMIN-NEXT: addi a0, a0, -18614; CHECK32-IZHINXMIN-NEXT: and a0, a0, a18615; CHECK32-IZHINXMIN-NEXT: ret8616;8617; CHECK64-IZHINXMIN-LABEL: fcvt_w_h_sat_sext:8618; CHECK64-IZHINXMIN: # %bb.0: # %start8619; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a08620; CHECK64-IZHINXMIN-NEXT: fcvt.w.s a1, a0, rtz8621; CHECK64-IZHINXMIN-NEXT: feq.s a0, a0, a08622; CHECK64-IZHINXMIN-NEXT: seqz a0, a08623; CHECK64-IZHINXMIN-NEXT: addi a0, a0, -18624; CHECK64-IZHINXMIN-NEXT: and a0, a0, a18625; CHECK64-IZHINXMIN-NEXT: ret8626;8627; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_w_h_sat_sext:8628; CHECK32-IZDINXZHINXMIN: # %bb.0: # %start8629; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a08630; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.w.s a1, a0, rtz8631; CHECK32-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a08632; CHECK32-IZDINXZHINXMIN-NEXT: seqz a0, a08633; CHECK32-IZDINXZHINXMIN-NEXT: addi a0, a0, -18634; CHECK32-IZDINXZHINXMIN-NEXT: and a0, a0, a18635; CHECK32-IZDINXZHINXMIN-NEXT: ret8636;8637; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_w_h_sat_sext:8638; CHECK64-IZDINXZHINXMIN: # %bb.0: # %start8639; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a08640; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.w.s a1, a0, rtz8641; CHECK64-IZDINXZHINXMIN-NEXT: feq.s a0, a0, a08642; CHECK64-IZDINXZHINXMIN-NEXT: seqz a0, a08643; CHECK64-IZDINXZHINXMIN-NEXT: addi a0, a0, -18644; CHECK64-IZDINXZHINXMIN-NEXT: and a0, a0, a18645; CHECK64-IZDINXZHINXMIN-NEXT: ret8646start:8647 %0 = tail call i32 @llvm.fptosi.sat.i32.f16(half %a)8648 ret i32 %08649}8650 8651; Test lib call lowering for fp128->half to make sure it matches the ABI.8652define void @fcvt_h_q(fp128 %x, ptr %y) nounwind {8653; RV32IZFH-LABEL: fcvt_h_q:8654; RV32IZFH: # %bb.0:8655; RV32IZFH-NEXT: addi sp, sp, -328656; RV32IZFH-NEXT: sw ra, 28(sp) # 4-byte Folded Spill8657; RV32IZFH-NEXT: sw s0, 24(sp) # 4-byte Folded Spill8658; RV32IZFH-NEXT: lw a2, 0(a0)8659; RV32IZFH-NEXT: lw a3, 4(a0)8660; RV32IZFH-NEXT: lw a4, 8(a0)8661; RV32IZFH-NEXT: lw a5, 12(a0)8662; RV32IZFH-NEXT: mv s0, a18663; RV32IZFH-NEXT: addi a0, sp, 88664; RV32IZFH-NEXT: sw a2, 8(sp)8665; RV32IZFH-NEXT: sw a3, 12(sp)8666; RV32IZFH-NEXT: sw a4, 16(sp)8667; RV32IZFH-NEXT: sw a5, 20(sp)8668; RV32IZFH-NEXT: call __trunctfhf28669; RV32IZFH-NEXT: fsh fa0, 0(s0)8670; RV32IZFH-NEXT: lw ra, 28(sp) # 4-byte Folded Reload8671; RV32IZFH-NEXT: lw s0, 24(sp) # 4-byte Folded Reload8672; RV32IZFH-NEXT: addi sp, sp, 328673; RV32IZFH-NEXT: ret8674;8675; RV64IZFH-LABEL: fcvt_h_q:8676; RV64IZFH: # %bb.0:8677; RV64IZFH-NEXT: addi sp, sp, -168678; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8679; RV64IZFH-NEXT: sd s0, 0(sp) # 8-byte Folded Spill8680; RV64IZFH-NEXT: mv s0, a28681; RV64IZFH-NEXT: call __trunctfhf28682; RV64IZFH-NEXT: fsh fa0, 0(s0)8683; RV64IZFH-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8684; RV64IZFH-NEXT: ld s0, 0(sp) # 8-byte Folded Reload8685; RV64IZFH-NEXT: addi sp, sp, 168686; RV64IZFH-NEXT: ret8687;8688; RV32IDZFH-LABEL: fcvt_h_q:8689; RV32IDZFH: # %bb.0:8690; RV32IDZFH-NEXT: addi sp, sp, -328691; RV32IDZFH-NEXT: sw ra, 28(sp) # 4-byte Folded Spill8692; RV32IDZFH-NEXT: sw s0, 24(sp) # 4-byte Folded Spill8693; RV32IDZFH-NEXT: lw a2, 0(a0)8694; RV32IDZFH-NEXT: lw a3, 4(a0)8695; RV32IDZFH-NEXT: lw a4, 8(a0)8696; RV32IDZFH-NEXT: lw a5, 12(a0)8697; RV32IDZFH-NEXT: mv s0, a18698; RV32IDZFH-NEXT: addi a0, sp, 88699; RV32IDZFH-NEXT: sw a2, 8(sp)8700; RV32IDZFH-NEXT: sw a3, 12(sp)8701; RV32IDZFH-NEXT: sw a4, 16(sp)8702; RV32IDZFH-NEXT: sw a5, 20(sp)8703; RV32IDZFH-NEXT: call __trunctfhf28704; RV32IDZFH-NEXT: fsh fa0, 0(s0)8705; RV32IDZFH-NEXT: lw ra, 28(sp) # 4-byte Folded Reload8706; RV32IDZFH-NEXT: lw s0, 24(sp) # 4-byte Folded Reload8707; RV32IDZFH-NEXT: addi sp, sp, 328708; RV32IDZFH-NEXT: ret8709;8710; RV64IDZFH-LABEL: fcvt_h_q:8711; RV64IDZFH: # %bb.0:8712; RV64IDZFH-NEXT: addi sp, sp, -168713; RV64IDZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8714; RV64IDZFH-NEXT: sd s0, 0(sp) # 8-byte Folded Spill8715; RV64IDZFH-NEXT: mv s0, a28716; RV64IDZFH-NEXT: call __trunctfhf28717; RV64IDZFH-NEXT: fsh fa0, 0(s0)8718; RV64IDZFH-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8719; RV64IDZFH-NEXT: ld s0, 0(sp) # 8-byte Folded Reload8720; RV64IDZFH-NEXT: addi sp, sp, 168721; RV64IDZFH-NEXT: ret8722;8723; RV32IZHINX-LABEL: fcvt_h_q:8724; RV32IZHINX: # %bb.0:8725; RV32IZHINX-NEXT: addi sp, sp, -328726; RV32IZHINX-NEXT: sw ra, 28(sp) # 4-byte Folded Spill8727; RV32IZHINX-NEXT: sw s0, 24(sp) # 4-byte Folded Spill8728; RV32IZHINX-NEXT: lw a2, 0(a0)8729; RV32IZHINX-NEXT: lw a3, 4(a0)8730; RV32IZHINX-NEXT: lw a4, 8(a0)8731; RV32IZHINX-NEXT: lw a5, 12(a0)8732; RV32IZHINX-NEXT: mv s0, a18733; RV32IZHINX-NEXT: addi a0, sp, 88734; RV32IZHINX-NEXT: sw a2, 8(sp)8735; RV32IZHINX-NEXT: sw a3, 12(sp)8736; RV32IZHINX-NEXT: sw a4, 16(sp)8737; RV32IZHINX-NEXT: sw a5, 20(sp)8738; RV32IZHINX-NEXT: call __trunctfhf28739; RV32IZHINX-NEXT: sh a0, 0(s0)8740; RV32IZHINX-NEXT: lw ra, 28(sp) # 4-byte Folded Reload8741; RV32IZHINX-NEXT: lw s0, 24(sp) # 4-byte Folded Reload8742; RV32IZHINX-NEXT: addi sp, sp, 328743; RV32IZHINX-NEXT: ret8744;8745; RV64IZHINX-LABEL: fcvt_h_q:8746; RV64IZHINX: # %bb.0:8747; RV64IZHINX-NEXT: addi sp, sp, -168748; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8749; RV64IZHINX-NEXT: sd s0, 0(sp) # 8-byte Folded Spill8750; RV64IZHINX-NEXT: mv s0, a28751; RV64IZHINX-NEXT: call __trunctfhf28752; RV64IZHINX-NEXT: sh a0, 0(s0)8753; RV64IZHINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8754; RV64IZHINX-NEXT: ld s0, 0(sp) # 8-byte Folded Reload8755; RV64IZHINX-NEXT: addi sp, sp, 168756; RV64IZHINX-NEXT: ret8757;8758; RV32IZDINXZHINX-LABEL: fcvt_h_q:8759; RV32IZDINXZHINX: # %bb.0:8760; RV32IZDINXZHINX-NEXT: addi sp, sp, -328761; RV32IZDINXZHINX-NEXT: sw ra, 28(sp) # 4-byte Folded Spill8762; RV32IZDINXZHINX-NEXT: sw s0, 24(sp) # 4-byte Folded Spill8763; RV32IZDINXZHINX-NEXT: lw a2, 0(a0)8764; RV32IZDINXZHINX-NEXT: lw a3, 4(a0)8765; RV32IZDINXZHINX-NEXT: lw a4, 8(a0)8766; RV32IZDINXZHINX-NEXT: lw a5, 12(a0)8767; RV32IZDINXZHINX-NEXT: mv s0, a18768; RV32IZDINXZHINX-NEXT: addi a0, sp, 88769; RV32IZDINXZHINX-NEXT: sw a2, 8(sp)8770; RV32IZDINXZHINX-NEXT: sw a3, 12(sp)8771; RV32IZDINXZHINX-NEXT: sw a4, 16(sp)8772; RV32IZDINXZHINX-NEXT: sw a5, 20(sp)8773; RV32IZDINXZHINX-NEXT: call __trunctfhf28774; RV32IZDINXZHINX-NEXT: sh a0, 0(s0)8775; RV32IZDINXZHINX-NEXT: lw ra, 28(sp) # 4-byte Folded Reload8776; RV32IZDINXZHINX-NEXT: lw s0, 24(sp) # 4-byte Folded Reload8777; RV32IZDINXZHINX-NEXT: addi sp, sp, 328778; RV32IZDINXZHINX-NEXT: ret8779;8780; RV64IZDINXZHINX-LABEL: fcvt_h_q:8781; RV64IZDINXZHINX: # %bb.0:8782; RV64IZDINXZHINX-NEXT: addi sp, sp, -168783; RV64IZDINXZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8784; RV64IZDINXZHINX-NEXT: sd s0, 0(sp) # 8-byte Folded Spill8785; RV64IZDINXZHINX-NEXT: mv s0, a28786; RV64IZDINXZHINX-NEXT: call __trunctfhf28787; RV64IZDINXZHINX-NEXT: sh a0, 0(s0)8788; RV64IZDINXZHINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8789; RV64IZDINXZHINX-NEXT: ld s0, 0(sp) # 8-byte Folded Reload8790; RV64IZDINXZHINX-NEXT: addi sp, sp, 168791; RV64IZDINXZHINX-NEXT: ret8792;8793; RV32I-LABEL: fcvt_h_q:8794; RV32I: # %bb.0:8795; RV32I-NEXT: addi sp, sp, -328796; RV32I-NEXT: sw ra, 28(sp) # 4-byte Folded Spill8797; RV32I-NEXT: sw s0, 24(sp) # 4-byte Folded Spill8798; RV32I-NEXT: lw a2, 0(a0)8799; RV32I-NEXT: lw a3, 4(a0)8800; RV32I-NEXT: lw a4, 8(a0)8801; RV32I-NEXT: lw a5, 12(a0)8802; RV32I-NEXT: mv s0, a18803; RV32I-NEXT: addi a0, sp, 88804; RV32I-NEXT: sw a2, 8(sp)8805; RV32I-NEXT: sw a3, 12(sp)8806; RV32I-NEXT: sw a4, 16(sp)8807; RV32I-NEXT: sw a5, 20(sp)8808; RV32I-NEXT: call __trunctfhf28809; RV32I-NEXT: sh a0, 0(s0)8810; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload8811; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload8812; RV32I-NEXT: addi sp, sp, 328813; RV32I-NEXT: ret8814;8815; RV64I-LABEL: fcvt_h_q:8816; RV64I: # %bb.0:8817; RV64I-NEXT: addi sp, sp, -168818; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8819; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill8820; RV64I-NEXT: mv s0, a28821; RV64I-NEXT: call __trunctfhf28822; RV64I-NEXT: sh a0, 0(s0)8823; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8824; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload8825; RV64I-NEXT: addi sp, sp, 168826; RV64I-NEXT: ret8827;8828; RV32ID-ILP32-LABEL: fcvt_h_q:8829; RV32ID-ILP32: # %bb.0:8830; RV32ID-ILP32-NEXT: addi sp, sp, -328831; RV32ID-ILP32-NEXT: sw ra, 28(sp) # 4-byte Folded Spill8832; RV32ID-ILP32-NEXT: sw s0, 24(sp) # 4-byte Folded Spill8833; RV32ID-ILP32-NEXT: lw a2, 0(a0)8834; RV32ID-ILP32-NEXT: lw a3, 4(a0)8835; RV32ID-ILP32-NEXT: lw a4, 8(a0)8836; RV32ID-ILP32-NEXT: lw a5, 12(a0)8837; RV32ID-ILP32-NEXT: mv s0, a18838; RV32ID-ILP32-NEXT: addi a0, sp, 88839; RV32ID-ILP32-NEXT: sw a2, 8(sp)8840; RV32ID-ILP32-NEXT: sw a3, 12(sp)8841; RV32ID-ILP32-NEXT: sw a4, 16(sp)8842; RV32ID-ILP32-NEXT: sw a5, 20(sp)8843; RV32ID-ILP32-NEXT: call __trunctfhf28844; RV32ID-ILP32-NEXT: sh a0, 0(s0)8845; RV32ID-ILP32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload8846; RV32ID-ILP32-NEXT: lw s0, 24(sp) # 4-byte Folded Reload8847; RV32ID-ILP32-NEXT: addi sp, sp, 328848; RV32ID-ILP32-NEXT: ret8849;8850; RV64ID-LP64-LABEL: fcvt_h_q:8851; RV64ID-LP64: # %bb.0:8852; RV64ID-LP64-NEXT: addi sp, sp, -168853; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8854; RV64ID-LP64-NEXT: sd s0, 0(sp) # 8-byte Folded Spill8855; RV64ID-LP64-NEXT: mv s0, a28856; RV64ID-LP64-NEXT: call __trunctfhf28857; RV64ID-LP64-NEXT: sh a0, 0(s0)8858; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8859; RV64ID-LP64-NEXT: ld s0, 0(sp) # 8-byte Folded Reload8860; RV64ID-LP64-NEXT: addi sp, sp, 168861; RV64ID-LP64-NEXT: ret8862;8863; RV32ID-LABEL: fcvt_h_q:8864; RV32ID: # %bb.0:8865; RV32ID-NEXT: addi sp, sp, -328866; RV32ID-NEXT: sw ra, 28(sp) # 4-byte Folded Spill8867; RV32ID-NEXT: sw s0, 24(sp) # 4-byte Folded Spill8868; RV32ID-NEXT: lw a2, 0(a0)8869; RV32ID-NEXT: lw a3, 4(a0)8870; RV32ID-NEXT: lw a4, 8(a0)8871; RV32ID-NEXT: lw a5, 12(a0)8872; RV32ID-NEXT: mv s0, a18873; RV32ID-NEXT: addi a0, sp, 88874; RV32ID-NEXT: sw a2, 8(sp)8875; RV32ID-NEXT: sw a3, 12(sp)8876; RV32ID-NEXT: sw a4, 16(sp)8877; RV32ID-NEXT: sw a5, 20(sp)8878; RV32ID-NEXT: call __trunctfhf28879; RV32ID-NEXT: fmv.x.w a0, fa08880; RV32ID-NEXT: sh a0, 0(s0)8881; RV32ID-NEXT: lw ra, 28(sp) # 4-byte Folded Reload8882; RV32ID-NEXT: lw s0, 24(sp) # 4-byte Folded Reload8883; RV32ID-NEXT: addi sp, sp, 328884; RV32ID-NEXT: ret8885;8886; RV64ID-LABEL: fcvt_h_q:8887; RV64ID: # %bb.0:8888; RV64ID-NEXT: addi sp, sp, -168889; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8890; RV64ID-NEXT: sd s0, 0(sp) # 8-byte Folded Spill8891; RV64ID-NEXT: mv s0, a28892; RV64ID-NEXT: call __trunctfhf28893; RV64ID-NEXT: fmv.x.w a0, fa08894; RV64ID-NEXT: sh a0, 0(s0)8895; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8896; RV64ID-NEXT: ld s0, 0(sp) # 8-byte Folded Reload8897; RV64ID-NEXT: addi sp, sp, 168898; RV64ID-NEXT: ret8899;8900; CHECK32-IZFHMIN-LABEL: fcvt_h_q:8901; CHECK32-IZFHMIN: # %bb.0:8902; CHECK32-IZFHMIN-NEXT: addi sp, sp, -328903; CHECK32-IZFHMIN-NEXT: sw ra, 28(sp) # 4-byte Folded Spill8904; CHECK32-IZFHMIN-NEXT: sw s0, 24(sp) # 4-byte Folded Spill8905; CHECK32-IZFHMIN-NEXT: lw a2, 0(a0)8906; CHECK32-IZFHMIN-NEXT: lw a3, 4(a0)8907; CHECK32-IZFHMIN-NEXT: lw a4, 8(a0)8908; CHECK32-IZFHMIN-NEXT: lw a5, 12(a0)8909; CHECK32-IZFHMIN-NEXT: mv s0, a18910; CHECK32-IZFHMIN-NEXT: addi a0, sp, 88911; CHECK32-IZFHMIN-NEXT: sw a2, 8(sp)8912; CHECK32-IZFHMIN-NEXT: sw a3, 12(sp)8913; CHECK32-IZFHMIN-NEXT: sw a4, 16(sp)8914; CHECK32-IZFHMIN-NEXT: sw a5, 20(sp)8915; CHECK32-IZFHMIN-NEXT: call __trunctfhf28916; CHECK32-IZFHMIN-NEXT: fsh fa0, 0(s0)8917; CHECK32-IZFHMIN-NEXT: lw ra, 28(sp) # 4-byte Folded Reload8918; CHECK32-IZFHMIN-NEXT: lw s0, 24(sp) # 4-byte Folded Reload8919; CHECK32-IZFHMIN-NEXT: addi sp, sp, 328920; CHECK32-IZFHMIN-NEXT: ret8921;8922; CHECK64-IZFHMIN-LABEL: fcvt_h_q:8923; CHECK64-IZFHMIN: # %bb.0:8924; CHECK64-IZFHMIN-NEXT: addi sp, sp, -168925; CHECK64-IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8926; CHECK64-IZFHMIN-NEXT: sd s0, 0(sp) # 8-byte Folded Spill8927; CHECK64-IZFHMIN-NEXT: mv s0, a28928; CHECK64-IZFHMIN-NEXT: call __trunctfhf28929; CHECK64-IZFHMIN-NEXT: fsh fa0, 0(s0)8930; CHECK64-IZFHMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8931; CHECK64-IZFHMIN-NEXT: ld s0, 0(sp) # 8-byte Folded Reload8932; CHECK64-IZFHMIN-NEXT: addi sp, sp, 168933; CHECK64-IZFHMIN-NEXT: ret8934;8935; CHECK32-IZHINXMIN-LABEL: fcvt_h_q:8936; CHECK32-IZHINXMIN: # %bb.0:8937; CHECK32-IZHINXMIN-NEXT: addi sp, sp, -328938; CHECK32-IZHINXMIN-NEXT: sw ra, 28(sp) # 4-byte Folded Spill8939; CHECK32-IZHINXMIN-NEXT: sw s0, 24(sp) # 4-byte Folded Spill8940; CHECK32-IZHINXMIN-NEXT: lw a2, 0(a0)8941; CHECK32-IZHINXMIN-NEXT: lw a3, 4(a0)8942; CHECK32-IZHINXMIN-NEXT: lw a4, 8(a0)8943; CHECK32-IZHINXMIN-NEXT: lw a5, 12(a0)8944; CHECK32-IZHINXMIN-NEXT: mv s0, a18945; CHECK32-IZHINXMIN-NEXT: addi a0, sp, 88946; CHECK32-IZHINXMIN-NEXT: sw a2, 8(sp)8947; CHECK32-IZHINXMIN-NEXT: sw a3, 12(sp)8948; CHECK32-IZHINXMIN-NEXT: sw a4, 16(sp)8949; CHECK32-IZHINXMIN-NEXT: sw a5, 20(sp)8950; CHECK32-IZHINXMIN-NEXT: call __trunctfhf28951; CHECK32-IZHINXMIN-NEXT: sh a0, 0(s0)8952; CHECK32-IZHINXMIN-NEXT: lw ra, 28(sp) # 4-byte Folded Reload8953; CHECK32-IZHINXMIN-NEXT: lw s0, 24(sp) # 4-byte Folded Reload8954; CHECK32-IZHINXMIN-NEXT: addi sp, sp, 328955; CHECK32-IZHINXMIN-NEXT: ret8956;8957; CHECK64-IZHINXMIN-LABEL: fcvt_h_q:8958; CHECK64-IZHINXMIN: # %bb.0:8959; CHECK64-IZHINXMIN-NEXT: addi sp, sp, -168960; CHECK64-IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8961; CHECK64-IZHINXMIN-NEXT: sd s0, 0(sp) # 8-byte Folded Spill8962; CHECK64-IZHINXMIN-NEXT: mv s0, a28963; CHECK64-IZHINXMIN-NEXT: call __trunctfhf28964; CHECK64-IZHINXMIN-NEXT: sh a0, 0(s0)8965; CHECK64-IZHINXMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload8966; CHECK64-IZHINXMIN-NEXT: ld s0, 0(sp) # 8-byte Folded Reload8967; CHECK64-IZHINXMIN-NEXT: addi sp, sp, 168968; CHECK64-IZHINXMIN-NEXT: ret8969;8970; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_h_q:8971; CHECK32-IZDINXZHINXMIN: # %bb.0:8972; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, -328973; CHECK32-IZDINXZHINXMIN-NEXT: sw ra, 28(sp) # 4-byte Folded Spill8974; CHECK32-IZDINXZHINXMIN-NEXT: sw s0, 24(sp) # 4-byte Folded Spill8975; CHECK32-IZDINXZHINXMIN-NEXT: lw a2, 0(a0)8976; CHECK32-IZDINXZHINXMIN-NEXT: lw a3, 4(a0)8977; CHECK32-IZDINXZHINXMIN-NEXT: lw a4, 8(a0)8978; CHECK32-IZDINXZHINXMIN-NEXT: lw a5, 12(a0)8979; CHECK32-IZDINXZHINXMIN-NEXT: mv s0, a18980; CHECK32-IZDINXZHINXMIN-NEXT: addi a0, sp, 88981; CHECK32-IZDINXZHINXMIN-NEXT: sw a2, 8(sp)8982; CHECK32-IZDINXZHINXMIN-NEXT: sw a3, 12(sp)8983; CHECK32-IZDINXZHINXMIN-NEXT: sw a4, 16(sp)8984; CHECK32-IZDINXZHINXMIN-NEXT: sw a5, 20(sp)8985; CHECK32-IZDINXZHINXMIN-NEXT: call __trunctfhf28986; CHECK32-IZDINXZHINXMIN-NEXT: sh a0, 0(s0)8987; CHECK32-IZDINXZHINXMIN-NEXT: lw ra, 28(sp) # 4-byte Folded Reload8988; CHECK32-IZDINXZHINXMIN-NEXT: lw s0, 24(sp) # 4-byte Folded Reload8989; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, 328990; CHECK32-IZDINXZHINXMIN-NEXT: ret8991;8992; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_h_q:8993; CHECK64-IZDINXZHINXMIN: # %bb.0:8994; CHECK64-IZDINXZHINXMIN-NEXT: addi sp, sp, -168995; CHECK64-IZDINXZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill8996; CHECK64-IZDINXZHINXMIN-NEXT: sd s0, 0(sp) # 8-byte Folded Spill8997; CHECK64-IZDINXZHINXMIN-NEXT: mv s0, a28998; CHECK64-IZDINXZHINXMIN-NEXT: call __trunctfhf28999; CHECK64-IZDINXZHINXMIN-NEXT: sh a0, 0(s0)9000; CHECK64-IZDINXZHINXMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload9001; CHECK64-IZDINXZHINXMIN-NEXT: ld s0, 0(sp) # 8-byte Folded Reload9002; CHECK64-IZDINXZHINXMIN-NEXT: addi sp, sp, 169003; CHECK64-IZDINXZHINXMIN-NEXT: ret9004 %a = fptrunc fp128 %x to half9005 store half %a, ptr %y9006 ret void9007}9008 9009; Test lib call lowering for half->fp128 to make sure it follows the ABI.9010define fp128 @fcvt_q_h(ptr %x) {9011; RV32IZFH-LABEL: fcvt_q_h:9012; RV32IZFH: # %bb.0:9013; RV32IZFH-NEXT: addi sp, sp, -329014; RV32IZFH-NEXT: .cfi_def_cfa_offset 329015; RV32IZFH-NEXT: sw ra, 28(sp) # 4-byte Folded Spill9016; RV32IZFH-NEXT: sw s0, 24(sp) # 4-byte Folded Spill9017; RV32IZFH-NEXT: .cfi_offset ra, -49018; RV32IZFH-NEXT: .cfi_offset s0, -89019; RV32IZFH-NEXT: mv s0, a09020; RV32IZFH-NEXT: flh fa5, 0(a1)9021; RV32IZFH-NEXT: fcvt.s.h fa0, fa59022; RV32IZFH-NEXT: addi a0, sp, 89023; RV32IZFH-NEXT: call __extendsftf29024; RV32IZFH-NEXT: lw a0, 8(sp)9025; RV32IZFH-NEXT: lw a1, 12(sp)9026; RV32IZFH-NEXT: lw a2, 16(sp)9027; RV32IZFH-NEXT: lw a3, 20(sp)9028; RV32IZFH-NEXT: sw a0, 0(s0)9029; RV32IZFH-NEXT: sw a1, 4(s0)9030; RV32IZFH-NEXT: sw a2, 8(s0)9031; RV32IZFH-NEXT: sw a3, 12(s0)9032; RV32IZFH-NEXT: lw ra, 28(sp) # 4-byte Folded Reload9033; RV32IZFH-NEXT: lw s0, 24(sp) # 4-byte Folded Reload9034; RV32IZFH-NEXT: .cfi_restore ra9035; RV32IZFH-NEXT: .cfi_restore s09036; RV32IZFH-NEXT: addi sp, sp, 329037; RV32IZFH-NEXT: .cfi_def_cfa_offset 09038; RV32IZFH-NEXT: ret9039;9040; RV64IZFH-LABEL: fcvt_q_h:9041; RV64IZFH: # %bb.0:9042; RV64IZFH-NEXT: addi sp, sp, -169043; RV64IZFH-NEXT: .cfi_def_cfa_offset 169044; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill9045; RV64IZFH-NEXT: .cfi_offset ra, -89046; RV64IZFH-NEXT: flh fa5, 0(a0)9047; RV64IZFH-NEXT: fcvt.s.h fa0, fa59048; RV64IZFH-NEXT: call __extendsftf29049; RV64IZFH-NEXT: ld ra, 8(sp) # 8-byte Folded Reload9050; RV64IZFH-NEXT: .cfi_restore ra9051; RV64IZFH-NEXT: addi sp, sp, 169052; RV64IZFH-NEXT: .cfi_def_cfa_offset 09053; RV64IZFH-NEXT: ret9054;9055; RV32IDZFH-LABEL: fcvt_q_h:9056; RV32IDZFH: # %bb.0:9057; RV32IDZFH-NEXT: addi sp, sp, -329058; RV32IDZFH-NEXT: .cfi_def_cfa_offset 329059; RV32IDZFH-NEXT: sw ra, 28(sp) # 4-byte Folded Spill9060; RV32IDZFH-NEXT: sw s0, 24(sp) # 4-byte Folded Spill9061; RV32IDZFH-NEXT: .cfi_offset ra, -49062; RV32IDZFH-NEXT: .cfi_offset s0, -89063; RV32IDZFH-NEXT: mv s0, a09064; RV32IDZFH-NEXT: flh fa5, 0(a1)9065; RV32IDZFH-NEXT: fcvt.s.h fa0, fa59066; RV32IDZFH-NEXT: addi a0, sp, 89067; RV32IDZFH-NEXT: call __extendsftf29068; RV32IDZFH-NEXT: lw a0, 8(sp)9069; RV32IDZFH-NEXT: lw a1, 12(sp)9070; RV32IDZFH-NEXT: lw a2, 16(sp)9071; RV32IDZFH-NEXT: lw a3, 20(sp)9072; RV32IDZFH-NEXT: sw a0, 0(s0)9073; RV32IDZFH-NEXT: sw a1, 4(s0)9074; RV32IDZFH-NEXT: sw a2, 8(s0)9075; RV32IDZFH-NEXT: sw a3, 12(s0)9076; RV32IDZFH-NEXT: lw ra, 28(sp) # 4-byte Folded Reload9077; RV32IDZFH-NEXT: lw s0, 24(sp) # 4-byte Folded Reload9078; RV32IDZFH-NEXT: .cfi_restore ra9079; RV32IDZFH-NEXT: .cfi_restore s09080; RV32IDZFH-NEXT: addi sp, sp, 329081; RV32IDZFH-NEXT: .cfi_def_cfa_offset 09082; RV32IDZFH-NEXT: ret9083;9084; RV64IDZFH-LABEL: fcvt_q_h:9085; RV64IDZFH: # %bb.0:9086; RV64IDZFH-NEXT: addi sp, sp, -169087; RV64IDZFH-NEXT: .cfi_def_cfa_offset 169088; RV64IDZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill9089; RV64IDZFH-NEXT: .cfi_offset ra, -89090; RV64IDZFH-NEXT: flh fa5, 0(a0)9091; RV64IDZFH-NEXT: fcvt.s.h fa0, fa59092; RV64IDZFH-NEXT: call __extendsftf29093; RV64IDZFH-NEXT: ld ra, 8(sp) # 8-byte Folded Reload9094; RV64IDZFH-NEXT: .cfi_restore ra9095; RV64IDZFH-NEXT: addi sp, sp, 169096; RV64IDZFH-NEXT: .cfi_def_cfa_offset 09097; RV64IDZFH-NEXT: ret9098;9099; RV32IZHINX-LABEL: fcvt_q_h:9100; RV32IZHINX: # %bb.0:9101; RV32IZHINX-NEXT: addi sp, sp, -329102; RV32IZHINX-NEXT: .cfi_def_cfa_offset 329103; RV32IZHINX-NEXT: sw ra, 28(sp) # 4-byte Folded Spill9104; RV32IZHINX-NEXT: sw s0, 24(sp) # 4-byte Folded Spill9105; RV32IZHINX-NEXT: .cfi_offset ra, -49106; RV32IZHINX-NEXT: .cfi_offset s0, -89107; RV32IZHINX-NEXT: mv s0, a09108; RV32IZHINX-NEXT: lh a0, 0(a1)9109; RV32IZHINX-NEXT: fcvt.s.h a1, a09110; RV32IZHINX-NEXT: addi a0, sp, 89111; RV32IZHINX-NEXT: call __extendsftf29112; RV32IZHINX-NEXT: lw a0, 8(sp)9113; RV32IZHINX-NEXT: lw a1, 12(sp)9114; RV32IZHINX-NEXT: lw a2, 16(sp)9115; RV32IZHINX-NEXT: lw a3, 20(sp)9116; RV32IZHINX-NEXT: sw a0, 0(s0)9117; RV32IZHINX-NEXT: sw a1, 4(s0)9118; RV32IZHINX-NEXT: sw a2, 8(s0)9119; RV32IZHINX-NEXT: sw a3, 12(s0)9120; RV32IZHINX-NEXT: lw ra, 28(sp) # 4-byte Folded Reload9121; RV32IZHINX-NEXT: lw s0, 24(sp) # 4-byte Folded Reload9122; RV32IZHINX-NEXT: .cfi_restore ra9123; RV32IZHINX-NEXT: .cfi_restore s09124; RV32IZHINX-NEXT: addi sp, sp, 329125; RV32IZHINX-NEXT: .cfi_def_cfa_offset 09126; RV32IZHINX-NEXT: ret9127;9128; RV64IZHINX-LABEL: fcvt_q_h:9129; RV64IZHINX: # %bb.0:9130; RV64IZHINX-NEXT: addi sp, sp, -169131; RV64IZHINX-NEXT: .cfi_def_cfa_offset 169132; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill9133; RV64IZHINX-NEXT: .cfi_offset ra, -89134; RV64IZHINX-NEXT: lh a0, 0(a0)9135; RV64IZHINX-NEXT: fcvt.s.h a0, a09136; RV64IZHINX-NEXT: call __extendsftf29137; RV64IZHINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload9138; RV64IZHINX-NEXT: .cfi_restore ra9139; RV64IZHINX-NEXT: addi sp, sp, 169140; RV64IZHINX-NEXT: .cfi_def_cfa_offset 09141; RV64IZHINX-NEXT: ret9142;9143; RV32IZDINXZHINX-LABEL: fcvt_q_h:9144; RV32IZDINXZHINX: # %bb.0:9145; RV32IZDINXZHINX-NEXT: addi sp, sp, -329146; RV32IZDINXZHINX-NEXT: .cfi_def_cfa_offset 329147; RV32IZDINXZHINX-NEXT: sw ra, 28(sp) # 4-byte Folded Spill9148; RV32IZDINXZHINX-NEXT: sw s0, 24(sp) # 4-byte Folded Spill9149; RV32IZDINXZHINX-NEXT: .cfi_offset ra, -49150; RV32IZDINXZHINX-NEXT: .cfi_offset s0, -89151; RV32IZDINXZHINX-NEXT: mv s0, a09152; RV32IZDINXZHINX-NEXT: lh a0, 0(a1)9153; RV32IZDINXZHINX-NEXT: fcvt.s.h a1, a09154; RV32IZDINXZHINX-NEXT: addi a0, sp, 89155; RV32IZDINXZHINX-NEXT: call __extendsftf29156; RV32IZDINXZHINX-NEXT: lw a0, 8(sp)9157; RV32IZDINXZHINX-NEXT: lw a1, 12(sp)9158; RV32IZDINXZHINX-NEXT: lw a2, 16(sp)9159; RV32IZDINXZHINX-NEXT: lw a3, 20(sp)9160; RV32IZDINXZHINX-NEXT: sw a0, 0(s0)9161; RV32IZDINXZHINX-NEXT: sw a1, 4(s0)9162; RV32IZDINXZHINX-NEXT: sw a2, 8(s0)9163; RV32IZDINXZHINX-NEXT: sw a3, 12(s0)9164; RV32IZDINXZHINX-NEXT: lw ra, 28(sp) # 4-byte Folded Reload9165; RV32IZDINXZHINX-NEXT: lw s0, 24(sp) # 4-byte Folded Reload9166; RV32IZDINXZHINX-NEXT: .cfi_restore ra9167; RV32IZDINXZHINX-NEXT: .cfi_restore s09168; RV32IZDINXZHINX-NEXT: addi sp, sp, 329169; RV32IZDINXZHINX-NEXT: .cfi_def_cfa_offset 09170; RV32IZDINXZHINX-NEXT: ret9171;9172; RV64IZDINXZHINX-LABEL: fcvt_q_h:9173; RV64IZDINXZHINX: # %bb.0:9174; RV64IZDINXZHINX-NEXT: addi sp, sp, -169175; RV64IZDINXZHINX-NEXT: .cfi_def_cfa_offset 169176; RV64IZDINXZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill9177; RV64IZDINXZHINX-NEXT: .cfi_offset ra, -89178; RV64IZDINXZHINX-NEXT: lh a0, 0(a0)9179; RV64IZDINXZHINX-NEXT: fcvt.s.h a0, a09180; RV64IZDINXZHINX-NEXT: call __extendsftf29181; RV64IZDINXZHINX-NEXT: ld ra, 8(sp) # 8-byte Folded Reload9182; RV64IZDINXZHINX-NEXT: .cfi_restore ra9183; RV64IZDINXZHINX-NEXT: addi sp, sp, 169184; RV64IZDINXZHINX-NEXT: .cfi_def_cfa_offset 09185; RV64IZDINXZHINX-NEXT: ret9186;9187; RV32I-LABEL: fcvt_q_h:9188; RV32I: # %bb.0:9189; RV32I-NEXT: addi sp, sp, -329190; RV32I-NEXT: .cfi_def_cfa_offset 329191; RV32I-NEXT: sw ra, 28(sp) # 4-byte Folded Spill9192; RV32I-NEXT: sw s0, 24(sp) # 4-byte Folded Spill9193; RV32I-NEXT: .cfi_offset ra, -49194; RV32I-NEXT: .cfi_offset s0, -89195; RV32I-NEXT: mv s0, a09196; RV32I-NEXT: lh a0, 0(a1)9197; RV32I-NEXT: call __extendhfsf29198; RV32I-NEXT: mv a1, a09199; RV32I-NEXT: addi a0, sp, 89200; RV32I-NEXT: call __extendsftf29201; RV32I-NEXT: lw a0, 8(sp)9202; RV32I-NEXT: lw a1, 12(sp)9203; RV32I-NEXT: lw a2, 16(sp)9204; RV32I-NEXT: lw a3, 20(sp)9205; RV32I-NEXT: sw a0, 0(s0)9206; RV32I-NEXT: sw a1, 4(s0)9207; RV32I-NEXT: sw a2, 8(s0)9208; RV32I-NEXT: sw a3, 12(s0)9209; RV32I-NEXT: lw ra, 28(sp) # 4-byte Folded Reload9210; RV32I-NEXT: lw s0, 24(sp) # 4-byte Folded Reload9211; RV32I-NEXT: .cfi_restore ra9212; RV32I-NEXT: .cfi_restore s09213; RV32I-NEXT: addi sp, sp, 329214; RV32I-NEXT: .cfi_def_cfa_offset 09215; RV32I-NEXT: ret9216;9217; RV64I-LABEL: fcvt_q_h:9218; RV64I: # %bb.0:9219; RV64I-NEXT: addi sp, sp, -169220; RV64I-NEXT: .cfi_def_cfa_offset 169221; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill9222; RV64I-NEXT: .cfi_offset ra, -89223; RV64I-NEXT: lh a0, 0(a0)9224; RV64I-NEXT: call __extendhfsf29225; RV64I-NEXT: call __extendsftf29226; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload9227; RV64I-NEXT: .cfi_restore ra9228; RV64I-NEXT: addi sp, sp, 169229; RV64I-NEXT: .cfi_def_cfa_offset 09230; RV64I-NEXT: ret9231;9232; RV32ID-ILP32-LABEL: fcvt_q_h:9233; RV32ID-ILP32: # %bb.0:9234; RV32ID-ILP32-NEXT: addi sp, sp, -329235; RV32ID-ILP32-NEXT: .cfi_def_cfa_offset 329236; RV32ID-ILP32-NEXT: sw ra, 28(sp) # 4-byte Folded Spill9237; RV32ID-ILP32-NEXT: sw s0, 24(sp) # 4-byte Folded Spill9238; RV32ID-ILP32-NEXT: .cfi_offset ra, -49239; RV32ID-ILP32-NEXT: .cfi_offset s0, -89240; RV32ID-ILP32-NEXT: mv s0, a09241; RV32ID-ILP32-NEXT: lhu a0, 0(a1)9242; RV32ID-ILP32-NEXT: call __extendhfsf29243; RV32ID-ILP32-NEXT: mv a1, a09244; RV32ID-ILP32-NEXT: addi a0, sp, 89245; RV32ID-ILP32-NEXT: call __extendsftf29246; RV32ID-ILP32-NEXT: lw a0, 8(sp)9247; RV32ID-ILP32-NEXT: lw a1, 12(sp)9248; RV32ID-ILP32-NEXT: lw a2, 16(sp)9249; RV32ID-ILP32-NEXT: lw a3, 20(sp)9250; RV32ID-ILP32-NEXT: sw a0, 0(s0)9251; RV32ID-ILP32-NEXT: sw a1, 4(s0)9252; RV32ID-ILP32-NEXT: sw a2, 8(s0)9253; RV32ID-ILP32-NEXT: sw a3, 12(s0)9254; RV32ID-ILP32-NEXT: lw ra, 28(sp) # 4-byte Folded Reload9255; RV32ID-ILP32-NEXT: lw s0, 24(sp) # 4-byte Folded Reload9256; RV32ID-ILP32-NEXT: .cfi_restore ra9257; RV32ID-ILP32-NEXT: .cfi_restore s09258; RV32ID-ILP32-NEXT: addi sp, sp, 329259; RV32ID-ILP32-NEXT: .cfi_def_cfa_offset 09260; RV32ID-ILP32-NEXT: ret9261;9262; RV64ID-LP64-LABEL: fcvt_q_h:9263; RV64ID-LP64: # %bb.0:9264; RV64ID-LP64-NEXT: addi sp, sp, -169265; RV64ID-LP64-NEXT: .cfi_def_cfa_offset 169266; RV64ID-LP64-NEXT: sd ra, 8(sp) # 8-byte Folded Spill9267; RV64ID-LP64-NEXT: .cfi_offset ra, -89268; RV64ID-LP64-NEXT: lhu a0, 0(a0)9269; RV64ID-LP64-NEXT: call __extendhfsf29270; RV64ID-LP64-NEXT: call __extendsftf29271; RV64ID-LP64-NEXT: ld ra, 8(sp) # 8-byte Folded Reload9272; RV64ID-LP64-NEXT: .cfi_restore ra9273; RV64ID-LP64-NEXT: addi sp, sp, 169274; RV64ID-LP64-NEXT: .cfi_def_cfa_offset 09275; RV64ID-LP64-NEXT: ret9276;9277; RV32ID-LABEL: fcvt_q_h:9278; RV32ID: # %bb.0:9279; RV32ID-NEXT: addi sp, sp, -329280; RV32ID-NEXT: .cfi_def_cfa_offset 329281; RV32ID-NEXT: sw ra, 28(sp) # 4-byte Folded Spill9282; RV32ID-NEXT: sw s0, 24(sp) # 4-byte Folded Spill9283; RV32ID-NEXT: .cfi_offset ra, -49284; RV32ID-NEXT: .cfi_offset s0, -89285; RV32ID-NEXT: mv s0, a09286; RV32ID-NEXT: lhu a0, 0(a1)9287; RV32ID-NEXT: fmv.w.x fa0, a09288; RV32ID-NEXT: call __extendhfsf29289; RV32ID-NEXT: addi a0, sp, 89290; RV32ID-NEXT: call __extendsftf29291; RV32ID-NEXT: lw a0, 8(sp)9292; RV32ID-NEXT: lw a1, 12(sp)9293; RV32ID-NEXT: lw a2, 16(sp)9294; RV32ID-NEXT: lw a3, 20(sp)9295; RV32ID-NEXT: sw a0, 0(s0)9296; RV32ID-NEXT: sw a1, 4(s0)9297; RV32ID-NEXT: sw a2, 8(s0)9298; RV32ID-NEXT: sw a3, 12(s0)9299; RV32ID-NEXT: lw ra, 28(sp) # 4-byte Folded Reload9300; RV32ID-NEXT: lw s0, 24(sp) # 4-byte Folded Reload9301; RV32ID-NEXT: .cfi_restore ra9302; RV32ID-NEXT: .cfi_restore s09303; RV32ID-NEXT: addi sp, sp, 329304; RV32ID-NEXT: .cfi_def_cfa_offset 09305; RV32ID-NEXT: ret9306;9307; RV64ID-LABEL: fcvt_q_h:9308; RV64ID: # %bb.0:9309; RV64ID-NEXT: addi sp, sp, -169310; RV64ID-NEXT: .cfi_def_cfa_offset 169311; RV64ID-NEXT: sd ra, 8(sp) # 8-byte Folded Spill9312; RV64ID-NEXT: .cfi_offset ra, -89313; RV64ID-NEXT: lhu a0, 0(a0)9314; RV64ID-NEXT: fmv.w.x fa0, a09315; RV64ID-NEXT: call __extendhfsf29316; RV64ID-NEXT: call __extendsftf29317; RV64ID-NEXT: ld ra, 8(sp) # 8-byte Folded Reload9318; RV64ID-NEXT: .cfi_restore ra9319; RV64ID-NEXT: addi sp, sp, 169320; RV64ID-NEXT: .cfi_def_cfa_offset 09321; RV64ID-NEXT: ret9322;9323; CHECK32-IZFHMIN-LABEL: fcvt_q_h:9324; CHECK32-IZFHMIN: # %bb.0:9325; CHECK32-IZFHMIN-NEXT: addi sp, sp, -329326; CHECK32-IZFHMIN-NEXT: .cfi_def_cfa_offset 329327; CHECK32-IZFHMIN-NEXT: sw ra, 28(sp) # 4-byte Folded Spill9328; CHECK32-IZFHMIN-NEXT: sw s0, 24(sp) # 4-byte Folded Spill9329; CHECK32-IZFHMIN-NEXT: .cfi_offset ra, -49330; CHECK32-IZFHMIN-NEXT: .cfi_offset s0, -89331; CHECK32-IZFHMIN-NEXT: mv s0, a09332; CHECK32-IZFHMIN-NEXT: flh fa5, 0(a1)9333; CHECK32-IZFHMIN-NEXT: fcvt.s.h fa0, fa59334; CHECK32-IZFHMIN-NEXT: addi a0, sp, 89335; CHECK32-IZFHMIN-NEXT: call __extendsftf29336; CHECK32-IZFHMIN-NEXT: lw a0, 8(sp)9337; CHECK32-IZFHMIN-NEXT: lw a1, 12(sp)9338; CHECK32-IZFHMIN-NEXT: lw a2, 16(sp)9339; CHECK32-IZFHMIN-NEXT: lw a3, 20(sp)9340; CHECK32-IZFHMIN-NEXT: sw a0, 0(s0)9341; CHECK32-IZFHMIN-NEXT: sw a1, 4(s0)9342; CHECK32-IZFHMIN-NEXT: sw a2, 8(s0)9343; CHECK32-IZFHMIN-NEXT: sw a3, 12(s0)9344; CHECK32-IZFHMIN-NEXT: lw ra, 28(sp) # 4-byte Folded Reload9345; CHECK32-IZFHMIN-NEXT: lw s0, 24(sp) # 4-byte Folded Reload9346; CHECK32-IZFHMIN-NEXT: .cfi_restore ra9347; CHECK32-IZFHMIN-NEXT: .cfi_restore s09348; CHECK32-IZFHMIN-NEXT: addi sp, sp, 329349; CHECK32-IZFHMIN-NEXT: .cfi_def_cfa_offset 09350; CHECK32-IZFHMIN-NEXT: ret9351;9352; CHECK64-IZFHMIN-LABEL: fcvt_q_h:9353; CHECK64-IZFHMIN: # %bb.0:9354; CHECK64-IZFHMIN-NEXT: addi sp, sp, -169355; CHECK64-IZFHMIN-NEXT: .cfi_def_cfa_offset 169356; CHECK64-IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill9357; CHECK64-IZFHMIN-NEXT: .cfi_offset ra, -89358; CHECK64-IZFHMIN-NEXT: flh fa5, 0(a0)9359; CHECK64-IZFHMIN-NEXT: fcvt.s.h fa0, fa59360; CHECK64-IZFHMIN-NEXT: call __extendsftf29361; CHECK64-IZFHMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload9362; CHECK64-IZFHMIN-NEXT: .cfi_restore ra9363; CHECK64-IZFHMIN-NEXT: addi sp, sp, 169364; CHECK64-IZFHMIN-NEXT: .cfi_def_cfa_offset 09365; CHECK64-IZFHMIN-NEXT: ret9366;9367; CHECK32-IZHINXMIN-LABEL: fcvt_q_h:9368; CHECK32-IZHINXMIN: # %bb.0:9369; CHECK32-IZHINXMIN-NEXT: addi sp, sp, -329370; CHECK32-IZHINXMIN-NEXT: .cfi_def_cfa_offset 329371; CHECK32-IZHINXMIN-NEXT: sw ra, 28(sp) # 4-byte Folded Spill9372; CHECK32-IZHINXMIN-NEXT: sw s0, 24(sp) # 4-byte Folded Spill9373; CHECK32-IZHINXMIN-NEXT: .cfi_offset ra, -49374; CHECK32-IZHINXMIN-NEXT: .cfi_offset s0, -89375; CHECK32-IZHINXMIN-NEXT: mv s0, a09376; CHECK32-IZHINXMIN-NEXT: lh a0, 0(a1)9377; CHECK32-IZHINXMIN-NEXT: fcvt.s.h a1, a09378; CHECK32-IZHINXMIN-NEXT: addi a0, sp, 89379; CHECK32-IZHINXMIN-NEXT: call __extendsftf29380; CHECK32-IZHINXMIN-NEXT: lw a0, 8(sp)9381; CHECK32-IZHINXMIN-NEXT: lw a1, 12(sp)9382; CHECK32-IZHINXMIN-NEXT: lw a2, 16(sp)9383; CHECK32-IZHINXMIN-NEXT: lw a3, 20(sp)9384; CHECK32-IZHINXMIN-NEXT: sw a0, 0(s0)9385; CHECK32-IZHINXMIN-NEXT: sw a1, 4(s0)9386; CHECK32-IZHINXMIN-NEXT: sw a2, 8(s0)9387; CHECK32-IZHINXMIN-NEXT: sw a3, 12(s0)9388; CHECK32-IZHINXMIN-NEXT: lw ra, 28(sp) # 4-byte Folded Reload9389; CHECK32-IZHINXMIN-NEXT: lw s0, 24(sp) # 4-byte Folded Reload9390; CHECK32-IZHINXMIN-NEXT: .cfi_restore ra9391; CHECK32-IZHINXMIN-NEXT: .cfi_restore s09392; CHECK32-IZHINXMIN-NEXT: addi sp, sp, 329393; CHECK32-IZHINXMIN-NEXT: .cfi_def_cfa_offset 09394; CHECK32-IZHINXMIN-NEXT: ret9395;9396; CHECK64-IZHINXMIN-LABEL: fcvt_q_h:9397; CHECK64-IZHINXMIN: # %bb.0:9398; CHECK64-IZHINXMIN-NEXT: addi sp, sp, -169399; CHECK64-IZHINXMIN-NEXT: .cfi_def_cfa_offset 169400; CHECK64-IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill9401; CHECK64-IZHINXMIN-NEXT: .cfi_offset ra, -89402; CHECK64-IZHINXMIN-NEXT: lh a0, 0(a0)9403; CHECK64-IZHINXMIN-NEXT: fcvt.s.h a0, a09404; CHECK64-IZHINXMIN-NEXT: call __extendsftf29405; CHECK64-IZHINXMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload9406; CHECK64-IZHINXMIN-NEXT: .cfi_restore ra9407; CHECK64-IZHINXMIN-NEXT: addi sp, sp, 169408; CHECK64-IZHINXMIN-NEXT: .cfi_def_cfa_offset 09409; CHECK64-IZHINXMIN-NEXT: ret9410;9411; CHECK32-IZDINXZHINXMIN-LABEL: fcvt_q_h:9412; CHECK32-IZDINXZHINXMIN: # %bb.0:9413; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, -329414; CHECK32-IZDINXZHINXMIN-NEXT: .cfi_def_cfa_offset 329415; CHECK32-IZDINXZHINXMIN-NEXT: sw ra, 28(sp) # 4-byte Folded Spill9416; CHECK32-IZDINXZHINXMIN-NEXT: sw s0, 24(sp) # 4-byte Folded Spill9417; CHECK32-IZDINXZHINXMIN-NEXT: .cfi_offset ra, -49418; CHECK32-IZDINXZHINXMIN-NEXT: .cfi_offset s0, -89419; CHECK32-IZDINXZHINXMIN-NEXT: mv s0, a09420; CHECK32-IZDINXZHINXMIN-NEXT: lh a0, 0(a1)9421; CHECK32-IZDINXZHINXMIN-NEXT: fcvt.s.h a1, a09422; CHECK32-IZDINXZHINXMIN-NEXT: addi a0, sp, 89423; CHECK32-IZDINXZHINXMIN-NEXT: call __extendsftf29424; CHECK32-IZDINXZHINXMIN-NEXT: lw a0, 8(sp)9425; CHECK32-IZDINXZHINXMIN-NEXT: lw a1, 12(sp)9426; CHECK32-IZDINXZHINXMIN-NEXT: lw a2, 16(sp)9427; CHECK32-IZDINXZHINXMIN-NEXT: lw a3, 20(sp)9428; CHECK32-IZDINXZHINXMIN-NEXT: sw a0, 0(s0)9429; CHECK32-IZDINXZHINXMIN-NEXT: sw a1, 4(s0)9430; CHECK32-IZDINXZHINXMIN-NEXT: sw a2, 8(s0)9431; CHECK32-IZDINXZHINXMIN-NEXT: sw a3, 12(s0)9432; CHECK32-IZDINXZHINXMIN-NEXT: lw ra, 28(sp) # 4-byte Folded Reload9433; CHECK32-IZDINXZHINXMIN-NEXT: lw s0, 24(sp) # 4-byte Folded Reload9434; CHECK32-IZDINXZHINXMIN-NEXT: .cfi_restore ra9435; CHECK32-IZDINXZHINXMIN-NEXT: .cfi_restore s09436; CHECK32-IZDINXZHINXMIN-NEXT: addi sp, sp, 329437; CHECK32-IZDINXZHINXMIN-NEXT: .cfi_def_cfa_offset 09438; CHECK32-IZDINXZHINXMIN-NEXT: ret9439;9440; CHECK64-IZDINXZHINXMIN-LABEL: fcvt_q_h:9441; CHECK64-IZDINXZHINXMIN: # %bb.0:9442; CHECK64-IZDINXZHINXMIN-NEXT: addi sp, sp, -169443; CHECK64-IZDINXZHINXMIN-NEXT: .cfi_def_cfa_offset 169444; CHECK64-IZDINXZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill9445; CHECK64-IZDINXZHINXMIN-NEXT: .cfi_offset ra, -89446; CHECK64-IZDINXZHINXMIN-NEXT: lh a0, 0(a0)9447; CHECK64-IZDINXZHINXMIN-NEXT: fcvt.s.h a0, a09448; CHECK64-IZDINXZHINXMIN-NEXT: call __extendsftf29449; CHECK64-IZDINXZHINXMIN-NEXT: ld ra, 8(sp) # 8-byte Folded Reload9450; CHECK64-IZDINXZHINXMIN-NEXT: .cfi_restore ra9451; CHECK64-IZDINXZHINXMIN-NEXT: addi sp, sp, 169452; CHECK64-IZDINXZHINXMIN-NEXT: .cfi_def_cfa_offset 09453; CHECK64-IZDINXZHINXMIN-NEXT: ret9454 %a = load half, ptr %x9455 %b = fpext half %a to fp1289456 ret fp128 %b9457}9458