234 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v,+zvfbfmin -target-abi=ilp32d \3; RUN: -verify-machineinstrs < %s | FileCheck %s4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v,+zvfbfmin -target-abi=lp64d \5; RUN: -verify-machineinstrs < %s | FileCheck %s6 7define <vscale x 1 x float> @vfpext_nxv1f16_nxv1f32(<vscale x 1 x half> %va) strictfp {8; CHECK-LABEL: vfpext_nxv1f16_nxv1f32:9; CHECK: # %bb.0:10; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma11; CHECK-NEXT: vfwcvt.f.f.v v9, v812; CHECK-NEXT: vmv1r.v v8, v913; CHECK-NEXT: ret14 %evec = call <vscale x 1 x float> @llvm.experimental.constrained.fpext.nxv1f32.nxv1f16(<vscale x 1 x half> %va, metadata !"fpexcept.strict")15 ret <vscale x 1 x float> %evec16}17 18define <vscale x 1 x double> @vfpext_nxv1f16_nxv1f64(<vscale x 1 x half> %va) strictfp {19; CHECK-LABEL: vfpext_nxv1f16_nxv1f64:20; CHECK: # %bb.0:21; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma22; CHECK-NEXT: vfwcvt.f.f.v v9, v823; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma24; CHECK-NEXT: vfwcvt.f.f.v v8, v925; CHECK-NEXT: ret26 %evec = call <vscale x 1 x double> @llvm.experimental.constrained.fpext.nxv1f64.nxv1f16(<vscale x 1 x half> %va, metadata !"fpexcept.strict")27 ret <vscale x 1 x double> %evec28}29 30define <vscale x 2 x float> @vfpext_nxv2f16_nxv2f32(<vscale x 2 x half> %va) strictfp {31; CHECK-LABEL: vfpext_nxv2f16_nxv2f32:32; CHECK: # %bb.0:33; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma34; CHECK-NEXT: vfwcvt.f.f.v v9, v835; CHECK-NEXT: vmv1r.v v8, v936; CHECK-NEXT: ret37 %evec = call <vscale x 2 x float> @llvm.experimental.constrained.fpext.nxv2f32.nxv2f16(<vscale x 2 x half> %va, metadata !"fpexcept.strict")38 ret <vscale x 2 x float> %evec39}40 41define <vscale x 2 x double> @vfpext_nxv2f16_nxv2f64(<vscale x 2 x half> %va) strictfp {42; CHECK-LABEL: vfpext_nxv2f16_nxv2f64:43; CHECK: # %bb.0:44; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma45; CHECK-NEXT: vfwcvt.f.f.v v10, v846; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma47; CHECK-NEXT: vfwcvt.f.f.v v8, v1048; CHECK-NEXT: ret49 %evec = call <vscale x 2 x double> @llvm.experimental.constrained.fpext.nxv2f64.nxv2f16(<vscale x 2 x half> %va, metadata !"fpexcept.strict")50 ret <vscale x 2 x double> %evec51}52 53define <vscale x 4 x float> @vfpext_nxv4f16_nxv4f32(<vscale x 4 x half> %va) strictfp {54; CHECK-LABEL: vfpext_nxv4f16_nxv4f32:55; CHECK: # %bb.0:56; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma57; CHECK-NEXT: vmv1r.v v10, v858; CHECK-NEXT: vfwcvt.f.f.v v8, v1059; CHECK-NEXT: ret60 %evec = call <vscale x 4 x float> @llvm.experimental.constrained.fpext.nxv4f32.nxv4f16(<vscale x 4 x half> %va, metadata !"fpexcept.strict")61 ret <vscale x 4 x float> %evec62}63 64define <vscale x 4 x double> @vfpext_nxv4f16_nxv4f64(<vscale x 4 x half> %va) strictfp {65; CHECK-LABEL: vfpext_nxv4f16_nxv4f64:66; CHECK: # %bb.0:67; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma68; CHECK-NEXT: vfwcvt.f.f.v v12, v869; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma70; CHECK-NEXT: vfwcvt.f.f.v v8, v1271; CHECK-NEXT: ret72 %evec = call <vscale x 4 x double> @llvm.experimental.constrained.fpext.nxv4f64.nxv4f16(<vscale x 4 x half> %va, metadata !"fpexcept.strict")73 ret <vscale x 4 x double> %evec74}75 76define <vscale x 8 x float> @vfpext_nxv8f16_nxv8f32(<vscale x 8 x half> %va) strictfp {77; CHECK-LABEL: vfpext_nxv8f16_nxv8f32:78; CHECK: # %bb.0:79; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma80; CHECK-NEXT: vmv2r.v v12, v881; CHECK-NEXT: vfwcvt.f.f.v v8, v1282; CHECK-NEXT: ret83 %evec = call <vscale x 8 x float> @llvm.experimental.constrained.fpext.nxv8f32.nxv8f16(<vscale x 8 x half> %va, metadata !"fpexcept.strict")84 ret <vscale x 8 x float> %evec85}86 87define <vscale x 8 x double> @vfpext_nxv8f16_nxv8f64(<vscale x 8 x half> %va) strictfp {88; CHECK-LABEL: vfpext_nxv8f16_nxv8f64:89; CHECK: # %bb.0:90; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma91; CHECK-NEXT: vfwcvt.f.f.v v16, v892; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma93; CHECK-NEXT: vfwcvt.f.f.v v8, v1694; CHECK-NEXT: ret95 %evec = call <vscale x 8 x double> @llvm.experimental.constrained.fpext.nxv8f64.nxv8f16(<vscale x 8 x half> %va, metadata !"fpexcept.strict")96 ret <vscale x 8 x double> %evec97}98 99define <vscale x 1 x double> @vfpext_nxv1f32_nxv1f64(<vscale x 1 x float> %va) strictfp {100; CHECK-LABEL: vfpext_nxv1f32_nxv1f64:101; CHECK: # %bb.0:102; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma103; CHECK-NEXT: vfwcvt.f.f.v v9, v8104; CHECK-NEXT: vmv1r.v v8, v9105; CHECK-NEXT: ret106 %evec = call <vscale x 1 x double> @llvm.experimental.constrained.fpext.nxv1f64.nxv1f32(<vscale x 1 x float> %va, metadata !"fpexcept.strict")107 ret <vscale x 1 x double> %evec108}109 110define <vscale x 2 x double> @vfpext_nxv2f32_nxv2f64(<vscale x 2 x float> %va) strictfp {111; CHECK-LABEL: vfpext_nxv2f32_nxv2f64:112; CHECK: # %bb.0:113; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma114; CHECK-NEXT: vmv1r.v v10, v8115; CHECK-NEXT: vfwcvt.f.f.v v8, v10116; CHECK-NEXT: ret117 %evec = call <vscale x 2 x double> @llvm.experimental.constrained.fpext.nxv2f64.nxv2f32(<vscale x 2 x float> %va, metadata !"fpexcept.strict")118 ret <vscale x 2 x double> %evec119}120 121define <vscale x 4 x double> @vfpext_nxv4f32_nxv4f64(<vscale x 4 x float> %va) strictfp {122; CHECK-LABEL: vfpext_nxv4f32_nxv4f64:123; CHECK: # %bb.0:124; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma125; CHECK-NEXT: vmv2r.v v12, v8126; CHECK-NEXT: vfwcvt.f.f.v v8, v12127; CHECK-NEXT: ret128 %evec = call <vscale x 4 x double> @llvm.experimental.constrained.fpext.nxv4f64.nxv4f32(<vscale x 4 x float> %va, metadata !"fpexcept.strict")129 ret <vscale x 4 x double> %evec130}131 132define <vscale x 8 x double> @vfpext_nxv8f32_nxv8f64(<vscale x 8 x float> %va) strictfp {133; CHECK-LABEL: vfpext_nxv8f32_nxv8f64:134; CHECK: # %bb.0:135; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma136; CHECK-NEXT: vmv4r.v v16, v8137; CHECK-NEXT: vfwcvt.f.f.v v8, v16138; CHECK-NEXT: ret139 %evec = call <vscale x 8 x double> @llvm.experimental.constrained.fpext.nxv8f64.nxv8f32(<vscale x 8 x float> %va, metadata !"fpexcept.strict")140 ret <vscale x 8 x double> %evec141}142 143define <vscale x 1 x float> @vfpext_nxv1bf16_nxv1f32(<vscale x 1 x bfloat> %va) strictfp {144; CHECK-LABEL: vfpext_nxv1bf16_nxv1f32:145; CHECK: # %bb.0:146; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma147; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8148; CHECK-NEXT: vmv1r.v v8, v9149; CHECK-NEXT: ret150 %evec = call <vscale x 1 x float> @llvm.experimental.constrained.fpext.nxv1f32.nxv1bf16(<vscale x 1 x bfloat> %va, metadata !"fpexcept.strict")151 ret <vscale x 1 x float> %evec152}153 154define <vscale x 1 x double> @vfpext_nxv1bf16_nxv1f64(<vscale x 1 x bfloat> %va) strictfp {155; CHECK-LABEL: vfpext_nxv1bf16_nxv1f64:156; CHECK: # %bb.0:157; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma158; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8159; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma160; CHECK-NEXT: vfwcvt.f.f.v v8, v9161; CHECK-NEXT: ret162 %evec = call <vscale x 1 x double> @llvm.experimental.constrained.fpext.nxv1f64.nxv1bf16(<vscale x 1 x bfloat> %va, metadata !"fpexcept.strict")163 ret <vscale x 1 x double> %evec164}165 166define <vscale x 2 x float> @vfpext_nxv2bf16_nxv2f32(<vscale x 2 x bfloat> %va) strictfp {167; CHECK-LABEL: vfpext_nxv2bf16_nxv2f32:168; CHECK: # %bb.0:169; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma170; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8171; CHECK-NEXT: vmv1r.v v8, v9172; CHECK-NEXT: ret173 %evec = call <vscale x 2 x float> @llvm.experimental.constrained.fpext.nxv2f32.nxv2bf16(<vscale x 2 x bfloat> %va, metadata !"fpexcept.strict")174 ret <vscale x 2 x float> %evec175}176 177define <vscale x 2 x double> @vfpext_nxv2bf16_nxv2f64(<vscale x 2 x bfloat> %va) strictfp {178; CHECK-LABEL: vfpext_nxv2bf16_nxv2f64:179; CHECK: # %bb.0:180; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma181; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8182; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma183; CHECK-NEXT: vfwcvt.f.f.v v8, v10184; CHECK-NEXT: ret185 %evec = call <vscale x 2 x double> @llvm.experimental.constrained.fpext.nxv2f64.nxv2bf16(<vscale x 2 x bfloat> %va, metadata !"fpexcept.strict")186 ret <vscale x 2 x double> %evec187}188 189define <vscale x 4 x float> @vfpext_nxv4bf16_nxv4f32(<vscale x 4 x bfloat> %va) strictfp {190; CHECK-LABEL: vfpext_nxv4bf16_nxv4f32:191; CHECK: # %bb.0:192; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma193; CHECK-NEXT: vmv1r.v v10, v8194; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v10195; CHECK-NEXT: ret196 %evec = call <vscale x 4 x float> @llvm.experimental.constrained.fpext.nxv4f32.nxv4bf16(<vscale x 4 x bfloat> %va, metadata !"fpexcept.strict")197 ret <vscale x 4 x float> %evec198}199 200define <vscale x 4 x double> @vfpext_nxv4bf16_nxv4f64(<vscale x 4 x bfloat> %va) strictfp {201; CHECK-LABEL: vfpext_nxv4bf16_nxv4f64:202; CHECK: # %bb.0:203; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma204; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8205; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma206; CHECK-NEXT: vfwcvt.f.f.v v8, v12207; CHECK-NEXT: ret208 %evec = call <vscale x 4 x double> @llvm.experimental.constrained.fpext.nxv4f64.nxv4bf16(<vscale x 4 x bfloat> %va, metadata !"fpexcept.strict")209 ret <vscale x 4 x double> %evec210}211 212define <vscale x 8 x float> @vfpext_nxv8bf16_nxv8f32(<vscale x 8 x bfloat> %va) strictfp {213; CHECK-LABEL: vfpext_nxv8bf16_nxv8f32:214; CHECK: # %bb.0:215; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma216; CHECK-NEXT: vmv2r.v v12, v8217; CHECK-NEXT: vfwcvtbf16.f.f.v v8, v12218; CHECK-NEXT: ret219 %evec = call <vscale x 8 x float> @llvm.experimental.constrained.fpext.nxv8f32.nxv8bf16(<vscale x 8 x bfloat> %va, metadata !"fpexcept.strict")220 ret <vscale x 8 x float> %evec221}222 223define <vscale x 8 x double> @vfpext_nxv8bf16_nxv8f64(<vscale x 8 x bfloat> %va) strictfp {224; CHECK-LABEL: vfpext_nxv8bf16_nxv8f64:225; CHECK: # %bb.0:226; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma227; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8228; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma229; CHECK-NEXT: vfwcvt.f.f.v v8, v16230; CHECK-NEXT: ret231 %evec = call <vscale x 8 x double> @llvm.experimental.constrained.fpext.nxv8f64.nxv8bf16(<vscale x 8 x bfloat> %va, metadata !"fpexcept.strict")232 ret <vscale x 8 x double> %evec233}234