1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH 4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \ 5; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH 6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+v -target-abi=ilp32d \ 7; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN 8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+v -target-abi=lp64d \ 9; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN 10 11declare <vscale x 1 x half> @llvm.vp.fmul.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x i1>, i32) 12 13define <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) { 14; ZVFH-LABEL: vfmul_vv_nxv1f16: 15; ZVFH: # %bb.0: 16; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 17; ZVFH-NEXT: vfmul.vv v8, v8, v9, v0.t 18; ZVFH-NEXT: ret 19; 20; ZVFHMIN-LABEL: vfmul_vv_nxv1f16: 21; ZVFHMIN: # %bb.0: 22; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 23; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t 24; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8, v0.t 25; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 26; ZVFHMIN-NEXT: vfmul.vv v9, v9, v10, v0.t 27; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 28; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t 29; ZVFHMIN-NEXT: ret 30 %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) 31 ret <vscale x 1 x half> %v 32} 33 34define <vscale x 1 x half> @vfmul_vv_nxv1f16_unmasked(<vscale x 1 x half> %va, <vscale x 1 x half> %b, i32 zeroext %evl) { 35; ZVFH-LABEL: vfmul_vv_nxv1f16_unmasked: 36; ZVFH: # %bb.0: 37; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 38; ZVFH-NEXT: vfmul.vv v8, v8, v9 39; ZVFH-NEXT: ret 40; 41; ZVFHMIN-LABEL: vfmul_vv_nxv1f16_unmasked: 42; ZVFHMIN: # %bb.0: 43; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 44; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 45; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 46; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 47; ZVFHMIN-NEXT: vfmul.vv v9, v9, v10 48; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 49; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 50; ZVFHMIN-NEXT: ret 51 %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) 52 ret <vscale x 1 x half> %v 53} 54 55define <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) { 56; ZVFH-LABEL: vfmul_vf_nxv1f16: 57; ZVFH: # %bb.0: 58; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 59; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t 60; ZVFH-NEXT: ret 61; 62; ZVFHMIN-LABEL: vfmul_vf_nxv1f16: 63; ZVFHMIN: # %bb.0: 64; ZVFHMIN-NEXT: fmv.x.h a1, fa0 65; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 66; ZVFHMIN-NEXT: vmv.v.x v9, a1 67; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t 68; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9, v0.t 69; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 70; ZVFHMIN-NEXT: vfmul.vv v9, v10, v8, v0.t 71; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 72; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t 73; ZVFHMIN-NEXT: ret 74 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 75 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 76 %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) 77 ret <vscale x 1 x half> %v 78} 79 80define <vscale x 1 x half> @vfmul_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, i32 zeroext %evl) { 81; ZVFH-LABEL: vfmul_vf_nxv1f16_unmasked: 82; ZVFH: # %bb.0: 83; ZVFH-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 84; ZVFH-NEXT: vfmul.vf v8, v8, fa0 85; ZVFH-NEXT: ret 86; 87; ZVFHMIN-LABEL: vfmul_vf_nxv1f16_unmasked: 88; ZVFHMIN: # %bb.0: 89; ZVFHMIN-NEXT: fmv.x.h a1, fa0 90; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 91; ZVFHMIN-NEXT: vmv.v.x v9, a1 92; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 93; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 94; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 95; ZVFHMIN-NEXT: vfmul.vv v9, v10, v8 96; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 97; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 98; ZVFHMIN-NEXT: ret 99 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 100 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 101 %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) 102 ret <vscale x 1 x half> %v 103} 104 105declare <vscale x 2 x half> @llvm.vp.fmul.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x i1>, i32) 106 107define <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) { 108; ZVFH-LABEL: vfmul_vv_nxv2f16: 109; ZVFH: # %bb.0: 110; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 111; ZVFH-NEXT: vfmul.vv v8, v8, v9, v0.t 112; ZVFH-NEXT: ret 113; 114; ZVFHMIN-LABEL: vfmul_vv_nxv2f16: 115; ZVFHMIN: # %bb.0: 116; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 117; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t 118; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8, v0.t 119; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 120; ZVFHMIN-NEXT: vfmul.vv v9, v9, v10, v0.t 121; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 122; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t 123; ZVFHMIN-NEXT: ret 124 %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) 125 ret <vscale x 2 x half> %v 126} 127 128define <vscale x 2 x half> @vfmul_vv_nxv2f16_unmasked(<vscale x 2 x half> %va, <vscale x 2 x half> %b, i32 zeroext %evl) { 129; ZVFH-LABEL: vfmul_vv_nxv2f16_unmasked: 130; ZVFH: # %bb.0: 131; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 132; ZVFH-NEXT: vfmul.vv v8, v8, v9 133; ZVFH-NEXT: ret 134; 135; ZVFHMIN-LABEL: vfmul_vv_nxv2f16_unmasked: 136; ZVFHMIN: # %bb.0: 137; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 138; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 139; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 140; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 141; ZVFHMIN-NEXT: vfmul.vv v9, v9, v10 142; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 143; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 144; ZVFHMIN-NEXT: ret 145 %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) 146 ret <vscale x 2 x half> %v 147} 148 149define <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) { 150; ZVFH-LABEL: vfmul_vf_nxv2f16: 151; ZVFH: # %bb.0: 152; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 153; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t 154; ZVFH-NEXT: ret 155; 156; ZVFHMIN-LABEL: vfmul_vf_nxv2f16: 157; ZVFHMIN: # %bb.0: 158; ZVFHMIN-NEXT: fmv.x.h a1, fa0 159; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 160; ZVFHMIN-NEXT: vmv.v.x v9, a1 161; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t 162; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9, v0.t 163; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 164; ZVFHMIN-NEXT: vfmul.vv v9, v10, v8, v0.t 165; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 166; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9, v0.t 167; ZVFHMIN-NEXT: ret 168 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 169 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 170 %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) 171 ret <vscale x 2 x half> %v 172} 173 174define <vscale x 2 x half> @vfmul_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, i32 zeroext %evl) { 175; ZVFH-LABEL: vfmul_vf_nxv2f16_unmasked: 176; ZVFH: # %bb.0: 177; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 178; ZVFH-NEXT: vfmul.vf v8, v8, fa0 179; ZVFH-NEXT: ret 180; 181; ZVFHMIN-LABEL: vfmul_vf_nxv2f16_unmasked: 182; ZVFHMIN: # %bb.0: 183; ZVFHMIN-NEXT: fmv.x.h a1, fa0 184; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 185; ZVFHMIN-NEXT: vmv.v.x v9, a1 186; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 187; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v9 188; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 189; ZVFHMIN-NEXT: vfmul.vv v9, v10, v8 190; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 191; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9 192; ZVFHMIN-NEXT: ret 193 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 194 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 195 %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) 196 ret <vscale x 2 x half> %v 197} 198 199declare <vscale x 4 x half> @llvm.vp.fmul.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x i1>, i32) 200 201define <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) { 202; ZVFH-LABEL: vfmul_vv_nxv4f16: 203; ZVFH: # %bb.0: 204; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma 205; ZVFH-NEXT: vfmul.vv v8, v8, v9, v0.t 206; ZVFH-NEXT: ret 207; 208; ZVFHMIN-LABEL: vfmul_vv_nxv4f16: 209; ZVFHMIN: # %bb.0: 210; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma 211; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9, v0.t 212; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t 213; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma 214; ZVFHMIN-NEXT: vfmul.vv v10, v12, v10, v0.t 215; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma 216; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10, v0.t 217; ZVFHMIN-NEXT: ret 218 %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) 219 ret <vscale x 4 x half> %v 220} 221 222define <vscale x 4 x half> @vfmul_vv_nxv4f16_unmasked(<vscale x 4 x half> %va, <vscale x 4 x half> %b, i32 zeroext %evl) { 223; ZVFH-LABEL: vfmul_vv_nxv4f16_unmasked: 224; ZVFH: # %bb.0: 225; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma 226; ZVFH-NEXT: vfmul.vv v8, v8, v9 227; ZVFH-NEXT: ret 228; 229; ZVFHMIN-LABEL: vfmul_vv_nxv4f16_unmasked: 230; ZVFHMIN: # %bb.0: 231; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma 232; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9 233; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 234; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma 235; ZVFHMIN-NEXT: vfmul.vv v10, v12, v10 236; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma 237; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10 238; ZVFHMIN-NEXT: ret 239 %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) 240 ret <vscale x 4 x half> %v 241} 242 243define <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) { 244; ZVFH-LABEL: vfmul_vf_nxv4f16: 245; ZVFH: # %bb.0: 246; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma 247; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t 248; ZVFH-NEXT: ret 249; 250; ZVFHMIN-LABEL: vfmul_vf_nxv4f16: 251; ZVFHMIN: # %bb.0: 252; ZVFHMIN-NEXT: fmv.x.h a1, fa0 253; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma 254; ZVFHMIN-NEXT: vmv.v.x v9, a1 255; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8, v0.t 256; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9, v0.t 257; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma 258; ZVFHMIN-NEXT: vfmul.vv v10, v10, v12, v0.t 259; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma 260; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10, v0.t 261; ZVFHMIN-NEXT: ret 262 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 263 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 264 %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) 265 ret <vscale x 4 x half> %v 266} 267 268define <vscale x 4 x half> @vfmul_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, i32 zeroext %evl) { 269; ZVFH-LABEL: vfmul_vf_nxv4f16_unmasked: 270; ZVFH: # %bb.0: 271; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma 272; ZVFH-NEXT: vfmul.vf v8, v8, fa0 273; ZVFH-NEXT: ret 274; 275; ZVFHMIN-LABEL: vfmul_vf_nxv4f16_unmasked: 276; ZVFHMIN: # %bb.0: 277; ZVFHMIN-NEXT: fmv.x.h a1, fa0 278; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma 279; ZVFHMIN-NEXT: vmv.v.x v9, a1 280; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 281; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9 282; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma 283; ZVFHMIN-NEXT: vfmul.vv v10, v10, v12 284; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma 285; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10 286; ZVFHMIN-NEXT: ret 287 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 288 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 289 %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) 290 ret <vscale x 4 x half> %v 291} 292 293declare <vscale x 8 x half> @llvm.vp.fmul.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, i32) 294 295define <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) { 296; ZVFH-LABEL: vfmul_vv_nxv8f16: 297; ZVFH: # %bb.0: 298; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 299; ZVFH-NEXT: vfmul.vv v8, v8, v10, v0.t 300; ZVFH-NEXT: ret 301; 302; ZVFHMIN-LABEL: vfmul_vv_nxv8f16: 303; ZVFHMIN: # %bb.0: 304; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 305; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10, v0.t 306; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t 307; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 308; ZVFHMIN-NEXT: vfmul.vv v12, v16, v12, v0.t 309; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 310; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12, v0.t 311; ZVFHMIN-NEXT: ret 312 %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) 313 ret <vscale x 8 x half> %v 314} 315 316define <vscale x 8 x half> @vfmul_vv_nxv8f16_unmasked(<vscale x 8 x half> %va, <vscale x 8 x half> %b, i32 zeroext %evl) { 317; ZVFH-LABEL: vfmul_vv_nxv8f16_unmasked: 318; ZVFH: # %bb.0: 319; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 320; ZVFH-NEXT: vfmul.vv v8, v8, v10 321; ZVFH-NEXT: ret 322; 323; ZVFHMIN-LABEL: vfmul_vv_nxv8f16_unmasked: 324; ZVFHMIN: # %bb.0: 325; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 326; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 327; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 328; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 329; ZVFHMIN-NEXT: vfmul.vv v12, v16, v12 330; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 331; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12 332; ZVFHMIN-NEXT: ret 333 %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) 334 ret <vscale x 8 x half> %v 335} 336 337define <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) { 338; ZVFH-LABEL: vfmul_vf_nxv8f16: 339; ZVFH: # %bb.0: 340; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 341; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t 342; ZVFH-NEXT: ret 343; 344; ZVFHMIN-LABEL: vfmul_vf_nxv8f16: 345; ZVFHMIN: # %bb.0: 346; ZVFHMIN-NEXT: fmv.x.h a1, fa0 347; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 348; ZVFHMIN-NEXT: vmv.v.x v10, a1 349; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t 350; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10, v0.t 351; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 352; ZVFHMIN-NEXT: vfmul.vv v12, v12, v16, v0.t 353; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 354; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12, v0.t 355; ZVFHMIN-NEXT: ret 356 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 357 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 358 %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) 359 ret <vscale x 8 x half> %v 360} 361 362define <vscale x 8 x half> @vfmul_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, i32 zeroext %evl) { 363; ZVFH-LABEL: vfmul_vf_nxv8f16_unmasked: 364; ZVFH: # %bb.0: 365; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma 366; ZVFH-NEXT: vfmul.vf v8, v8, fa0 367; ZVFH-NEXT: ret 368; 369; ZVFHMIN-LABEL: vfmul_vf_nxv8f16_unmasked: 370; ZVFHMIN: # %bb.0: 371; ZVFHMIN-NEXT: fmv.x.h a1, fa0 372; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma 373; ZVFHMIN-NEXT: vmv.v.x v10, a1 374; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 375; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 376; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma 377; ZVFHMIN-NEXT: vfmul.vv v12, v12, v16 378; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma 379; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12 380; ZVFHMIN-NEXT: ret 381 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 382 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 383 %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) 384 ret <vscale x 8 x half> %v 385} 386 387declare <vscale x 16 x half> @llvm.vp.fmul.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x i1>, i32) 388 389define <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) { 390; ZVFH-LABEL: vfmul_vv_nxv16f16: 391; ZVFH: # %bb.0: 392; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma 393; ZVFH-NEXT: vfmul.vv v8, v8, v12, v0.t 394; ZVFH-NEXT: ret 395; 396; ZVFHMIN-LABEL: vfmul_vv_nxv16f16: 397; ZVFHMIN: # %bb.0: 398; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma 399; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t 400; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8, v0.t 401; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 402; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16, v0.t 403; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 404; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16, v0.t 405; ZVFHMIN-NEXT: ret 406 %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) 407 ret <vscale x 16 x half> %v 408} 409 410define <vscale x 16 x half> @vfmul_vv_nxv16f16_unmasked(<vscale x 16 x half> %va, <vscale x 16 x half> %b, i32 zeroext %evl) { 411; ZVFH-LABEL: vfmul_vv_nxv16f16_unmasked: 412; ZVFH: # %bb.0: 413; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma 414; ZVFH-NEXT: vfmul.vv v8, v8, v12 415; ZVFH-NEXT: ret 416; 417; ZVFHMIN-LABEL: vfmul_vv_nxv16f16_unmasked: 418; ZVFHMIN: # %bb.0: 419; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma 420; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 421; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8 422; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 423; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16 424; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 425; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16 426; ZVFHMIN-NEXT: ret 427 %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) 428 ret <vscale x 16 x half> %v 429} 430 431define <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) { 432; ZVFH-LABEL: vfmul_vf_nxv16f16: 433; ZVFH: # %bb.0: 434; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma 435; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t 436; ZVFH-NEXT: ret 437; 438; ZVFHMIN-LABEL: vfmul_vf_nxv16f16: 439; ZVFHMIN: # %bb.0: 440; ZVFHMIN-NEXT: fmv.x.h a1, fa0 441; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma 442; ZVFHMIN-NEXT: vmv.v.x v12, a1 443; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t 444; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12, v0.t 445; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 446; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24, v0.t 447; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 448; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16, v0.t 449; ZVFHMIN-NEXT: ret 450 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 451 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 452 %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) 453 ret <vscale x 16 x half> %v 454} 455 456define <vscale x 16 x half> @vfmul_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, i32 zeroext %evl) { 457; ZVFH-LABEL: vfmul_vf_nxv16f16_unmasked: 458; ZVFH: # %bb.0: 459; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma 460; ZVFH-NEXT: vfmul.vf v8, v8, fa0 461; ZVFH-NEXT: ret 462; 463; ZVFHMIN-LABEL: vfmul_vf_nxv16f16_unmasked: 464; ZVFHMIN: # %bb.0: 465; ZVFHMIN-NEXT: fmv.x.h a1, fa0 466; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma 467; ZVFHMIN-NEXT: vmv.v.x v12, a1 468; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 469; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12 470; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 471; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24 472; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 473; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16 474; ZVFHMIN-NEXT: ret 475 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 476 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 477 %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) 478 ret <vscale x 16 x half> %v 479} 480 481declare <vscale x 32 x half> @llvm.vp.fmul.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x i1>, i32) 482 483define <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) { 484; ZVFH-LABEL: vfmul_vv_nxv32f16: 485; ZVFH: # %bb.0: 486; ZVFH-NEXT: vsetvli zero, a0, e16, m8, ta, ma 487; ZVFH-NEXT: vfmul.vv v8, v8, v16, v0.t 488; ZVFH-NEXT: ret 489; 490; ZVFHMIN-LABEL: vfmul_vv_nxv32f16: 491; ZVFHMIN: # %bb.0: 492; ZVFHMIN-NEXT: addi sp, sp, -16 493; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16 494; ZVFHMIN-NEXT: csrr a1, vlenb 495; ZVFHMIN-NEXT: slli a1, a1, 3 496; ZVFHMIN-NEXT: mv a2, a1 497; ZVFHMIN-NEXT: slli a1, a1, 1 498; ZVFHMIN-NEXT: add a1, a1, a2 499; ZVFHMIN-NEXT: sub sp, sp, a1 500; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb 501; ZVFHMIN-NEXT: vsetvli a1, zero, e8, mf2, ta, ma 502; ZVFHMIN-NEXT: vmv1r.v v7, v0 503; ZVFHMIN-NEXT: csrr a1, vlenb 504; ZVFHMIN-NEXT: slli a1, a1, 4 505; ZVFHMIN-NEXT: add a1, sp, a1 506; ZVFHMIN-NEXT: addi a1, a1, 16 507; ZVFHMIN-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill 508; ZVFHMIN-NEXT: csrr a2, vlenb 509; ZVFHMIN-NEXT: slli a1, a2, 1 510; ZVFHMIN-NEXT: srli a2, a2, 2 511; ZVFHMIN-NEXT: sub a3, a0, a1 512; ZVFHMIN-NEXT: vslidedown.vx v0, v0, a2 513; ZVFHMIN-NEXT: sltu a2, a0, a3 514; ZVFHMIN-NEXT: addi a2, a2, -1 515; ZVFHMIN-NEXT: and a2, a2, a3 516; ZVFHMIN-NEXT: vmv4r.v v8, v16 517; ZVFHMIN-NEXT: csrr a3, vlenb 518; ZVFHMIN-NEXT: slli a3, a3, 3 519; ZVFHMIN-NEXT: add a3, sp, a3 520; ZVFHMIN-NEXT: addi a3, a3, 16 521; ZVFHMIN-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill 522; ZVFHMIN-NEXT: vsetvli zero, a2, e16, m4, ta, ma 523; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20, v0.t 524; ZVFHMIN-NEXT: addi a2, sp, 16 525; ZVFHMIN-NEXT: vs8r.v v8, (a2) # Unknown-size Folded Spill 526; ZVFHMIN-NEXT: csrr a2, vlenb 527; ZVFHMIN-NEXT: slli a2, a2, 4 528; ZVFHMIN-NEXT: add a2, sp, a2 529; ZVFHMIN-NEXT: addi a2, a2, 16 530; ZVFHMIN-NEXT: vl8r.v v16, (a2) # Unknown-size Folded Reload 531; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20, v0.t 532; ZVFHMIN-NEXT: addi a2, sp, 16 533; ZVFHMIN-NEXT: vl8r.v v16, (a2) # Unknown-size Folded Reload 534; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 535; ZVFHMIN-NEXT: vfmul.vv v16, v8, v16, v0.t 536; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 537; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16, v0.t 538; ZVFHMIN-NEXT: bltu a0, a1, .LBB20_2 539; ZVFHMIN-NEXT: # %bb.1: 540; ZVFHMIN-NEXT: mv a0, a1 541; ZVFHMIN-NEXT: .LBB20_2: 542; ZVFHMIN-NEXT: vmv1r.v v0, v7 543; ZVFHMIN-NEXT: csrr a1, vlenb 544; ZVFHMIN-NEXT: slli a1, a1, 3 545; ZVFHMIN-NEXT: add a1, sp, a1 546; ZVFHMIN-NEXT: addi a1, a1, 16 547; ZVFHMIN-NEXT: vl8r.v v16, (a1) # Unknown-size Folded Reload 548; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma 549; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16, v0.t 550; ZVFHMIN-NEXT: addi a0, sp, 16 551; ZVFHMIN-NEXT: vs8r.v v24, (a0) # Unknown-size Folded Spill 552; ZVFHMIN-NEXT: csrr a0, vlenb 553; ZVFHMIN-NEXT: slli a0, a0, 4 554; ZVFHMIN-NEXT: add a0, sp, a0 555; ZVFHMIN-NEXT: addi a0, a0, 16 556; ZVFHMIN-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload 557; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16, v0.t 558; ZVFHMIN-NEXT: addi a0, sp, 16 559; ZVFHMIN-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload 560; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 561; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16, v0.t 562; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 563; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16, v0.t 564; ZVFHMIN-NEXT: csrr a0, vlenb 565; ZVFHMIN-NEXT: slli a0, a0, 3 566; ZVFHMIN-NEXT: mv a1, a0 567; ZVFHMIN-NEXT: slli a0, a0, 1 568; ZVFHMIN-NEXT: add a0, a0, a1 569; ZVFHMIN-NEXT: add sp, sp, a0 570; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16 571; ZVFHMIN-NEXT: addi sp, sp, 16 572; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0 573; ZVFHMIN-NEXT: ret 574 %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) 575 ret <vscale x 32 x half> %v 576} 577 578define <vscale x 32 x half> @vfmul_vv_nxv32f16_unmasked(<vscale x 32 x half> %va, <vscale x 32 x half> %b, i32 zeroext %evl) { 579; ZVFH-LABEL: vfmul_vv_nxv32f16_unmasked: 580; ZVFH: # %bb.0: 581; ZVFH-NEXT: vsetvli zero, a0, e16, m8, ta, ma 582; ZVFH-NEXT: vfmul.vv v8, v8, v16 583; ZVFH-NEXT: ret 584; 585; ZVFHMIN-LABEL: vfmul_vv_nxv32f16_unmasked: 586; ZVFHMIN: # %bb.0: 587; ZVFHMIN-NEXT: addi sp, sp, -16 588; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16 589; ZVFHMIN-NEXT: csrr a1, vlenb 590; ZVFHMIN-NEXT: slli a1, a1, 3 591; ZVFHMIN-NEXT: sub sp, sp, a1 592; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb 593; ZVFHMIN-NEXT: csrr a2, vlenb 594; ZVFHMIN-NEXT: vsetvli a1, zero, e8, m4, ta, ma 595; ZVFHMIN-NEXT: vmset.m v24 596; ZVFHMIN-NEXT: slli a1, a2, 1 597; ZVFHMIN-NEXT: srli a2, a2, 2 598; ZVFHMIN-NEXT: sub a3, a0, a1 599; ZVFHMIN-NEXT: vsetvli a4, zero, e8, mf2, ta, ma 600; ZVFHMIN-NEXT: vslidedown.vx v0, v24, a2 601; ZVFHMIN-NEXT: sltu a2, a0, a3 602; ZVFHMIN-NEXT: addi a2, a2, -1 603; ZVFHMIN-NEXT: and a2, a2, a3 604; ZVFHMIN-NEXT: addi a3, sp, 16 605; ZVFHMIN-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill 606; ZVFHMIN-NEXT: vsetvli zero, a2, e16, m4, ta, ma 607; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20, v0.t 608; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t 609; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 610; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24, v0.t 611; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 612; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16, v0.t 613; ZVFHMIN-NEXT: bltu a0, a1, .LBB21_2 614; ZVFHMIN-NEXT: # %bb.1: 615; ZVFHMIN-NEXT: mv a0, a1 616; ZVFHMIN-NEXT: .LBB21_2: 617; ZVFHMIN-NEXT: addi a1, sp, 16 618; ZVFHMIN-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload 619; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma 620; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v24 621; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8 622; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 623; ZVFHMIN-NEXT: vfmul.vv v16, v24, v16 624; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 625; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16 626; ZVFHMIN-NEXT: csrr a0, vlenb 627; ZVFHMIN-NEXT: slli a0, a0, 3 628; ZVFHMIN-NEXT: add sp, sp, a0 629; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16 630; ZVFHMIN-NEXT: addi sp, sp, 16 631; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0 632; ZVFHMIN-NEXT: ret 633 %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) 634 ret <vscale x 32 x half> %v 635} 636 637define <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) { 638; ZVFH-LABEL: vfmul_vf_nxv32f16: 639; ZVFH: # %bb.0: 640; ZVFH-NEXT: vsetvli zero, a0, e16, m8, ta, ma 641; ZVFH-NEXT: vfmul.vf v8, v8, fa0, v0.t 642; ZVFH-NEXT: ret 643; 644; ZVFHMIN-LABEL: vfmul_vf_nxv32f16: 645; ZVFHMIN: # %bb.0: 646; ZVFHMIN-NEXT: addi sp, sp, -16 647; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16 648; ZVFHMIN-NEXT: csrr a1, vlenb 649; ZVFHMIN-NEXT: slli a1, a1, 3 650; ZVFHMIN-NEXT: mv a2, a1 651; ZVFHMIN-NEXT: slli a1, a1, 1 652; ZVFHMIN-NEXT: add a1, a1, a2 653; ZVFHMIN-NEXT: sub sp, sp, a1 654; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb 655; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m8, ta, ma 656; ZVFHMIN-NEXT: vmv1r.v v7, v0 657; ZVFHMIN-NEXT: vmv8r.v v16, v8 658; ZVFHMIN-NEXT: fmv.x.h a1, fa0 659; ZVFHMIN-NEXT: csrr a2, vlenb 660; ZVFHMIN-NEXT: vmv.v.x v8, a1 661; ZVFHMIN-NEXT: slli a1, a2, 1 662; ZVFHMIN-NEXT: srli a2, a2, 2 663; ZVFHMIN-NEXT: sub a3, a0, a1 664; ZVFHMIN-NEXT: vsetvli a4, zero, e8, mf2, ta, ma 665; ZVFHMIN-NEXT: vslidedown.vx v0, v0, a2 666; ZVFHMIN-NEXT: sltu a2, a0, a3 667; ZVFHMIN-NEXT: addi a2, a2, -1 668; ZVFHMIN-NEXT: and a2, a2, a3 669; ZVFHMIN-NEXT: csrr a3, vlenb 670; ZVFHMIN-NEXT: slli a3, a3, 3 671; ZVFHMIN-NEXT: add a3, sp, a3 672; ZVFHMIN-NEXT: addi a3, a3, 16 673; ZVFHMIN-NEXT: vs8r.v v8, (a3) # Unknown-size Folded Spill 674; ZVFHMIN-NEXT: vsetvli zero, a2, e16, m4, ta, ma 675; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12, v0.t 676; ZVFHMIN-NEXT: vmv4r.v v8, v16 677; ZVFHMIN-NEXT: csrr a2, vlenb 678; ZVFHMIN-NEXT: slli a2, a2, 4 679; ZVFHMIN-NEXT: add a2, sp, a2 680; ZVFHMIN-NEXT: addi a2, a2, 16 681; ZVFHMIN-NEXT: vs8r.v v8, (a2) # Unknown-size Folded Spill 682; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20, v0.t 683; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 684; ZVFHMIN-NEXT: vfmul.vv v24, v8, v24, v0.t 685; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 686; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v24, v0.t 687; ZVFHMIN-NEXT: bltu a0, a1, .LBB22_2 688; ZVFHMIN-NEXT: # %bb.1: 689; ZVFHMIN-NEXT: mv a0, a1 690; ZVFHMIN-NEXT: .LBB22_2: 691; ZVFHMIN-NEXT: vmv1r.v v0, v7 692; ZVFHMIN-NEXT: csrr a1, vlenb 693; ZVFHMIN-NEXT: slli a1, a1, 4 694; ZVFHMIN-NEXT: add a1, sp, a1 695; ZVFHMIN-NEXT: addi a1, a1, 16 696; ZVFHMIN-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload 697; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma 698; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v24, v0.t 699; ZVFHMIN-NEXT: addi a0, sp, 16 700; ZVFHMIN-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill 701; ZVFHMIN-NEXT: csrr a0, vlenb 702; ZVFHMIN-NEXT: slli a0, a0, 3 703; ZVFHMIN-NEXT: add a0, sp, a0 704; ZVFHMIN-NEXT: addi a0, a0, 16 705; ZVFHMIN-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload 706; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v24, v0.t 707; ZVFHMIN-NEXT: vmv8r.v v24, v16 708; ZVFHMIN-NEXT: addi a0, sp, 16 709; ZVFHMIN-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload 710; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 711; ZVFHMIN-NEXT: vfmul.vv v24, v16, v24, v0.t 712; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 713; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v24, v0.t 714; ZVFHMIN-NEXT: csrr a0, vlenb 715; ZVFHMIN-NEXT: slli a0, a0, 3 716; ZVFHMIN-NEXT: mv a1, a0 717; ZVFHMIN-NEXT: slli a0, a0, 1 718; ZVFHMIN-NEXT: add a0, a0, a1 719; ZVFHMIN-NEXT: add sp, sp, a0 720; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16 721; ZVFHMIN-NEXT: addi sp, sp, 16 722; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0 723; ZVFHMIN-NEXT: ret 724 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 725 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 726 %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) 727 ret <vscale x 32 x half> %v 728} 729 730define <vscale x 32 x half> @vfmul_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, i32 zeroext %evl) { 731; ZVFH-LABEL: vfmul_vf_nxv32f16_unmasked: 732; ZVFH: # %bb.0: 733; ZVFH-NEXT: vsetvli zero, a0, e16, m8, ta, ma 734; ZVFH-NEXT: vfmul.vf v8, v8, fa0 735; ZVFH-NEXT: ret 736; 737; ZVFHMIN-LABEL: vfmul_vf_nxv32f16_unmasked: 738; ZVFHMIN: # %bb.0: 739; ZVFHMIN-NEXT: addi sp, sp, -16 740; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16 741; ZVFHMIN-NEXT: csrr a1, vlenb 742; ZVFHMIN-NEXT: slli a1, a1, 3 743; ZVFHMIN-NEXT: sub sp, sp, a1 744; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb 745; ZVFHMIN-NEXT: fmv.x.h a1, fa0 746; ZVFHMIN-NEXT: csrr a2, vlenb 747; ZVFHMIN-NEXT: vsetvli a3, zero, e16, m8, ta, ma 748; ZVFHMIN-NEXT: vmset.m v24 749; ZVFHMIN-NEXT: vmv.v.x v16, a1 750; ZVFHMIN-NEXT: slli a1, a2, 1 751; ZVFHMIN-NEXT: srli a2, a2, 2 752; ZVFHMIN-NEXT: sub a3, a0, a1 753; ZVFHMIN-NEXT: vsetvli a4, zero, e8, mf2, ta, ma 754; ZVFHMIN-NEXT: vslidedown.vx v0, v24, a2 755; ZVFHMIN-NEXT: sltu a2, a0, a3 756; ZVFHMIN-NEXT: addi a2, a2, -1 757; ZVFHMIN-NEXT: and a2, a2, a3 758; ZVFHMIN-NEXT: addi a3, sp, 16 759; ZVFHMIN-NEXT: vs8r.v v16, (a3) # Unknown-size Folded Spill 760; ZVFHMIN-NEXT: vsetvli zero, a2, e16, m4, ta, ma 761; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20, v0.t 762; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t 763; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 764; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24, v0.t 765; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 766; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16, v0.t 767; ZVFHMIN-NEXT: bltu a0, a1, .LBB23_2 768; ZVFHMIN-NEXT: # %bb.1: 769; ZVFHMIN-NEXT: mv a0, a1 770; ZVFHMIN-NEXT: .LBB23_2: 771; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma 772; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 773; ZVFHMIN-NEXT: addi a0, sp, 16 774; ZVFHMIN-NEXT: vl8r.v v0, (a0) # Unknown-size Folded Reload 775; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v0 776; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma 777; ZVFHMIN-NEXT: vfmul.vv v16, v16, v24 778; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma 779; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16 780; ZVFHMIN-NEXT: csrr a0, vlenb 781; ZVFHMIN-NEXT: slli a0, a0, 3 782; ZVFHMIN-NEXT: add sp, sp, a0 783; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16 784; ZVFHMIN-NEXT: addi sp, sp, 16 785; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0 786; ZVFHMIN-NEXT: ret 787 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 788 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 789 %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) 790 ret <vscale x 32 x half> %v 791} 792 793declare <vscale x 1 x float> @llvm.vp.fmul.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x i1>, i32) 794 795define <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) { 796; CHECK-LABEL: vfmul_vv_nxv1f32: 797; CHECK: # %bb.0: 798; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 799; CHECK-NEXT: vfmul.vv v8, v8, v9, v0.t 800; CHECK-NEXT: ret 801 %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) 802 ret <vscale x 1 x float> %v 803} 804 805define <vscale x 1 x float> @vfmul_vv_nxv1f32_unmasked(<vscale x 1 x float> %va, <vscale x 1 x float> %b, i32 zeroext %evl) { 806; CHECK-LABEL: vfmul_vv_nxv1f32_unmasked: 807; CHECK: # %bb.0: 808; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 809; CHECK-NEXT: vfmul.vv v8, v8, v9 810; CHECK-NEXT: ret 811 %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) 812 ret <vscale x 1 x float> %v 813} 814 815define <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) { 816; CHECK-LABEL: vfmul_vf_nxv1f32: 817; CHECK: # %bb.0: 818; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 819; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t 820; CHECK-NEXT: ret 821 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 822 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 823 %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) 824 ret <vscale x 1 x float> %v 825} 826 827define <vscale x 1 x float> @vfmul_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, i32 zeroext %evl) { 828; CHECK-LABEL: vfmul_vf_nxv1f32_unmasked: 829; CHECK: # %bb.0: 830; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 831; CHECK-NEXT: vfmul.vf v8, v8, fa0 832; CHECK-NEXT: ret 833 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 834 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 835 %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) 836 ret <vscale x 1 x float> %v 837} 838 839declare <vscale x 2 x float> @llvm.vp.fmul.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i32) 840 841define <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) { 842; CHECK-LABEL: vfmul_vv_nxv2f32: 843; CHECK: # %bb.0: 844; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 845; CHECK-NEXT: vfmul.vv v8, v8, v9, v0.t 846; CHECK-NEXT: ret 847 %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) 848 ret <vscale x 2 x float> %v 849} 850 851define <vscale x 2 x float> @vfmul_vv_nxv2f32_unmasked(<vscale x 2 x float> %va, <vscale x 2 x float> %b, i32 zeroext %evl) { 852; CHECK-LABEL: vfmul_vv_nxv2f32_unmasked: 853; CHECK: # %bb.0: 854; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 855; CHECK-NEXT: vfmul.vv v8, v8, v9 856; CHECK-NEXT: ret 857 %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) 858 ret <vscale x 2 x float> %v 859} 860 861define <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) { 862; CHECK-LABEL: vfmul_vf_nxv2f32: 863; CHECK: # %bb.0: 864; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 865; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t 866; CHECK-NEXT: ret 867 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 868 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 869 %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) 870 ret <vscale x 2 x float> %v 871} 872 873define <vscale x 2 x float> @vfmul_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, i32 zeroext %evl) { 874; CHECK-LABEL: vfmul_vf_nxv2f32_unmasked: 875; CHECK: # %bb.0: 876; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 877; CHECK-NEXT: vfmul.vf v8, v8, fa0 878; CHECK-NEXT: ret 879 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 880 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 881 %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) 882 ret <vscale x 2 x float> %v 883} 884 885declare <vscale x 4 x float> @llvm.vp.fmul.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, i32) 886 887define <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) { 888; CHECK-LABEL: vfmul_vv_nxv4f32: 889; CHECK: # %bb.0: 890; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 891; CHECK-NEXT: vfmul.vv v8, v8, v10, v0.t 892; CHECK-NEXT: ret 893 %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) 894 ret <vscale x 4 x float> %v 895} 896 897define <vscale x 4 x float> @vfmul_vv_nxv4f32_unmasked(<vscale x 4 x float> %va, <vscale x 4 x float> %b, i32 zeroext %evl) { 898; CHECK-LABEL: vfmul_vv_nxv4f32_unmasked: 899; CHECK: # %bb.0: 900; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 901; CHECK-NEXT: vfmul.vv v8, v8, v10 902; CHECK-NEXT: ret 903 %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) 904 ret <vscale x 4 x float> %v 905} 906 907define <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) { 908; CHECK-LABEL: vfmul_vf_nxv4f32: 909; CHECK: # %bb.0: 910; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 911; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t 912; CHECK-NEXT: ret 913 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 914 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 915 %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) 916 ret <vscale x 4 x float> %v 917} 918 919define <vscale x 4 x float> @vfmul_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, i32 zeroext %evl) { 920; CHECK-LABEL: vfmul_vf_nxv4f32_unmasked: 921; CHECK: # %bb.0: 922; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 923; CHECK-NEXT: vfmul.vf v8, v8, fa0 924; CHECK-NEXT: ret 925 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 926 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 927 %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) 928 ret <vscale x 4 x float> %v 929} 930 931declare <vscale x 8 x float> @llvm.vp.fmul.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x i1>, i32) 932 933define <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) { 934; CHECK-LABEL: vfmul_vv_nxv8f32: 935; CHECK: # %bb.0: 936; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 937; CHECK-NEXT: vfmul.vv v8, v8, v12, v0.t 938; CHECK-NEXT: ret 939 %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) 940 ret <vscale x 8 x float> %v 941} 942 943define <vscale x 8 x float> @vfmul_vv_nxv8f32_unmasked(<vscale x 8 x float> %va, <vscale x 8 x float> %b, i32 zeroext %evl) { 944; CHECK-LABEL: vfmul_vv_nxv8f32_unmasked: 945; CHECK: # %bb.0: 946; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 947; CHECK-NEXT: vfmul.vv v8, v8, v12 948; CHECK-NEXT: ret 949 %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) 950 ret <vscale x 8 x float> %v 951} 952 953define <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) { 954; CHECK-LABEL: vfmul_vf_nxv8f32: 955; CHECK: # %bb.0: 956; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 957; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t 958; CHECK-NEXT: ret 959 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 960 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 961 %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) 962 ret <vscale x 8 x float> %v 963} 964 965define <vscale x 8 x float> @vfmul_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, i32 zeroext %evl) { 966; CHECK-LABEL: vfmul_vf_nxv8f32_unmasked: 967; CHECK: # %bb.0: 968; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 969; CHECK-NEXT: vfmul.vf v8, v8, fa0 970; CHECK-NEXT: ret 971 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 972 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 973 %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) 974 ret <vscale x 8 x float> %v 975} 976 977declare <vscale x 16 x float> @llvm.vp.fmul.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x i1>, i32) 978 979define <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) { 980; CHECK-LABEL: vfmul_vv_nxv16f32: 981; CHECK: # %bb.0: 982; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 983; CHECK-NEXT: vfmul.vv v8, v8, v16, v0.t 984; CHECK-NEXT: ret 985 %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) 986 ret <vscale x 16 x float> %v 987} 988 989define <vscale x 16 x float> @vfmul_vv_nxv16f32_unmasked(<vscale x 16 x float> %va, <vscale x 16 x float> %b, i32 zeroext %evl) { 990; CHECK-LABEL: vfmul_vv_nxv16f32_unmasked: 991; CHECK: # %bb.0: 992; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 993; CHECK-NEXT: vfmul.vv v8, v8, v16 994; CHECK-NEXT: ret 995 %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) 996 ret <vscale x 16 x float> %v 997} 998 999define <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) { 1000; CHECK-LABEL: vfmul_vf_nxv16f32: 1001; CHECK: # %bb.0: 1002; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1003; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t 1004; CHECK-NEXT: ret 1005 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 1006 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 1007 %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) 1008 ret <vscale x 16 x float> %v 1009} 1010 1011define <vscale x 16 x float> @vfmul_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, i32 zeroext %evl) { 1012; CHECK-LABEL: vfmul_vf_nxv16f32_unmasked: 1013; CHECK: # %bb.0: 1014; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1015; CHECK-NEXT: vfmul.vf v8, v8, fa0 1016; CHECK-NEXT: ret 1017 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 1018 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 1019 %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) 1020 ret <vscale x 16 x float> %v 1021} 1022 1023declare <vscale x 1 x double> @llvm.vp.fmul.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x i1>, i32) 1024 1025define <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) { 1026; CHECK-LABEL: vfmul_vv_nxv1f64: 1027; CHECK: # %bb.0: 1028; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1029; CHECK-NEXT: vfmul.vv v8, v8, v9, v0.t 1030; CHECK-NEXT: ret 1031 %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) 1032 ret <vscale x 1 x double> %v 1033} 1034 1035define <vscale x 1 x double> @vfmul_vv_nxv1f64_unmasked(<vscale x 1 x double> %va, <vscale x 1 x double> %b, i32 zeroext %evl) { 1036; CHECK-LABEL: vfmul_vv_nxv1f64_unmasked: 1037; CHECK: # %bb.0: 1038; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1039; CHECK-NEXT: vfmul.vv v8, v8, v9 1040; CHECK-NEXT: ret 1041 %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) 1042 ret <vscale x 1 x double> %v 1043} 1044 1045define <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) { 1046; CHECK-LABEL: vfmul_vf_nxv1f64: 1047; CHECK: # %bb.0: 1048; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1049; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t 1050; CHECK-NEXT: ret 1051 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 1052 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 1053 %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) 1054 ret <vscale x 1 x double> %v 1055} 1056 1057define <vscale x 1 x double> @vfmul_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, i32 zeroext %evl) { 1058; CHECK-LABEL: vfmul_vf_nxv1f64_unmasked: 1059; CHECK: # %bb.0: 1060; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1061; CHECK-NEXT: vfmul.vf v8, v8, fa0 1062; CHECK-NEXT: ret 1063 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 1064 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 1065 %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) 1066 ret <vscale x 1 x double> %v 1067} 1068 1069declare <vscale x 2 x double> @llvm.vp.fmul.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, i32) 1070 1071define <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) { 1072; CHECK-LABEL: vfmul_vv_nxv2f64: 1073; CHECK: # %bb.0: 1074; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1075; CHECK-NEXT: vfmul.vv v8, v8, v10, v0.t 1076; CHECK-NEXT: ret 1077 %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) 1078 ret <vscale x 2 x double> %v 1079} 1080 1081define <vscale x 2 x double> @vfmul_vv_nxv2f64_unmasked(<vscale x 2 x double> %va, <vscale x 2 x double> %b, i32 zeroext %evl) { 1082; CHECK-LABEL: vfmul_vv_nxv2f64_unmasked: 1083; CHECK: # %bb.0: 1084; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1085; CHECK-NEXT: vfmul.vv v8, v8, v10 1086; CHECK-NEXT: ret 1087 %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) 1088 ret <vscale x 2 x double> %v 1089} 1090 1091define <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) { 1092; CHECK-LABEL: vfmul_vf_nxv2f64: 1093; CHECK: # %bb.0: 1094; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1095; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t 1096; CHECK-NEXT: ret 1097 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 1098 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 1099 %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) 1100 ret <vscale x 2 x double> %v 1101} 1102 1103define <vscale x 2 x double> @vfmul_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, i32 zeroext %evl) { 1104; CHECK-LABEL: vfmul_vf_nxv2f64_unmasked: 1105; CHECK: # %bb.0: 1106; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1107; CHECK-NEXT: vfmul.vf v8, v8, fa0 1108; CHECK-NEXT: ret 1109 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 1110 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 1111 %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) 1112 ret <vscale x 2 x double> %v 1113} 1114 1115declare <vscale x 4 x double> @llvm.vp.fmul.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x i1>, i32) 1116 1117define <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) { 1118; CHECK-LABEL: vfmul_vv_nxv4f64: 1119; CHECK: # %bb.0: 1120; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1121; CHECK-NEXT: vfmul.vv v8, v8, v12, v0.t 1122; CHECK-NEXT: ret 1123 %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) 1124 ret <vscale x 4 x double> %v 1125} 1126 1127define <vscale x 4 x double> @vfmul_vv_nxv4f64_unmasked(<vscale x 4 x double> %va, <vscale x 4 x double> %b, i32 zeroext %evl) { 1128; CHECK-LABEL: vfmul_vv_nxv4f64_unmasked: 1129; CHECK: # %bb.0: 1130; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1131; CHECK-NEXT: vfmul.vv v8, v8, v12 1132; CHECK-NEXT: ret 1133 %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) 1134 ret <vscale x 4 x double> %v 1135} 1136 1137define <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) { 1138; CHECK-LABEL: vfmul_vf_nxv4f64: 1139; CHECK: # %bb.0: 1140; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1141; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t 1142; CHECK-NEXT: ret 1143 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 1144 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 1145 %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) 1146 ret <vscale x 4 x double> %v 1147} 1148 1149define <vscale x 4 x double> @vfmul_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, i32 zeroext %evl) { 1150; CHECK-LABEL: vfmul_vf_nxv4f64_unmasked: 1151; CHECK: # %bb.0: 1152; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1153; CHECK-NEXT: vfmul.vf v8, v8, fa0 1154; CHECK-NEXT: ret 1155 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 1156 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 1157 %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) 1158 ret <vscale x 4 x double> %v 1159} 1160 1161declare <vscale x 7 x double> @llvm.vp.fmul.nxv7f64(<vscale x 7 x double>, <vscale x 7 x double>, <vscale x 7 x i1>, i32) 1162 1163define <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) { 1164; CHECK-LABEL: vfmul_vv_nxv7f64: 1165; CHECK: # %bb.0: 1166; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1167; CHECK-NEXT: vfmul.vv v8, v8, v16, v0.t 1168; CHECK-NEXT: ret 1169 %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) 1170 ret <vscale x 7 x double> %v 1171} 1172 1173declare <vscale x 8 x double> @llvm.vp.fmul.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x i1>, i32) 1174 1175define <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) { 1176; CHECK-LABEL: vfmul_vv_nxv8f64: 1177; CHECK: # %bb.0: 1178; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1179; CHECK-NEXT: vfmul.vv v8, v8, v16, v0.t 1180; CHECK-NEXT: ret 1181 %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) 1182 ret <vscale x 8 x double> %v 1183} 1184 1185define <vscale x 8 x double> @vfmul_vv_nxv8f64_unmasked(<vscale x 8 x double> %va, <vscale x 8 x double> %b, i32 zeroext %evl) { 1186; CHECK-LABEL: vfmul_vv_nxv8f64_unmasked: 1187; CHECK: # %bb.0: 1188; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1189; CHECK-NEXT: vfmul.vv v8, v8, v16 1190; CHECK-NEXT: ret 1191 %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) 1192 ret <vscale x 8 x double> %v 1193} 1194 1195define <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) { 1196; CHECK-LABEL: vfmul_vf_nxv8f64: 1197; CHECK: # %bb.0: 1198; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1199; CHECK-NEXT: vfmul.vf v8, v8, fa0, v0.t 1200; CHECK-NEXT: ret 1201 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 1202 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 1203 %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) 1204 ret <vscale x 8 x double> %v 1205} 1206 1207define <vscale x 8 x double> @vfmul_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, i32 zeroext %evl) { 1208; CHECK-LABEL: vfmul_vf_nxv8f64_unmasked: 1209; CHECK: # %bb.0: 1210; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1211; CHECK-NEXT: vfmul.vf v8, v8, fa0 1212; CHECK-NEXT: ret 1213 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 1214 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 1215 %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) 1216 ret <vscale x 8 x double> %v 1217} 1218