1131 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \3; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \5; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+v -target-abi=ilp32d \7; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+v -target-abi=lp64d \9; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN10 11define <vscale x 1 x half> @vfmul_vv_nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {12; ZVFH-LABEL: vfmul_vv_nxv1f16:13; ZVFH: # %bb.0:14; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma15; ZVFH-NEXT: vfmul.vv v8, v8, v9, v0.t16; ZVFH-NEXT: ret17;18; ZVFHMIN-LABEL: vfmul_vv_nxv1f16: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: vfmul.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 <vscale x 1 x half> @llvm.vp.fmul.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x i1> %m, i32 %evl)29 ret <vscale x 1 x half> %v30}31 32define <vscale x 1 x half> @vfmul_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, i32 zeroext %evl) {33; ZVFH-LABEL: vfmul_vv_nxv1f16_unmasked:34; ZVFH: # %bb.0:35; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma36; ZVFH-NEXT: vfmul.vv v8, v8, v937; ZVFH-NEXT: ret38;39; ZVFHMIN-LABEL: vfmul_vv_nxv1f16_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: vfmul.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 <vscale x 1 x half> @llvm.vp.fmul.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)50 ret <vscale x 1 x half> %v51}52 53define <vscale x 1 x half> @vfmul_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {54; ZVFH-LABEL: vfmul_vf_nxv1f16:55; ZVFH: # %bb.0:56; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma57; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t58; ZVFH-NEXT: ret59;60; ZVFHMIN-LABEL: vfmul_vf_nxv1f16:61; ZVFHMIN: # %bb.0:62; ZVFHMIN-NEXT: fmv.x.h a1, fa063; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma64; ZVFHMIN-NEXT: vmv.v.x v9, a165; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t66; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9, v0.t67; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma68; ZVFHMIN-NEXT: vfmul.vv v9, v10, v8, v0.t69; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma70; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t71; ZVFHMIN-NEXT: ret72 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 073 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer74 %v = call <vscale x 1 x half> @llvm.vp.fmul.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> %m, i32 %evl)75 ret <vscale x 1 x half> %v76}77 78define <vscale x 1 x half> @vfmul_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, i32 zeroext %evl) {79; ZVFH-LABEL: vfmul_vf_nxv1f16_unmasked:80; ZVFH: # %bb.0:81; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma82; ZVFH-NEXT: vfmul.vf v8, v8, fa083; ZVFH-NEXT: ret84;85; ZVFHMIN-LABEL: vfmul_vf_nxv1f16_unmasked:86; ZVFHMIN: # %bb.0:87; ZVFHMIN-NEXT: fmv.x.h a1, fa088; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma89; ZVFHMIN-NEXT: vmv.v.x v9, a190; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v891; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v992; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma93; ZVFHMIN-NEXT: vfmul.vv v9, v10, v894; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma95; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v996; ZVFHMIN-NEXT: ret97 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 098 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer99 %v = call <vscale x 1 x half> @llvm.vp.fmul.nxv1f16(<vscale x 1 x half> %va, <vscale x 1 x half> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)100 ret <vscale x 1 x half> %v101}102 103define <vscale x 2 x half> @vfmul_vv_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {104; ZVFH-LABEL: vfmul_vv_nxv2f16:105; ZVFH: # %bb.0:106; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma107; ZVFH-NEXT: vfmul.vv v8, v8, v9, v0.t108; ZVFH-NEXT: ret109;110; ZVFHMIN-LABEL: vfmul_vv_nxv2f16:111; ZVFHMIN: # %bb.0:112; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma113; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t114; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8, v0.t115; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma116; ZVFHMIN-NEXT: vfmul.vv v9, v9, v10, v0.t117; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma118; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t119; ZVFHMIN-NEXT: ret120 %v = call <vscale x 2 x half> @llvm.vp.fmul.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x i1> %m, i32 %evl)121 ret <vscale x 2 x half> %v122}123 124define <vscale x 2 x half> @vfmul_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, i32 zeroext %evl) {125; ZVFH-LABEL: vfmul_vv_nxv2f16_unmasked:126; ZVFH: # %bb.0:127; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma128; ZVFH-NEXT: vfmul.vv v8, v8, v9129; ZVFH-NEXT: ret130;131; ZVFHMIN-LABEL: vfmul_vv_nxv2f16_unmasked:132; ZVFHMIN: # %bb.0:133; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma134; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9135; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8136; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma137; ZVFHMIN-NEXT: vfmul.vv v9, v9, v10138; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma139; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9140; ZVFHMIN-NEXT: ret141 %v = call <vscale x 2 x half> @llvm.vp.fmul.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)142 ret <vscale x 2 x half> %v143}144 145define <vscale x 2 x half> @vfmul_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {146; ZVFH-LABEL: vfmul_vf_nxv2f16:147; ZVFH: # %bb.0:148; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma149; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t150; ZVFH-NEXT: ret151;152; ZVFHMIN-LABEL: vfmul_vf_nxv2f16:153; ZVFHMIN: # %bb.0:154; ZVFHMIN-NEXT: fmv.x.h a1, fa0155; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma156; ZVFHMIN-NEXT: vmv.v.x v9, a1157; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t158; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9, v0.t159; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma160; ZVFHMIN-NEXT: vfmul.vv v9, v10, v8, v0.t161; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma162; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t163; ZVFHMIN-NEXT: ret164 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0165 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer166 %v = call <vscale x 2 x half> @llvm.vp.fmul.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x i1> %m, i32 %evl)167 ret <vscale x 2 x half> %v168}169 170define <vscale x 2 x half> @vfmul_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, i32 zeroext %evl) {171; ZVFH-LABEL: vfmul_vf_nxv2f16_unmasked:172; ZVFH: # %bb.0:173; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma174; ZVFH-NEXT: vfmul.vf v8, v8, fa0175; ZVFH-NEXT: ret176;177; ZVFHMIN-LABEL: vfmul_vf_nxv2f16_unmasked:178; ZVFHMIN: # %bb.0:179; ZVFHMIN-NEXT: fmv.x.h a1, fa0180; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma181; ZVFHMIN-NEXT: vmv.v.x v9, a1182; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8183; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9184; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma185; ZVFHMIN-NEXT: vfmul.vv v9, v10, v8186; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma187; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9188; ZVFHMIN-NEXT: ret189 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0190 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer191 %v = call <vscale x 2 x half> @llvm.vp.fmul.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x half> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)192 ret <vscale x 2 x half> %v193}194 195define <vscale x 4 x half> @vfmul_vv_nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {196; ZVFH-LABEL: vfmul_vv_nxv4f16:197; ZVFH: # %bb.0:198; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma199; ZVFH-NEXT: vfmul.vv v8, v8, v9, v0.t200; ZVFH-NEXT: ret201;202; ZVFHMIN-LABEL: vfmul_vv_nxv4f16:203; ZVFHMIN: # %bb.0:204; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma205; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t206; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t207; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma208; ZVFHMIN-NEXT: vfmul.vv v10, v12, v10, v0.t209; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma210; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10, v0.t211; ZVFHMIN-NEXT: ret212 %v = call <vscale x 4 x half> @llvm.vp.fmul.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x i1> %m, i32 %evl)213 ret <vscale x 4 x half> %v214}215 216define <vscale x 4 x half> @vfmul_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, i32 zeroext %evl) {217; ZVFH-LABEL: vfmul_vv_nxv4f16_unmasked:218; ZVFH: # %bb.0:219; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma220; ZVFH-NEXT: vfmul.vv v8, v8, v9221; ZVFH-NEXT: ret222;223; ZVFHMIN-LABEL: vfmul_vv_nxv4f16_unmasked:224; ZVFHMIN: # %bb.0:225; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma226; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9227; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8228; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma229; ZVFHMIN-NEXT: vfmul.vv v10, v12, v10230; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma231; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10232; ZVFHMIN-NEXT: ret233 %v = call <vscale x 4 x half> @llvm.vp.fmul.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)234 ret <vscale x 4 x half> %v235}236 237define <vscale x 4 x half> @vfmul_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {238; ZVFH-LABEL: vfmul_vf_nxv4f16:239; ZVFH: # %bb.0:240; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma241; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t242; ZVFH-NEXT: ret243;244; ZVFHMIN-LABEL: vfmul_vf_nxv4f16:245; ZVFHMIN: # %bb.0:246; ZVFHMIN-NEXT: fmv.x.h a1, fa0247; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma248; ZVFHMIN-NEXT: vmv.v.x v12, a1249; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t250; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v12, v0.t251; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma252; ZVFHMIN-NEXT: vfmul.vv v10, v10, v8, v0.t253; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma254; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10, v0.t255; ZVFHMIN-NEXT: ret256 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0257 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer258 %v = call <vscale x 4 x half> @llvm.vp.fmul.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x i1> %m, i32 %evl)259 ret <vscale x 4 x half> %v260}261 262define <vscale x 4 x half> @vfmul_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, i32 zeroext %evl) {263; ZVFH-LABEL: vfmul_vf_nxv4f16_unmasked:264; ZVFH: # %bb.0:265; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma266; ZVFH-NEXT: vfmul.vf v8, v8, fa0267; ZVFH-NEXT: ret268;269; ZVFHMIN-LABEL: vfmul_vf_nxv4f16_unmasked:270; ZVFHMIN: # %bb.0:271; ZVFHMIN-NEXT: fmv.x.h a1, fa0272; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma273; ZVFHMIN-NEXT: vmv.v.x v12, a1274; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8275; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v12276; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma277; ZVFHMIN-NEXT: vfmul.vv v10, v10, v8278; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma279; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10280; ZVFHMIN-NEXT: ret281 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0282 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer283 %v = call <vscale x 4 x half> @llvm.vp.fmul.nxv4f16(<vscale x 4 x half> %va, <vscale x 4 x half> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)284 ret <vscale x 4 x half> %v285}286 287define <vscale x 8 x half> @vfmul_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {288; ZVFH-LABEL: vfmul_vv_nxv8f16:289; ZVFH: # %bb.0:290; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma291; ZVFH-NEXT: vfmul.vv v8, v8, v10, v0.t292; ZVFH-NEXT: ret293;294; ZVFHMIN-LABEL: vfmul_vv_nxv8f16:295; ZVFHMIN: # %bb.0:296; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma297; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10, v0.t298; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t299; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma300; ZVFHMIN-NEXT: vfmul.vv v12, v16, v12, v0.t301; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma302; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12, v0.t303; ZVFHMIN-NEXT: ret304 %v = call <vscale x 8 x half> @llvm.vp.fmul.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x i1> %m, i32 %evl)305 ret <vscale x 8 x half> %v306}307 308define <vscale x 8 x half> @vfmul_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, i32 zeroext %evl) {309; ZVFH-LABEL: vfmul_vv_nxv8f16_unmasked:310; ZVFH: # %bb.0:311; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma312; ZVFH-NEXT: vfmul.vv v8, v8, v10313; ZVFH-NEXT: ret314;315; ZVFHMIN-LABEL: vfmul_vv_nxv8f16_unmasked:316; ZVFHMIN: # %bb.0:317; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma318; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10319; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8320; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma321; ZVFHMIN-NEXT: vfmul.vv v12, v16, v12322; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma323; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12324; ZVFHMIN-NEXT: ret325 %v = call <vscale x 8 x half> @llvm.vp.fmul.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)326 ret <vscale x 8 x half> %v327}328 329define <vscale x 8 x half> @vfmul_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {330; ZVFH-LABEL: vfmul_vf_nxv8f16:331; ZVFH: # %bb.0:332; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma333; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t334; ZVFH-NEXT: ret335;336; ZVFHMIN-LABEL: vfmul_vf_nxv8f16:337; ZVFHMIN: # %bb.0:338; ZVFHMIN-NEXT: fmv.x.h a1, fa0339; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma340; ZVFHMIN-NEXT: vmv.v.x v16, a1341; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t342; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v16, v0.t343; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma344; ZVFHMIN-NEXT: vfmul.vv v12, v12, v8, v0.t345; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma346; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12, v0.t347; ZVFHMIN-NEXT: ret348 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0349 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer350 %v = call <vscale x 8 x half> @llvm.vp.fmul.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> %m, i32 %evl)351 ret <vscale x 8 x half> %v352}353 354define <vscale x 8 x half> @vfmul_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, i32 zeroext %evl) {355; ZVFH-LABEL: vfmul_vf_nxv8f16_unmasked:356; ZVFH: # %bb.0:357; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma358; ZVFH-NEXT: vfmul.vf v8, v8, fa0359; ZVFH-NEXT: ret360;361; ZVFHMIN-LABEL: vfmul_vf_nxv8f16_unmasked:362; ZVFHMIN: # %bb.0:363; ZVFHMIN-NEXT: fmv.x.h a1, fa0364; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma365; ZVFHMIN-NEXT: vmv.v.x v16, a1366; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8367; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v16368; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma369; ZVFHMIN-NEXT: vfmul.vv v12, v12, v8370; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma371; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12372; ZVFHMIN-NEXT: ret373 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0374 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer375 %v = call <vscale x 8 x half> @llvm.vp.fmul.nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)376 ret <vscale x 8 x half> %v377}378 379define <vscale x 16 x half> @vfmul_vv_nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {380; ZVFH-LABEL: vfmul_vv_nxv16f16:381; ZVFH: # %bb.0:382; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma383; ZVFH-NEXT: vfmul.vv v8, v8, v12, v0.t384; ZVFH-NEXT: ret385;386; ZVFHMIN-LABEL: vfmul_vv_nxv16f16:387; ZVFHMIN: # %bb.0:388; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma389; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t390; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8, v0.t391; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma392; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16, v0.t393; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma394; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16, v0.t395; ZVFHMIN-NEXT: ret396 %v = call <vscale x 16 x half> @llvm.vp.fmul.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x i1> %m, i32 %evl)397 ret <vscale x 16 x half> %v398}399 400define <vscale x 16 x half> @vfmul_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, i32 zeroext %evl) {401; ZVFH-LABEL: vfmul_vv_nxv16f16_unmasked:402; ZVFH: # %bb.0:403; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma404; ZVFH-NEXT: vfmul.vv v8, v8, v12405; ZVFH-NEXT: ret406;407; ZVFHMIN-LABEL: vfmul_vv_nxv16f16_unmasked:408; ZVFHMIN: # %bb.0:409; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma410; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12411; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8412; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma413; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16414; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma415; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16416; ZVFHMIN-NEXT: ret417 %v = call <vscale x 16 x half> @llvm.vp.fmul.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)418 ret <vscale x 16 x half> %v419}420 421define <vscale x 16 x half> @vfmul_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {422; ZVFH-LABEL: vfmul_vf_nxv16f16:423; ZVFH: # %bb.0:424; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma425; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t426; ZVFH-NEXT: ret427;428; ZVFHMIN-LABEL: vfmul_vf_nxv16f16:429; ZVFHMIN: # %bb.0:430; ZVFHMIN-NEXT: fmv.x.h a1, fa0431; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma432; ZVFHMIN-NEXT: vmv.v.x v24, a1433; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t434; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v24, v0.t435; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma436; ZVFHMIN-NEXT: vfmul.vv v16, v16, v8, v0.t437; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma438; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16, v0.t439; ZVFHMIN-NEXT: ret440 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0441 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer442 %v = call <vscale x 16 x half> @llvm.vp.fmul.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x i1> %m, i32 %evl)443 ret <vscale x 16 x half> %v444}445 446define <vscale x 16 x half> @vfmul_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, i32 zeroext %evl) {447; ZVFH-LABEL: vfmul_vf_nxv16f16_unmasked:448; ZVFH: # %bb.0:449; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma450; ZVFH-NEXT: vfmul.vf v8, v8, fa0451; ZVFH-NEXT: ret452;453; ZVFHMIN-LABEL: vfmul_vf_nxv16f16_unmasked:454; ZVFHMIN: # %bb.0:455; ZVFHMIN-NEXT: fmv.x.h a1, fa0456; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma457; ZVFHMIN-NEXT: vmv.v.x v24, a1458; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8459; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v24460; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma461; ZVFHMIN-NEXT: vfmul.vv v16, v16, v8462; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma463; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16464; ZVFHMIN-NEXT: ret465 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0466 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer467 %v = call <vscale x 16 x half> @llvm.vp.fmul.nxv16f16(<vscale x 16 x half> %va, <vscale x 16 x half> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)468 ret <vscale x 16 x half> %v469}470 471define <vscale x 32 x half> @vfmul_vv_nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {472; ZVFH-LABEL: vfmul_vv_nxv32f16:473; ZVFH: # %bb.0:474; ZVFH-NEXT: vsetvli zero, a0, e16, m8, ta, ma475; ZVFH-NEXT: vfmul.vv v8, v8, v16, v0.t476; ZVFH-NEXT: ret477;478; ZVFHMIN-LABEL: vfmul_vv_nxv32f16:479; ZVFHMIN: # %bb.0:480; ZVFHMIN-NEXT: addi sp, sp, -16481; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16482; ZVFHMIN-NEXT: csrr a1, vlenb483; ZVFHMIN-NEXT: slli a1, a1, 3484; ZVFHMIN-NEXT: sub sp, sp, a1485; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb486; ZVFHMIN-NEXT: vsetvli a1, zero, e8, mf2, ta, ma487; ZVFHMIN-NEXT: vmv1r.v v7, v0488; ZVFHMIN-NEXT: csrr a2, vlenb489; ZVFHMIN-NEXT: slli a1, a2, 1490; ZVFHMIN-NEXT: srli a2, a2, 2491; ZVFHMIN-NEXT: sub a3, a0, a1492; ZVFHMIN-NEXT: vslidedown.vx v0, v0, a2493; ZVFHMIN-NEXT: sltu a2, a0, a3494; ZVFHMIN-NEXT: addi a2, a2, -1495; ZVFHMIN-NEXT: and a2, a2, a3496; ZVFHMIN-NEXT: addi a3, sp, 16497; ZVFHMIN-NEXT: vs8r.v v16, (a3) # vscale x 64-byte Folded Spill498; ZVFHMIN-NEXT: vsetvli zero, a2, e16, m4, ta, ma499; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20, v0.t500; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t501; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma502; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24, v0.t503; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma504; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16, v0.t505; ZVFHMIN-NEXT: bltu a0, a1, .LBB20_2506; ZVFHMIN-NEXT: # %bb.1:507; ZVFHMIN-NEXT: mv a0, a1508; ZVFHMIN-NEXT: .LBB20_2:509; ZVFHMIN-NEXT: vmv1r.v v0, v7510; ZVFHMIN-NEXT: addi a1, sp, 16511; ZVFHMIN-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload512; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma513; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v24, v0.t514; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8, v0.t515; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma516; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16, v0.t517; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma518; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16, v0.t519; ZVFHMIN-NEXT: csrr a0, vlenb520; ZVFHMIN-NEXT: slli a0, a0, 3521; ZVFHMIN-NEXT: add sp, sp, a0522; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16523; ZVFHMIN-NEXT: addi sp, sp, 16524; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0525; ZVFHMIN-NEXT: ret526 %v = call <vscale x 32 x half> @llvm.vp.fmul.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x i1> %m, i32 %evl)527 ret <vscale x 32 x half> %v528}529 530define <vscale x 32 x half> @vfmul_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, i32 zeroext %evl) {531; ZVFH-LABEL: vfmul_vv_nxv32f16_unmasked:532; ZVFH: # %bb.0:533; ZVFH-NEXT: vsetvli zero, a0, e16, m8, ta, ma534; ZVFH-NEXT: vfmul.vv v8, v8, v16535; ZVFH-NEXT: ret536;537; ZVFHMIN-LABEL: vfmul_vv_nxv32f16_unmasked:538; ZVFHMIN: # %bb.0:539; ZVFHMIN-NEXT: addi sp, sp, -16540; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16541; ZVFHMIN-NEXT: csrr a1, vlenb542; ZVFHMIN-NEXT: slli a1, a1, 3543; ZVFHMIN-NEXT: sub sp, sp, a1544; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb545; ZVFHMIN-NEXT: csrr a2, vlenb546; ZVFHMIN-NEXT: vsetvli a1, zero, e8, m4, ta, ma547; ZVFHMIN-NEXT: vmset.m v24548; ZVFHMIN-NEXT: slli a1, a2, 1549; ZVFHMIN-NEXT: srli a2, a2, 2550; ZVFHMIN-NEXT: sub a3, a0, a1551; ZVFHMIN-NEXT: vsetvli a4, zero, e8, mf2, ta, ma552; ZVFHMIN-NEXT: vslidedown.vx v0, v24, a2553; ZVFHMIN-NEXT: sltu a2, a0, a3554; ZVFHMIN-NEXT: addi a2, a2, -1555; ZVFHMIN-NEXT: and a2, a2, a3556; ZVFHMIN-NEXT: addi a3, sp, 16557; ZVFHMIN-NEXT: vs8r.v v16, (a3) # vscale x 64-byte Folded Spill558; ZVFHMIN-NEXT: vsetvli zero, a2, e16, m4, ta, ma559; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20, v0.t560; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t561; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma562; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24, v0.t563; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma564; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16, v0.t565; ZVFHMIN-NEXT: bltu a0, a1, .LBB21_2566; ZVFHMIN-NEXT: # %bb.1:567; ZVFHMIN-NEXT: mv a0, a1568; ZVFHMIN-NEXT: .LBB21_2:569; ZVFHMIN-NEXT: addi a1, sp, 16570; ZVFHMIN-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload571; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma572; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v24573; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8574; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma575; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16576; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma577; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16578; ZVFHMIN-NEXT: csrr a0, vlenb579; ZVFHMIN-NEXT: slli a0, a0, 3580; ZVFHMIN-NEXT: add sp, sp, a0581; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16582; ZVFHMIN-NEXT: addi sp, sp, 16583; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0584; ZVFHMIN-NEXT: ret585 %v = call <vscale x 32 x half> @llvm.vp.fmul.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)586 ret <vscale x 32 x half> %v587}588 589define <vscale x 32 x half> @vfmul_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {590; ZVFH-LABEL: vfmul_vf_nxv32f16:591; ZVFH: # %bb.0:592; ZVFH-NEXT: vsetvli zero, a0, e16, m8, ta, ma593; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t594; ZVFH-NEXT: ret595;596; ZVFHMIN-LABEL: vfmul_vf_nxv32f16:597; ZVFHMIN: # %bb.0:598; ZVFHMIN-NEXT: addi sp, sp, -16599; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16600; ZVFHMIN-NEXT: csrr a1, vlenb601; ZVFHMIN-NEXT: slli a1, a1, 4602; ZVFHMIN-NEXT: sub sp, sp, a1603; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb604; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m8, ta, ma605; ZVFHMIN-NEXT: vmv1r.v v7, v0606; ZVFHMIN-NEXT: fmv.x.h a1, fa0607; ZVFHMIN-NEXT: csrr a2, vlenb608; ZVFHMIN-NEXT: vmv.v.x v24, a1609; ZVFHMIN-NEXT: slli a1, a2, 1610; ZVFHMIN-NEXT: srli a2, a2, 2611; ZVFHMIN-NEXT: sub a3, a0, a1612; ZVFHMIN-NEXT: vsetvli a4, zero, e8, mf2, ta, ma613; ZVFHMIN-NEXT: vslidedown.vx v0, v0, a2614; ZVFHMIN-NEXT: sltu a2, a0, a3615; ZVFHMIN-NEXT: addi a2, a2, -1616; ZVFHMIN-NEXT: and a2, a2, a3617; ZVFHMIN-NEXT: csrr a3, vlenb618; ZVFHMIN-NEXT: slli a3, a3, 3619; ZVFHMIN-NEXT: add a3, sp, a3620; ZVFHMIN-NEXT: addi a3, a3, 16621; ZVFHMIN-NEXT: vs8r.v v24, (a3) # vscale x 64-byte Folded Spill622; ZVFHMIN-NEXT: vsetvli zero, a2, e16, m4, ta, ma623; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v28, v0.t624; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12, v0.t625; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma626; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16, v0.t627; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma628; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16, v0.t629; ZVFHMIN-NEXT: bltu a0, a1, .LBB22_2630; ZVFHMIN-NEXT: # %bb.1:631; ZVFHMIN-NEXT: mv a0, a1632; ZVFHMIN-NEXT: .LBB22_2:633; ZVFHMIN-NEXT: vmv1r.v v0, v7634; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma635; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t636; ZVFHMIN-NEXT: addi a0, sp, 16637; ZVFHMIN-NEXT: vs8r.v v16, (a0) # vscale x 64-byte Folded Spill638; ZVFHMIN-NEXT: csrr a0, vlenb639; ZVFHMIN-NEXT: slli a0, a0, 3640; ZVFHMIN-NEXT: add a0, sp, a0641; ZVFHMIN-NEXT: addi a0, a0, 16642; ZVFHMIN-NEXT: vl8r.v v16, (a0) # vscale x 64-byte Folded Reload643; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16, v0.t644; ZVFHMIN-NEXT: addi a0, sp, 16645; ZVFHMIN-NEXT: vl8r.v v16, (a0) # vscale x 64-byte Folded Reload646; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma647; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24, v0.t648; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma649; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16, v0.t650; ZVFHMIN-NEXT: csrr a0, vlenb651; ZVFHMIN-NEXT: slli a0, a0, 4652; ZVFHMIN-NEXT: add sp, sp, a0653; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16654; ZVFHMIN-NEXT: addi sp, sp, 16655; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0656; ZVFHMIN-NEXT: ret657 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0658 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer659 %v = call <vscale x 32 x half> @llvm.vp.fmul.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x i1> %m, i32 %evl)660 ret <vscale x 32 x half> %v661}662 663define <vscale x 32 x half> @vfmul_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, i32 zeroext %evl) {664; ZVFH-LABEL: vfmul_vf_nxv32f16_unmasked:665; ZVFH: # %bb.0:666; ZVFH-NEXT: vsetvli zero, a0, e16, m8, ta, ma667; ZVFH-NEXT: vfmul.vf v8, v8, fa0668; ZVFH-NEXT: ret669;670; ZVFHMIN-LABEL: vfmul_vf_nxv32f16_unmasked:671; ZVFHMIN: # %bb.0:672; ZVFHMIN-NEXT: addi sp, sp, -16673; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16674; ZVFHMIN-NEXT: csrr a1, vlenb675; ZVFHMIN-NEXT: slli a1, a1, 3676; ZVFHMIN-NEXT: sub sp, sp, a1677; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb678; ZVFHMIN-NEXT: fmv.x.h a1, fa0679; ZVFHMIN-NEXT: csrr a2, vlenb680; ZVFHMIN-NEXT: vsetvli a3, zero, e16, m8, ta, ma681; ZVFHMIN-NEXT: vmset.m v24682; ZVFHMIN-NEXT: vmv.v.x v16, a1683; ZVFHMIN-NEXT: slli a1, a2, 1684; ZVFHMIN-NEXT: srli a2, a2, 2685; ZVFHMIN-NEXT: sub a3, a0, a1686; ZVFHMIN-NEXT: vsetvli a4, zero, e8, mf2, ta, ma687; ZVFHMIN-NEXT: vslidedown.vx v0, v24, a2688; ZVFHMIN-NEXT: sltu a2, a0, a3689; ZVFHMIN-NEXT: addi a2, a2, -1690; ZVFHMIN-NEXT: and a2, a2, a3691; ZVFHMIN-NEXT: addi a3, sp, 16692; ZVFHMIN-NEXT: vs8r.v v16, (a3) # vscale x 64-byte Folded Spill693; ZVFHMIN-NEXT: vsetvli zero, a2, e16, m4, ta, ma694; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20, v0.t695; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t696; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma697; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24, v0.t698; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma699; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16, v0.t700; ZVFHMIN-NEXT: bltu a0, a1, .LBB23_2701; ZVFHMIN-NEXT: # %bb.1:702; ZVFHMIN-NEXT: mv a0, a1703; ZVFHMIN-NEXT: .LBB23_2:704; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma705; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8706; ZVFHMIN-NEXT: addi a0, sp, 16707; ZVFHMIN-NEXT: vl8r.v v0, (a0) # vscale x 64-byte Folded Reload708; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v0709; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma710; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24711; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma712; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16713; ZVFHMIN-NEXT: csrr a0, vlenb714; ZVFHMIN-NEXT: slli a0, a0, 3715; ZVFHMIN-NEXT: add sp, sp, a0716; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16717; ZVFHMIN-NEXT: addi sp, sp, 16718; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0719; ZVFHMIN-NEXT: ret720 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0721 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer722 %v = call <vscale x 32 x half> @llvm.vp.fmul.nxv32f16(<vscale x 32 x half> %va, <vscale x 32 x half> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)723 ret <vscale x 32 x half> %v724}725 726define <vscale x 1 x float> @vfmul_vv_nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {727; CHECK-LABEL: vfmul_vv_nxv1f32:728; CHECK: # %bb.0:729; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma730; CHECK-NEXT: vfmul.vv v8, v8, v9, v0.t731; CHECK-NEXT: ret732 %v = call <vscale x 1 x float> @llvm.vp.fmul.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x i1> %m, i32 %evl)733 ret <vscale x 1 x float> %v734}735 736define <vscale x 1 x float> @vfmul_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, i32 zeroext %evl) {737; CHECK-LABEL: vfmul_vv_nxv1f32_unmasked:738; CHECK: # %bb.0:739; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma740; CHECK-NEXT: vfmul.vv v8, v8, v9741; CHECK-NEXT: ret742 %v = call <vscale x 1 x float> @llvm.vp.fmul.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)743 ret <vscale x 1 x float> %v744}745 746define <vscale x 1 x float> @vfmul_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {747; CHECK-LABEL: vfmul_vf_nxv1f32:748; CHECK: # %bb.0:749; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma750; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t751; CHECK-NEXT: ret752 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0753 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer754 %v = call <vscale x 1 x float> @llvm.vp.fmul.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x i1> %m, i32 %evl)755 ret <vscale x 1 x float> %v756}757 758define <vscale x 1 x float> @vfmul_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, i32 zeroext %evl) {759; CHECK-LABEL: vfmul_vf_nxv1f32_unmasked:760; CHECK: # %bb.0:761; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma762; CHECK-NEXT: vfmul.vf v8, v8, fa0763; CHECK-NEXT: ret764 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0765 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer766 %v = call <vscale x 1 x float> @llvm.vp.fmul.nxv1f32(<vscale x 1 x float> %va, <vscale x 1 x float> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)767 ret <vscale x 1 x float> %v768}769 770define <vscale x 2 x float> @vfmul_vv_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {771; CHECK-LABEL: vfmul_vv_nxv2f32:772; CHECK: # %bb.0:773; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma774; CHECK-NEXT: vfmul.vv v8, v8, v9, v0.t775; CHECK-NEXT: ret776 %v = call <vscale x 2 x float> @llvm.vp.fmul.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x i1> %m, i32 %evl)777 ret <vscale x 2 x float> %v778}779 780define <vscale x 2 x float> @vfmul_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, i32 zeroext %evl) {781; CHECK-LABEL: vfmul_vv_nxv2f32_unmasked:782; CHECK: # %bb.0:783; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma784; CHECK-NEXT: vfmul.vv v8, v8, v9785; CHECK-NEXT: ret786 %v = call <vscale x 2 x float> @llvm.vp.fmul.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)787 ret <vscale x 2 x float> %v788}789 790define <vscale x 2 x float> @vfmul_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {791; CHECK-LABEL: vfmul_vf_nxv2f32:792; CHECK: # %bb.0:793; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma794; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t795; CHECK-NEXT: ret796 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0797 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer798 %v = call <vscale x 2 x float> @llvm.vp.fmul.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x i1> %m, i32 %evl)799 ret <vscale x 2 x float> %v800}801 802define <vscale x 2 x float> @vfmul_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, i32 zeroext %evl) {803; CHECK-LABEL: vfmul_vf_nxv2f32_unmasked:804; CHECK: # %bb.0:805; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma806; CHECK-NEXT: vfmul.vf v8, v8, fa0807; CHECK-NEXT: ret808 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0809 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer810 %v = call <vscale x 2 x float> @llvm.vp.fmul.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x float> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)811 ret <vscale x 2 x float> %v812}813 814define <vscale x 4 x float> @vfmul_vv_nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {815; CHECK-LABEL: vfmul_vv_nxv4f32:816; CHECK: # %bb.0:817; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma818; CHECK-NEXT: vfmul.vv v8, v8, v10, v0.t819; CHECK-NEXT: ret820 %v = call <vscale x 4 x float> @llvm.vp.fmul.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x i1> %m, i32 %evl)821 ret <vscale x 4 x float> %v822}823 824define <vscale x 4 x float> @vfmul_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, i32 zeroext %evl) {825; CHECK-LABEL: vfmul_vv_nxv4f32_unmasked:826; CHECK: # %bb.0:827; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma828; CHECK-NEXT: vfmul.vv v8, v8, v10829; CHECK-NEXT: ret830 %v = call <vscale x 4 x float> @llvm.vp.fmul.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)831 ret <vscale x 4 x float> %v832}833 834define <vscale x 4 x float> @vfmul_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {835; CHECK-LABEL: vfmul_vf_nxv4f32:836; CHECK: # %bb.0:837; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma838; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t839; CHECK-NEXT: ret840 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0841 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer842 %v = call <vscale x 4 x float> @llvm.vp.fmul.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x i1> %m, i32 %evl)843 ret <vscale x 4 x float> %v844}845 846define <vscale x 4 x float> @vfmul_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, i32 zeroext %evl) {847; CHECK-LABEL: vfmul_vf_nxv4f32_unmasked:848; CHECK: # %bb.0:849; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma850; CHECK-NEXT: vfmul.vf v8, v8, fa0851; CHECK-NEXT: ret852 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0853 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer854 %v = call <vscale x 4 x float> @llvm.vp.fmul.nxv4f32(<vscale x 4 x float> %va, <vscale x 4 x float> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)855 ret <vscale x 4 x float> %v856}857 858define <vscale x 8 x float> @vfmul_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {859; CHECK-LABEL: vfmul_vv_nxv8f32:860; CHECK: # %bb.0:861; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma862; CHECK-NEXT: vfmul.vv v8, v8, v12, v0.t863; CHECK-NEXT: ret864 %v = call <vscale x 8 x float> @llvm.vp.fmul.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x i1> %m, i32 %evl)865 ret <vscale x 8 x float> %v866}867 868define <vscale x 8 x float> @vfmul_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, i32 zeroext %evl) {869; CHECK-LABEL: vfmul_vv_nxv8f32_unmasked:870; CHECK: # %bb.0:871; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma872; CHECK-NEXT: vfmul.vv v8, v8, v12873; CHECK-NEXT: ret874 %v = call <vscale x 8 x float> @llvm.vp.fmul.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)875 ret <vscale x 8 x float> %v876}877 878define <vscale x 8 x float> @vfmul_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {879; CHECK-LABEL: vfmul_vf_nxv8f32:880; CHECK: # %bb.0:881; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma882; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t883; CHECK-NEXT: ret884 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0885 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer886 %v = call <vscale x 8 x float> @llvm.vp.fmul.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x i1> %m, i32 %evl)887 ret <vscale x 8 x float> %v888}889 890define <vscale x 8 x float> @vfmul_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, i32 zeroext %evl) {891; CHECK-LABEL: vfmul_vf_nxv8f32_unmasked:892; CHECK: # %bb.0:893; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma894; CHECK-NEXT: vfmul.vf v8, v8, fa0895; CHECK-NEXT: ret896 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0897 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer898 %v = call <vscale x 8 x float> @llvm.vp.fmul.nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)899 ret <vscale x 8 x float> %v900}901 902define <vscale x 16 x float> @vfmul_vv_nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {903; CHECK-LABEL: vfmul_vv_nxv16f32:904; CHECK: # %bb.0:905; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma906; CHECK-NEXT: vfmul.vv v8, v8, v16, v0.t907; CHECK-NEXT: ret908 %v = call <vscale x 16 x float> @llvm.vp.fmul.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x i1> %m, i32 %evl)909 ret <vscale x 16 x float> %v910}911 912define <vscale x 16 x float> @vfmul_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, i32 zeroext %evl) {913; CHECK-LABEL: vfmul_vv_nxv16f32_unmasked:914; CHECK: # %bb.0:915; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma916; CHECK-NEXT: vfmul.vv v8, v8, v16917; CHECK-NEXT: ret918 %v = call <vscale x 16 x float> @llvm.vp.fmul.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)919 ret <vscale x 16 x float> %v920}921 922define <vscale x 16 x float> @vfmul_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {923; CHECK-LABEL: vfmul_vf_nxv16f32:924; CHECK: # %bb.0:925; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma926; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t927; CHECK-NEXT: ret928 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0929 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer930 %v = call <vscale x 16 x float> @llvm.vp.fmul.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x i1> %m, i32 %evl)931 ret <vscale x 16 x float> %v932}933 934define <vscale x 16 x float> @vfmul_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, i32 zeroext %evl) {935; CHECK-LABEL: vfmul_vf_nxv16f32_unmasked:936; CHECK: # %bb.0:937; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma938; CHECK-NEXT: vfmul.vf v8, v8, fa0939; CHECK-NEXT: ret940 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0941 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer942 %v = call <vscale x 16 x float> @llvm.vp.fmul.nxv16f32(<vscale x 16 x float> %va, <vscale x 16 x float> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)943 ret <vscale x 16 x float> %v944}945 946define <vscale x 1 x double> @vfmul_vv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {947; CHECK-LABEL: vfmul_vv_nxv1f64:948; CHECK: # %bb.0:949; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma950; CHECK-NEXT: vfmul.vv v8, v8, v9, v0.t951; CHECK-NEXT: ret952 %v = call <vscale x 1 x double> @llvm.vp.fmul.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x i1> %m, i32 %evl)953 ret <vscale x 1 x double> %v954}955 956define <vscale x 1 x double> @vfmul_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, i32 zeroext %evl) {957; CHECK-LABEL: vfmul_vv_nxv1f64_unmasked:958; CHECK: # %bb.0:959; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma960; CHECK-NEXT: vfmul.vv v8, v8, v9961; CHECK-NEXT: ret962 %v = call <vscale x 1 x double> @llvm.vp.fmul.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)963 ret <vscale x 1 x double> %v964}965 966define <vscale x 1 x double> @vfmul_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {967; CHECK-LABEL: vfmul_vf_nxv1f64:968; CHECK: # %bb.0:969; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma970; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t971; CHECK-NEXT: ret972 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0973 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer974 %v = call <vscale x 1 x double> @llvm.vp.fmul.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> %m, i32 %evl)975 ret <vscale x 1 x double> %v976}977 978define <vscale x 1 x double> @vfmul_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, i32 zeroext %evl) {979; CHECK-LABEL: vfmul_vf_nxv1f64_unmasked:980; CHECK: # %bb.0:981; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma982; CHECK-NEXT: vfmul.vf v8, v8, fa0983; CHECK-NEXT: ret984 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0985 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer986 %v = call <vscale x 1 x double> @llvm.vp.fmul.nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x double> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)987 ret <vscale x 1 x double> %v988}989 990define <vscale x 2 x double> @vfmul_vv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {991; CHECK-LABEL: vfmul_vv_nxv2f64:992; CHECK: # %bb.0:993; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma994; CHECK-NEXT: vfmul.vv v8, v8, v10, v0.t995; CHECK-NEXT: ret996 %v = call <vscale x 2 x double> @llvm.vp.fmul.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x i1> %m, i32 %evl)997 ret <vscale x 2 x double> %v998}999 1000define <vscale x 2 x double> @vfmul_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, i32 zeroext %evl) {1001; CHECK-LABEL: vfmul_vv_nxv2f64_unmasked:1002; CHECK: # %bb.0:1003; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma1004; CHECK-NEXT: vfmul.vv v8, v8, v101005; CHECK-NEXT: ret1006 %v = call <vscale x 2 x double> @llvm.vp.fmul.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)1007 ret <vscale x 2 x double> %v1008}1009 1010define <vscale x 2 x double> @vfmul_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1011; CHECK-LABEL: vfmul_vf_nxv2f64:1012; CHECK: # %bb.0:1013; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma1014; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t1015; CHECK-NEXT: ret1016 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01017 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1018 %v = call <vscale x 2 x double> @llvm.vp.fmul.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x i1> %m, i32 %evl)1019 ret <vscale x 2 x double> %v1020}1021 1022define <vscale x 2 x double> @vfmul_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, i32 zeroext %evl) {1023; CHECK-LABEL: vfmul_vf_nxv2f64_unmasked:1024; CHECK: # %bb.0:1025; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma1026; CHECK-NEXT: vfmul.vf v8, v8, fa01027; CHECK-NEXT: ret1028 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 01029 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer1030 %v = call <vscale x 2 x double> @llvm.vp.fmul.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x double> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)1031 ret <vscale x 2 x double> %v1032}1033 1034define <vscale x 4 x double> @vfmul_vv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1035; CHECK-LABEL: vfmul_vv_nxv4f64:1036; CHECK: # %bb.0:1037; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1038; CHECK-NEXT: vfmul.vv v8, v8, v12, v0.t1039; CHECK-NEXT: ret1040 %v = call <vscale x 4 x double> @llvm.vp.fmul.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x i1> %m, i32 %evl)1041 ret <vscale x 4 x double> %v1042}1043 1044define <vscale x 4 x double> @vfmul_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, i32 zeroext %evl) {1045; CHECK-LABEL: vfmul_vv_nxv4f64_unmasked:1046; CHECK: # %bb.0:1047; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1048; CHECK-NEXT: vfmul.vv v8, v8, v121049; CHECK-NEXT: ret1050 %v = call <vscale x 4 x double> @llvm.vp.fmul.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)1051 ret <vscale x 4 x double> %v1052}1053 1054define <vscale x 4 x double> @vfmul_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1055; CHECK-LABEL: vfmul_vf_nxv4f64:1056; CHECK: # %bb.0:1057; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1058; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t1059; CHECK-NEXT: ret1060 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01061 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1062 %v = call <vscale x 4 x double> @llvm.vp.fmul.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x i1> %m, i32 %evl)1063 ret <vscale x 4 x double> %v1064}1065 1066define <vscale x 4 x double> @vfmul_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, i32 zeroext %evl) {1067; CHECK-LABEL: vfmul_vf_nxv4f64_unmasked:1068; CHECK: # %bb.0:1069; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1070; CHECK-NEXT: vfmul.vf v8, v8, fa01071; CHECK-NEXT: ret1072 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 01073 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer1074 %v = call <vscale x 4 x double> @llvm.vp.fmul.nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x double> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)1075 ret <vscale x 4 x double> %v1076}1077 1078define <vscale x 7 x double> @vfmul_vv_nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x i1> %m, i32 zeroext %evl) {1079; CHECK-LABEL: vfmul_vv_nxv7f64:1080; CHECK: # %bb.0:1081; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1082; CHECK-NEXT: vfmul.vv v8, v8, v16, v0.t1083; CHECK-NEXT: ret1084 %v = call <vscale x 7 x double> @llvm.vp.fmul.nxv7f64(<vscale x 7 x double> %va, <vscale x 7 x double> %b, <vscale x 7 x i1> %m, i32 %evl)1085 ret <vscale x 7 x double> %v1086}1087 1088define <vscale x 8 x double> @vfmul_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1089; CHECK-LABEL: vfmul_vv_nxv8f64:1090; CHECK: # %bb.0:1091; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1092; CHECK-NEXT: vfmul.vv v8, v8, v16, v0.t1093; CHECK-NEXT: ret1094 %v = call <vscale x 8 x double> @llvm.vp.fmul.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x i1> %m, i32 %evl)1095 ret <vscale x 8 x double> %v1096}1097 1098define <vscale x 8 x double> @vfmul_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, i32 zeroext %evl) {1099; CHECK-LABEL: vfmul_vv_nxv8f64_unmasked:1100; CHECK: # %bb.0:1101; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1102; CHECK-NEXT: vfmul.vv v8, v8, v161103; CHECK-NEXT: ret1104 %v = call <vscale x 8 x double> @llvm.vp.fmul.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)1105 ret <vscale x 8 x double> %v1106}1107 1108define <vscale x 8 x double> @vfmul_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1109; CHECK-LABEL: vfmul_vf_nxv8f64:1110; CHECK: # %bb.0:1111; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1112; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t1113; CHECK-NEXT: ret1114 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01115 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1116 %v = call <vscale x 8 x double> @llvm.vp.fmul.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> %m, i32 %evl)1117 ret <vscale x 8 x double> %v1118}1119 1120define <vscale x 8 x double> @vfmul_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, i32 zeroext %evl) {1121; CHECK-LABEL: vfmul_vf_nxv8f64_unmasked:1122; CHECK: # %bb.0:1123; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1124; CHECK-NEXT: vfmul.vf v8, v8, fa01125; CHECK-NEXT: ret1126 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 01127 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer1128 %v = call <vscale x 8 x double> @llvm.vp.fmul.nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)1129 ret <vscale x 8 x double> %v1130}1131