brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.0 KiB · adeee2b Raw
380 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \3; RUN:     -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,RV32 %s4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \5; RUN:     -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,RV64 %s6 7define <vscale x 1 x half> @trunc_nxv1f16(<vscale x 1 x half> %x) strictfp {8; CHECK-LABEL: trunc_nxv1f16:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, mu11; CHECK-NEXT:    vmfne.vv v0, v8, v812; CHECK-NEXT:    li a0, 2513; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t14; CHECK-NEXT:    slli a0, a0, 1015; CHECK-NEXT:    vfabs.v v9, v816; CHECK-NEXT:    fmv.h.x fa5, a017; CHECK-NEXT:    vmflt.vf v0, v9, fa518; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma19; CHECK-NEXT:    vfcvt.rtz.x.f.v v9, v8, v0.t20; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t21; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu22; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t23; CHECK-NEXT:    ret24  %a = call <vscale x 1 x half> @llvm.experimental.constrained.trunc.nxv1f16(<vscale x 1 x half> %x, metadata !"fpexcept.strict")25  ret <vscale x 1 x half> %a26}27 28define <vscale x 2 x half> @trunc_nxv2f16(<vscale x 2 x half> %x) strictfp {29; CHECK-LABEL: trunc_nxv2f16:30; CHECK:       # %bb.0:31; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu32; CHECK-NEXT:    vmfne.vv v0, v8, v833; CHECK-NEXT:    li a0, 2534; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t35; CHECK-NEXT:    slli a0, a0, 1036; CHECK-NEXT:    vfabs.v v9, v837; CHECK-NEXT:    fmv.h.x fa5, a038; CHECK-NEXT:    vmflt.vf v0, v9, fa539; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma40; CHECK-NEXT:    vfcvt.rtz.x.f.v v9, v8, v0.t41; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t42; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu43; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t44; CHECK-NEXT:    ret45  %a = call <vscale x 2 x half> @llvm.experimental.constrained.trunc.nxv2f16(<vscale x 2 x half> %x, metadata !"fpexcept.strict")46  ret <vscale x 2 x half> %a47}48 49define <vscale x 4 x half> @trunc_nxv4f16(<vscale x 4 x half> %x) strictfp {50; CHECK-LABEL: trunc_nxv4f16:51; CHECK:       # %bb.0:52; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, mu53; CHECK-NEXT:    vmfne.vv v0, v8, v854; CHECK-NEXT:    li a0, 2555; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t56; CHECK-NEXT:    slli a0, a0, 1057; CHECK-NEXT:    vfabs.v v9, v858; CHECK-NEXT:    fmv.h.x fa5, a059; CHECK-NEXT:    vmflt.vf v0, v9, fa560; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma61; CHECK-NEXT:    vfcvt.rtz.x.f.v v9, v8, v0.t62; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t63; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu64; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t65; CHECK-NEXT:    ret66  %a = call <vscale x 4 x half> @llvm.experimental.constrained.trunc.nxv4f16(<vscale x 4 x half> %x, metadata !"fpexcept.strict")67  ret <vscale x 4 x half> %a68}69 70define <vscale x 8 x half> @trunc_nxv8f16(<vscale x 8 x half> %x) strictfp {71; CHECK-LABEL: trunc_nxv8f16:72; CHECK:       # %bb.0:73; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu74; CHECK-NEXT:    vmfne.vv v0, v8, v875; CHECK-NEXT:    li a0, 2576; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t77; CHECK-NEXT:    slli a0, a0, 1078; CHECK-NEXT:    vfabs.v v10, v879; CHECK-NEXT:    fmv.h.x fa5, a080; CHECK-NEXT:    vmflt.vf v0, v10, fa581; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma82; CHECK-NEXT:    vfcvt.rtz.x.f.v v10, v8, v0.t83; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t84; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, mu85; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t86; CHECK-NEXT:    ret87  %a = call <vscale x 8 x half> @llvm.experimental.constrained.trunc.nxv8f16(<vscale x 8 x half> %x, metadata !"fpexcept.strict")88  ret <vscale x 8 x half> %a89}90 91define <vscale x 16 x half> @trunc_nxv16f16(<vscale x 16 x half> %x) strictfp {92; CHECK-LABEL: trunc_nxv16f16:93; CHECK:       # %bb.0:94; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, mu95; CHECK-NEXT:    vmfne.vv v0, v8, v896; CHECK-NEXT:    li a0, 2597; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t98; CHECK-NEXT:    slli a0, a0, 1099; CHECK-NEXT:    vfabs.v v12, v8100; CHECK-NEXT:    fmv.h.x fa5, a0101; CHECK-NEXT:    vmflt.vf v0, v12, fa5102; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma103; CHECK-NEXT:    vfcvt.rtz.x.f.v v12, v8, v0.t104; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t105; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, mu106; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t107; CHECK-NEXT:    ret108  %a = call <vscale x 16 x half> @llvm.experimental.constrained.trunc.nxv16f16(<vscale x 16 x half> %x, metadata !"fpexcept.strict")109  ret <vscale x 16 x half> %a110}111 112define <vscale x 32 x half> @trunc_nxv32f16(<vscale x 32 x half> %x) strictfp {113; CHECK-LABEL: trunc_nxv32f16:114; CHECK:       # %bb.0:115; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, mu116; CHECK-NEXT:    vmfne.vv v0, v8, v8117; CHECK-NEXT:    li a0, 25118; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t119; CHECK-NEXT:    slli a0, a0, 10120; CHECK-NEXT:    vfabs.v v16, v8121; CHECK-NEXT:    fmv.h.x fa5, a0122; CHECK-NEXT:    vmflt.vf v0, v16, fa5123; CHECK-NEXT:    vsetvli zero, zero, e16, m8, ta, ma124; CHECK-NEXT:    vfcvt.rtz.x.f.v v16, v8, v0.t125; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t126; CHECK-NEXT:    vsetvli zero, zero, e16, m8, ta, mu127; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t128; CHECK-NEXT:    ret129  %a = call <vscale x 32 x half> @llvm.experimental.constrained.trunc.nxv32f16(<vscale x 32 x half> %x, metadata !"fpexcept.strict")130  ret <vscale x 32 x half> %a131}132 133define <vscale x 1 x float> @trunc_nxv1f32(<vscale x 1 x float> %x) strictfp {134; CHECK-LABEL: trunc_nxv1f32:135; CHECK:       # %bb.0:136; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, mu137; CHECK-NEXT:    vmfne.vv v0, v8, v8138; CHECK-NEXT:    lui a0, 307200139; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t140; CHECK-NEXT:    fmv.w.x fa5, a0141; CHECK-NEXT:    vfabs.v v9, v8142; CHECK-NEXT:    vmflt.vf v0, v9, fa5143; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma144; CHECK-NEXT:    vfcvt.rtz.x.f.v v9, v8, v0.t145; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t146; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu147; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t148; CHECK-NEXT:    ret149  %a = call <vscale x 1 x float> @llvm.experimental.constrained.trunc.nxv1f32(<vscale x 1 x float> %x, metadata !"fpexcept.strict")150  ret <vscale x 1 x float> %a151}152 153define <vscale x 2 x float> @trunc_nxv2f32(<vscale x 2 x float> %x) strictfp {154; CHECK-LABEL: trunc_nxv2f32:155; CHECK:       # %bb.0:156; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, mu157; CHECK-NEXT:    vmfne.vv v0, v8, v8158; CHECK-NEXT:    lui a0, 307200159; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t160; CHECK-NEXT:    fmv.w.x fa5, a0161; CHECK-NEXT:    vfabs.v v9, v8162; CHECK-NEXT:    vmflt.vf v0, v9, fa5163; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma164; CHECK-NEXT:    vfcvt.rtz.x.f.v v9, v8, v0.t165; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t166; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, mu167; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t168; CHECK-NEXT:    ret169  %a = call <vscale x 2 x float> @llvm.experimental.constrained.trunc.nxv2f32(<vscale x 2 x float> %x, metadata !"fpexcept.strict")170  ret <vscale x 2 x float> %a171}172 173define <vscale x 4 x float> @trunc_nxv4f32(<vscale x 4 x float> %x) strictfp {174; CHECK-LABEL: trunc_nxv4f32:175; CHECK:       # %bb.0:176; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, mu177; CHECK-NEXT:    vmfne.vv v0, v8, v8178; CHECK-NEXT:    lui a0, 307200179; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t180; CHECK-NEXT:    fmv.w.x fa5, a0181; CHECK-NEXT:    vfabs.v v10, v8182; CHECK-NEXT:    vmflt.vf v0, v10, fa5183; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma184; CHECK-NEXT:    vfcvt.rtz.x.f.v v10, v8, v0.t185; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t186; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, mu187; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t188; CHECK-NEXT:    ret189  %a = call <vscale x 4 x float> @llvm.experimental.constrained.trunc.nxv4f32(<vscale x 4 x float> %x, metadata !"fpexcept.strict")190  ret <vscale x 4 x float> %a191}192 193define <vscale x 8 x float> @trunc_nxv8f32(<vscale x 8 x float> %x) strictfp {194; CHECK-LABEL: trunc_nxv8f32:195; CHECK:       # %bb.0:196; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu197; CHECK-NEXT:    vmfne.vv v0, v8, v8198; CHECK-NEXT:    lui a0, 307200199; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t200; CHECK-NEXT:    fmv.w.x fa5, a0201; CHECK-NEXT:    vfabs.v v12, v8202; CHECK-NEXT:    vmflt.vf v0, v12, fa5203; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma204; CHECK-NEXT:    vfcvt.rtz.x.f.v v12, v8, v0.t205; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t206; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, mu207; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t208; CHECK-NEXT:    ret209  %a = call <vscale x 8 x float> @llvm.experimental.constrained.trunc.nxv8f32(<vscale x 8 x float> %x, metadata !"fpexcept.strict")210  ret <vscale x 8 x float> %a211}212 213define <vscale x 16 x float> @trunc_nxv16f32(<vscale x 16 x float> %x) strictfp {214; CHECK-LABEL: trunc_nxv16f32:215; CHECK:       # %bb.0:216; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, mu217; CHECK-NEXT:    vmfne.vv v0, v8, v8218; CHECK-NEXT:    lui a0, 307200219; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t220; CHECK-NEXT:    fmv.w.x fa5, a0221; CHECK-NEXT:    vfabs.v v16, v8222; CHECK-NEXT:    vmflt.vf v0, v16, fa5223; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma224; CHECK-NEXT:    vfcvt.rtz.x.f.v v16, v8, v0.t225; CHECK-NEXT:    vfcvt.f.x.v v16, v16, v0.t226; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, mu227; CHECK-NEXT:    vfsgnj.vv v8, v16, v8, v0.t228; CHECK-NEXT:    ret229  %a = call <vscale x 16 x float> @llvm.experimental.constrained.trunc.nxv16f32(<vscale x 16 x float> %x, metadata !"fpexcept.strict")230  ret <vscale x 16 x float> %a231}232 233define <vscale x 1 x double> @trunc_nxv1f64(<vscale x 1 x double> %x) strictfp {234; RV32-LABEL: trunc_nxv1f64:235; RV32:       # %bb.0:236; RV32-NEXT:    vsetvli a0, zero, e64, m1, ta, mu237; RV32-NEXT:    vmfne.vv v0, v8, v8238; RV32-NEXT:    lui a0, %hi(.LCPI11_0)239; RV32-NEXT:    fld fa5, %lo(.LCPI11_0)(a0)240; RV32-NEXT:    vfadd.vv v8, v8, v8, v0.t241; RV32-NEXT:    vfabs.v v9, v8242; RV32-NEXT:    vmflt.vf v0, v9, fa5243; RV32-NEXT:    vsetvli zero, zero, e64, m1, ta, ma244; RV32-NEXT:    vfcvt.rtz.x.f.v v9, v8, v0.t245; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t246; RV32-NEXT:    vsetvli zero, zero, e64, m1, ta, mu247; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t248; RV32-NEXT:    ret249;250; RV64-LABEL: trunc_nxv1f64:251; RV64:       # %bb.0:252; RV64-NEXT:    vsetvli a0, zero, e64, m1, ta, mu253; RV64-NEXT:    vmfne.vv v0, v8, v8254; RV64-NEXT:    li a0, 1075255; RV64-NEXT:    vfadd.vv v8, v8, v8, v0.t256; RV64-NEXT:    slli a0, a0, 52257; RV64-NEXT:    vfabs.v v9, v8258; RV64-NEXT:    fmv.d.x fa5, a0259; RV64-NEXT:    vmflt.vf v0, v9, fa5260; RV64-NEXT:    vsetvli zero, zero, e64, m1, ta, ma261; RV64-NEXT:    vfcvt.rtz.x.f.v v9, v8, v0.t262; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t263; RV64-NEXT:    vsetvli zero, zero, e64, m1, ta, mu264; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t265; RV64-NEXT:    ret266  %a = call <vscale x 1 x double> @llvm.experimental.constrained.trunc.nxv1f64(<vscale x 1 x double> %x, metadata !"fpexcept.strict")267  ret <vscale x 1 x double> %a268}269 270define <vscale x 2 x double> @trunc_nxv2f64(<vscale x 2 x double> %x) strictfp {271; RV32-LABEL: trunc_nxv2f64:272; RV32:       # %bb.0:273; RV32-NEXT:    vsetvli a0, zero, e64, m2, ta, mu274; RV32-NEXT:    vmfne.vv v0, v8, v8275; RV32-NEXT:    lui a0, %hi(.LCPI12_0)276; RV32-NEXT:    fld fa5, %lo(.LCPI12_0)(a0)277; RV32-NEXT:    vfadd.vv v8, v8, v8, v0.t278; RV32-NEXT:    vfabs.v v10, v8279; RV32-NEXT:    vmflt.vf v0, v10, fa5280; RV32-NEXT:    vsetvli zero, zero, e64, m2, ta, ma281; RV32-NEXT:    vfcvt.rtz.x.f.v v10, v8, v0.t282; RV32-NEXT:    vfcvt.f.x.v v10, v10, v0.t283; RV32-NEXT:    vsetvli zero, zero, e64, m2, ta, mu284; RV32-NEXT:    vfsgnj.vv v8, v10, v8, v0.t285; RV32-NEXT:    ret286;287; RV64-LABEL: trunc_nxv2f64:288; RV64:       # %bb.0:289; RV64-NEXT:    vsetvli a0, zero, e64, m2, ta, mu290; RV64-NEXT:    vmfne.vv v0, v8, v8291; RV64-NEXT:    li a0, 1075292; RV64-NEXT:    vfadd.vv v8, v8, v8, v0.t293; RV64-NEXT:    slli a0, a0, 52294; RV64-NEXT:    vfabs.v v10, v8295; RV64-NEXT:    fmv.d.x fa5, a0296; RV64-NEXT:    vmflt.vf v0, v10, fa5297; RV64-NEXT:    vsetvli zero, zero, e64, m2, ta, ma298; RV64-NEXT:    vfcvt.rtz.x.f.v v10, v8, v0.t299; RV64-NEXT:    vfcvt.f.x.v v10, v10, v0.t300; RV64-NEXT:    vsetvli zero, zero, e64, m2, ta, mu301; RV64-NEXT:    vfsgnj.vv v8, v10, v8, v0.t302; RV64-NEXT:    ret303  %a = call <vscale x 2 x double> @llvm.experimental.constrained.trunc.nxv2f64(<vscale x 2 x double> %x, metadata !"fpexcept.strict")304  ret <vscale x 2 x double> %a305}306 307define <vscale x 4 x double> @trunc_nxv4f64(<vscale x 4 x double> %x) strictfp {308; RV32-LABEL: trunc_nxv4f64:309; RV32:       # %bb.0:310; RV32-NEXT:    vsetvli a0, zero, e64, m4, ta, mu311; RV32-NEXT:    vmfne.vv v0, v8, v8312; RV32-NEXT:    lui a0, %hi(.LCPI13_0)313; RV32-NEXT:    fld fa5, %lo(.LCPI13_0)(a0)314; RV32-NEXT:    vfadd.vv v8, v8, v8, v0.t315; RV32-NEXT:    vfabs.v v12, v8316; RV32-NEXT:    vmflt.vf v0, v12, fa5317; RV32-NEXT:    vsetvli zero, zero, e64, m4, ta, ma318; RV32-NEXT:    vfcvt.rtz.x.f.v v12, v8, v0.t319; RV32-NEXT:    vfcvt.f.x.v v12, v12, v0.t320; RV32-NEXT:    vsetvli zero, zero, e64, m4, ta, mu321; RV32-NEXT:    vfsgnj.vv v8, v12, v8, v0.t322; RV32-NEXT:    ret323;324; RV64-LABEL: trunc_nxv4f64:325; RV64:       # %bb.0:326; RV64-NEXT:    vsetvli a0, zero, e64, m4, ta, mu327; RV64-NEXT:    vmfne.vv v0, v8, v8328; RV64-NEXT:    li a0, 1075329; RV64-NEXT:    vfadd.vv v8, v8, v8, v0.t330; RV64-NEXT:    slli a0, a0, 52331; RV64-NEXT:    vfabs.v v12, v8332; RV64-NEXT:    fmv.d.x fa5, a0333; RV64-NEXT:    vmflt.vf v0, v12, fa5334; RV64-NEXT:    vsetvli zero, zero, e64, m4, ta, ma335; RV64-NEXT:    vfcvt.rtz.x.f.v v12, v8, v0.t336; RV64-NEXT:    vfcvt.f.x.v v12, v12, v0.t337; RV64-NEXT:    vsetvli zero, zero, e64, m4, ta, mu338; RV64-NEXT:    vfsgnj.vv v8, v12, v8, v0.t339; RV64-NEXT:    ret340  %a = call <vscale x 4 x double> @llvm.experimental.constrained.trunc.nxv4f64(<vscale x 4 x double> %x, metadata !"fpexcept.strict")341  ret <vscale x 4 x double> %a342}343 344define <vscale x 8 x double> @trunc_nxv8f64(<vscale x 8 x double> %x) strictfp {345; RV32-LABEL: trunc_nxv8f64:346; RV32:       # %bb.0:347; RV32-NEXT:    vsetvli a0, zero, e64, m8, ta, mu348; RV32-NEXT:    vmfne.vv v0, v8, v8349; RV32-NEXT:    lui a0, %hi(.LCPI14_0)350; RV32-NEXT:    fld fa5, %lo(.LCPI14_0)(a0)351; RV32-NEXT:    vfadd.vv v8, v8, v8, v0.t352; RV32-NEXT:    vfabs.v v16, v8353; RV32-NEXT:    vmflt.vf v0, v16, fa5354; RV32-NEXT:    vsetvli zero, zero, e64, m8, ta, ma355; RV32-NEXT:    vfcvt.rtz.x.f.v v16, v8, v0.t356; RV32-NEXT:    vfcvt.f.x.v v16, v16, v0.t357; RV32-NEXT:    vsetvli zero, zero, e64, m8, ta, mu358; RV32-NEXT:    vfsgnj.vv v8, v16, v8, v0.t359; RV32-NEXT:    ret360;361; RV64-LABEL: trunc_nxv8f64:362; RV64:       # %bb.0:363; RV64-NEXT:    vsetvli a0, zero, e64, m8, ta, mu364; RV64-NEXT:    vmfne.vv v0, v8, v8365; RV64-NEXT:    li a0, 1075366; RV64-NEXT:    vfadd.vv v8, v8, v8, v0.t367; RV64-NEXT:    slli a0, a0, 52368; RV64-NEXT:    vfabs.v v16, v8369; RV64-NEXT:    fmv.d.x fa5, a0370; RV64-NEXT:    vmflt.vf v0, v16, fa5371; RV64-NEXT:    vsetvli zero, zero, e64, m8, ta, ma372; RV64-NEXT:    vfcvt.rtz.x.f.v v16, v8, v0.t373; RV64-NEXT:    vfcvt.f.x.v v16, v16, v0.t374; RV64-NEXT:    vsetvli zero, zero, e64, m8, ta, mu375; RV64-NEXT:    vfsgnj.vv v8, v16, v8, v0.t376; RV64-NEXT:    ret377  %a = call <vscale x 8 x double> @llvm.experimental.constrained.trunc.nxv8f64(<vscale x 8 x double> %x, metadata !"fpexcept.strict")378  ret <vscale x 8 x double> %a379}380