brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.6 KiB · 114842b Raw
318 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v \3; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \4; RUN:     --check-prefixes=CHECK,ZVFH5; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v \6; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \7; RUN:     --check-prefixes=CHECK,ZVFH8; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \9; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \10; RUN:     --check-prefixes=CHECK,ZVFHMIN11; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \12; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \13; RUN:     --check-prefixes=CHECK,ZVFHMIN14 15define <vscale x 1 x bfloat> @vfsqrt_nxv1bf16(<vscale x 1 x bfloat> %v) {16; CHECK-LABEL: vfsqrt_nxv1bf16:17; CHECK:       # %bb.0:18; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma19; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v820; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma21; CHECK-NEXT:    vfsqrt.v v9, v922; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma23; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v924; CHECK-NEXT:    ret25  %r = call <vscale x 1 x bfloat> @llvm.sqrt.nxv1bf16(<vscale x 1 x bfloat> %v)26  ret <vscale x 1 x bfloat> %r27}28 29define <vscale x 2 x bfloat> @vfsqrt_nxv2bf16(<vscale x 2 x bfloat> %v) {30; CHECK-LABEL: vfsqrt_nxv2bf16:31; CHECK:       # %bb.0:32; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma33; CHECK-NEXT:    vfwcvtbf16.f.f.v v9, v834; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma35; CHECK-NEXT:    vfsqrt.v v9, v936; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma37; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v938; CHECK-NEXT:    ret39  %r = call <vscale x 2 x bfloat> @llvm.sqrt.nxv2bf16(<vscale x 2 x bfloat> %v)40  ret <vscale x 2 x bfloat> %r41}42 43define <vscale x 4 x bfloat> @vfsqrt_nxv4bf16(<vscale x 4 x bfloat> %v) {44; CHECK-LABEL: vfsqrt_nxv4bf16:45; CHECK:       # %bb.0:46; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma47; CHECK-NEXT:    vfwcvtbf16.f.f.v v10, v848; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma49; CHECK-NEXT:    vfsqrt.v v10, v1050; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma51; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v1052; CHECK-NEXT:    ret53  %r = call <vscale x 4 x bfloat> @llvm.sqrt.nxv4bf16(<vscale x 4 x bfloat> %v)54  ret <vscale x 4 x bfloat> %r55}56 57define <vscale x 8 x bfloat> @vfsqrt_nxv8bf16(<vscale x 8 x bfloat> %v) {58; CHECK-LABEL: vfsqrt_nxv8bf16:59; CHECK:       # %bb.0:60; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma61; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v862; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma63; CHECK-NEXT:    vfsqrt.v v12, v1264; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma65; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v1266; CHECK-NEXT:    ret67  %r = call <vscale x 8 x bfloat> @llvm.sqrt.nxv8bf16(<vscale x 8 x bfloat> %v)68  ret <vscale x 8 x bfloat> %r69}70 71define <vscale x 16 x bfloat> @vfsqrt_nxv16bf16(<vscale x 16 x bfloat> %v) {72; CHECK-LABEL: vfsqrt_nxv16bf16:73; CHECK:       # %bb.0:74; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma75; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v876; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma77; CHECK-NEXT:    vfsqrt.v v16, v1678; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma79; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v1680; CHECK-NEXT:    ret81  %r = call <vscale x 16 x bfloat> @llvm.sqrt.nxv16bf16(<vscale x 16 x bfloat> %v)82  ret <vscale x 16 x bfloat> %r83}84 85define <vscale x 32 x bfloat> @vfsqrt_nxv32bf16(<vscale x 32 x bfloat> %v) {86; CHECK-LABEL: vfsqrt_nxv32bf16:87; CHECK:       # %bb.0:88; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma89; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v890; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma91; CHECK-NEXT:    vfsqrt.v v16, v1692; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma93; CHECK-NEXT:    vfwcvtbf16.f.f.v v24, v1294; CHECK-NEXT:    vsetvli zero, zero, e32, m8, ta, ma95; CHECK-NEXT:    vfsqrt.v v24, v2496; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma97; CHECK-NEXT:    vfncvtbf16.f.f.w v8, v1698; CHECK-NEXT:    vfncvtbf16.f.f.w v12, v2499; CHECK-NEXT:    ret100  %r = call <vscale x 32 x bfloat> @llvm.sqrt.nxv32bf16(<vscale x 32 x bfloat> %v)101  ret <vscale x 32 x bfloat> %r102}103 104define <vscale x 1 x half> @vfsqrt_nxv1f16(<vscale x 1 x half> %v) {105; ZVFH-LABEL: vfsqrt_nxv1f16:106; ZVFH:       # %bb.0:107; ZVFH-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma108; ZVFH-NEXT:    vfsqrt.v v8, v8109; ZVFH-NEXT:    ret110;111; ZVFHMIN-LABEL: vfsqrt_nxv1f16:112; ZVFHMIN:       # %bb.0:113; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma114; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8115; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma116; ZVFHMIN-NEXT:    vfsqrt.v v9, v9117; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma118; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9119; ZVFHMIN-NEXT:    ret120  %r = call <vscale x 1 x half> @llvm.sqrt.nxv1f16(<vscale x 1 x half> %v)121  ret <vscale x 1 x half> %r122}123 124define <vscale x 2 x half> @vfsqrt_nxv2f16(<vscale x 2 x half> %v) {125; ZVFH-LABEL: vfsqrt_nxv2f16:126; ZVFH:       # %bb.0:127; ZVFH-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma128; ZVFH-NEXT:    vfsqrt.v v8, v8129; ZVFH-NEXT:    ret130;131; ZVFHMIN-LABEL: vfsqrt_nxv2f16:132; ZVFHMIN:       # %bb.0:133; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma134; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v8135; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma136; ZVFHMIN-NEXT:    vfsqrt.v v9, v9137; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma138; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9139; ZVFHMIN-NEXT:    ret140  %r = call <vscale x 2 x half> @llvm.sqrt.nxv2f16(<vscale x 2 x half> %v)141  ret <vscale x 2 x half> %r142}143 144define <vscale x 4 x half> @vfsqrt_nxv4f16(<vscale x 4 x half> %v) {145; ZVFH-LABEL: vfsqrt_nxv4f16:146; ZVFH:       # %bb.0:147; ZVFH-NEXT:    vsetvli a0, zero, e16, m1, ta, ma148; ZVFH-NEXT:    vfsqrt.v v8, v8149; ZVFH-NEXT:    ret150;151; ZVFHMIN-LABEL: vfsqrt_nxv4f16:152; ZVFHMIN:       # %bb.0:153; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m1, ta, ma154; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8155; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma156; ZVFHMIN-NEXT:    vfsqrt.v v10, v10157; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma158; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10159; ZVFHMIN-NEXT:    ret160  %r = call <vscale x 4 x half> @llvm.sqrt.nxv4f16(<vscale x 4 x half> %v)161  ret <vscale x 4 x half> %r162}163 164define <vscale x 8 x half> @vfsqrt_nxv8f16(<vscale x 8 x half> %v) {165; ZVFH-LABEL: vfsqrt_nxv8f16:166; ZVFH:       # %bb.0:167; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma168; ZVFH-NEXT:    vfsqrt.v v8, v8169; ZVFH-NEXT:    ret170;171; ZVFHMIN-LABEL: vfsqrt_nxv8f16:172; ZVFHMIN:       # %bb.0:173; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma174; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8175; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma176; ZVFHMIN-NEXT:    vfsqrt.v v12, v12177; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma178; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12179; ZVFHMIN-NEXT:    ret180  %r = call <vscale x 8 x half> @llvm.sqrt.nxv8f16(<vscale x 8 x half> %v)181  ret <vscale x 8 x half> %r182}183 184define <vscale x 16 x half> @vfsqrt_nxv16f16(<vscale x 16 x half> %v) {185; ZVFH-LABEL: vfsqrt_nxv16f16:186; ZVFH:       # %bb.0:187; ZVFH-NEXT:    vsetvli a0, zero, e16, m4, ta, ma188; ZVFH-NEXT:    vfsqrt.v v8, v8189; ZVFH-NEXT:    ret190;191; ZVFHMIN-LABEL: vfsqrt_nxv16f16:192; ZVFHMIN:       # %bb.0:193; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma194; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8195; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma196; ZVFHMIN-NEXT:    vfsqrt.v v16, v16197; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma198; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16199; ZVFHMIN-NEXT:    ret200  %r = call <vscale x 16 x half> @llvm.sqrt.nxv16f16(<vscale x 16 x half> %v)201  ret <vscale x 16 x half> %r202}203 204define <vscale x 32 x half> @vfsqrt_nxv32f16(<vscale x 32 x half> %v) {205; ZVFH-LABEL: vfsqrt_nxv32f16:206; ZVFH:       # %bb.0:207; ZVFH-NEXT:    vsetvli a0, zero, e16, m8, ta, ma208; ZVFH-NEXT:    vfsqrt.v v8, v8209; ZVFH-NEXT:    ret210;211; ZVFHMIN-LABEL: vfsqrt_nxv32f16:212; ZVFHMIN:       # %bb.0:213; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m4, ta, ma214; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8215; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma216; ZVFHMIN-NEXT:    vfsqrt.v v16, v16217; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma218; ZVFHMIN-NEXT:    vfwcvt.f.f.v v24, v12219; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m8, ta, ma220; ZVFHMIN-NEXT:    vfsqrt.v v24, v24221; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m4, ta, ma222; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v16223; ZVFHMIN-NEXT:    vfncvt.f.f.w v12, v24224; ZVFHMIN-NEXT:    ret225  %r = call <vscale x 32 x half> @llvm.sqrt.nxv32f16(<vscale x 32 x half> %v)226  ret <vscale x 32 x half> %r227}228 229define <vscale x 1 x float> @vfsqrt_nxv1f32(<vscale x 1 x float> %v) {230; CHECK-LABEL: vfsqrt_nxv1f32:231; CHECK:       # %bb.0:232; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma233; CHECK-NEXT:    vfsqrt.v v8, v8234; CHECK-NEXT:    ret235  %r = call <vscale x 1 x float> @llvm.sqrt.nxv1f32(<vscale x 1 x float> %v)236  ret <vscale x 1 x float> %r237}238 239define <vscale x 2 x float> @vfsqrt_nxv2f32(<vscale x 2 x float> %v) {240; CHECK-LABEL: vfsqrt_nxv2f32:241; CHECK:       # %bb.0:242; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma243; CHECK-NEXT:    vfsqrt.v v8, v8244; CHECK-NEXT:    ret245  %r = call <vscale x 2 x float> @llvm.sqrt.nxv2f32(<vscale x 2 x float> %v)246  ret <vscale x 2 x float> %r247}248 249define <vscale x 4 x float> @vfsqrt_nxv4f32(<vscale x 4 x float> %v) {250; CHECK-LABEL: vfsqrt_nxv4f32:251; CHECK:       # %bb.0:252; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma253; CHECK-NEXT:    vfsqrt.v v8, v8254; CHECK-NEXT:    ret255  %r = call <vscale x 4 x float> @llvm.sqrt.nxv4f32(<vscale x 4 x float> %v)256  ret <vscale x 4 x float> %r257}258 259define <vscale x 8 x float> @vfsqrt_nxv8f32(<vscale x 8 x float> %v) {260; CHECK-LABEL: vfsqrt_nxv8f32:261; CHECK:       # %bb.0:262; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma263; CHECK-NEXT:    vfsqrt.v v8, v8264; CHECK-NEXT:    ret265  %r = call <vscale x 8 x float> @llvm.sqrt.nxv8f32(<vscale x 8 x float> %v)266  ret <vscale x 8 x float> %r267}268 269define <vscale x 16 x float> @vfsqrt_nxv16f32(<vscale x 16 x float> %v) {270; CHECK-LABEL: vfsqrt_nxv16f32:271; CHECK:       # %bb.0:272; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma273; CHECK-NEXT:    vfsqrt.v v8, v8274; CHECK-NEXT:    ret275  %r = call <vscale x 16 x float> @llvm.sqrt.nxv16f32(<vscale x 16 x float> %v)276  ret <vscale x 16 x float> %r277}278 279define <vscale x 1 x double> @vfsqrt_nxv1f64(<vscale x 1 x double> %v) {280; CHECK-LABEL: vfsqrt_nxv1f64:281; CHECK:       # %bb.0:282; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma283; CHECK-NEXT:    vfsqrt.v v8, v8284; CHECK-NEXT:    ret285  %r = call <vscale x 1 x double> @llvm.sqrt.nxv1f64(<vscale x 1 x double> %v)286  ret <vscale x 1 x double> %r287}288 289define <vscale x 2 x double> @vfsqrt_nxv2f64(<vscale x 2 x double> %v) {290; CHECK-LABEL: vfsqrt_nxv2f64:291; CHECK:       # %bb.0:292; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma293; CHECK-NEXT:    vfsqrt.v v8, v8294; CHECK-NEXT:    ret295  %r = call <vscale x 2 x double> @llvm.sqrt.nxv2f64(<vscale x 2 x double> %v)296  ret <vscale x 2 x double> %r297}298 299define <vscale x 4 x double> @vfsqrt_nxv4f64(<vscale x 4 x double> %v) {300; CHECK-LABEL: vfsqrt_nxv4f64:301; CHECK:       # %bb.0:302; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma303; CHECK-NEXT:    vfsqrt.v v8, v8304; CHECK-NEXT:    ret305  %r = call <vscale x 4 x double> @llvm.sqrt.nxv4f64(<vscale x 4 x double> %v)306  ret <vscale x 4 x double> %r307}308 309define <vscale x 8 x double> @vfsqrt_nxv8f64(<vscale x 8 x double> %v) {310; CHECK-LABEL: vfsqrt_nxv8f64:311; CHECK:       # %bb.0:312; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma313; CHECK-NEXT:    vfsqrt.v v8, v8314; CHECK-NEXT:    ret315  %r = call <vscale x 8 x double> @llvm.sqrt.nxv8f64(<vscale x 8 x double> %v)316  ret <vscale x 8 x double> %r317}318