brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.1 KiB · b775897 Raw
238 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; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfhmin,+v,+zvfbfmin -target-abi=ilp32d \7; RUN:     -verify-machineinstrs < %s | FileCheck %s8; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfhmin,+v,+zvfbfmin -target-abi=lp64d \9; RUN:     -verify-machineinstrs < %s | FileCheck %s10 11define <vscale x 1 x float> @vfptrunc_nxv1f64_nxv1f32(<vscale x 1 x double> %va) strictfp {12; CHECK-LABEL: vfptrunc_nxv1f64_nxv1f32:13; CHECK:       # %bb.0:14; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma15; CHECK-NEXT:    vfncvt.f.f.w v9, v816; CHECK-NEXT:    vmv1r.v v8, v917; CHECK-NEXT:    ret18  %evec = call <vscale x 1 x float> @llvm.experimental.constrained.fptrunc.nxv1f32.nxv1f64(<vscale x 1 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")19  ret <vscale x 1 x float> %evec20}21 22define <vscale x 1 x half> @vfptrunc_nxv1f64_nxv1f16(<vscale x 1 x double> %va) strictfp {23; CHECK-LABEL: vfptrunc_nxv1f64_nxv1f16:24; CHECK:       # %bb.0:25; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma26; CHECK-NEXT:    vfncvt.rod.f.f.w v9, v827; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma28; CHECK-NEXT:    vfncvt.f.f.w v8, v929; CHECK-NEXT:    ret30  %evec = call <vscale x 1 x half> @llvm.experimental.constrained.fptrunc.nxv1f16.nxv1f64(<vscale x 1 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")31  ret <vscale x 1 x half> %evec32}33 34define <vscale x 1 x half> @vfptrunc_nxv1f32_nxv1f16(<vscale x 1 x float> %va) strictfp {35; CHECK-LABEL: vfptrunc_nxv1f32_nxv1f16:36; CHECK:       # %bb.0:37; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma38; CHECK-NEXT:    vfncvt.f.f.w v9, v839; CHECK-NEXT:    vmv1r.v v8, v940; CHECK-NEXT:    ret41  %evec = call <vscale x 1 x half> @llvm.experimental.constrained.fptrunc.nxv1f16.nxv1f32(<vscale x 1 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")42  ret <vscale x 1 x half> %evec43}44 45define <vscale x 2 x float> @vfptrunc_nxv2f64_nxv2f32(<vscale x 2 x double> %va) strictfp {46; CHECK-LABEL: vfptrunc_nxv2f64_nxv2f32:47; CHECK:       # %bb.0:48; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma49; CHECK-NEXT:    vfncvt.f.f.w v10, v850; CHECK-NEXT:    vmv.v.v v8, v1051; CHECK-NEXT:    ret52  %evec = call <vscale x 2 x float> @llvm.experimental.constrained.fptrunc.nxv2f32.nxv2f64(<vscale x 2 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")53  ret <vscale x 2 x float> %evec54}55 56define <vscale x 2 x half> @vfptrunc_nxv2f64_nxv2f16(<vscale x 2 x double> %va) strictfp {57; CHECK-LABEL: vfptrunc_nxv2f64_nxv2f16:58; CHECK:       # %bb.0:59; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma60; CHECK-NEXT:    vfncvt.rod.f.f.w v10, v861; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma62; CHECK-NEXT:    vfncvt.f.f.w v8, v1063; CHECK-NEXT:    ret64  %evec = call <vscale x 2 x half> @llvm.experimental.constrained.fptrunc.nxv2f16.nxv2f64(<vscale x 2 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")65  ret <vscale x 2 x half> %evec66}67 68define <vscale x 2 x half> @vfptrunc_nxv2f32_nxv2f16(<vscale x 2 x float> %va) strictfp {69; CHECK-LABEL: vfptrunc_nxv2f32_nxv2f16:70; CHECK:       # %bb.0:71; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma72; CHECK-NEXT:    vfncvt.f.f.w v9, v873; CHECK-NEXT:    vmv1r.v v8, v974; CHECK-NEXT:    ret75  %evec = call <vscale x 2 x half> @llvm.experimental.constrained.fptrunc.nxv2f16.nxv2f32(<vscale x 2 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")76  ret <vscale x 2 x half> %evec77}78 79define <vscale x 4 x float> @vfptrunc_nxv4f64_nxv4f32(<vscale x 4 x double> %va) strictfp {80; CHECK-LABEL: vfptrunc_nxv4f64_nxv4f32:81; CHECK:       # %bb.0:82; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma83; CHECK-NEXT:    vfncvt.f.f.w v12, v884; CHECK-NEXT:    vmv.v.v v8, v1285; CHECK-NEXT:    ret86  %evec = call <vscale x 4 x float> @llvm.experimental.constrained.fptrunc.nxv4f32.nxv4f64(<vscale x 4 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")87  ret <vscale x 4 x float> %evec88}89 90define <vscale x 4 x half> @vfptrunc_nxv4f64_nxv4f16(<vscale x 4 x double> %va) strictfp {91; CHECK-LABEL: vfptrunc_nxv4f64_nxv4f16:92; CHECK:       # %bb.0:93; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma94; CHECK-NEXT:    vfncvt.rod.f.f.w v12, v895; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma96; CHECK-NEXT:    vfncvt.f.f.w v8, v1297; CHECK-NEXT:    ret98  %evec = call <vscale x 4 x half> @llvm.experimental.constrained.fptrunc.nxv4f16.nxv4f64(<vscale x 4 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")99  ret <vscale x 4 x half> %evec100}101 102define <vscale x 4 x half> @vfptrunc_nxv4f32_nxv4f16(<vscale x 4 x float> %va) strictfp {103; CHECK-LABEL: vfptrunc_nxv4f32_nxv4f16:104; CHECK:       # %bb.0:105; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma106; CHECK-NEXT:    vfncvt.f.f.w v10, v8107; CHECK-NEXT:    vmv.v.v v8, v10108; CHECK-NEXT:    ret109  %evec = call <vscale x 4 x half> @llvm.experimental.constrained.fptrunc.nxv4f16.nxv4f32(<vscale x 4 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")110  ret <vscale x 4 x half> %evec111}112 113define <vscale x 8 x float> @vfptrunc_nxv8f64_nxv8f32(<vscale x 8 x double> %va) strictfp {114; CHECK-LABEL: vfptrunc_nxv8f64_nxv8f32:115; CHECK:       # %bb.0:116; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma117; CHECK-NEXT:    vfncvt.f.f.w v16, v8118; CHECK-NEXT:    vmv.v.v v8, v16119; CHECK-NEXT:    ret120  %evec = call <vscale x 8 x float> @llvm.experimental.constrained.fptrunc.nxv8f32.nxv8f64(<vscale x 8 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")121  ret <vscale x 8 x float> %evec122}123 124define <vscale x 8 x half> @vfptrunc_nxv8f64_nxv8f16(<vscale x 8 x double> %va) strictfp {125; CHECK-LABEL: vfptrunc_nxv8f64_nxv8f16:126; CHECK:       # %bb.0:127; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma128; CHECK-NEXT:    vfncvt.rod.f.f.w v16, v8129; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma130; CHECK-NEXT:    vfncvt.f.f.w v8, v16131; CHECK-NEXT:    ret132  %evec = call <vscale x 8 x half> @llvm.experimental.constrained.fptrunc.nxv8f16.nxv8f64(<vscale x 8 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")133  ret <vscale x 8 x half> %evec134}135 136define <vscale x 8 x half> @vfptrunc_nxv8f32_nxv8f16(<vscale x 8 x float> %va) strictfp {137; CHECK-LABEL: vfptrunc_nxv8f32_nxv8f16:138; CHECK:       # %bb.0:139; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma140; CHECK-NEXT:    vfncvt.f.f.w v12, v8141; CHECK-NEXT:    vmv.v.v v8, v12142; CHECK-NEXT:    ret143  %evec = call <vscale x 8 x half> @llvm.experimental.constrained.fptrunc.nxv8f16.nxv8f32(<vscale x 8 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")144  ret <vscale x 8 x half> %evec145}146 147define <vscale x 1 x bfloat> @vfptrunc_nxv1f64_nxv1bf16(<vscale x 1 x double> %va) strictfp {148; CHECK-LABEL: vfptrunc_nxv1f64_nxv1bf16:149; CHECK:       # %bb.0:150; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma151; CHECK-NEXT:    vfncvt.rod.f.f.w v9, v8152; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma153; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v9154; CHECK-NEXT:    ret155  %evec = call <vscale x 1 x bfloat> @llvm.experimental.constrained.fptrunc.nxv1bf16.nxv1f64(<vscale x 1 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")156  ret <vscale x 1 x bfloat> %evec157}158 159define <vscale x 1 x bfloat> @vfptrunc_nxv1f32_nxv1bf16(<vscale x 1 x float> %va) strictfp {160; CHECK-LABEL: vfptrunc_nxv1f32_nxv1bf16:161; CHECK:       # %bb.0:162; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma163; CHECK-NEXT:    vfncvtbf16.f.f.w v9, v8164; CHECK-NEXT:    vmv1r.v v8, v9165; CHECK-NEXT:    ret166  %evec = call <vscale x 1 x bfloat> @llvm.experimental.constrained.fptrunc.nxv1bf16.nxv1f32(<vscale x 1 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")167  ret <vscale x 1 x bfloat> %evec168}169 170define <vscale x 2 x bfloat> @vfptrunc_nxv2f64_nxv2bf16(<vscale x 2 x double> %va) strictfp {171; CHECK-LABEL: vfptrunc_nxv2f64_nxv2bf16:172; CHECK:       # %bb.0:173; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma174; CHECK-NEXT:    vfncvt.rod.f.f.w v10, v8175; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma176; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v10177; CHECK-NEXT:    ret178  %evec = call <vscale x 2 x bfloat> @llvm.experimental.constrained.fptrunc.nxv2bf16.nxv2f64(<vscale x 2 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")179  ret <vscale x 2 x bfloat> %evec180}181 182define <vscale x 2 x bfloat> @vfptrunc_nxv2f32_nxv2bf16(<vscale x 2 x float> %va) strictfp {183; CHECK-LABEL: vfptrunc_nxv2f32_nxv2bf16:184; CHECK:       # %bb.0:185; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma186; CHECK-NEXT:    vfncvtbf16.f.f.w v9, v8187; CHECK-NEXT:    vmv1r.v v8, v9188; CHECK-NEXT:    ret189  %evec = call <vscale x 2 x bfloat> @llvm.experimental.constrained.fptrunc.nxv2bf16.nxv2f32(<vscale x 2 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")190  ret <vscale x 2 x bfloat> %evec191}192 193define <vscale x 4 x bfloat> @vfptrunc_nxv4f64_nxv4bf16(<vscale x 4 x double> %va) strictfp {194; CHECK-LABEL: vfptrunc_nxv4f64_nxv4bf16:195; CHECK:       # %bb.0:196; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma197; CHECK-NEXT:    vfncvt.rod.f.f.w v12, v8198; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma199; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v12200; CHECK-NEXT:    ret201  %evec = call <vscale x 4 x bfloat> @llvm.experimental.constrained.fptrunc.nxv4bf16.nxv4f64(<vscale x 4 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")202  ret <vscale x 4 x bfloat> %evec203}204 205define <vscale x 4 x bfloat> @vfptrunc_nxv4f32_nxv4bf16(<vscale x 4 x float> %va) strictfp {206; CHECK-LABEL: vfptrunc_nxv4f32_nxv4bf16:207; CHECK:       # %bb.0:208; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma209; CHECK-NEXT:    vfncvtbf16.f.f.w v10, v8210; CHECK-NEXT:    vmv.v.v v8, v10211; CHECK-NEXT:    ret212  %evec = call <vscale x 4 x bfloat> @llvm.experimental.constrained.fptrunc.nxv4bf16.nxv4f32(<vscale x 4 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")213  ret <vscale x 4 x bfloat> %evec214}215 216define <vscale x 8 x bfloat> @vfptrunc_nxv8f64_nxv8bf16(<vscale x 8 x double> %va) strictfp {217; CHECK-LABEL: vfptrunc_nxv8f64_nxv8bf16:218; CHECK:       # %bb.0:219; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma220; CHECK-NEXT:    vfncvt.rod.f.f.w v16, v8221; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma222; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v16223; CHECK-NEXT:    ret224  %evec = call <vscale x 8 x bfloat> @llvm.experimental.constrained.fptrunc.nxv8bf16.nxv8f64(<vscale x 8 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")225  ret <vscale x 8 x bfloat> %evec226}227 228define <vscale x 8 x bfloat> @vfptrunc_nxv8f32_nxv8bf16(<vscale x 8 x float> %va) strictfp {229; CHECK-LABEL: vfptrunc_nxv8f32_nxv8bf16:230; CHECK:       # %bb.0:231; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma232; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v8233; CHECK-NEXT:    vmv.v.v v8, v12234; CHECK-NEXT:    ret235  %evec = call <vscale x 8 x bfloat> @llvm.experimental.constrained.fptrunc.nxv8bf16.nxv8f32(<vscale x 8 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")236  ret <vscale x 8 x bfloat> %evec237}238