1308 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; RUN: llc -mtriple=riscv64 -mattr=+zvfh,+experimental-zvfbfa,+v \15; RUN: -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \16; RUN: --check-prefixes=CHECK,ZVFBFA17 18define <vscale x 1 x bfloat> @vfadd_vv_nxv1bf16(<vscale x 1 x bfloat> %va, <vscale x 1 x bfloat> %vb) {19; ZVFH-LABEL: vfadd_vv_nxv1bf16:20; ZVFH: # %bb.0:21; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma22; ZVFH-NEXT: vfwcvtbf16.f.f.v v10, v923; ZVFH-NEXT: vfwcvtbf16.f.f.v v9, v824; ZVFH-NEXT: vsetvli zero, zero, e32, mf2, ta, ma25; ZVFH-NEXT: vfadd.vv v9, v9, v1026; ZVFH-NEXT: vsetvli zero, zero, e16, mf4, ta, ma27; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v928; ZVFH-NEXT: ret29;30; ZVFHMIN-LABEL: vfadd_vv_nxv1bf16:31; ZVFHMIN: # %bb.0:32; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma33; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v10, v934; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v9, v835; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma36; ZVFHMIN-NEXT: vfadd.vv v9, v9, v1037; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma38; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v939; ZVFHMIN-NEXT: ret40;41; ZVFBFA-LABEL: vfadd_vv_nxv1bf16:42; ZVFBFA: # %bb.0:43; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, mf4, ta, ma44; ZVFBFA-NEXT: vfwcvt.f.f.v v10, v945; ZVFBFA-NEXT: vfwcvt.f.f.v v9, v846; ZVFBFA-NEXT: vsetvli zero, zero, e32, mf2, ta, ma47; ZVFBFA-NEXT: vfadd.vv v9, v9, v1048; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, mf4, ta, ma49; ZVFBFA-NEXT: vfncvt.f.f.w v8, v950; ZVFBFA-NEXT: ret51 %vc = fadd <vscale x 1 x bfloat> %va, %vb52 ret <vscale x 1 x bfloat> %vc53}54 55define <vscale x 1 x bfloat> @vfadd_vf_nxv1bf16(<vscale x 1 x bfloat> %va, bfloat %b) {56; ZVFH-LABEL: vfadd_vf_nxv1bf16:57; ZVFH: # %bb.0:58; ZVFH-NEXT: fcvt.s.bf16 fa5, fa059; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma60; ZVFH-NEXT: vfwcvtbf16.f.f.v v9, v861; ZVFH-NEXT: vsetvli zero, zero, e32, mf2, ta, ma62; ZVFH-NEXT: vfadd.vf v9, v9, fa563; ZVFH-NEXT: vsetvli zero, zero, e16, mf4, ta, ma64; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v965; ZVFH-NEXT: ret66;67; ZVFHMIN-LABEL: vfadd_vf_nxv1bf16:68; ZVFHMIN: # %bb.0:69; ZVFHMIN-NEXT: fcvt.s.bf16 fa5, fa070; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma71; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v9, v872; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma73; ZVFHMIN-NEXT: vfadd.vf v9, v9, fa574; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma75; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v976; ZVFHMIN-NEXT: ret77;78; ZVFBFA-LABEL: vfadd_vf_nxv1bf16:79; ZVFBFA: # %bb.0:80; ZVFBFA-NEXT: fcvt.s.bf16 fa5, fa081; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, mf4, ta, ma82; ZVFBFA-NEXT: vfwcvt.f.f.v v9, v883; ZVFBFA-NEXT: vsetvli zero, zero, e32, mf2, ta, ma84; ZVFBFA-NEXT: vfadd.vf v9, v9, fa585; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, mf4, ta, ma86; ZVFBFA-NEXT: vfncvt.f.f.w v8, v987; ZVFBFA-NEXT: ret88 %head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 089 %splat = shufflevector <vscale x 1 x bfloat> %head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer90 %vc = fadd <vscale x 1 x bfloat> %va, %splat91 ret <vscale x 1 x bfloat> %vc92}93 94define <vscale x 2 x bfloat> @vfadd_vv_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x bfloat> %vb) {95; ZVFH-LABEL: vfadd_vv_nxv2bf16:96; ZVFH: # %bb.0:97; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma98; ZVFH-NEXT: vfwcvtbf16.f.f.v v10, v999; ZVFH-NEXT: vfwcvtbf16.f.f.v v9, v8100; ZVFH-NEXT: vsetvli zero, zero, e32, m1, ta, ma101; ZVFH-NEXT: vfadd.vv v9, v9, v10102; ZVFH-NEXT: vsetvli zero, zero, e16, mf2, ta, ma103; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v9104; ZVFH-NEXT: ret105;106; ZVFHMIN-LABEL: vfadd_vv_nxv2bf16:107; ZVFHMIN: # %bb.0:108; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma109; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v10, v9110; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v9, v8111; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma112; ZVFHMIN-NEXT: vfadd.vv v9, v9, v10113; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma114; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v9115; ZVFHMIN-NEXT: ret116;117; ZVFBFA-LABEL: vfadd_vv_nxv2bf16:118; ZVFBFA: # %bb.0:119; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, mf2, ta, ma120; ZVFBFA-NEXT: vfwcvt.f.f.v v10, v9121; ZVFBFA-NEXT: vfwcvt.f.f.v v9, v8122; ZVFBFA-NEXT: vsetvli zero, zero, e32, m1, ta, ma123; ZVFBFA-NEXT: vfadd.vv v9, v9, v10124; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, mf2, ta, ma125; ZVFBFA-NEXT: vfncvt.f.f.w v8, v9126; ZVFBFA-NEXT: ret127 %vc = fadd <vscale x 2 x bfloat> %va, %vb128 ret <vscale x 2 x bfloat> %vc129}130 131define <vscale x 2 x bfloat> @vfadd_vf_nxv2bf16(<vscale x 2 x bfloat> %va, bfloat %b) {132; ZVFH-LABEL: vfadd_vf_nxv2bf16:133; ZVFH: # %bb.0:134; ZVFH-NEXT: fcvt.s.bf16 fa5, fa0135; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma136; ZVFH-NEXT: vfwcvtbf16.f.f.v v9, v8137; ZVFH-NEXT: vsetvli zero, zero, e32, m1, ta, ma138; ZVFH-NEXT: vfadd.vf v9, v9, fa5139; ZVFH-NEXT: vsetvli zero, zero, e16, mf2, ta, ma140; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v9141; ZVFH-NEXT: ret142;143; ZVFHMIN-LABEL: vfadd_vf_nxv2bf16:144; ZVFHMIN: # %bb.0:145; ZVFHMIN-NEXT: fcvt.s.bf16 fa5, fa0146; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma147; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v9, v8148; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma149; ZVFHMIN-NEXT: vfadd.vf v9, v9, fa5150; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma151; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v9152; ZVFHMIN-NEXT: ret153;154; ZVFBFA-LABEL: vfadd_vf_nxv2bf16:155; ZVFBFA: # %bb.0:156; ZVFBFA-NEXT: fcvt.s.bf16 fa5, fa0157; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, mf2, ta, ma158; ZVFBFA-NEXT: vfwcvt.f.f.v v9, v8159; ZVFBFA-NEXT: vsetvli zero, zero, e32, m1, ta, ma160; ZVFBFA-NEXT: vfadd.vf v9, v9, fa5161; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, mf2, ta, ma162; ZVFBFA-NEXT: vfncvt.f.f.w v8, v9163; ZVFBFA-NEXT: ret164 %head = insertelement <vscale x 2 x bfloat> poison, bfloat %b, i32 0165 %splat = shufflevector <vscale x 2 x bfloat> %head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer166 %vc = fadd <vscale x 2 x bfloat> %va, %splat167 ret <vscale x 2 x bfloat> %vc168}169 170define <vscale x 4 x bfloat> @vfadd_vv_nxv4bf16(<vscale x 4 x bfloat> %va, <vscale x 4 x bfloat> %vb) {171; ZVFH-LABEL: vfadd_vv_nxv4bf16:172; ZVFH: # %bb.0:173; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma174; ZVFH-NEXT: vfwcvtbf16.f.f.v v10, v9175; ZVFH-NEXT: vfwcvtbf16.f.f.v v12, v8176; ZVFH-NEXT: vsetvli zero, zero, e32, m2, ta, ma177; ZVFH-NEXT: vfadd.vv v10, v12, v10178; ZVFH-NEXT: vsetvli zero, zero, e16, m1, ta, ma179; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v10180; ZVFH-NEXT: ret181;182; ZVFHMIN-LABEL: vfadd_vv_nxv4bf16:183; ZVFHMIN: # %bb.0:184; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma185; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v10, v9186; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v12, v8187; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma188; ZVFHMIN-NEXT: vfadd.vv v10, v12, v10189; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma190; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v10191; ZVFHMIN-NEXT: ret192;193; ZVFBFA-LABEL: vfadd_vv_nxv4bf16:194; ZVFBFA: # %bb.0:195; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, m1, ta, ma196; ZVFBFA-NEXT: vfwcvt.f.f.v v10, v9197; ZVFBFA-NEXT: vfwcvt.f.f.v v12, v8198; ZVFBFA-NEXT: vsetvli zero, zero, e32, m2, ta, ma199; ZVFBFA-NEXT: vfadd.vv v10, v12, v10200; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, m1, ta, ma201; ZVFBFA-NEXT: vfncvt.f.f.w v8, v10202; ZVFBFA-NEXT: ret203 %vc = fadd <vscale x 4 x bfloat> %va, %vb204 ret <vscale x 4 x bfloat> %vc205}206 207define <vscale x 4 x bfloat> @vfadd_vf_nxv4bf16(<vscale x 4 x bfloat> %va, bfloat %b) {208; ZVFH-LABEL: vfadd_vf_nxv4bf16:209; ZVFH: # %bb.0:210; ZVFH-NEXT: fcvt.s.bf16 fa5, fa0211; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma212; ZVFH-NEXT: vfwcvtbf16.f.f.v v10, v8213; ZVFH-NEXT: vsetvli zero, zero, e32, m2, ta, ma214; ZVFH-NEXT: vfadd.vf v10, v10, fa5215; ZVFH-NEXT: vsetvli zero, zero, e16, m1, ta, ma216; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v10217; ZVFH-NEXT: ret218;219; ZVFHMIN-LABEL: vfadd_vf_nxv4bf16:220; ZVFHMIN: # %bb.0:221; ZVFHMIN-NEXT: fcvt.s.bf16 fa5, fa0222; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma223; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v10, v8224; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma225; ZVFHMIN-NEXT: vfadd.vf v10, v10, fa5226; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma227; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v10228; ZVFHMIN-NEXT: ret229;230; ZVFBFA-LABEL: vfadd_vf_nxv4bf16:231; ZVFBFA: # %bb.0:232; ZVFBFA-NEXT: fcvt.s.bf16 fa5, fa0233; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, m1, ta, ma234; ZVFBFA-NEXT: vfwcvt.f.f.v v10, v8235; ZVFBFA-NEXT: vsetvli zero, zero, e32, m2, ta, ma236; ZVFBFA-NEXT: vfadd.vf v10, v10, fa5237; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, m1, ta, ma238; ZVFBFA-NEXT: vfncvt.f.f.w v8, v10239; ZVFBFA-NEXT: ret240 %head = insertelement <vscale x 4 x bfloat> poison, bfloat %b, i32 0241 %splat = shufflevector <vscale x 4 x bfloat> %head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer242 %vc = fadd <vscale x 4 x bfloat> %va, %splat243 ret <vscale x 4 x bfloat> %vc244}245 246define <vscale x 8 x bfloat> @vfadd_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {247; ZVFH-LABEL: vfadd_vv_nxv8bf16:248; ZVFH: # %bb.0:249; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma250; ZVFH-NEXT: vfwcvtbf16.f.f.v v12, v10251; ZVFH-NEXT: vfwcvtbf16.f.f.v v16, v8252; ZVFH-NEXT: vsetvli zero, zero, e32, m4, ta, ma253; ZVFH-NEXT: vfadd.vv v12, v16, v12254; ZVFH-NEXT: vsetvli zero, zero, e16, m2, ta, ma255; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v12256; ZVFH-NEXT: ret257;258; ZVFHMIN-LABEL: vfadd_vv_nxv8bf16:259; ZVFHMIN: # %bb.0:260; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma261; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v12, v10262; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v16, v8263; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma264; ZVFHMIN-NEXT: vfadd.vv v12, v16, v12265; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma266; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v12267; ZVFHMIN-NEXT: ret268;269; ZVFBFA-LABEL: vfadd_vv_nxv8bf16:270; ZVFBFA: # %bb.0:271; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, m2, ta, ma272; ZVFBFA-NEXT: vfwcvt.f.f.v v12, v10273; ZVFBFA-NEXT: vfwcvt.f.f.v v16, v8274; ZVFBFA-NEXT: vsetvli zero, zero, e32, m4, ta, ma275; ZVFBFA-NEXT: vfadd.vv v12, v16, v12276; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, m2, ta, ma277; ZVFBFA-NEXT: vfncvt.f.f.w v8, v12278; ZVFBFA-NEXT: ret279 %vc = fadd <vscale x 8 x bfloat> %va, %vb280 ret <vscale x 8 x bfloat> %vc281}282 283define <vscale x 8 x bfloat> @vfadd_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {284; ZVFH-LABEL: vfadd_vf_nxv8bf16:285; ZVFH: # %bb.0:286; ZVFH-NEXT: fcvt.s.bf16 fa5, fa0287; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma288; ZVFH-NEXT: vfwcvtbf16.f.f.v v12, v8289; ZVFH-NEXT: vsetvli zero, zero, e32, m4, ta, ma290; ZVFH-NEXT: vfadd.vf v12, v12, fa5291; ZVFH-NEXT: vsetvli zero, zero, e16, m2, ta, ma292; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v12293; ZVFH-NEXT: ret294;295; ZVFHMIN-LABEL: vfadd_vf_nxv8bf16:296; ZVFHMIN: # %bb.0:297; ZVFHMIN-NEXT: fcvt.s.bf16 fa5, fa0298; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma299; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v12, v8300; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma301; ZVFHMIN-NEXT: vfadd.vf v12, v12, fa5302; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma303; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v12304; ZVFHMIN-NEXT: ret305;306; ZVFBFA-LABEL: vfadd_vf_nxv8bf16:307; ZVFBFA: # %bb.0:308; ZVFBFA-NEXT: fcvt.s.bf16 fa5, fa0309; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, m2, ta, ma310; ZVFBFA-NEXT: vfwcvt.f.f.v v12, v8311; ZVFBFA-NEXT: vsetvli zero, zero, e32, m4, ta, ma312; ZVFBFA-NEXT: vfadd.vf v12, v12, fa5313; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, m2, ta, ma314; ZVFBFA-NEXT: vfncvt.f.f.w v8, v12315; ZVFBFA-NEXT: ret316 %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0317 %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer318 %vc = fadd <vscale x 8 x bfloat> %va, %splat319 ret <vscale x 8 x bfloat> %vc320}321 322define <vscale x 8 x bfloat> @vfadd_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {323; ZVFH-LABEL: vfadd_fv_nxv8bf16:324; ZVFH: # %bb.0:325; ZVFH-NEXT: fcvt.s.bf16 fa5, fa0326; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma327; ZVFH-NEXT: vfwcvtbf16.f.f.v v12, v8328; ZVFH-NEXT: vsetvli zero, zero, e32, m4, ta, ma329; ZVFH-NEXT: vfadd.vf v12, v12, fa5330; ZVFH-NEXT: vsetvli zero, zero, e16, m2, ta, ma331; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v12332; ZVFH-NEXT: ret333;334; ZVFHMIN-LABEL: vfadd_fv_nxv8bf16:335; ZVFHMIN: # %bb.0:336; ZVFHMIN-NEXT: fcvt.s.bf16 fa5, fa0337; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma338; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v12, v8339; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma340; ZVFHMIN-NEXT: vfadd.vf v12, v12, fa5341; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma342; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v12343; ZVFHMIN-NEXT: ret344;345; ZVFBFA-LABEL: vfadd_fv_nxv8bf16:346; ZVFBFA: # %bb.0:347; ZVFBFA-NEXT: fcvt.s.bf16 fa5, fa0348; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, m2, ta, ma349; ZVFBFA-NEXT: vfwcvt.f.f.v v12, v8350; ZVFBFA-NEXT: vsetvli zero, zero, e32, m4, ta, ma351; ZVFBFA-NEXT: vfadd.vf v12, v12, fa5352; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, m2, ta, ma353; ZVFBFA-NEXT: vfncvt.f.f.w v8, v12354; ZVFBFA-NEXT: ret355 %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0356 %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer357 %vc = fadd <vscale x 8 x bfloat> %splat, %va358 ret <vscale x 8 x bfloat> %vc359}360 361define <vscale x 16 x bfloat> @vfadd_vv_nxv16bf16(<vscale x 16 x bfloat> %va, <vscale x 16 x bfloat> %vb) {362; ZVFH-LABEL: vfadd_vv_nxv16bf16:363; ZVFH: # %bb.0:364; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma365; ZVFH-NEXT: vfwcvtbf16.f.f.v v16, v12366; ZVFH-NEXT: vfwcvtbf16.f.f.v v24, v8367; ZVFH-NEXT: vsetvli zero, zero, e32, m8, ta, ma368; ZVFH-NEXT: vfadd.vv v16, v24, v16369; ZVFH-NEXT: vsetvli zero, zero, e16, m4, ta, ma370; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v16371; ZVFH-NEXT: ret372;373; ZVFHMIN-LABEL: vfadd_vv_nxv16bf16:374; ZVFHMIN: # %bb.0:375; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma376; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v16, v12377; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v24, v8378; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma379; ZVFHMIN-NEXT: vfadd.vv v16, v24, v16380; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma381; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v16382; ZVFHMIN-NEXT: ret383;384; ZVFBFA-LABEL: vfadd_vv_nxv16bf16:385; ZVFBFA: # %bb.0:386; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, m4, ta, ma387; ZVFBFA-NEXT: vfwcvt.f.f.v v16, v12388; ZVFBFA-NEXT: vfwcvt.f.f.v v24, v8389; ZVFBFA-NEXT: vsetvli zero, zero, e32, m8, ta, ma390; ZVFBFA-NEXT: vfadd.vv v16, v24, v16391; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, m4, ta, ma392; ZVFBFA-NEXT: vfncvt.f.f.w v8, v16393; ZVFBFA-NEXT: ret394 %vc = fadd <vscale x 16 x bfloat> %va, %vb395 ret <vscale x 16 x bfloat> %vc396}397 398define <vscale x 16 x bfloat> @vfadd_vf_nxv16bf16(<vscale x 16 x bfloat> %va, bfloat %b) {399; ZVFH-LABEL: vfadd_vf_nxv16bf16:400; ZVFH: # %bb.0:401; ZVFH-NEXT: fcvt.s.bf16 fa5, fa0402; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma403; ZVFH-NEXT: vfwcvtbf16.f.f.v v16, v8404; ZVFH-NEXT: vsetvli zero, zero, e32, m8, ta, ma405; ZVFH-NEXT: vfadd.vf v16, v16, fa5406; ZVFH-NEXT: vsetvli zero, zero, e16, m4, ta, ma407; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v16408; ZVFH-NEXT: ret409;410; ZVFHMIN-LABEL: vfadd_vf_nxv16bf16:411; ZVFHMIN: # %bb.0:412; ZVFHMIN-NEXT: fcvt.s.bf16 fa5, fa0413; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma414; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v16, v8415; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma416; ZVFHMIN-NEXT: vfadd.vf v16, v16, fa5417; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma418; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v16419; ZVFHMIN-NEXT: ret420;421; ZVFBFA-LABEL: vfadd_vf_nxv16bf16:422; ZVFBFA: # %bb.0:423; ZVFBFA-NEXT: fcvt.s.bf16 fa5, fa0424; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, m4, ta, ma425; ZVFBFA-NEXT: vfwcvt.f.f.v v16, v8426; ZVFBFA-NEXT: vsetvli zero, zero, e32, m8, ta, ma427; ZVFBFA-NEXT: vfadd.vf v16, v16, fa5428; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, m4, ta, ma429; ZVFBFA-NEXT: vfncvt.f.f.w v8, v16430; ZVFBFA-NEXT: ret431 %head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0432 %splat = shufflevector <vscale x 16 x bfloat> %head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer433 %vc = fadd <vscale x 16 x bfloat> %va, %splat434 ret <vscale x 16 x bfloat> %vc435}436 437define <vscale x 32 x bfloat> @vfadd_vv_nxv32bf16(<vscale x 32 x bfloat> %va, <vscale x 32 x bfloat> %vb) {438; ZVFH-LABEL: vfadd_vv_nxv32bf16:439; ZVFH: # %bb.0:440; ZVFH-NEXT: addi sp, sp, -16441; ZVFH-NEXT: .cfi_def_cfa_offset 16442; ZVFH-NEXT: csrr a0, vlenb443; ZVFH-NEXT: slli a0, a0, 3444; ZVFH-NEXT: sub sp, sp, a0445; ZVFH-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb446; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma447; ZVFH-NEXT: vfwcvtbf16.f.f.v v24, v16448; ZVFH-NEXT: addi a0, sp, 16449; ZVFH-NEXT: vs8r.v v24, (a0) # vscale x 64-byte Folded Spill450; ZVFH-NEXT: vfwcvtbf16.f.f.v v0, v8451; ZVFH-NEXT: vfwcvtbf16.f.f.v v24, v20452; ZVFH-NEXT: vfwcvtbf16.f.f.v v16, v12453; ZVFH-NEXT: vl8r.v v8, (a0) # vscale x 64-byte Folded Reload454; ZVFH-NEXT: vsetvli zero, zero, e32, m8, ta, ma455; ZVFH-NEXT: vfadd.vv v0, v0, v8456; ZVFH-NEXT: vsetvli zero, zero, e16, m4, ta, ma457; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v0458; ZVFH-NEXT: vsetvli zero, zero, e32, m8, ta, ma459; ZVFH-NEXT: vfadd.vv v16, v16, v24460; ZVFH-NEXT: vsetvli zero, zero, e16, m4, ta, ma461; ZVFH-NEXT: vfncvtbf16.f.f.w v12, v16462; ZVFH-NEXT: csrr a0, vlenb463; ZVFH-NEXT: slli a0, a0, 3464; ZVFH-NEXT: add sp, sp, a0465; ZVFH-NEXT: .cfi_def_cfa sp, 16466; ZVFH-NEXT: addi sp, sp, 16467; ZVFH-NEXT: .cfi_def_cfa_offset 0468; ZVFH-NEXT: ret469;470; ZVFHMIN-LABEL: vfadd_vv_nxv32bf16:471; ZVFHMIN: # %bb.0:472; ZVFHMIN-NEXT: addi sp, sp, -16473; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16474; ZVFHMIN-NEXT: csrr a0, vlenb475; ZVFHMIN-NEXT: slli a0, a0, 3476; ZVFHMIN-NEXT: sub sp, sp, a0477; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb478; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma479; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v24, v16480; ZVFHMIN-NEXT: addi a0, sp, 16481; ZVFHMIN-NEXT: vs8r.v v24, (a0) # vscale x 64-byte Folded Spill482; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v0, v8483; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v24, v20484; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v16, v12485; ZVFHMIN-NEXT: vl8r.v v8, (a0) # vscale x 64-byte Folded Reload486; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma487; ZVFHMIN-NEXT: vfadd.vv v0, v0, v8488; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma489; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v0490; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma491; ZVFHMIN-NEXT: vfadd.vv v16, v16, v24492; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma493; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v12, v16494; ZVFHMIN-NEXT: csrr a0, vlenb495; ZVFHMIN-NEXT: slli a0, a0, 3496; ZVFHMIN-NEXT: add sp, sp, a0497; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16498; ZVFHMIN-NEXT: addi sp, sp, 16499; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0500; ZVFHMIN-NEXT: ret501;502; ZVFBFA-LABEL: vfadd_vv_nxv32bf16:503; ZVFBFA: # %bb.0:504; ZVFBFA-NEXT: addi sp, sp, -16505; ZVFBFA-NEXT: .cfi_def_cfa_offset 16506; ZVFBFA-NEXT: csrr a0, vlenb507; ZVFBFA-NEXT: slli a0, a0, 3508; ZVFBFA-NEXT: sub sp, sp, a0509; ZVFBFA-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb510; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, m4, ta, ma511; ZVFBFA-NEXT: vfwcvt.f.f.v v24, v16512; ZVFBFA-NEXT: addi a0, sp, 16513; ZVFBFA-NEXT: vs8r.v v24, (a0) # vscale x 64-byte Folded Spill514; ZVFBFA-NEXT: vfwcvt.f.f.v v0, v8515; ZVFBFA-NEXT: vfwcvt.f.f.v v24, v20516; ZVFBFA-NEXT: vfwcvt.f.f.v v16, v12517; ZVFBFA-NEXT: vl8r.v v8, (a0) # vscale x 64-byte Folded Reload518; ZVFBFA-NEXT: vsetvli zero, zero, e32, m8, ta, ma519; ZVFBFA-NEXT: vfadd.vv v0, v0, v8520; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, m4, ta, ma521; ZVFBFA-NEXT: vfncvt.f.f.w v8, v0522; ZVFBFA-NEXT: vsetvli zero, zero, e32, m8, ta, ma523; ZVFBFA-NEXT: vfadd.vv v16, v16, v24524; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, m4, ta, ma525; ZVFBFA-NEXT: vfncvt.f.f.w v12, v16526; ZVFBFA-NEXT: csrr a0, vlenb527; ZVFBFA-NEXT: slli a0, a0, 3528; ZVFBFA-NEXT: add sp, sp, a0529; ZVFBFA-NEXT: .cfi_def_cfa sp, 16530; ZVFBFA-NEXT: addi sp, sp, 16531; ZVFBFA-NEXT: .cfi_def_cfa_offset 0532; ZVFBFA-NEXT: ret533 %vc = fadd <vscale x 32 x bfloat> %va, %vb534 ret <vscale x 32 x bfloat> %vc535}536 537define <vscale x 32 x bfloat> @vfadd_vf_nxv32bf16(<vscale x 32 x bfloat> %va, bfloat %b) {538; ZVFH-LABEL: vfadd_vf_nxv32bf16:539; ZVFH: # %bb.0:540; ZVFH-NEXT: addi sp, sp, -16541; ZVFH-NEXT: .cfi_def_cfa_offset 16542; ZVFH-NEXT: csrr a0, vlenb543; ZVFH-NEXT: slli a0, a0, 3544; ZVFH-NEXT: sub sp, sp, a0545; ZVFH-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb546; ZVFH-NEXT: fmv.x.h a0, fa0547; ZVFH-NEXT: vsetvli a1, zero, e16, m4, ta, ma548; ZVFH-NEXT: vfwcvtbf16.f.f.v v16, v8549; ZVFH-NEXT: addi a1, sp, 16550; ZVFH-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill551; ZVFH-NEXT: vfwcvtbf16.f.f.v v24, v12552; ZVFH-NEXT: vsetvli a1, zero, e16, m8, ta, ma553; ZVFH-NEXT: vmv.v.x v8, a0554; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma555; ZVFH-NEXT: vfwcvtbf16.f.f.v v0, v8556; ZVFH-NEXT: vfwcvtbf16.f.f.v v16, v12557; ZVFH-NEXT: addi a0, sp, 16558; ZVFH-NEXT: vl8r.v v8, (a0) # vscale x 64-byte Folded Reload559; ZVFH-NEXT: vsetvli zero, zero, e32, m8, ta, ma560; ZVFH-NEXT: vfadd.vv v0, v8, v0561; ZVFH-NEXT: vsetvli zero, zero, e16, m4, ta, ma562; ZVFH-NEXT: vfncvtbf16.f.f.w v8, v0563; ZVFH-NEXT: vsetvli zero, zero, e32, m8, ta, ma564; ZVFH-NEXT: vfadd.vv v16, v24, v16565; ZVFH-NEXT: vsetvli zero, zero, e16, m4, ta, ma566; ZVFH-NEXT: vfncvtbf16.f.f.w v12, v16567; ZVFH-NEXT: csrr a0, vlenb568; ZVFH-NEXT: slli a0, a0, 3569; ZVFH-NEXT: add sp, sp, a0570; ZVFH-NEXT: .cfi_def_cfa sp, 16571; ZVFH-NEXT: addi sp, sp, 16572; ZVFH-NEXT: .cfi_def_cfa_offset 0573; ZVFH-NEXT: ret574;575; ZVFHMIN-LABEL: vfadd_vf_nxv32bf16:576; ZVFHMIN: # %bb.0:577; ZVFHMIN-NEXT: addi sp, sp, -16578; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16579; ZVFHMIN-NEXT: csrr a0, vlenb580; ZVFHMIN-NEXT: slli a0, a0, 3581; ZVFHMIN-NEXT: sub sp, sp, a0582; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb583; ZVFHMIN-NEXT: fmv.x.h a0, fa0584; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m4, ta, ma585; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v16, v8586; ZVFHMIN-NEXT: addi a1, sp, 16587; ZVFHMIN-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill588; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v24, v12589; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m8, ta, ma590; ZVFHMIN-NEXT: vmv.v.x v8, a0591; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma592; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v0, v8593; ZVFHMIN-NEXT: vfwcvtbf16.f.f.v v16, v12594; ZVFHMIN-NEXT: addi a0, sp, 16595; ZVFHMIN-NEXT: vl8r.v v8, (a0) # vscale x 64-byte Folded Reload596; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma597; ZVFHMIN-NEXT: vfadd.vv v0, v8, v0598; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma599; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v8, v0600; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma601; ZVFHMIN-NEXT: vfadd.vv v16, v24, v16602; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma603; ZVFHMIN-NEXT: vfncvtbf16.f.f.w v12, v16604; ZVFHMIN-NEXT: csrr a0, vlenb605; ZVFHMIN-NEXT: slli a0, a0, 3606; ZVFHMIN-NEXT: add sp, sp, a0607; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16608; ZVFHMIN-NEXT: addi sp, sp, 16609; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0610; ZVFHMIN-NEXT: ret611;612; ZVFBFA-LABEL: vfadd_vf_nxv32bf16:613; ZVFBFA: # %bb.0:614; ZVFBFA-NEXT: addi sp, sp, -16615; ZVFBFA-NEXT: .cfi_def_cfa_offset 16616; ZVFBFA-NEXT: csrr a0, vlenb617; ZVFBFA-NEXT: slli a0, a0, 3618; ZVFBFA-NEXT: sub sp, sp, a0619; ZVFBFA-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb620; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, m8, ta, ma621; ZVFBFA-NEXT: vfmv.v.f v16, fa0622; ZVFBFA-NEXT: vsetvli a0, zero, e16alt, m4, ta, ma623; ZVFBFA-NEXT: vfwcvt.f.f.v v24, v8624; ZVFBFA-NEXT: addi a0, sp, 16625; ZVFBFA-NEXT: vs8r.v v24, (a0) # vscale x 64-byte Folded Spill626; ZVFBFA-NEXT: vfwcvt.f.f.v v0, v12627; ZVFBFA-NEXT: vfwcvt.f.f.v v8, v16628; ZVFBFA-NEXT: vfwcvt.f.f.v v24, v20629; ZVFBFA-NEXT: vl8r.v v16, (a0) # vscale x 64-byte Folded Reload630; ZVFBFA-NEXT: vsetvli zero, zero, e32, m8, ta, ma631; ZVFBFA-NEXT: vfadd.vv v16, v16, v8632; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, m4, ta, ma633; ZVFBFA-NEXT: vfncvt.f.f.w v8, v16634; ZVFBFA-NEXT: vsetvli zero, zero, e32, m8, ta, ma635; ZVFBFA-NEXT: vfadd.vv v16, v0, v24636; ZVFBFA-NEXT: vsetvli zero, zero, e16alt, m4, ta, ma637; ZVFBFA-NEXT: vfncvt.f.f.w v12, v16638; ZVFBFA-NEXT: csrr a0, vlenb639; ZVFBFA-NEXT: slli a0, a0, 3640; ZVFBFA-NEXT: add sp, sp, a0641; ZVFBFA-NEXT: .cfi_def_cfa sp, 16642; ZVFBFA-NEXT: addi sp, sp, 16643; ZVFBFA-NEXT: .cfi_def_cfa_offset 0644; ZVFBFA-NEXT: ret645 %head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0646 %splat = shufflevector <vscale x 32 x bfloat> %head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer647 %vc = fadd <vscale x 32 x bfloat> %va, %splat648 ret <vscale x 32 x bfloat> %vc649}650 651define <vscale x 1 x half> @vfadd_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb) {652; ZVFH-LABEL: vfadd_vv_nxv1f16:653; ZVFH: # %bb.0:654; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma655; ZVFH-NEXT: vfadd.vv v8, v8, v9656; ZVFH-NEXT: ret657;658; ZVFHMIN-LABEL: vfadd_vv_nxv1f16:659; ZVFHMIN: # %bb.0:660; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma661; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9662; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8663; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma664; ZVFHMIN-NEXT: vfadd.vv v9, v9, v10665; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma666; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9667; ZVFHMIN-NEXT: ret668;669; ZVFBFA-LABEL: vfadd_vv_nxv1f16:670; ZVFBFA: # %bb.0:671; ZVFBFA-NEXT: vsetvli a0, zero, e16, mf4, ta, ma672; ZVFBFA-NEXT: vfadd.vv v8, v8, v9673; ZVFBFA-NEXT: ret674 %vc = fadd <vscale x 1 x half> %va, %vb675 ret <vscale x 1 x half> %vc676}677 678define <vscale x 1 x half> @vfadd_vf_nxv1f16(<vscale x 1 x half> %va, half %b) {679; ZVFH-LABEL: vfadd_vf_nxv1f16:680; ZVFH: # %bb.0:681; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma682; ZVFH-NEXT: vfadd.vf v8, v8, fa0683; ZVFH-NEXT: ret684;685; ZVFHMIN-LABEL: vfadd_vf_nxv1f16:686; ZVFHMIN: # %bb.0:687; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0688; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma689; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8690; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma691; ZVFHMIN-NEXT: vfadd.vf v9, v9, fa5692; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma693; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9694; ZVFHMIN-NEXT: ret695;696; ZVFBFA-LABEL: vfadd_vf_nxv1f16:697; ZVFBFA: # %bb.0:698; ZVFBFA-NEXT: vsetvli a0, zero, e16, mf4, ta, ma699; ZVFBFA-NEXT: vfadd.vf v8, v8, fa0700; ZVFBFA-NEXT: ret701 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0702 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer703 %vc = fadd <vscale x 1 x half> %va, %splat704 ret <vscale x 1 x half> %vc705}706 707define <vscale x 2 x half> @vfadd_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb) {708; ZVFH-LABEL: vfadd_vv_nxv2f16:709; ZVFH: # %bb.0:710; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma711; ZVFH-NEXT: vfadd.vv v8, v8, v9712; ZVFH-NEXT: ret713;714; ZVFHMIN-LABEL: vfadd_vv_nxv2f16:715; ZVFHMIN: # %bb.0:716; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma717; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9718; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8719; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma720; ZVFHMIN-NEXT: vfadd.vv v9, v9, v10721; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma722; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9723; ZVFHMIN-NEXT: ret724;725; ZVFBFA-LABEL: vfadd_vv_nxv2f16:726; ZVFBFA: # %bb.0:727; ZVFBFA-NEXT: vsetvli a0, zero, e16, mf2, ta, ma728; ZVFBFA-NEXT: vfadd.vv v8, v8, v9729; ZVFBFA-NEXT: ret730 %vc = fadd <vscale x 2 x half> %va, %vb731 ret <vscale x 2 x half> %vc732}733 734define <vscale x 2 x half> @vfadd_vf_nxv2f16(<vscale x 2 x half> %va, half %b) {735; ZVFH-LABEL: vfadd_vf_nxv2f16:736; ZVFH: # %bb.0:737; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma738; ZVFH-NEXT: vfadd.vf v8, v8, fa0739; ZVFH-NEXT: ret740;741; ZVFHMIN-LABEL: vfadd_vf_nxv2f16:742; ZVFHMIN: # %bb.0:743; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0744; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma745; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8746; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma747; ZVFHMIN-NEXT: vfadd.vf v9, v9, fa5748; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma749; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9750; ZVFHMIN-NEXT: ret751;752; ZVFBFA-LABEL: vfadd_vf_nxv2f16:753; ZVFBFA: # %bb.0:754; ZVFBFA-NEXT: vsetvli a0, zero, e16, mf2, ta, ma755; ZVFBFA-NEXT: vfadd.vf v8, v8, fa0756; ZVFBFA-NEXT: ret757 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0758 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer759 %vc = fadd <vscale x 2 x half> %va, %splat760 ret <vscale x 2 x half> %vc761}762 763define <vscale x 4 x half> @vfadd_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb) {764; ZVFH-LABEL: vfadd_vv_nxv4f16:765; ZVFH: # %bb.0:766; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma767; ZVFH-NEXT: vfadd.vv v8, v8, v9768; ZVFH-NEXT: ret769;770; ZVFHMIN-LABEL: vfadd_vv_nxv4f16:771; ZVFHMIN: # %bb.0:772; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma773; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9774; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8775; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma776; ZVFHMIN-NEXT: vfadd.vv v10, v12, v10777; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma778; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10779; ZVFHMIN-NEXT: ret780;781; ZVFBFA-LABEL: vfadd_vv_nxv4f16:782; ZVFBFA: # %bb.0:783; ZVFBFA-NEXT: vsetvli a0, zero, e16, m1, ta, ma784; ZVFBFA-NEXT: vfadd.vv v8, v8, v9785; ZVFBFA-NEXT: ret786 %vc = fadd <vscale x 4 x half> %va, %vb787 ret <vscale x 4 x half> %vc788}789 790define <vscale x 4 x half> @vfadd_vf_nxv4f16(<vscale x 4 x half> %va, half %b) {791; ZVFH-LABEL: vfadd_vf_nxv4f16:792; ZVFH: # %bb.0:793; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma794; ZVFH-NEXT: vfadd.vf v8, v8, fa0795; ZVFH-NEXT: ret796;797; ZVFHMIN-LABEL: vfadd_vf_nxv4f16:798; ZVFHMIN: # %bb.0:799; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0800; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma801; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8802; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma803; ZVFHMIN-NEXT: vfadd.vf v10, v10, fa5804; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma805; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10806; ZVFHMIN-NEXT: ret807;808; ZVFBFA-LABEL: vfadd_vf_nxv4f16:809; ZVFBFA: # %bb.0:810; ZVFBFA-NEXT: vsetvli a0, zero, e16, m1, ta, ma811; ZVFBFA-NEXT: vfadd.vf v8, v8, fa0812; ZVFBFA-NEXT: ret813 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0814 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer815 %vc = fadd <vscale x 4 x half> %va, %splat816 ret <vscale x 4 x half> %vc817}818 819define <vscale x 8 x half> @vfadd_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {820; ZVFH-LABEL: vfadd_vv_nxv8f16:821; ZVFH: # %bb.0:822; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma823; ZVFH-NEXT: vfadd.vv v8, v8, v10824; ZVFH-NEXT: ret825;826; ZVFHMIN-LABEL: vfadd_vv_nxv8f16:827; ZVFHMIN: # %bb.0:828; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma829; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10830; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8831; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma832; ZVFHMIN-NEXT: vfadd.vv v12, v16, v12833; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma834; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12835; ZVFHMIN-NEXT: ret836;837; ZVFBFA-LABEL: vfadd_vv_nxv8f16:838; ZVFBFA: # %bb.0:839; ZVFBFA-NEXT: vsetvli a0, zero, e16, m2, ta, ma840; ZVFBFA-NEXT: vfadd.vv v8, v8, v10841; ZVFBFA-NEXT: ret842 %vc = fadd <vscale x 8 x half> %va, %vb843 ret <vscale x 8 x half> %vc844}845 846define <vscale x 8 x half> @vfadd_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {847; ZVFH-LABEL: vfadd_vf_nxv8f16:848; ZVFH: # %bb.0:849; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma850; ZVFH-NEXT: vfadd.vf v8, v8, fa0851; ZVFH-NEXT: ret852;853; ZVFHMIN-LABEL: vfadd_vf_nxv8f16:854; ZVFHMIN: # %bb.0:855; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0856; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma857; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8858; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma859; ZVFHMIN-NEXT: vfadd.vf v12, v12, fa5860; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma861; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12862; ZVFHMIN-NEXT: ret863;864; ZVFBFA-LABEL: vfadd_vf_nxv8f16:865; ZVFBFA: # %bb.0:866; ZVFBFA-NEXT: vsetvli a0, zero, e16, m2, ta, ma867; ZVFBFA-NEXT: vfadd.vf v8, v8, fa0868; ZVFBFA-NEXT: ret869 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0870 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer871 %vc = fadd <vscale x 8 x half> %va, %splat872 ret <vscale x 8 x half> %vc873}874 875define <vscale x 8 x half> @vfadd_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {876; ZVFH-LABEL: vfadd_fv_nxv8f16:877; ZVFH: # %bb.0:878; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma879; ZVFH-NEXT: vfadd.vf v8, v8, fa0880; ZVFH-NEXT: ret881;882; ZVFHMIN-LABEL: vfadd_fv_nxv8f16:883; ZVFHMIN: # %bb.0:884; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0885; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma886; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8887; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma888; ZVFHMIN-NEXT: vfadd.vf v12, v12, fa5889; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma890; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12891; ZVFHMIN-NEXT: ret892;893; ZVFBFA-LABEL: vfadd_fv_nxv8f16:894; ZVFBFA: # %bb.0:895; ZVFBFA-NEXT: vsetvli a0, zero, e16, m2, ta, ma896; ZVFBFA-NEXT: vfadd.vf v8, v8, fa0897; ZVFBFA-NEXT: ret898 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0899 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer900 %vc = fadd <vscale x 8 x half> %splat, %va901 ret <vscale x 8 x half> %vc902}903 904define <vscale x 16 x half> @vfadd_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb) {905; ZVFH-LABEL: vfadd_vv_nxv16f16:906; ZVFH: # %bb.0:907; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma908; ZVFH-NEXT: vfadd.vv v8, v8, v12909; ZVFH-NEXT: ret910;911; ZVFHMIN-LABEL: vfadd_vv_nxv16f16:912; ZVFHMIN: # %bb.0:913; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma914; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12915; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8916; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma917; ZVFHMIN-NEXT: vfadd.vv v16, v24, v16918; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma919; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16920; ZVFHMIN-NEXT: ret921;922; ZVFBFA-LABEL: vfadd_vv_nxv16f16:923; ZVFBFA: # %bb.0:924; ZVFBFA-NEXT: vsetvli a0, zero, e16, m4, ta, ma925; ZVFBFA-NEXT: vfadd.vv v8, v8, v12926; ZVFBFA-NEXT: ret927 %vc = fadd <vscale x 16 x half> %va, %vb928 ret <vscale x 16 x half> %vc929}930 931define <vscale x 16 x half> @vfadd_vf_nxv16f16(<vscale x 16 x half> %va, half %b) {932; ZVFH-LABEL: vfadd_vf_nxv16f16:933; ZVFH: # %bb.0:934; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma935; ZVFH-NEXT: vfadd.vf v8, v8, fa0936; ZVFH-NEXT: ret937;938; ZVFHMIN-LABEL: vfadd_vf_nxv16f16:939; ZVFHMIN: # %bb.0:940; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0941; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma942; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8943; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma944; ZVFHMIN-NEXT: vfadd.vf v16, v16, fa5945; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma946; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16947; ZVFHMIN-NEXT: ret948;949; ZVFBFA-LABEL: vfadd_vf_nxv16f16:950; ZVFBFA: # %bb.0:951; ZVFBFA-NEXT: vsetvli a0, zero, e16, m4, ta, ma952; ZVFBFA-NEXT: vfadd.vf v8, v8, fa0953; ZVFBFA-NEXT: ret954 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0955 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer956 %vc = fadd <vscale x 16 x half> %va, %splat957 ret <vscale x 16 x half> %vc958}959 960define <vscale x 32 x half> @vfadd_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb) {961; ZVFH-LABEL: vfadd_vv_nxv32f16:962; ZVFH: # %bb.0:963; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma964; ZVFH-NEXT: vfadd.vv v8, v8, v16965; ZVFH-NEXT: ret966;967; ZVFHMIN-LABEL: vfadd_vv_nxv32f16:968; ZVFHMIN: # %bb.0:969; ZVFHMIN-NEXT: addi sp, sp, -16970; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16971; ZVFHMIN-NEXT: csrr a0, vlenb972; ZVFHMIN-NEXT: slli a0, a0, 3973; ZVFHMIN-NEXT: sub sp, sp, a0974; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb975; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma976; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16977; ZVFHMIN-NEXT: addi a0, sp, 16978; ZVFHMIN-NEXT: vs8r.v v24, (a0) # vscale x 64-byte Folded Spill979; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v8980; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20981; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12982; ZVFHMIN-NEXT: vl8r.v v8, (a0) # vscale x 64-byte Folded Reload983; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma984; ZVFHMIN-NEXT: vfadd.vv v0, v0, v8985; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma986; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v0987; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma988; ZVFHMIN-NEXT: vfadd.vv v16, v16, v24989; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma990; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16991; ZVFHMIN-NEXT: csrr a0, vlenb992; ZVFHMIN-NEXT: slli a0, a0, 3993; ZVFHMIN-NEXT: add sp, sp, a0994; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16995; ZVFHMIN-NEXT: addi sp, sp, 16996; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0997; ZVFHMIN-NEXT: ret998;999; ZVFBFA-LABEL: vfadd_vv_nxv32f16:1000; ZVFBFA: # %bb.0:1001; ZVFBFA-NEXT: vsetvli a0, zero, e16, m8, ta, ma1002; ZVFBFA-NEXT: vfadd.vv v8, v8, v161003; ZVFBFA-NEXT: ret1004 %vc = fadd <vscale x 32 x half> %va, %vb1005 ret <vscale x 32 x half> %vc1006}1007 1008define <vscale x 32 x half> @vfadd_vf_nxv32f16(<vscale x 32 x half> %va, half %b) {1009; ZVFH-LABEL: vfadd_vf_nxv32f16:1010; ZVFH: # %bb.0:1011; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma1012; ZVFH-NEXT: vfadd.vf v8, v8, fa01013; ZVFH-NEXT: ret1014;1015; ZVFHMIN-LABEL: vfadd_vf_nxv32f16:1016; ZVFHMIN: # %bb.0:1017; ZVFHMIN-NEXT: addi sp, sp, -161018; ZVFHMIN-NEXT: .cfi_def_cfa_offset 161019; ZVFHMIN-NEXT: csrr a0, vlenb1020; ZVFHMIN-NEXT: slli a0, a0, 31021; ZVFHMIN-NEXT: sub sp, sp, a01022; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb1023; ZVFHMIN-NEXT: fmv.x.h a0, fa01024; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m4, ta, ma1025; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v81026; ZVFHMIN-NEXT: addi a1, sp, 161027; ZVFHMIN-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill1028; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v121029; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m8, ta, ma1030; ZVFHMIN-NEXT: vmv.v.x v8, a01031; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1032; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v81033; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v121034; ZVFHMIN-NEXT: addi a0, sp, 161035; ZVFHMIN-NEXT: vl8r.v v8, (a0) # vscale x 64-byte Folded Reload1036; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma1037; ZVFHMIN-NEXT: vfadd.vv v0, v8, v01038; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma1039; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v01040; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma1041; ZVFHMIN-NEXT: vfadd.vv v16, v24, v161042; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma1043; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v161044; ZVFHMIN-NEXT: csrr a0, vlenb1045; ZVFHMIN-NEXT: slli a0, a0, 31046; ZVFHMIN-NEXT: add sp, sp, a01047; ZVFHMIN-NEXT: .cfi_def_cfa sp, 161048; ZVFHMIN-NEXT: addi sp, sp, 161049; ZVFHMIN-NEXT: .cfi_def_cfa_offset 01050; ZVFHMIN-NEXT: ret1051;1052; ZVFBFA-LABEL: vfadd_vf_nxv32f16:1053; ZVFBFA: # %bb.0:1054; ZVFBFA-NEXT: vsetvli a0, zero, e16, m8, ta, ma1055; ZVFBFA-NEXT: vfadd.vf v8, v8, fa01056; ZVFBFA-NEXT: ret1057 %head = insertelement <vscale x 32 x half> poison, half %b, i32 01058 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer1059 %vc = fadd <vscale x 32 x half> %va, %splat1060 ret <vscale x 32 x half> %vc1061}1062 1063define <vscale x 1 x float> @vfadd_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) {1064; CHECK-LABEL: vfadd_vv_nxv1f32:1065; CHECK: # %bb.0:1066; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1067; CHECK-NEXT: vfadd.vv v8, v8, v91068; CHECK-NEXT: ret1069 %vc = fadd <vscale x 1 x float> %va, %vb1070 ret <vscale x 1 x float> %vc1071}1072 1073define <vscale x 1 x float> @vfadd_vf_nxv1f32(<vscale x 1 x float> %va, float %b) {1074; CHECK-LABEL: vfadd_vf_nxv1f32:1075; CHECK: # %bb.0:1076; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1077; CHECK-NEXT: vfadd.vf v8, v8, fa01078; CHECK-NEXT: ret1079 %head = insertelement <vscale x 1 x float> poison, float %b, i32 01080 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer1081 %vc = fadd <vscale x 1 x float> %va, %splat1082 ret <vscale x 1 x float> %vc1083}1084 1085define <vscale x 2 x float> @vfadd_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) {1086; CHECK-LABEL: vfadd_vv_nxv2f32:1087; CHECK: # %bb.0:1088; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1089; CHECK-NEXT: vfadd.vv v8, v8, v91090; CHECK-NEXT: ret1091 %vc = fadd <vscale x 2 x float> %va, %vb1092 ret <vscale x 2 x float> %vc1093}1094 1095define <vscale x 2 x float> @vfadd_vf_nxv2f32(<vscale x 2 x float> %va, float %b) {1096; CHECK-LABEL: vfadd_vf_nxv2f32:1097; CHECK: # %bb.0:1098; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1099; CHECK-NEXT: vfadd.vf v8, v8, fa01100; CHECK-NEXT: ret1101 %head = insertelement <vscale x 2 x float> poison, float %b, i32 01102 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer1103 %vc = fadd <vscale x 2 x float> %va, %splat1104 ret <vscale x 2 x float> %vc1105}1106 1107define <vscale x 4 x float> @vfadd_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) {1108; CHECK-LABEL: vfadd_vv_nxv4f32:1109; CHECK: # %bb.0:1110; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1111; CHECK-NEXT: vfadd.vv v8, v8, v101112; CHECK-NEXT: ret1113 %vc = fadd <vscale x 4 x float> %va, %vb1114 ret <vscale x 4 x float> %vc1115}1116 1117define <vscale x 4 x float> @vfadd_vf_nxv4f32(<vscale x 4 x float> %va, float %b) {1118; CHECK-LABEL: vfadd_vf_nxv4f32:1119; CHECK: # %bb.0:1120; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1121; CHECK-NEXT: vfadd.vf v8, v8, fa01122; CHECK-NEXT: ret1123 %head = insertelement <vscale x 4 x float> poison, float %b, i32 01124 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer1125 %vc = fadd <vscale x 4 x float> %va, %splat1126 ret <vscale x 4 x float> %vc1127}1128 1129define <vscale x 8 x float> @vfadd_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {1130; CHECK-LABEL: vfadd_vv_nxv8f32:1131; CHECK: # %bb.0:1132; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1133; CHECK-NEXT: vfadd.vv v8, v8, v121134; CHECK-NEXT: ret1135 %vc = fadd <vscale x 8 x float> %va, %vb1136 ret <vscale x 8 x float> %vc1137}1138 1139define <vscale x 8 x float> @vfadd_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {1140; CHECK-LABEL: vfadd_vf_nxv8f32:1141; CHECK: # %bb.0:1142; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1143; CHECK-NEXT: vfadd.vf v8, v8, fa01144; CHECK-NEXT: ret1145 %head = insertelement <vscale x 8 x float> poison, float %b, i32 01146 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1147 %vc = fadd <vscale x 8 x float> %va, %splat1148 ret <vscale x 8 x float> %vc1149}1150 1151define <vscale x 8 x float> @vfadd_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {1152; CHECK-LABEL: vfadd_fv_nxv8f32:1153; CHECK: # %bb.0:1154; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1155; CHECK-NEXT: vfadd.vf v8, v8, fa01156; CHECK-NEXT: ret1157 %head = insertelement <vscale x 8 x float> poison, float %b, i32 01158 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1159 %vc = fadd <vscale x 8 x float> %splat, %va1160 ret <vscale x 8 x float> %vc1161}1162 1163define <vscale x 16 x float> @vfadd_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb) {1164; CHECK-LABEL: vfadd_vv_nxv16f32:1165; CHECK: # %bb.0:1166; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma1167; CHECK-NEXT: vfadd.vv v8, v8, v161168; CHECK-NEXT: ret1169 %vc = fadd <vscale x 16 x float> %va, %vb1170 ret <vscale x 16 x float> %vc1171}1172 1173define <vscale x 16 x float> @vfadd_vf_nxv16f32(<vscale x 16 x float> %va, float %b) {1174; CHECK-LABEL: vfadd_vf_nxv16f32:1175; CHECK: # %bb.0:1176; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma1177; CHECK-NEXT: vfadd.vf v8, v8, fa01178; CHECK-NEXT: ret1179 %head = insertelement <vscale x 16 x float> poison, float %b, i32 01180 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer1181 %vc = fadd <vscale x 16 x float> %va, %splat1182 ret <vscale x 16 x float> %vc1183}1184 1185define <vscale x 1 x double> @vfadd_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb) {1186; CHECK-LABEL: vfadd_vv_nxv1f64:1187; CHECK: # %bb.0:1188; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma1189; CHECK-NEXT: vfadd.vv v8, v8, v91190; CHECK-NEXT: ret1191 %vc = fadd <vscale x 1 x double> %va, %vb1192 ret <vscale x 1 x double> %vc1193}1194 1195define <vscale x 1 x double> @vfadd_vf_nxv1f64(<vscale x 1 x double> %va, double %b) {1196; CHECK-LABEL: vfadd_vf_nxv1f64:1197; CHECK: # %bb.0:1198; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma1199; CHECK-NEXT: vfadd.vf v8, v8, fa01200; CHECK-NEXT: ret1201 %head = insertelement <vscale x 1 x double> poison, double %b, i32 01202 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer1203 %vc = fadd <vscale x 1 x double> %va, %splat1204 ret <vscale x 1 x double> %vc1205}1206 1207define <vscale x 2 x double> @vfadd_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb) {1208; CHECK-LABEL: vfadd_vv_nxv2f64:1209; CHECK: # %bb.0:1210; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma1211; CHECK-NEXT: vfadd.vv v8, v8, v101212; CHECK-NEXT: ret1213 %vc = fadd <vscale x 2 x double> %va, %vb1214 ret <vscale x 2 x double> %vc1215}1216 1217define <vscale x 2 x double> @vfadd_vf_nxv2f64(<vscale x 2 x double> %va, double %b) {1218; CHECK-LABEL: vfadd_vf_nxv2f64:1219; CHECK: # %bb.0:1220; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma1221; CHECK-NEXT: vfadd.vf v8, v8, fa01222; CHECK-NEXT: ret1223 %head = insertelement <vscale x 2 x double> poison, double %b, i32 01224 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1225 %vc = fadd <vscale x 2 x double> %va, %splat1226 ret <vscale x 2 x double> %vc1227}1228 1229define <vscale x 4 x double> @vfadd_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb) {1230; CHECK-LABEL: vfadd_vv_nxv4f64:1231; CHECK: # %bb.0:1232; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma1233; CHECK-NEXT: vfadd.vv v8, v8, v121234; CHECK-NEXT: ret1235 %vc = fadd <vscale x 4 x double> %va, %vb1236 ret <vscale x 4 x double> %vc1237}1238 1239define <vscale x 4 x double> @vfadd_vf_nxv4f64(<vscale x 4 x double> %va, double %b) {1240; CHECK-LABEL: vfadd_vf_nxv4f64:1241; CHECK: # %bb.0:1242; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma1243; CHECK-NEXT: vfadd.vf v8, v8, fa01244; CHECK-NEXT: ret1245 %head = insertelement <vscale x 4 x double> poison, double %b, i32 01246 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1247 %vc = fadd <vscale x 4 x double> %va, %splat1248 ret <vscale x 4 x double> %vc1249}1250 1251define <vscale x 8 x double> @vfadd_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {1252; CHECK-LABEL: vfadd_vv_nxv8f64:1253; CHECK: # %bb.0:1254; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma1255; CHECK-NEXT: vfadd.vv v8, v8, v161256; CHECK-NEXT: ret1257 %vc = fadd <vscale x 8 x double> %va, %vb1258 ret <vscale x 8 x double> %vc1259}1260 1261define <vscale x 8 x double> @vfadd_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {1262; CHECK-LABEL: vfadd_vf_nxv8f64:1263; CHECK: # %bb.0:1264; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma1265; CHECK-NEXT: vfadd.vf v8, v8, fa01266; CHECK-NEXT: ret1267 %head = insertelement <vscale x 8 x double> poison, double %b, i32 01268 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1269 %vc = fadd <vscale x 8 x double> %va, %splat1270 ret <vscale x 8 x double> %vc1271}1272 1273define <vscale x 8 x double> @vfadd_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {1274; CHECK-LABEL: vfadd_fv_nxv8f64:1275; CHECK: # %bb.0:1276; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma1277; CHECK-NEXT: vfadd.vf v8, v8, fa01278; CHECK-NEXT: ret1279 %head = insertelement <vscale x 8 x double> poison, double %b, i32 01280 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1281 %vc = fadd <vscale x 8 x double> %splat, %va1282 ret <vscale x 8 x double> %vc1283}1284 1285define <vscale x 8 x float> @vfadd_vv_mask_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x i1> %mask) {1286; CHECK-LABEL: vfadd_vv_mask_nxv8f32:1287; CHECK: # %bb.0:1288; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu1289; CHECK-NEXT: vfadd.vv v8, v8, v12, v0.t1290; CHECK-NEXT: ret1291 %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x float> %vb, <vscale x 8 x float> splat (float 0.0)1292 %vc = fadd fast <vscale x 8 x float> %va, %vs1293 ret <vscale x 8 x float> %vc1294}1295 1296define <vscale x 8 x float> @vfadd_vf_mask_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x i1> %mask) {1297; CHECK-LABEL: vfadd_vf_mask_nxv8f32:1298; CHECK: # %bb.0:1299; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu1300; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t1301; CHECK-NEXT: ret1302 %head1 = insertelement <vscale x 8 x float> poison, float %b, i32 01303 %splat1 = shufflevector <vscale x 8 x float> %head1, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer1304 %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x float> %splat1, <vscale x 8 x float> splat (float 0.0)1305 %vc = fadd fast <vscale x 8 x float> %va, %vs1306 ret <vscale x 8 x float> %vc1307}1308