brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.9 KiB · 9147522 Raw
177 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 <2 x float> @vfpext_v2f16_v2f32(<2 x half> %va) strictfp {8; CHECK-LABEL: vfpext_v2f16_v2f32:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma11; CHECK-NEXT:    vfwcvt.f.f.v v9, v812; CHECK-NEXT:    vmv1r.v v8, v913; CHECK-NEXT:    ret14  %evec = call <2 x float> @llvm.experimental.constrained.fpext.v2f32.v2f16(<2 x half> %va, metadata !"fpexcept.strict")15  ret <2 x float> %evec16}17 18define <2 x double> @vfpext_v2f16_v2f64(<2 x half> %va) strictfp {19; CHECK-LABEL: vfpext_v2f16_v2f64:20; CHECK:       # %bb.0:21; CHECK-NEXT:    vsetivli zero, 2, 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 <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f16(<2 x half> %va, metadata !"fpexcept.strict")27  ret <2 x double> %evec28}29 30define <4 x float> @vfpext_v4f16_v4f32(<4 x half> %va) strictfp {31; CHECK-LABEL: vfpext_v4f16_v4f32:32; CHECK:       # %bb.0:33; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma34; CHECK-NEXT:    vfwcvt.f.f.v v9, v835; CHECK-NEXT:    vmv1r.v v8, v936; CHECK-NEXT:    ret37  %evec = call <4 x float> @llvm.experimental.constrained.fpext.v4f32.v4f16(<4 x half> %va, metadata !"fpexcept.strict")38  ret <4 x float> %evec39}40 41define <4 x double> @vfpext_v4f16_v4f64(<4 x half> %va) strictfp {42; CHECK-LABEL: vfpext_v4f16_v4f64:43; CHECK:       # %bb.0:44; CHECK-NEXT:    vsetivli zero, 4, 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 <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f16(<4 x half> %va, metadata !"fpexcept.strict")50  ret <4 x double> %evec51}52 53define <8 x float> @vfpext_v8f16_v8f32(<8 x half> %va) strictfp {54; CHECK-LABEL: vfpext_v8f16_v8f32:55; CHECK:       # %bb.0:56; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma57; CHECK-NEXT:    vmv1r.v v10, v858; CHECK-NEXT:    vfwcvt.f.f.v v8, v1059; CHECK-NEXT:    ret60  %evec = call <8 x float> @llvm.experimental.constrained.fpext.v8f32.v8f16(<8 x half> %va, metadata !"fpexcept.strict")61  ret <8 x float> %evec62}63 64define <8 x double> @vfpext_v8f16_v8f64(<8 x half> %va) strictfp {65; CHECK-LABEL: vfpext_v8f16_v8f64:66; CHECK:       # %bb.0:67; CHECK-NEXT:    vsetivli zero, 8, 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 <8 x double> @llvm.experimental.constrained.fpext.v8f64.v8f16(<8 x half> %va, metadata !"fpexcept.strict")73  ret <8 x double> %evec74}75 76define <2 x double> @vfpext_v2f32_v2f64(<2 x float> %va) strictfp {77; CHECK-LABEL: vfpext_v2f32_v2f64:78; CHECK:       # %bb.0:79; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma80; CHECK-NEXT:    vfwcvt.f.f.v v9, v881; CHECK-NEXT:    vmv1r.v v8, v982; CHECK-NEXT:    ret83  %evec = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2f32(<2 x float> %va, metadata !"fpexcept.strict")84  ret <2 x double> %evec85}86 87define <4 x double> @vfpext_v4f32_v4f64(<4 x float> %va) strictfp {88; CHECK-LABEL: vfpext_v4f32_v4f64:89; CHECK:       # %bb.0:90; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma91; CHECK-NEXT:    vmv1r.v v10, v892; CHECK-NEXT:    vfwcvt.f.f.v v8, v1093; CHECK-NEXT:    ret94  %evec = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float> %va, metadata !"fpexcept.strict")95  ret <4 x double> %evec96}97 98define <8 x double> @vfpext_v8f32_v8f64(<8 x float> %va) strictfp {99; CHECK-LABEL: vfpext_v8f32_v8f64:100; CHECK:       # %bb.0:101; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma102; CHECK-NEXT:    vmv2r.v v12, v8103; CHECK-NEXT:    vfwcvt.f.f.v v8, v12104; CHECK-NEXT:    ret105  %evec = call <8 x double> @llvm.experimental.constrained.fpext.v8f64.v8f32(<8 x float> %va, metadata !"fpexcept.strict")106  ret <8 x double> %evec107}108 109define <2 x float> @vfpext_v2bf16_v2f32(<2 x bfloat> %va) strictfp {110; CHECK-LABEL: vfpext_v2bf16_v2f32:111; CHECK:       # %bb.0:112; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma113; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8114; CHECK-NEXT:    vmv1r.v v8, v9115; CHECK-NEXT:    ret116  %evec = call <2 x float> @llvm.experimental.constrained.fpext.v2f32.v2bf16(<2 x bfloat> %va, metadata !"fpexcept.strict")117  ret <2 x float> %evec118}119 120define <2 x double> @vfpext_v2bf16_v2f64(<2 x bfloat> %va) strictfp {121; CHECK-LABEL: vfpext_v2bf16_v2f64:122; CHECK:       # %bb.0:123; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma124; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8125; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma126; CHECK-NEXT:    vfwcvt.f.f.v v8, v9127; CHECK-NEXT:    ret128  %evec = call <2 x double> @llvm.experimental.constrained.fpext.v2f64.v2bf16(<2 x bfloat> %va, metadata !"fpexcept.strict")129  ret <2 x double> %evec130}131 132define <4 x float> @vfpext_v4bf16_v4f32(<4 x bfloat> %va) strictfp {133; CHECK-LABEL: vfpext_v4bf16_v4f32:134; CHECK:       # %bb.0:135; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma136; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v8137; CHECK-NEXT:    vmv1r.v v8, v9138; CHECK-NEXT:    ret139  %evec = call <4 x float> @llvm.experimental.constrained.fpext.v4f32.v4bf16(<4 x bfloat> %va, metadata !"fpexcept.strict")140  ret <4 x float> %evec141}142 143define <4 x double> @vfpext_v4bf16_v4f64(<4 x bfloat> %va) strictfp {144; CHECK-LABEL: vfpext_v4bf16_v4f64:145; CHECK:       # %bb.0:146; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma147; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v8148; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma149; CHECK-NEXT:    vfwcvt.f.f.v v8, v10150; CHECK-NEXT:    ret151  %evec = call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4bf16(<4 x bfloat> %va, metadata !"fpexcept.strict")152  ret <4 x double> %evec153}154 155define <8 x float> @vfpext_v8bf16_v8f32(<8 x bfloat> %va) strictfp {156; CHECK-LABEL: vfpext_v8bf16_v8f32:157; CHECK:       # %bb.0:158; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma159; CHECK-NEXT:    vmv1r.v v10, v8160; CHECK-NEXT:    vfwcvtbf16.f.f.v v8, v10161; CHECK-NEXT:    ret162  %evec = call <8 x float> @llvm.experimental.constrained.fpext.v8f32.v8bf16(<8 x bfloat> %va, metadata !"fpexcept.strict")163  ret <8 x float> %evec164}165 166define <8 x double> @vfpext_v8bf16_v8f64(<8 x bfloat> %va) strictfp {167; CHECK-LABEL: vfpext_v8bf16_v8f64:168; CHECK:       # %bb.0:169; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma170; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8171; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma172; CHECK-NEXT:    vfwcvt.f.f.v v8, v12173; CHECK-NEXT:    ret174  %evec = call <8 x double> @llvm.experimental.constrained.fpext.v8f64.v8bf16(<8 x bfloat> %va, metadata !"fpexcept.strict")175  ret <8 x double> %evec176}177