783 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \3; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH4; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \5; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v -target-abi=ilp32d \7; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v -target-abi=lp64d \9; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN10 11define <2 x half> @vfadd_vv_v2f16(<2 x half> %va, <2 x half> %b, <2 x i1> %m, i32 zeroext %evl) {12; ZVFH-LABEL: vfadd_vv_v2f16:13; ZVFH: # %bb.0:14; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma15; ZVFH-NEXT: vfadd.vv v8, v8, v9, v0.t16; ZVFH-NEXT: ret17;18; ZVFHMIN-LABEL: vfadd_vv_v2f16:19; ZVFHMIN: # %bb.0:20; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma21; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t22; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8, v0.t23; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma24; ZVFHMIN-NEXT: vfadd.vv v9, v9, v10, v0.t25; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma26; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t27; ZVFHMIN-NEXT: ret28 %v = call <2 x half> @llvm.vp.fadd.v2f16(<2 x half> %va, <2 x half> %b, <2 x i1> %m, i32 %evl)29 ret <2 x half> %v30}31 32define <2 x half> @vfadd_vv_v2f16_unmasked(<2 x half> %va, <2 x half> %b, i32 zeroext %evl) {33; ZVFH-LABEL: vfadd_vv_v2f16_unmasked:34; ZVFH: # %bb.0:35; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma36; ZVFH-NEXT: vfadd.vv v8, v8, v937; ZVFH-NEXT: ret38;39; ZVFHMIN-LABEL: vfadd_vv_v2f16_unmasked:40; ZVFHMIN: # %bb.0:41; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma42; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v943; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v844; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma45; ZVFHMIN-NEXT: vfadd.vv v9, v9, v1046; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma47; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v948; ZVFHMIN-NEXT: ret49 %v = call <2 x half> @llvm.vp.fadd.v2f16(<2 x half> %va, <2 x half> %b, <2 x i1> splat (i1 true), i32 %evl)50 ret <2 x half> %v51}52 53define <2 x half> @vfadd_vf_v2f16(<2 x half> %va, half %b, <2 x i1> %m, i32 zeroext %evl) {54; ZVFH-LABEL: vfadd_vf_v2f16:55; ZVFH: # %bb.0:56; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma57; ZVFH-NEXT: vfadd.vf v8, v8, fa0, v0.t58; ZVFH-NEXT: ret59;60; ZVFHMIN-LABEL: vfadd_vf_v2f16:61; ZVFHMIN: # %bb.0:62; ZVFHMIN-NEXT: fmv.x.h a1, fa063; ZVFHMIN-NEXT: vsetivli zero, 2, e16, mf4, ta, ma64; ZVFHMIN-NEXT: vmv.v.x v9, a165; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma66; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t67; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9, v0.t68; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma69; ZVFHMIN-NEXT: vfadd.vv v9, v10, v8, v0.t70; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma71; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t72; ZVFHMIN-NEXT: ret73 %elt.head = insertelement <2 x half> poison, half %b, i32 074 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer75 %v = call <2 x half> @llvm.vp.fadd.v2f16(<2 x half> %va, <2 x half> %vb, <2 x i1> %m, i32 %evl)76 ret <2 x half> %v77}78 79define <2 x half> @vfadd_vf_v2f16_unmasked(<2 x half> %va, half %b, i32 zeroext %evl) {80; ZVFH-LABEL: vfadd_vf_v2f16_unmasked:81; ZVFH: # %bb.0:82; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma83; ZVFH-NEXT: vfadd.vf v8, v8, fa084; ZVFH-NEXT: ret85;86; ZVFHMIN-LABEL: vfadd_vf_v2f16_unmasked:87; ZVFHMIN: # %bb.0:88; ZVFHMIN-NEXT: fmv.x.h a1, fa089; ZVFHMIN-NEXT: vsetivli zero, 2, e16, mf4, ta, ma90; ZVFHMIN-NEXT: vmv.v.x v9, a191; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma92; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v893; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v994; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma95; ZVFHMIN-NEXT: vfadd.vv v9, v10, v896; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma97; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v998; ZVFHMIN-NEXT: ret99 %elt.head = insertelement <2 x half> poison, half %b, i32 0100 %vb = shufflevector <2 x half> %elt.head, <2 x half> poison, <2 x i32> zeroinitializer101 %v = call <2 x half> @llvm.vp.fadd.v2f16(<2 x half> %va, <2 x half> %vb, <2 x i1> splat (i1 true), i32 %evl)102 ret <2 x half> %v103}104 105define <3 x half> @vfadd_vv_v3f16(<3 x half> %va, <3 x half> %b, <3 x i1> %m, i32 zeroext %evl) {106; ZVFH-LABEL: vfadd_vv_v3f16:107; ZVFH: # %bb.0:108; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma109; ZVFH-NEXT: vfadd.vv v8, v8, v9, v0.t110; ZVFH-NEXT: ret111;112; ZVFHMIN-LABEL: vfadd_vv_v3f16:113; ZVFHMIN: # %bb.0:114; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma115; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t116; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8, v0.t117; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma118; ZVFHMIN-NEXT: vfadd.vv v9, v9, v10, v0.t119; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma120; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t121; ZVFHMIN-NEXT: ret122 %v = call <3 x half> @llvm.vp.fadd.v3f16(<3 x half> %va, <3 x half> %b, <3 x i1> %m, i32 %evl)123 ret <3 x half> %v124}125 126define <4 x half> @vfadd_vv_v4f16(<4 x half> %va, <4 x half> %b, <4 x i1> %m, i32 zeroext %evl) {127; ZVFH-LABEL: vfadd_vv_v4f16:128; ZVFH: # %bb.0:129; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma130; ZVFH-NEXT: vfadd.vv v8, v8, v9, v0.t131; ZVFH-NEXT: ret132;133; ZVFHMIN-LABEL: vfadd_vv_v4f16:134; ZVFHMIN: # %bb.0:135; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma136; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t137; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8, v0.t138; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma139; ZVFHMIN-NEXT: vfadd.vv v9, v9, v10, v0.t140; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma141; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t142; ZVFHMIN-NEXT: ret143 %v = call <4 x half> @llvm.vp.fadd.v4f16(<4 x half> %va, <4 x half> %b, <4 x i1> %m, i32 %evl)144 ret <4 x half> %v145}146 147define <4 x half> @vfadd_vv_v4f16_unmasked(<4 x half> %va, <4 x half> %b, i32 zeroext %evl) {148; ZVFH-LABEL: vfadd_vv_v4f16_unmasked:149; ZVFH: # %bb.0:150; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma151; ZVFH-NEXT: vfadd.vv v8, v8, v9152; ZVFH-NEXT: ret153;154; ZVFHMIN-LABEL: vfadd_vv_v4f16_unmasked:155; ZVFHMIN: # %bb.0:156; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma157; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9158; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8159; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma160; ZVFHMIN-NEXT: vfadd.vv v9, v9, v10161; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma162; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9163; ZVFHMIN-NEXT: ret164 %v = call <4 x half> @llvm.vp.fadd.v4f16(<4 x half> %va, <4 x half> %b, <4 x i1> splat (i1 true), i32 %evl)165 ret <4 x half> %v166}167 168define <4 x half> @vfadd_vf_v4f16(<4 x half> %va, half %b, <4 x i1> %m, i32 zeroext %evl) {169; ZVFH-LABEL: vfadd_vf_v4f16:170; ZVFH: # %bb.0:171; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma172; ZVFH-NEXT: vfadd.vf v8, v8, fa0, v0.t173; ZVFH-NEXT: ret174;175; ZVFHMIN-LABEL: vfadd_vf_v4f16:176; ZVFHMIN: # %bb.0:177; ZVFHMIN-NEXT: fmv.x.h a1, fa0178; ZVFHMIN-NEXT: vsetivli zero, 4, e16, mf2, ta, ma179; ZVFHMIN-NEXT: vmv.v.x v9, a1180; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma181; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t182; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9, v0.t183; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma184; ZVFHMIN-NEXT: vfadd.vv v9, v10, v8, v0.t185; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma186; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t187; ZVFHMIN-NEXT: ret188 %elt.head = insertelement <4 x half> poison, half %b, i32 0189 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer190 %v = call <4 x half> @llvm.vp.fadd.v4f16(<4 x half> %va, <4 x half> %vb, <4 x i1> %m, i32 %evl)191 ret <4 x half> %v192}193 194define <4 x half> @vfadd_vf_v4f16_unmasked(<4 x half> %va, half %b, i32 zeroext %evl) {195; ZVFH-LABEL: vfadd_vf_v4f16_unmasked:196; ZVFH: # %bb.0:197; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma198; ZVFH-NEXT: vfadd.vf v8, v8, fa0199; ZVFH-NEXT: ret200;201; ZVFHMIN-LABEL: vfadd_vf_v4f16_unmasked:202; ZVFHMIN: # %bb.0:203; ZVFHMIN-NEXT: fmv.x.h a1, fa0204; ZVFHMIN-NEXT: vsetivli zero, 4, e16, mf2, ta, ma205; ZVFHMIN-NEXT: vmv.v.x v9, a1206; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma207; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8208; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9209; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma210; ZVFHMIN-NEXT: vfadd.vv v9, v10, v8211; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma212; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9213; ZVFHMIN-NEXT: ret214 %elt.head = insertelement <4 x half> poison, half %b, i32 0215 %vb = shufflevector <4 x half> %elt.head, <4 x half> poison, <4 x i32> zeroinitializer216 %v = call <4 x half> @llvm.vp.fadd.v4f16(<4 x half> %va, <4 x half> %vb, <4 x i1> splat (i1 true), i32 %evl)217 ret <4 x half> %v218}219 220define <8 x half> @vfadd_vv_v8f16(<8 x half> %va, <8 x half> %b, <8 x i1> %m, i32 zeroext %evl) {221; ZVFH-LABEL: vfadd_vv_v8f16:222; ZVFH: # %bb.0:223; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma224; ZVFH-NEXT: vfadd.vv v8, v8, v9, v0.t225; ZVFH-NEXT: ret226;227; ZVFHMIN-LABEL: vfadd_vv_v8f16:228; ZVFHMIN: # %bb.0:229; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma230; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t231; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t232; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma233; ZVFHMIN-NEXT: vfadd.vv v10, v12, v10, v0.t234; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma235; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10, v0.t236; ZVFHMIN-NEXT: ret237 %v = call <8 x half> @llvm.vp.fadd.v8f16(<8 x half> %va, <8 x half> %b, <8 x i1> %m, i32 %evl)238 ret <8 x half> %v239}240 241define <8 x half> @vfadd_vv_v8f16_unmasked(<8 x half> %va, <8 x half> %b, i32 zeroext %evl) {242; ZVFH-LABEL: vfadd_vv_v8f16_unmasked:243; ZVFH: # %bb.0:244; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma245; ZVFH-NEXT: vfadd.vv v8, v8, v9246; ZVFH-NEXT: ret247;248; ZVFHMIN-LABEL: vfadd_vv_v8f16_unmasked:249; ZVFHMIN: # %bb.0:250; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma251; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9252; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8253; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma254; ZVFHMIN-NEXT: vfadd.vv v10, v12, v10255; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma256; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10257; ZVFHMIN-NEXT: ret258 %v = call <8 x half> @llvm.vp.fadd.v8f16(<8 x half> %va, <8 x half> %b, <8 x i1> splat (i1 true), i32 %evl)259 ret <8 x half> %v260}261 262define <8 x half> @vfadd_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {263; ZVFH-LABEL: vfadd_vf_v8f16:264; ZVFH: # %bb.0:265; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma266; ZVFH-NEXT: vfadd.vf v8, v8, fa0, v0.t267; ZVFH-NEXT: ret268;269; ZVFHMIN-LABEL: vfadd_vf_v8f16:270; ZVFHMIN: # %bb.0:271; ZVFHMIN-NEXT: fmv.x.h a1, fa0272; ZVFHMIN-NEXT: vsetivli zero, 8, e16, m1, ta, ma273; ZVFHMIN-NEXT: vmv.v.x v12, a1274; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma275; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t276; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v12, v0.t277; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma278; ZVFHMIN-NEXT: vfadd.vv v10, v10, v8, v0.t279; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma280; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10, v0.t281; ZVFHMIN-NEXT: ret282 %elt.head = insertelement <8 x half> poison, half %b, i32 0283 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer284 %v = call <8 x half> @llvm.vp.fadd.v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 %evl)285 ret <8 x half> %v286}287 288define <8 x half> @vfadd_vf_v8f16_unmasked(<8 x half> %va, half %b, i32 zeroext %evl) {289; ZVFH-LABEL: vfadd_vf_v8f16_unmasked:290; ZVFH: # %bb.0:291; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma292; ZVFH-NEXT: vfadd.vf v8, v8, fa0293; ZVFH-NEXT: ret294;295; ZVFHMIN-LABEL: vfadd_vf_v8f16_unmasked:296; ZVFHMIN: # %bb.0:297; ZVFHMIN-NEXT: fmv.x.h a1, fa0298; ZVFHMIN-NEXT: vsetivli zero, 8, e16, m1, ta, ma299; ZVFHMIN-NEXT: vmv.v.x v12, a1300; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma301; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8302; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v12303; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma304; ZVFHMIN-NEXT: vfadd.vv v10, v10, v8305; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma306; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10307; ZVFHMIN-NEXT: ret308 %elt.head = insertelement <8 x half> poison, half %b, i32 0309 %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer310 %v = call <8 x half> @llvm.vp.fadd.v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> splat (i1 true), i32 %evl)311 ret <8 x half> %v312}313 314define <16 x half> @vfadd_vv_v16f16(<16 x half> %va, <16 x half> %b, <16 x i1> %m, i32 zeroext %evl) {315; ZVFH-LABEL: vfadd_vv_v16f16:316; ZVFH: # %bb.0:317; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma318; ZVFH-NEXT: vfadd.vv v8, v8, v10, v0.t319; ZVFH-NEXT: ret320;321; ZVFHMIN-LABEL: vfadd_vv_v16f16:322; ZVFHMIN: # %bb.0:323; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma324; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10, v0.t325; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t326; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma327; ZVFHMIN-NEXT: vfadd.vv v12, v16, v12, v0.t328; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma329; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12, v0.t330; ZVFHMIN-NEXT: ret331 %v = call <16 x half> @llvm.vp.fadd.v16f16(<16 x half> %va, <16 x half> %b, <16 x i1> %m, i32 %evl)332 ret <16 x half> %v333}334 335define <16 x half> @vfadd_vv_v16f16_unmasked(<16 x half> %va, <16 x half> %b, i32 zeroext %evl) {336; ZVFH-LABEL: vfadd_vv_v16f16_unmasked:337; ZVFH: # %bb.0:338; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma339; ZVFH-NEXT: vfadd.vv v8, v8, v10340; ZVFH-NEXT: ret341;342; ZVFHMIN-LABEL: vfadd_vv_v16f16_unmasked:343; ZVFHMIN: # %bb.0:344; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma345; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10346; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8347; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma348; ZVFHMIN-NEXT: vfadd.vv v12, v16, v12349; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma350; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12351; ZVFHMIN-NEXT: ret352 %v = call <16 x half> @llvm.vp.fadd.v16f16(<16 x half> %va, <16 x half> %b, <16 x i1> splat (i1 true), i32 %evl)353 ret <16 x half> %v354}355 356define <16 x half> @vfadd_vf_v16f16(<16 x half> %va, half %b, <16 x i1> %m, i32 zeroext %evl) {357; ZVFH-LABEL: vfadd_vf_v16f16:358; ZVFH: # %bb.0:359; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma360; ZVFH-NEXT: vfadd.vf v8, v8, fa0, v0.t361; ZVFH-NEXT: ret362;363; ZVFHMIN-LABEL: vfadd_vf_v16f16:364; ZVFHMIN: # %bb.0:365; ZVFHMIN-NEXT: fmv.x.h a1, fa0366; ZVFHMIN-NEXT: vsetivli zero, 16, e16, m2, ta, ma367; ZVFHMIN-NEXT: vmv.v.x v16, a1368; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma369; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t370; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v16, v0.t371; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma372; ZVFHMIN-NEXT: vfadd.vv v12, v12, v8, v0.t373; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma374; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12, v0.t375; ZVFHMIN-NEXT: ret376 %elt.head = insertelement <16 x half> poison, half %b, i32 0377 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer378 %v = call <16 x half> @llvm.vp.fadd.v16f16(<16 x half> %va, <16 x half> %vb, <16 x i1> %m, i32 %evl)379 ret <16 x half> %v380}381 382define <16 x half> @vfadd_vf_v16f16_unmasked(<16 x half> %va, half %b, i32 zeroext %evl) {383; ZVFH-LABEL: vfadd_vf_v16f16_unmasked:384; ZVFH: # %bb.0:385; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma386; ZVFH-NEXT: vfadd.vf v8, v8, fa0387; ZVFH-NEXT: ret388;389; ZVFHMIN-LABEL: vfadd_vf_v16f16_unmasked:390; ZVFHMIN: # %bb.0:391; ZVFHMIN-NEXT: fmv.x.h a1, fa0392; ZVFHMIN-NEXT: vsetivli zero, 16, e16, m2, ta, ma393; ZVFHMIN-NEXT: vmv.v.x v16, a1394; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma395; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8396; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v16397; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma398; ZVFHMIN-NEXT: vfadd.vv v12, v12, v8399; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma400; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12401; ZVFHMIN-NEXT: ret402 %elt.head = insertelement <16 x half> poison, half %b, i32 0403 %vb = shufflevector <16 x half> %elt.head, <16 x half> poison, <16 x i32> zeroinitializer404 %v = call <16 x half> @llvm.vp.fadd.v16f16(<16 x half> %va, <16 x half> %vb, <16 x i1> splat (i1 true), i32 %evl)405 ret <16 x half> %v406}407 408define <2 x float> @vfadd_vv_v2f32(<2 x float> %va, <2 x float> %b, <2 x i1> %m, i32 zeroext %evl) {409; CHECK-LABEL: vfadd_vv_v2f32:410; CHECK: # %bb.0:411; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma412; CHECK-NEXT: vfadd.vv v8, v8, v9, v0.t413; CHECK-NEXT: ret414 %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %va, <2 x float> %b, <2 x i1> %m, i32 %evl)415 ret <2 x float> %v416}417 418define <2 x float> @vfadd_vv_v2f32_unmasked(<2 x float> %va, <2 x float> %b, i32 zeroext %evl) {419; CHECK-LABEL: vfadd_vv_v2f32_unmasked:420; CHECK: # %bb.0:421; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma422; CHECK-NEXT: vfadd.vv v8, v8, v9423; CHECK-NEXT: ret424 %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %va, <2 x float> %b, <2 x i1> splat (i1 true), i32 %evl)425 ret <2 x float> %v426}427 428define <2 x float> @vfadd_vf_v2f32(<2 x float> %va, float %b, <2 x i1> %m, i32 zeroext %evl) {429; CHECK-LABEL: vfadd_vf_v2f32:430; CHECK: # %bb.0:431; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma432; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t433; CHECK-NEXT: ret434 %elt.head = insertelement <2 x float> poison, float %b, i32 0435 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer436 %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %va, <2 x float> %vb, <2 x i1> %m, i32 %evl)437 ret <2 x float> %v438}439 440define <2 x float> @vfadd_vf_v2f32_commute(<2 x float> %va, float %b, <2 x i1> %m, i32 zeroext %evl) {441; CHECK-LABEL: vfadd_vf_v2f32_commute:442; CHECK: # %bb.0:443; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma444; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t445; CHECK-NEXT: ret446 %elt.head = insertelement <2 x float> poison, float %b, i32 0447 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer448 %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %vb, <2 x float> %va, <2 x i1> %m, i32 %evl)449 ret <2 x float> %v450}451 452define <2 x float> @vfadd_vf_v2f32_unmasked(<2 x float> %va, float %b, i32 zeroext %evl) {453; CHECK-LABEL: vfadd_vf_v2f32_unmasked:454; CHECK: # %bb.0:455; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma456; CHECK-NEXT: vfadd.vf v8, v8, fa0457; CHECK-NEXT: ret458 %elt.head = insertelement <2 x float> poison, float %b, i32 0459 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer460 %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %va, <2 x float> %vb, <2 x i1> splat (i1 true), i32 %evl)461 ret <2 x float> %v462}463 464define <2 x float> @vfadd_vf_v2f32_unmasked_commute(<2 x float> %va, float %b, i32 zeroext %evl) {465; CHECK-LABEL: vfadd_vf_v2f32_unmasked_commute:466; CHECK: # %bb.0:467; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma468; CHECK-NEXT: vfadd.vf v8, v8, fa0469; CHECK-NEXT: ret470 %elt.head = insertelement <2 x float> poison, float %b, i32 0471 %vb = shufflevector <2 x float> %elt.head, <2 x float> poison, <2 x i32> zeroinitializer472 %v = call <2 x float> @llvm.vp.fadd.v2f32(<2 x float> %vb, <2 x float> %va, <2 x i1> splat (i1 true), i32 %evl)473 ret <2 x float> %v474}475 476define <4 x float> @vfadd_vv_v4f32(<4 x float> %va, <4 x float> %b, <4 x i1> %m, i32 zeroext %evl) {477; CHECK-LABEL: vfadd_vv_v4f32:478; CHECK: # %bb.0:479; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma480; CHECK-NEXT: vfadd.vv v8, v8, v9, v0.t481; CHECK-NEXT: ret482 %v = call <4 x float> @llvm.vp.fadd.v4f32(<4 x float> %va, <4 x float> %b, <4 x i1> %m, i32 %evl)483 ret <4 x float> %v484}485 486define <4 x float> @vfadd_vv_v4f32_unmasked(<4 x float> %va, <4 x float> %b, i32 zeroext %evl) {487; CHECK-LABEL: vfadd_vv_v4f32_unmasked:488; CHECK: # %bb.0:489; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma490; CHECK-NEXT: vfadd.vv v8, v8, v9491; CHECK-NEXT: ret492 %v = call <4 x float> @llvm.vp.fadd.v4f32(<4 x float> %va, <4 x float> %b, <4 x i1> splat (i1 true), i32 %evl)493 ret <4 x float> %v494}495 496define <4 x float> @vfadd_vf_v4f32(<4 x float> %va, float %b, <4 x i1> %m, i32 zeroext %evl) {497; CHECK-LABEL: vfadd_vf_v4f32:498; CHECK: # %bb.0:499; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma500; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t501; CHECK-NEXT: ret502 %elt.head = insertelement <4 x float> poison, float %b, i32 0503 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer504 %v = call <4 x float> @llvm.vp.fadd.v4f32(<4 x float> %va, <4 x float> %vb, <4 x i1> %m, i32 %evl)505 ret <4 x float> %v506}507 508define <4 x float> @vfadd_vf_v4f32_unmasked(<4 x float> %va, float %b, i32 zeroext %evl) {509; CHECK-LABEL: vfadd_vf_v4f32_unmasked:510; CHECK: # %bb.0:511; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma512; CHECK-NEXT: vfadd.vf v8, v8, fa0513; CHECK-NEXT: ret514 %elt.head = insertelement <4 x float> poison, float %b, i32 0515 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer516 %v = call <4 x float> @llvm.vp.fadd.v4f32(<4 x float> %va, <4 x float> %vb, <4 x i1> splat (i1 true), i32 %evl)517 ret <4 x float> %v518}519 520define <8 x float> @vfadd_vv_v8f32(<8 x float> %va, <8 x float> %b, <8 x i1> %m, i32 zeroext %evl) {521; CHECK-LABEL: vfadd_vv_v8f32:522; CHECK: # %bb.0:523; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma524; CHECK-NEXT: vfadd.vv v8, v8, v10, v0.t525; CHECK-NEXT: ret526 %v = call <8 x float> @llvm.vp.fadd.v8f32(<8 x float> %va, <8 x float> %b, <8 x i1> %m, i32 %evl)527 ret <8 x float> %v528}529 530define <8 x float> @vfadd_vv_v8f32_unmasked(<8 x float> %va, <8 x float> %b, i32 zeroext %evl) {531; CHECK-LABEL: vfadd_vv_v8f32_unmasked:532; CHECK: # %bb.0:533; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma534; CHECK-NEXT: vfadd.vv v8, v8, v10535; CHECK-NEXT: ret536 %v = call <8 x float> @llvm.vp.fadd.v8f32(<8 x float> %va, <8 x float> %b, <8 x i1> splat (i1 true), i32 %evl)537 ret <8 x float> %v538}539 540define <8 x float> @vfadd_vf_v8f32(<8 x float> %va, float %b, <8 x i1> %m, i32 zeroext %evl) {541; CHECK-LABEL: vfadd_vf_v8f32:542; CHECK: # %bb.0:543; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma544; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t545; CHECK-NEXT: ret546 %elt.head = insertelement <8 x float> poison, float %b, i32 0547 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer548 %v = call <8 x float> @llvm.vp.fadd.v8f32(<8 x float> %va, <8 x float> %vb, <8 x i1> %m, i32 %evl)549 ret <8 x float> %v550}551 552define <8 x float> @vfadd_vf_v8f32_unmasked(<8 x float> %va, float %b, i32 zeroext %evl) {553; CHECK-LABEL: vfadd_vf_v8f32_unmasked:554; CHECK: # %bb.0:555; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma556; CHECK-NEXT: vfadd.vf v8, v8, fa0557; CHECK-NEXT: ret558 %elt.head = insertelement <8 x float> poison, float %b, i32 0559 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer560 %v = call <8 x float> @llvm.vp.fadd.v8f32(<8 x float> %va, <8 x float> %vb, <8 x i1> splat (i1 true), i32 %evl)561 ret <8 x float> %v562}563 564define <16 x float> @vfadd_vv_v16f32(<16 x float> %va, <16 x float> %b, <16 x i1> %m, i32 zeroext %evl) {565; CHECK-LABEL: vfadd_vv_v16f32:566; CHECK: # %bb.0:567; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma568; CHECK-NEXT: vfadd.vv v8, v8, v12, v0.t569; CHECK-NEXT: ret570 %v = call <16 x float> @llvm.vp.fadd.v16f32(<16 x float> %va, <16 x float> %b, <16 x i1> %m, i32 %evl)571 ret <16 x float> %v572}573 574define <16 x float> @vfadd_vv_v16f32_unmasked(<16 x float> %va, <16 x float> %b, i32 zeroext %evl) {575; CHECK-LABEL: vfadd_vv_v16f32_unmasked:576; CHECK: # %bb.0:577; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma578; CHECK-NEXT: vfadd.vv v8, v8, v12579; CHECK-NEXT: ret580 %v = call <16 x float> @llvm.vp.fadd.v16f32(<16 x float> %va, <16 x float> %b, <16 x i1> splat (i1 true), i32 %evl)581 ret <16 x float> %v582}583 584define <16 x float> @vfadd_vf_v16f32(<16 x float> %va, float %b, <16 x i1> %m, i32 zeroext %evl) {585; CHECK-LABEL: vfadd_vf_v16f32:586; CHECK: # %bb.0:587; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma588; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t589; CHECK-NEXT: ret590 %elt.head = insertelement <16 x float> poison, float %b, i32 0591 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer592 %v = call <16 x float> @llvm.vp.fadd.v16f32(<16 x float> %va, <16 x float> %vb, <16 x i1> %m, i32 %evl)593 ret <16 x float> %v594}595 596define <16 x float> @vfadd_vf_v16f32_unmasked(<16 x float> %va, float %b, i32 zeroext %evl) {597; CHECK-LABEL: vfadd_vf_v16f32_unmasked:598; CHECK: # %bb.0:599; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma600; CHECK-NEXT: vfadd.vf v8, v8, fa0601; CHECK-NEXT: ret602 %elt.head = insertelement <16 x float> poison, float %b, i32 0603 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer604 %v = call <16 x float> @llvm.vp.fadd.v16f32(<16 x float> %va, <16 x float> %vb, <16 x i1> splat (i1 true), i32 %evl)605 ret <16 x float> %v606}607 608define <2 x double> @vfadd_vv_v2f64(<2 x double> %va, <2 x double> %b, <2 x i1> %m, i32 zeroext %evl) {609; CHECK-LABEL: vfadd_vv_v2f64:610; CHECK: # %bb.0:611; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma612; CHECK-NEXT: vfadd.vv v8, v8, v9, v0.t613; CHECK-NEXT: ret614 %v = call <2 x double> @llvm.vp.fadd.v2f64(<2 x double> %va, <2 x double> %b, <2 x i1> %m, i32 %evl)615 ret <2 x double> %v616}617 618define <2 x double> @vfadd_vv_v2f64_unmasked(<2 x double> %va, <2 x double> %b, i32 zeroext %evl) {619; CHECK-LABEL: vfadd_vv_v2f64_unmasked:620; CHECK: # %bb.0:621; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma622; CHECK-NEXT: vfadd.vv v8, v8, v9623; CHECK-NEXT: ret624 %v = call <2 x double> @llvm.vp.fadd.v2f64(<2 x double> %va, <2 x double> %b, <2 x i1> splat (i1 true), i32 %evl)625 ret <2 x double> %v626}627 628define <2 x double> @vfadd_vf_v2f64(<2 x double> %va, double %b, <2 x i1> %m, i32 zeroext %evl) {629; CHECK-LABEL: vfadd_vf_v2f64:630; CHECK: # %bb.0:631; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma632; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t633; CHECK-NEXT: ret634 %elt.head = insertelement <2 x double> poison, double %b, i32 0635 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer636 %v = call <2 x double> @llvm.vp.fadd.v2f64(<2 x double> %va, <2 x double> %vb, <2 x i1> %m, i32 %evl)637 ret <2 x double> %v638}639 640define <2 x double> @vfadd_vf_v2f64_unmasked(<2 x double> %va, double %b, i32 zeroext %evl) {641; CHECK-LABEL: vfadd_vf_v2f64_unmasked:642; CHECK: # %bb.0:643; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma644; CHECK-NEXT: vfadd.vf v8, v8, fa0645; CHECK-NEXT: ret646 %elt.head = insertelement <2 x double> poison, double %b, i32 0647 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer648 %v = call <2 x double> @llvm.vp.fadd.v2f64(<2 x double> %va, <2 x double> %vb, <2 x i1> splat (i1 true), i32 %evl)649 ret <2 x double> %v650}651 652define <4 x double> @vfadd_vv_v4f64(<4 x double> %va, <4 x double> %b, <4 x i1> %m, i32 zeroext %evl) {653; CHECK-LABEL: vfadd_vv_v4f64:654; CHECK: # %bb.0:655; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma656; CHECK-NEXT: vfadd.vv v8, v8, v10, v0.t657; CHECK-NEXT: ret658 %v = call <4 x double> @llvm.vp.fadd.v4f64(<4 x double> %va, <4 x double> %b, <4 x i1> %m, i32 %evl)659 ret <4 x double> %v660}661 662define <4 x double> @vfadd_vv_v4f64_unmasked(<4 x double> %va, <4 x double> %b, i32 zeroext %evl) {663; CHECK-LABEL: vfadd_vv_v4f64_unmasked:664; CHECK: # %bb.0:665; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma666; CHECK-NEXT: vfadd.vv v8, v8, v10667; CHECK-NEXT: ret668 %v = call <4 x double> @llvm.vp.fadd.v4f64(<4 x double> %va, <4 x double> %b, <4 x i1> splat (i1 true), i32 %evl)669 ret <4 x double> %v670}671 672define <4 x double> @vfadd_vf_v4f64(<4 x double> %va, double %b, <4 x i1> %m, i32 zeroext %evl) {673; CHECK-LABEL: vfadd_vf_v4f64:674; CHECK: # %bb.0:675; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma676; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t677; CHECK-NEXT: ret678 %elt.head = insertelement <4 x double> poison, double %b, i32 0679 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer680 %v = call <4 x double> @llvm.vp.fadd.v4f64(<4 x double> %va, <4 x double> %vb, <4 x i1> %m, i32 %evl)681 ret <4 x double> %v682}683 684define <4 x double> @vfadd_vf_v4f64_unmasked(<4 x double> %va, double %b, i32 zeroext %evl) {685; CHECK-LABEL: vfadd_vf_v4f64_unmasked:686; CHECK: # %bb.0:687; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma688; CHECK-NEXT: vfadd.vf v8, v8, fa0689; CHECK-NEXT: ret690 %elt.head = insertelement <4 x double> poison, double %b, i32 0691 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer692 %v = call <4 x double> @llvm.vp.fadd.v4f64(<4 x double> %va, <4 x double> %vb, <4 x i1> splat (i1 true), i32 %evl)693 ret <4 x double> %v694}695 696define <8 x double> @vfadd_vv_v8f64(<8 x double> %va, <8 x double> %b, <8 x i1> %m, i32 zeroext %evl) {697; CHECK-LABEL: vfadd_vv_v8f64:698; CHECK: # %bb.0:699; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma700; CHECK-NEXT: vfadd.vv v8, v8, v12, v0.t701; CHECK-NEXT: ret702 %v = call <8 x double> @llvm.vp.fadd.v8f64(<8 x double> %va, <8 x double> %b, <8 x i1> %m, i32 %evl)703 ret <8 x double> %v704}705 706define <8 x double> @vfadd_vv_v8f64_unmasked(<8 x double> %va, <8 x double> %b, i32 zeroext %evl) {707; CHECK-LABEL: vfadd_vv_v8f64_unmasked:708; CHECK: # %bb.0:709; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma710; CHECK-NEXT: vfadd.vv v8, v8, v12711; CHECK-NEXT: ret712 %v = call <8 x double> @llvm.vp.fadd.v8f64(<8 x double> %va, <8 x double> %b, <8 x i1> splat (i1 true), i32 %evl)713 ret <8 x double> %v714}715 716define <8 x double> @vfadd_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {717; CHECK-LABEL: vfadd_vf_v8f64:718; CHECK: # %bb.0:719; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma720; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t721; CHECK-NEXT: ret722 %elt.head = insertelement <8 x double> poison, double %b, i32 0723 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer724 %v = call <8 x double> @llvm.vp.fadd.v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 %evl)725 ret <8 x double> %v726}727 728define <8 x double> @vfadd_vf_v8f64_unmasked(<8 x double> %va, double %b, i32 zeroext %evl) {729; CHECK-LABEL: vfadd_vf_v8f64_unmasked:730; CHECK: # %bb.0:731; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma732; CHECK-NEXT: vfadd.vf v8, v8, fa0733; CHECK-NEXT: ret734 %elt.head = insertelement <8 x double> poison, double %b, i32 0735 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer736 %v = call <8 x double> @llvm.vp.fadd.v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> splat (i1 true), i32 %evl)737 ret <8 x double> %v738}739 740define <16 x double> @vfadd_vv_v16f64(<16 x double> %va, <16 x double> %b, <16 x i1> %m, i32 zeroext %evl) {741; CHECK-LABEL: vfadd_vv_v16f64:742; CHECK: # %bb.0:743; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma744; CHECK-NEXT: vfadd.vv v8, v8, v16, v0.t745; CHECK-NEXT: ret746 %v = call <16 x double> @llvm.vp.fadd.v16f64(<16 x double> %va, <16 x double> %b, <16 x i1> %m, i32 %evl)747 ret <16 x double> %v748}749 750define <16 x double> @vfadd_vv_v16f64_unmasked(<16 x double> %va, <16 x double> %b, i32 zeroext %evl) {751; CHECK-LABEL: vfadd_vv_v16f64_unmasked:752; CHECK: # %bb.0:753; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma754; CHECK-NEXT: vfadd.vv v8, v8, v16755; CHECK-NEXT: ret756 %v = call <16 x double> @llvm.vp.fadd.v16f64(<16 x double> %va, <16 x double> %b, <16 x i1> splat (i1 true), i32 %evl)757 ret <16 x double> %v758}759 760define <16 x double> @vfadd_vf_v16f64(<16 x double> %va, double %b, <16 x i1> %m, i32 zeroext %evl) {761; CHECK-LABEL: vfadd_vf_v16f64:762; CHECK: # %bb.0:763; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma764; CHECK-NEXT: vfadd.vf v8, v8, fa0, v0.t765; CHECK-NEXT: ret766 %elt.head = insertelement <16 x double> poison, double %b, i32 0767 %vb = shufflevector <16 x double> %elt.head, <16 x double> poison, <16 x i32> zeroinitializer768 %v = call <16 x double> @llvm.vp.fadd.v16f64(<16 x double> %va, <16 x double> %vb, <16 x i1> %m, i32 %evl)769 ret <16 x double> %v770}771 772define <16 x double> @vfadd_vf_v16f64_unmasked(<16 x double> %va, double %b, i32 zeroext %evl) {773; CHECK-LABEL: vfadd_vf_v16f64_unmasked:774; CHECK: # %bb.0:775; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma776; CHECK-NEXT: vfadd.vf v8, v8, fa0777; CHECK-NEXT: ret778 %elt.head = insertelement <16 x double> poison, double %b, i32 0779 %vb = shufflevector <16 x double> %elt.head, <16 x double> poison, <16 x i32> zeroinitializer780 %v = call <16 x double> @llvm.vp.fadd.v16f64(<16 x double> %va, <16 x double> %vb, <16 x i1> splat (i1 true), i32 %evl)781 ret <16 x double> %v782}783