759 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> @vfsub_vv_v2f16(<2 x half> %va, <2 x half> %b, <2 x i1> %m, i32 zeroext %evl) {12; ZVFH-LABEL: vfsub_vv_v2f16:13; ZVFH: # %bb.0:14; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma15; ZVFH-NEXT: vfsub.vv v8, v8, v9, v0.t16; ZVFH-NEXT: ret17;18; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vv_v2f16_unmasked(<2 x half> %va, <2 x half> %b, i32 zeroext %evl) {33; ZVFH-LABEL: vfsub_vv_v2f16_unmasked:34; ZVFH: # %bb.0:35; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma36; ZVFH-NEXT: vfsub.vv v8, v8, v937; ZVFH-NEXT: ret38;39; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vf_v2f16(<2 x half> %va, half %b, <2 x i1> %m, i32 zeroext %evl) {54; ZVFH-LABEL: vfsub_vf_v2f16:55; ZVFH: # %bb.0:56; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma57; ZVFH-NEXT: vfsub.vf v8, v8, fa0, v0.t58; ZVFH-NEXT: ret59;60; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vf_v2f16_unmasked(<2 x half> %va, half %b, i32 zeroext %evl) {80; ZVFH-LABEL: vfsub_vf_v2f16_unmasked:81; ZVFH: # %bb.0:82; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma83; ZVFH-NEXT: vfsub.vf v8, v8, fa084; ZVFH-NEXT: ret85;86; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vv_v3f16(<3 x half> %va, <3 x half> %b, <3 x i1> %m, i32 zeroext %evl) {106; ZVFH-LABEL: vfsub_vv_v3f16:107; ZVFH: # %bb.0:108; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma109; ZVFH-NEXT: vfsub.vv v8, v8, v9, v0.t110; ZVFH-NEXT: ret111;112; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vv_v4f16(<4 x half> %va, <4 x half> %b, <4 x i1> %m, i32 zeroext %evl) {127; ZVFH-LABEL: vfsub_vv_v4f16:128; ZVFH: # %bb.0:129; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma130; ZVFH-NEXT: vfsub.vv v8, v8, v9, v0.t131; ZVFH-NEXT: ret132;133; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vv_v4f16_unmasked(<4 x half> %va, <4 x half> %b, i32 zeroext %evl) {148; ZVFH-LABEL: vfsub_vv_v4f16_unmasked:149; ZVFH: # %bb.0:150; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma151; ZVFH-NEXT: vfsub.vv v8, v8, v9152; ZVFH-NEXT: ret153;154; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vf_v4f16(<4 x half> %va, half %b, <4 x i1> %m, i32 zeroext %evl) {169; ZVFH-LABEL: vfsub_vf_v4f16:170; ZVFH: # %bb.0:171; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma172; ZVFH-NEXT: vfsub.vf v8, v8, fa0, v0.t173; ZVFH-NEXT: ret174;175; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vf_v4f16_unmasked(<4 x half> %va, half %b, i32 zeroext %evl) {195; ZVFH-LABEL: vfsub_vf_v4f16_unmasked:196; ZVFH: # %bb.0:197; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma198; ZVFH-NEXT: vfsub.vf v8, v8, fa0199; ZVFH-NEXT: ret200;201; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vv_v8f16(<8 x half> %va, <8 x half> %b, <8 x i1> %m, i32 zeroext %evl) {221; ZVFH-LABEL: vfsub_vv_v8f16:222; ZVFH: # %bb.0:223; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma224; ZVFH-NEXT: vfsub.vv v8, v8, v9, v0.t225; ZVFH-NEXT: ret226;227; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vv_v8f16_unmasked(<8 x half> %va, <8 x half> %b, i32 zeroext %evl) {242; ZVFH-LABEL: vfsub_vv_v8f16_unmasked:243; ZVFH: # %bb.0:244; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma245; ZVFH-NEXT: vfsub.vv v8, v8, v9246; ZVFH-NEXT: ret247;248; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {263; ZVFH-LABEL: vfsub_vf_v8f16:264; ZVFH: # %bb.0:265; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma266; ZVFH-NEXT: vfsub.vf v8, v8, fa0, v0.t267; ZVFH-NEXT: ret268;269; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vf_v8f16_unmasked(<8 x half> %va, half %b, i32 zeroext %evl) {289; ZVFH-LABEL: vfsub_vf_v8f16_unmasked:290; ZVFH: # %bb.0:291; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma292; ZVFH-NEXT: vfsub.vf v8, v8, fa0293; ZVFH-NEXT: ret294;295; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vv_v16f16(<16 x half> %va, <16 x half> %b, <16 x i1> %m, i32 zeroext %evl) {315; ZVFH-LABEL: vfsub_vv_v16f16:316; ZVFH: # %bb.0:317; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma318; ZVFH-NEXT: vfsub.vv v8, v8, v10, v0.t319; ZVFH-NEXT: ret320;321; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vv_v16f16_unmasked(<16 x half> %va, <16 x half> %b, i32 zeroext %evl) {336; ZVFH-LABEL: vfsub_vv_v16f16_unmasked:337; ZVFH: # %bb.0:338; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma339; ZVFH-NEXT: vfsub.vv v8, v8, v10340; ZVFH-NEXT: ret341;342; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vf_v16f16(<16 x half> %va, half %b, <16 x i1> %m, i32 zeroext %evl) {357; ZVFH-LABEL: vfsub_vf_v16f16:358; ZVFH: # %bb.0:359; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma360; ZVFH-NEXT: vfsub.vf v8, v8, fa0, v0.t361; ZVFH-NEXT: ret362;363; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vf_v16f16_unmasked(<16 x half> %va, half %b, i32 zeroext %evl) {383; ZVFH-LABEL: vfsub_vf_v16f16_unmasked:384; ZVFH: # %bb.0:385; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma386; ZVFH-NEXT: vfsub.vf v8, v8, fa0387; ZVFH-NEXT: ret388;389; ZVFHMIN-LABEL: vfsub_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: vfsub.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.fsub.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> @vfsub_vv_v2f32(<2 x float> %va, <2 x float> %b, <2 x i1> %m, i32 zeroext %evl) {409; CHECK-LABEL: vfsub_vv_v2f32:410; CHECK: # %bb.0:411; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma412; CHECK-NEXT: vfsub.vv v8, v8, v9, v0.t413; CHECK-NEXT: ret414 %v = call <2 x float> @llvm.vp.fsub.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> @vfsub_vv_v2f32_unmasked(<2 x float> %va, <2 x float> %b, i32 zeroext %evl) {419; CHECK-LABEL: vfsub_vv_v2f32_unmasked:420; CHECK: # %bb.0:421; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma422; CHECK-NEXT: vfsub.vv v8, v8, v9423; CHECK-NEXT: ret424 %v = call <2 x float> @llvm.vp.fsub.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> @vfsub_vf_v2f32(<2 x float> %va, float %b, <2 x i1> %m, i32 zeroext %evl) {429; CHECK-LABEL: vfsub_vf_v2f32:430; CHECK: # %bb.0:431; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma432; CHECK-NEXT: vfsub.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.fsub.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> @vfsub_vf_v2f32_unmasked(<2 x float> %va, float %b, i32 zeroext %evl) {441; CHECK-LABEL: vfsub_vf_v2f32_unmasked:442; CHECK: # %bb.0:443; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma444; CHECK-NEXT: vfsub.vf v8, v8, fa0445; 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.fsub.v2f32(<2 x float> %va, <2 x float> %vb, <2 x i1> splat (i1 true), i32 %evl)449 ret <2 x float> %v450}451 452define <4 x float> @vfsub_vv_v4f32(<4 x float> %va, <4 x float> %b, <4 x i1> %m, i32 zeroext %evl) {453; CHECK-LABEL: vfsub_vv_v4f32:454; CHECK: # %bb.0:455; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma456; CHECK-NEXT: vfsub.vv v8, v8, v9, v0.t457; CHECK-NEXT: ret458 %v = call <4 x float> @llvm.vp.fsub.v4f32(<4 x float> %va, <4 x float> %b, <4 x i1> %m, i32 %evl)459 ret <4 x float> %v460}461 462define <4 x float> @vfsub_vv_v4f32_unmasked(<4 x float> %va, <4 x float> %b, i32 zeroext %evl) {463; CHECK-LABEL: vfsub_vv_v4f32_unmasked:464; CHECK: # %bb.0:465; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma466; CHECK-NEXT: vfsub.vv v8, v8, v9467; CHECK-NEXT: ret468 %v = call <4 x float> @llvm.vp.fsub.v4f32(<4 x float> %va, <4 x float> %b, <4 x i1> splat (i1 true), i32 %evl)469 ret <4 x float> %v470}471 472define <4 x float> @vfsub_vf_v4f32(<4 x float> %va, float %b, <4 x i1> %m, i32 zeroext %evl) {473; CHECK-LABEL: vfsub_vf_v4f32:474; CHECK: # %bb.0:475; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma476; CHECK-NEXT: vfsub.vf v8, v8, fa0, v0.t477; CHECK-NEXT: ret478 %elt.head = insertelement <4 x float> poison, float %b, i32 0479 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer480 %v = call <4 x float> @llvm.vp.fsub.v4f32(<4 x float> %va, <4 x float> %vb, <4 x i1> %m, i32 %evl)481 ret <4 x float> %v482}483 484define <4 x float> @vfsub_vf_v4f32_unmasked(<4 x float> %va, float %b, i32 zeroext %evl) {485; CHECK-LABEL: vfsub_vf_v4f32_unmasked:486; CHECK: # %bb.0:487; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma488; CHECK-NEXT: vfsub.vf v8, v8, fa0489; CHECK-NEXT: ret490 %elt.head = insertelement <4 x float> poison, float %b, i32 0491 %vb = shufflevector <4 x float> %elt.head, <4 x float> poison, <4 x i32> zeroinitializer492 %v = call <4 x float> @llvm.vp.fsub.v4f32(<4 x float> %va, <4 x float> %vb, <4 x i1> splat (i1 true), i32 %evl)493 ret <4 x float> %v494}495 496define <8 x float> @vfsub_vv_v8f32(<8 x float> %va, <8 x float> %b, <8 x i1> %m, i32 zeroext %evl) {497; CHECK-LABEL: vfsub_vv_v8f32:498; CHECK: # %bb.0:499; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma500; CHECK-NEXT: vfsub.vv v8, v8, v10, v0.t501; CHECK-NEXT: ret502 %v = call <8 x float> @llvm.vp.fsub.v8f32(<8 x float> %va, <8 x float> %b, <8 x i1> %m, i32 %evl)503 ret <8 x float> %v504}505 506define <8 x float> @vfsub_vv_v8f32_unmasked(<8 x float> %va, <8 x float> %b, i32 zeroext %evl) {507; CHECK-LABEL: vfsub_vv_v8f32_unmasked:508; CHECK: # %bb.0:509; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma510; CHECK-NEXT: vfsub.vv v8, v8, v10511; CHECK-NEXT: ret512 %v = call <8 x float> @llvm.vp.fsub.v8f32(<8 x float> %va, <8 x float> %b, <8 x i1> splat (i1 true), i32 %evl)513 ret <8 x float> %v514}515 516define <8 x float> @vfsub_vf_v8f32(<8 x float> %va, float %b, <8 x i1> %m, i32 zeroext %evl) {517; CHECK-LABEL: vfsub_vf_v8f32:518; CHECK: # %bb.0:519; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma520; CHECK-NEXT: vfsub.vf v8, v8, fa0, v0.t521; CHECK-NEXT: ret522 %elt.head = insertelement <8 x float> poison, float %b, i32 0523 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer524 %v = call <8 x float> @llvm.vp.fsub.v8f32(<8 x float> %va, <8 x float> %vb, <8 x i1> %m, i32 %evl)525 ret <8 x float> %v526}527 528define <8 x float> @vfsub_vf_v8f32_unmasked(<8 x float> %va, float %b, i32 zeroext %evl) {529; CHECK-LABEL: vfsub_vf_v8f32_unmasked:530; CHECK: # %bb.0:531; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma532; CHECK-NEXT: vfsub.vf v8, v8, fa0533; CHECK-NEXT: ret534 %elt.head = insertelement <8 x float> poison, float %b, i32 0535 %vb = shufflevector <8 x float> %elt.head, <8 x float> poison, <8 x i32> zeroinitializer536 %v = call <8 x float> @llvm.vp.fsub.v8f32(<8 x float> %va, <8 x float> %vb, <8 x i1> splat (i1 true), i32 %evl)537 ret <8 x float> %v538}539 540define <16 x float> @vfsub_vv_v16f32(<16 x float> %va, <16 x float> %b, <16 x i1> %m, i32 zeroext %evl) {541; CHECK-LABEL: vfsub_vv_v16f32:542; CHECK: # %bb.0:543; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma544; CHECK-NEXT: vfsub.vv v8, v8, v12, v0.t545; CHECK-NEXT: ret546 %v = call <16 x float> @llvm.vp.fsub.v16f32(<16 x float> %va, <16 x float> %b, <16 x i1> %m, i32 %evl)547 ret <16 x float> %v548}549 550define <16 x float> @vfsub_vv_v16f32_unmasked(<16 x float> %va, <16 x float> %b, i32 zeroext %evl) {551; CHECK-LABEL: vfsub_vv_v16f32_unmasked:552; CHECK: # %bb.0:553; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma554; CHECK-NEXT: vfsub.vv v8, v8, v12555; CHECK-NEXT: ret556 %v = call <16 x float> @llvm.vp.fsub.v16f32(<16 x float> %va, <16 x float> %b, <16 x i1> splat (i1 true), i32 %evl)557 ret <16 x float> %v558}559 560define <16 x float> @vfsub_vf_v16f32(<16 x float> %va, float %b, <16 x i1> %m, i32 zeroext %evl) {561; CHECK-LABEL: vfsub_vf_v16f32:562; CHECK: # %bb.0:563; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma564; CHECK-NEXT: vfsub.vf v8, v8, fa0, v0.t565; CHECK-NEXT: ret566 %elt.head = insertelement <16 x float> poison, float %b, i32 0567 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer568 %v = call <16 x float> @llvm.vp.fsub.v16f32(<16 x float> %va, <16 x float> %vb, <16 x i1> %m, i32 %evl)569 ret <16 x float> %v570}571 572define <16 x float> @vfsub_vf_v16f32_unmasked(<16 x float> %va, float %b, i32 zeroext %evl) {573; CHECK-LABEL: vfsub_vf_v16f32_unmasked:574; CHECK: # %bb.0:575; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma576; CHECK-NEXT: vfsub.vf v8, v8, fa0577; CHECK-NEXT: ret578 %elt.head = insertelement <16 x float> poison, float %b, i32 0579 %vb = shufflevector <16 x float> %elt.head, <16 x float> poison, <16 x i32> zeroinitializer580 %v = call <16 x float> @llvm.vp.fsub.v16f32(<16 x float> %va, <16 x float> %vb, <16 x i1> splat (i1 true), i32 %evl)581 ret <16 x float> %v582}583 584define <2 x double> @vfsub_vv_v2f64(<2 x double> %va, <2 x double> %b, <2 x i1> %m, i32 zeroext %evl) {585; CHECK-LABEL: vfsub_vv_v2f64:586; CHECK: # %bb.0:587; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma588; CHECK-NEXT: vfsub.vv v8, v8, v9, v0.t589; CHECK-NEXT: ret590 %v = call <2 x double> @llvm.vp.fsub.v2f64(<2 x double> %va, <2 x double> %b, <2 x i1> %m, i32 %evl)591 ret <2 x double> %v592}593 594define <2 x double> @vfsub_vv_v2f64_unmasked(<2 x double> %va, <2 x double> %b, i32 zeroext %evl) {595; CHECK-LABEL: vfsub_vv_v2f64_unmasked:596; CHECK: # %bb.0:597; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma598; CHECK-NEXT: vfsub.vv v8, v8, v9599; CHECK-NEXT: ret600 %v = call <2 x double> @llvm.vp.fsub.v2f64(<2 x double> %va, <2 x double> %b, <2 x i1> splat (i1 true), i32 %evl)601 ret <2 x double> %v602}603 604define <2 x double> @vfsub_vf_v2f64(<2 x double> %va, double %b, <2 x i1> %m, i32 zeroext %evl) {605; CHECK-LABEL: vfsub_vf_v2f64:606; CHECK: # %bb.0:607; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma608; CHECK-NEXT: vfsub.vf v8, v8, fa0, v0.t609; CHECK-NEXT: ret610 %elt.head = insertelement <2 x double> poison, double %b, i32 0611 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer612 %v = call <2 x double> @llvm.vp.fsub.v2f64(<2 x double> %va, <2 x double> %vb, <2 x i1> %m, i32 %evl)613 ret <2 x double> %v614}615 616define <2 x double> @vfsub_vf_v2f64_unmasked(<2 x double> %va, double %b, i32 zeroext %evl) {617; CHECK-LABEL: vfsub_vf_v2f64_unmasked:618; CHECK: # %bb.0:619; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma620; CHECK-NEXT: vfsub.vf v8, v8, fa0621; CHECK-NEXT: ret622 %elt.head = insertelement <2 x double> poison, double %b, i32 0623 %vb = shufflevector <2 x double> %elt.head, <2 x double> poison, <2 x i32> zeroinitializer624 %v = call <2 x double> @llvm.vp.fsub.v2f64(<2 x double> %va, <2 x double> %vb, <2 x i1> splat (i1 true), i32 %evl)625 ret <2 x double> %v626}627 628define <4 x double> @vfsub_vv_v4f64(<4 x double> %va, <4 x double> %b, <4 x i1> %m, i32 zeroext %evl) {629; CHECK-LABEL: vfsub_vv_v4f64:630; CHECK: # %bb.0:631; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma632; CHECK-NEXT: vfsub.vv v8, v8, v10, v0.t633; CHECK-NEXT: ret634 %v = call <4 x double> @llvm.vp.fsub.v4f64(<4 x double> %va, <4 x double> %b, <4 x i1> %m, i32 %evl)635 ret <4 x double> %v636}637 638define <4 x double> @vfsub_vv_v4f64_unmasked(<4 x double> %va, <4 x double> %b, i32 zeroext %evl) {639; CHECK-LABEL: vfsub_vv_v4f64_unmasked:640; CHECK: # %bb.0:641; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma642; CHECK-NEXT: vfsub.vv v8, v8, v10643; CHECK-NEXT: ret644 %v = call <4 x double> @llvm.vp.fsub.v4f64(<4 x double> %va, <4 x double> %b, <4 x i1> splat (i1 true), i32 %evl)645 ret <4 x double> %v646}647 648define <4 x double> @vfsub_vf_v4f64(<4 x double> %va, double %b, <4 x i1> %m, i32 zeroext %evl) {649; CHECK-LABEL: vfsub_vf_v4f64:650; CHECK: # %bb.0:651; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma652; CHECK-NEXT: vfsub.vf v8, v8, fa0, v0.t653; CHECK-NEXT: ret654 %elt.head = insertelement <4 x double> poison, double %b, i32 0655 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer656 %v = call <4 x double> @llvm.vp.fsub.v4f64(<4 x double> %va, <4 x double> %vb, <4 x i1> %m, i32 %evl)657 ret <4 x double> %v658}659 660define <4 x double> @vfsub_vf_v4f64_unmasked(<4 x double> %va, double %b, i32 zeroext %evl) {661; CHECK-LABEL: vfsub_vf_v4f64_unmasked:662; CHECK: # %bb.0:663; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma664; CHECK-NEXT: vfsub.vf v8, v8, fa0665; CHECK-NEXT: ret666 %elt.head = insertelement <4 x double> poison, double %b, i32 0667 %vb = shufflevector <4 x double> %elt.head, <4 x double> poison, <4 x i32> zeroinitializer668 %v = call <4 x double> @llvm.vp.fsub.v4f64(<4 x double> %va, <4 x double> %vb, <4 x i1> splat (i1 true), i32 %evl)669 ret <4 x double> %v670}671 672define <8 x double> @vfsub_vv_v8f64(<8 x double> %va, <8 x double> %b, <8 x i1> %m, i32 zeroext %evl) {673; CHECK-LABEL: vfsub_vv_v8f64:674; CHECK: # %bb.0:675; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma676; CHECK-NEXT: vfsub.vv v8, v8, v12, v0.t677; CHECK-NEXT: ret678 %v = call <8 x double> @llvm.vp.fsub.v8f64(<8 x double> %va, <8 x double> %b, <8 x i1> %m, i32 %evl)679 ret <8 x double> %v680}681 682define <8 x double> @vfsub_vv_v8f64_unmasked(<8 x double> %va, <8 x double> %b, i32 zeroext %evl) {683; CHECK-LABEL: vfsub_vv_v8f64_unmasked:684; CHECK: # %bb.0:685; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma686; CHECK-NEXT: vfsub.vv v8, v8, v12687; CHECK-NEXT: ret688 %v = call <8 x double> @llvm.vp.fsub.v8f64(<8 x double> %va, <8 x double> %b, <8 x i1> splat (i1 true), i32 %evl)689 ret <8 x double> %v690}691 692define <8 x double> @vfsub_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {693; CHECK-LABEL: vfsub_vf_v8f64:694; CHECK: # %bb.0:695; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma696; CHECK-NEXT: vfsub.vf v8, v8, fa0, v0.t697; CHECK-NEXT: ret698 %elt.head = insertelement <8 x double> poison, double %b, i32 0699 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer700 %v = call <8 x double> @llvm.vp.fsub.v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 %evl)701 ret <8 x double> %v702}703 704define <8 x double> @vfsub_vf_v8f64_unmasked(<8 x double> %va, double %b, i32 zeroext %evl) {705; CHECK-LABEL: vfsub_vf_v8f64_unmasked:706; CHECK: # %bb.0:707; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma708; CHECK-NEXT: vfsub.vf v8, v8, fa0709; CHECK-NEXT: ret710 %elt.head = insertelement <8 x double> poison, double %b, i32 0711 %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer712 %v = call <8 x double> @llvm.vp.fsub.v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> splat (i1 true), i32 %evl)713 ret <8 x double> %v714}715 716define <16 x double> @vfsub_vv_v16f64(<16 x double> %va, <16 x double> %b, <16 x i1> %m, i32 zeroext %evl) {717; CHECK-LABEL: vfsub_vv_v16f64:718; CHECK: # %bb.0:719; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma720; CHECK-NEXT: vfsub.vv v8, v8, v16, v0.t721; CHECK-NEXT: ret722 %v = call <16 x double> @llvm.vp.fsub.v16f64(<16 x double> %va, <16 x double> %b, <16 x i1> %m, i32 %evl)723 ret <16 x double> %v724}725 726define <16 x double> @vfsub_vv_v16f64_unmasked(<16 x double> %va, <16 x double> %b, i32 zeroext %evl) {727; CHECK-LABEL: vfsub_vv_v16f64_unmasked:728; CHECK: # %bb.0:729; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma730; CHECK-NEXT: vfsub.vv v8, v8, v16731; CHECK-NEXT: ret732 %v = call <16 x double> @llvm.vp.fsub.v16f64(<16 x double> %va, <16 x double> %b, <16 x i1> splat (i1 true), i32 %evl)733 ret <16 x double> %v734}735 736define <16 x double> @vfsub_vf_v16f64(<16 x double> %va, double %b, <16 x i1> %m, i32 zeroext %evl) {737; CHECK-LABEL: vfsub_vf_v16f64:738; CHECK: # %bb.0:739; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma740; CHECK-NEXT: vfsub.vf v8, v8, fa0, v0.t741; CHECK-NEXT: ret742 %elt.head = insertelement <16 x double> poison, double %b, i32 0743 %vb = shufflevector <16 x double> %elt.head, <16 x double> poison, <16 x i32> zeroinitializer744 %v = call <16 x double> @llvm.vp.fsub.v16f64(<16 x double> %va, <16 x double> %vb, <16 x i1> %m, i32 %evl)745 ret <16 x double> %v746}747 748define <16 x double> @vfsub_vf_v16f64_unmasked(<16 x double> %va, double %b, i32 zeroext %evl) {749; CHECK-LABEL: vfsub_vf_v16f64_unmasked:750; CHECK: # %bb.0:751; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma752; CHECK-NEXT: vfsub.vf v8, v8, fa0753; CHECK-NEXT: ret754 %elt.head = insertelement <16 x double> poison, double %b, i32 0755 %vb = shufflevector <16 x double> %elt.head, <16 x double> poison, <16 x i32> zeroinitializer756 %v = call <16 x double> @llvm.vp.fsub.v16f64(<16 x double> %va, <16 x double> %vb, <16 x i1> splat (i1 true), i32 %evl)757 ret <16 x double> %v758}759