brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.5 KiB · 6299d5d Raw
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