1406 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \3; RUN: | FileCheck %s --check-prefixes=CHECK,RV324; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \5; RUN: | FileCheck %s --check-prefixes=CHECK,RV646 7define <vscale x 8 x i7> @vmul_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {8; CHECK-LABEL: vmul_vx_nxv8i7:9; CHECK: # %bb.0:10; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma11; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t12; CHECK-NEXT: ret13 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 014 %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer15 %v = call <vscale x 8 x i7> @llvm.vp.mul.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)16 ret <vscale x 8 x i7> %v17}18 19define <vscale x 1 x i8> @vmul_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {20; CHECK-LABEL: vmul_vv_nxv1i8:21; CHECK: # %bb.0:22; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma23; CHECK-NEXT: vmul.vv v8, v8, v9, v0.t24; CHECK-NEXT: ret25 %v = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)26 ret <vscale x 1 x i8> %v27}28 29define <vscale x 1 x i8> @vmul_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {30; CHECK-LABEL: vmul_vv_nxv1i8_unmasked:31; CHECK: # %bb.0:32; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma33; CHECK-NEXT: vmul.vv v8, v8, v934; CHECK-NEXT: ret35 %v = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)36 ret <vscale x 1 x i8> %v37}38 39define <vscale x 1 x i8> @vmul_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {40; CHECK-LABEL: vmul_vx_nxv1i8:41; CHECK: # %bb.0:42; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma43; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t44; CHECK-NEXT: ret45 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 046 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer47 %v = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)48 ret <vscale x 1 x i8> %v49}50 51define <vscale x 1 x i8> @vmul_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {52; CHECK-LABEL: vmul_vx_nxv1i8_unmasked:53; CHECK: # %bb.0:54; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma55; CHECK-NEXT: vmul.vx v8, v8, a056; CHECK-NEXT: ret57 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 058 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer59 %v = call <vscale x 1 x i8> @llvm.vp.mul.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)60 ret <vscale x 1 x i8> %v61}62 63define <vscale x 2 x i8> @vmul_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {64; CHECK-LABEL: vmul_vv_nxv2i8:65; CHECK: # %bb.0:66; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma67; CHECK-NEXT: vmul.vv v8, v8, v9, v0.t68; CHECK-NEXT: ret69 %v = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)70 ret <vscale x 2 x i8> %v71}72 73define <vscale x 2 x i8> @vmul_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {74; CHECK-LABEL: vmul_vv_nxv2i8_unmasked:75; CHECK: # %bb.0:76; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma77; CHECK-NEXT: vmul.vv v8, v8, v978; CHECK-NEXT: ret79 %v = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)80 ret <vscale x 2 x i8> %v81}82 83define <vscale x 2 x i8> @vmul_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {84; CHECK-LABEL: vmul_vx_nxv2i8:85; CHECK: # %bb.0:86; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma87; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t88; CHECK-NEXT: ret89 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 090 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer91 %v = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)92 ret <vscale x 2 x i8> %v93}94 95define <vscale x 2 x i8> @vmul_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {96; CHECK-LABEL: vmul_vx_nxv2i8_unmasked:97; CHECK: # %bb.0:98; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma99; CHECK-NEXT: vmul.vx v8, v8, a0100; CHECK-NEXT: ret101 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0102 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer103 %v = call <vscale x 2 x i8> @llvm.vp.mul.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)104 ret <vscale x 2 x i8> %v105}106 107define <vscale x 4 x i8> @vmul_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {108; CHECK-LABEL: vmul_vv_nxv4i8:109; CHECK: # %bb.0:110; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma111; CHECK-NEXT: vmul.vv v8, v8, v9, v0.t112; CHECK-NEXT: ret113 %v = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)114 ret <vscale x 4 x i8> %v115}116 117define <vscale x 4 x i8> @vmul_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {118; CHECK-LABEL: vmul_vv_nxv4i8_unmasked:119; CHECK: # %bb.0:120; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma121; CHECK-NEXT: vmul.vv v8, v8, v9122; CHECK-NEXT: ret123 %v = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)124 ret <vscale x 4 x i8> %v125}126 127define <vscale x 4 x i8> @vmul_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {128; CHECK-LABEL: vmul_vx_nxv4i8:129; CHECK: # %bb.0:130; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma131; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t132; CHECK-NEXT: ret133 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0134 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer135 %v = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)136 ret <vscale x 4 x i8> %v137}138 139define <vscale x 4 x i8> @vmul_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {140; CHECK-LABEL: vmul_vx_nxv4i8_unmasked:141; CHECK: # %bb.0:142; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma143; CHECK-NEXT: vmul.vx v8, v8, a0144; CHECK-NEXT: ret145 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0146 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer147 %v = call <vscale x 4 x i8> @llvm.vp.mul.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)148 ret <vscale x 4 x i8> %v149}150 151define <vscale x 8 x i8> @vmul_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {152; CHECK-LABEL: vmul_vv_nxv8i8:153; CHECK: # %bb.0:154; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma155; CHECK-NEXT: vmul.vv v8, v8, v9, v0.t156; CHECK-NEXT: ret157 %v = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)158 ret <vscale x 8 x i8> %v159}160 161define <vscale x 8 x i8> @vmul_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {162; CHECK-LABEL: vmul_vv_nxv8i8_unmasked:163; CHECK: # %bb.0:164; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma165; CHECK-NEXT: vmul.vv v8, v8, v9166; CHECK-NEXT: ret167 %v = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)168 ret <vscale x 8 x i8> %v169}170 171define <vscale x 8 x i8> @vmul_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {172; CHECK-LABEL: vmul_vx_nxv8i8:173; CHECK: # %bb.0:174; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma175; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t176; CHECK-NEXT: ret177 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0178 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer179 %v = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)180 ret <vscale x 8 x i8> %v181}182 183define <vscale x 8 x i8> @vmul_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {184; CHECK-LABEL: vmul_vx_nxv8i8_unmasked:185; CHECK: # %bb.0:186; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma187; CHECK-NEXT: vmul.vx v8, v8, a0188; CHECK-NEXT: ret189 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0190 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer191 %v = call <vscale x 8 x i8> @llvm.vp.mul.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)192 ret <vscale x 8 x i8> %v193}194 195define <vscale x 16 x i8> @vmul_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {196; CHECK-LABEL: vmul_vv_nxv16i8:197; CHECK: # %bb.0:198; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma199; CHECK-NEXT: vmul.vv v8, v8, v10, v0.t200; CHECK-NEXT: ret201 %v = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)202 ret <vscale x 16 x i8> %v203}204 205define <vscale x 16 x i8> @vmul_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {206; CHECK-LABEL: vmul_vv_nxv16i8_unmasked:207; CHECK: # %bb.0:208; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma209; CHECK-NEXT: vmul.vv v8, v8, v10210; CHECK-NEXT: ret211 %v = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)212 ret <vscale x 16 x i8> %v213}214 215define <vscale x 16 x i8> @vmul_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {216; CHECK-LABEL: vmul_vx_nxv16i8:217; CHECK: # %bb.0:218; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma219; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t220; CHECK-NEXT: ret221 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0222 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer223 %v = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)224 ret <vscale x 16 x i8> %v225}226 227define <vscale x 16 x i8> @vmul_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {228; CHECK-LABEL: vmul_vx_nxv16i8_unmasked:229; CHECK: # %bb.0:230; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma231; CHECK-NEXT: vmul.vx v8, v8, a0232; CHECK-NEXT: ret233 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0234 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer235 %v = call <vscale x 16 x i8> @llvm.vp.mul.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)236 ret <vscale x 16 x i8> %v237}238 239define <vscale x 32 x i8> @vmul_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {240; CHECK-LABEL: vmul_vv_nxv32i8:241; CHECK: # %bb.0:242; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma243; CHECK-NEXT: vmul.vv v8, v8, v12, v0.t244; CHECK-NEXT: ret245 %v = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)246 ret <vscale x 32 x i8> %v247}248 249define <vscale x 32 x i8> @vmul_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {250; CHECK-LABEL: vmul_vv_nxv32i8_unmasked:251; CHECK: # %bb.0:252; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma253; CHECK-NEXT: vmul.vv v8, v8, v12254; CHECK-NEXT: ret255 %v = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)256 ret <vscale x 32 x i8> %v257}258 259define <vscale x 32 x i8> @vmul_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {260; CHECK-LABEL: vmul_vx_nxv32i8:261; CHECK: # %bb.0:262; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma263; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t264; CHECK-NEXT: ret265 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0266 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer267 %v = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)268 ret <vscale x 32 x i8> %v269}270 271define <vscale x 32 x i8> @vmul_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {272; CHECK-LABEL: vmul_vx_nxv32i8_unmasked:273; CHECK: # %bb.0:274; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma275; CHECK-NEXT: vmul.vx v8, v8, a0276; CHECK-NEXT: ret277 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0278 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer279 %v = call <vscale x 32 x i8> @llvm.vp.mul.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)280 ret <vscale x 32 x i8> %v281}282 283define <vscale x 64 x i8> @vmul_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {284; CHECK-LABEL: vmul_vv_nxv64i8:285; CHECK: # %bb.0:286; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma287; CHECK-NEXT: vmul.vv v8, v8, v16, v0.t288; CHECK-NEXT: ret289 %v = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)290 ret <vscale x 64 x i8> %v291}292 293define <vscale x 64 x i8> @vmul_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {294; CHECK-LABEL: vmul_vv_nxv64i8_unmasked:295; CHECK: # %bb.0:296; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma297; CHECK-NEXT: vmul.vv v8, v8, v16298; CHECK-NEXT: ret299 %v = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)300 ret <vscale x 64 x i8> %v301}302 303define <vscale x 64 x i8> @vmul_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {304; CHECK-LABEL: vmul_vx_nxv64i8:305; CHECK: # %bb.0:306; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma307; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t308; CHECK-NEXT: ret309 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0310 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer311 %v = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)312 ret <vscale x 64 x i8> %v313}314 315define <vscale x 64 x i8> @vmul_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {316; CHECK-LABEL: vmul_vx_nxv64i8_unmasked:317; CHECK: # %bb.0:318; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma319; CHECK-NEXT: vmul.vx v8, v8, a0320; CHECK-NEXT: ret321 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0322 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer323 %v = call <vscale x 64 x i8> @llvm.vp.mul.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)324 ret <vscale x 64 x i8> %v325}326 327define <vscale x 1 x i16> @vmul_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {328; CHECK-LABEL: vmul_vv_nxv1i16:329; CHECK: # %bb.0:330; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma331; CHECK-NEXT: vmul.vv v8, v8, v9, v0.t332; CHECK-NEXT: ret333 %v = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)334 ret <vscale x 1 x i16> %v335}336 337define <vscale x 1 x i16> @vmul_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {338; CHECK-LABEL: vmul_vv_nxv1i16_unmasked:339; CHECK: # %bb.0:340; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma341; CHECK-NEXT: vmul.vv v8, v8, v9342; CHECK-NEXT: ret343 %v = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)344 ret <vscale x 1 x i16> %v345}346 347define <vscale x 1 x i16> @vmul_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {348; CHECK-LABEL: vmul_vx_nxv1i16:349; CHECK: # %bb.0:350; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma351; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t352; CHECK-NEXT: ret353 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0354 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer355 %v = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)356 ret <vscale x 1 x i16> %v357}358 359define <vscale x 1 x i16> @vmul_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {360; CHECK-LABEL: vmul_vx_nxv1i16_unmasked:361; CHECK: # %bb.0:362; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma363; CHECK-NEXT: vmul.vx v8, v8, a0364; CHECK-NEXT: ret365 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0366 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer367 %v = call <vscale x 1 x i16> @llvm.vp.mul.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)368 ret <vscale x 1 x i16> %v369}370 371define <vscale x 2 x i16> @vmul_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {372; CHECK-LABEL: vmul_vv_nxv2i16:373; CHECK: # %bb.0:374; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma375; CHECK-NEXT: vmul.vv v8, v8, v9, v0.t376; CHECK-NEXT: ret377 %v = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)378 ret <vscale x 2 x i16> %v379}380 381define <vscale x 2 x i16> @vmul_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {382; CHECK-LABEL: vmul_vv_nxv2i16_unmasked:383; CHECK: # %bb.0:384; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma385; CHECK-NEXT: vmul.vv v8, v8, v9386; CHECK-NEXT: ret387 %v = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)388 ret <vscale x 2 x i16> %v389}390 391define <vscale x 2 x i16> @vmul_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {392; CHECK-LABEL: vmul_vx_nxv2i16:393; CHECK: # %bb.0:394; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma395; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t396; CHECK-NEXT: ret397 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0398 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer399 %v = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)400 ret <vscale x 2 x i16> %v401}402 403define <vscale x 2 x i16> @vmul_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {404; CHECK-LABEL: vmul_vx_nxv2i16_unmasked:405; CHECK: # %bb.0:406; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma407; CHECK-NEXT: vmul.vx v8, v8, a0408; CHECK-NEXT: ret409 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0410 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer411 %v = call <vscale x 2 x i16> @llvm.vp.mul.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)412 ret <vscale x 2 x i16> %v413}414 415define <vscale x 4 x i16> @vmul_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {416; CHECK-LABEL: vmul_vv_nxv4i16:417; CHECK: # %bb.0:418; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma419; CHECK-NEXT: vmul.vv v8, v8, v9, v0.t420; CHECK-NEXT: ret421 %v = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)422 ret <vscale x 4 x i16> %v423}424 425define <vscale x 4 x i16> @vmul_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {426; CHECK-LABEL: vmul_vv_nxv4i16_unmasked:427; CHECK: # %bb.0:428; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma429; CHECK-NEXT: vmul.vv v8, v8, v9430; CHECK-NEXT: ret431 %v = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)432 ret <vscale x 4 x i16> %v433}434 435define <vscale x 4 x i16> @vmul_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {436; CHECK-LABEL: vmul_vx_nxv4i16:437; CHECK: # %bb.0:438; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma439; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t440; CHECK-NEXT: ret441 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0442 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer443 %v = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)444 ret <vscale x 4 x i16> %v445}446 447define <vscale x 4 x i16> @vmul_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {448; CHECK-LABEL: vmul_vx_nxv4i16_unmasked:449; CHECK: # %bb.0:450; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma451; CHECK-NEXT: vmul.vx v8, v8, a0452; CHECK-NEXT: ret453 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0454 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer455 %v = call <vscale x 4 x i16> @llvm.vp.mul.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)456 ret <vscale x 4 x i16> %v457}458 459define <vscale x 8 x i16> @vmul_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {460; CHECK-LABEL: vmul_vv_nxv8i16:461; CHECK: # %bb.0:462; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma463; CHECK-NEXT: vmul.vv v8, v8, v10, v0.t464; CHECK-NEXT: ret465 %v = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)466 ret <vscale x 8 x i16> %v467}468 469define <vscale x 8 x i16> @vmul_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {470; CHECK-LABEL: vmul_vv_nxv8i16_unmasked:471; CHECK: # %bb.0:472; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma473; CHECK-NEXT: vmul.vv v8, v8, v10474; CHECK-NEXT: ret475 %v = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)476 ret <vscale x 8 x i16> %v477}478 479define <vscale x 8 x i16> @vmul_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {480; CHECK-LABEL: vmul_vx_nxv8i16:481; CHECK: # %bb.0:482; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma483; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t484; CHECK-NEXT: ret485 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0486 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer487 %v = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)488 ret <vscale x 8 x i16> %v489}490 491define <vscale x 8 x i16> @vmul_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {492; CHECK-LABEL: vmul_vx_nxv8i16_unmasked:493; CHECK: # %bb.0:494; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma495; CHECK-NEXT: vmul.vx v8, v8, a0496; CHECK-NEXT: ret497 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0498 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer499 %v = call <vscale x 8 x i16> @llvm.vp.mul.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)500 ret <vscale x 8 x i16> %v501}502 503define <vscale x 16 x i16> @vmul_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {504; CHECK-LABEL: vmul_vv_nxv16i16:505; CHECK: # %bb.0:506; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma507; CHECK-NEXT: vmul.vv v8, v8, v12, v0.t508; CHECK-NEXT: ret509 %v = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)510 ret <vscale x 16 x i16> %v511}512 513define <vscale x 16 x i16> @vmul_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {514; CHECK-LABEL: vmul_vv_nxv16i16_unmasked:515; CHECK: # %bb.0:516; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma517; CHECK-NEXT: vmul.vv v8, v8, v12518; CHECK-NEXT: ret519 %v = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)520 ret <vscale x 16 x i16> %v521}522 523define <vscale x 16 x i16> @vmul_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {524; CHECK-LABEL: vmul_vx_nxv16i16:525; CHECK: # %bb.0:526; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma527; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t528; CHECK-NEXT: ret529 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0530 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer531 %v = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)532 ret <vscale x 16 x i16> %v533}534 535define <vscale x 16 x i16> @vmul_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {536; CHECK-LABEL: vmul_vx_nxv16i16_unmasked:537; CHECK: # %bb.0:538; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma539; CHECK-NEXT: vmul.vx v8, v8, a0540; CHECK-NEXT: ret541 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0542 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer543 %v = call <vscale x 16 x i16> @llvm.vp.mul.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)544 ret <vscale x 16 x i16> %v545}546 547define <vscale x 32 x i16> @vmul_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {548; CHECK-LABEL: vmul_vv_nxv32i16:549; CHECK: # %bb.0:550; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma551; CHECK-NEXT: vmul.vv v8, v8, v16, v0.t552; CHECK-NEXT: ret553 %v = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)554 ret <vscale x 32 x i16> %v555}556 557define <vscale x 32 x i16> @vmul_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {558; CHECK-LABEL: vmul_vv_nxv32i16_unmasked:559; CHECK: # %bb.0:560; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma561; CHECK-NEXT: vmul.vv v8, v8, v16562; CHECK-NEXT: ret563 %v = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)564 ret <vscale x 32 x i16> %v565}566 567define <vscale x 32 x i16> @vmul_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {568; CHECK-LABEL: vmul_vx_nxv32i16:569; CHECK: # %bb.0:570; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma571; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t572; CHECK-NEXT: ret573 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0574 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer575 %v = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)576 ret <vscale x 32 x i16> %v577}578 579define <vscale x 32 x i16> @vmul_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {580; CHECK-LABEL: vmul_vx_nxv32i16_unmasked:581; CHECK: # %bb.0:582; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma583; CHECK-NEXT: vmul.vx v8, v8, a0584; CHECK-NEXT: ret585 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0586 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer587 %v = call <vscale x 32 x i16> @llvm.vp.mul.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)588 ret <vscale x 32 x i16> %v589}590 591define <vscale x 1 x i32> @vmul_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {592; CHECK-LABEL: vmul_vv_nxv1i32:593; CHECK: # %bb.0:594; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma595; CHECK-NEXT: vmul.vv v8, v8, v9, v0.t596; CHECK-NEXT: ret597 %v = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)598 ret <vscale x 1 x i32> %v599}600 601define <vscale x 1 x i32> @vmul_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {602; CHECK-LABEL: vmul_vv_nxv1i32_unmasked:603; CHECK: # %bb.0:604; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma605; CHECK-NEXT: vmul.vv v8, v8, v9606; CHECK-NEXT: ret607 %v = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)608 ret <vscale x 1 x i32> %v609}610 611define <vscale x 1 x i32> @vmul_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {612; CHECK-LABEL: vmul_vx_nxv1i32:613; CHECK: # %bb.0:614; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma615; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t616; CHECK-NEXT: ret617 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0618 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer619 %v = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)620 ret <vscale x 1 x i32> %v621}622 623define <vscale x 1 x i32> @vmul_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {624; CHECK-LABEL: vmul_vx_nxv1i32_unmasked:625; CHECK: # %bb.0:626; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma627; CHECK-NEXT: vmul.vx v8, v8, a0628; CHECK-NEXT: ret629 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0630 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer631 %v = call <vscale x 1 x i32> @llvm.vp.mul.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)632 ret <vscale x 1 x i32> %v633}634 635define <vscale x 2 x i32> @vmul_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {636; CHECK-LABEL: vmul_vv_nxv2i32:637; CHECK: # %bb.0:638; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma639; CHECK-NEXT: vmul.vv v8, v8, v9, v0.t640; CHECK-NEXT: ret641 %v = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)642 ret <vscale x 2 x i32> %v643}644 645define <vscale x 2 x i32> @vmul_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {646; CHECK-LABEL: vmul_vv_nxv2i32_unmasked:647; CHECK: # %bb.0:648; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma649; CHECK-NEXT: vmul.vv v8, v8, v9650; CHECK-NEXT: ret651 %v = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)652 ret <vscale x 2 x i32> %v653}654 655define <vscale x 2 x i32> @vmul_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {656; CHECK-LABEL: vmul_vx_nxv2i32:657; CHECK: # %bb.0:658; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma659; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t660; CHECK-NEXT: ret661 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0662 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer663 %v = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)664 ret <vscale x 2 x i32> %v665}666 667define <vscale x 2 x i32> @vmul_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {668; CHECK-LABEL: vmul_vx_nxv2i32_unmasked:669; CHECK: # %bb.0:670; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma671; CHECK-NEXT: vmul.vx v8, v8, a0672; CHECK-NEXT: ret673 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0674 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer675 %v = call <vscale x 2 x i32> @llvm.vp.mul.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)676 ret <vscale x 2 x i32> %v677}678 679define <vscale x 4 x i32> @vmul_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {680; CHECK-LABEL: vmul_vv_nxv4i32:681; CHECK: # %bb.0:682; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma683; CHECK-NEXT: vmul.vv v8, v8, v10, v0.t684; CHECK-NEXT: ret685 %v = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)686 ret <vscale x 4 x i32> %v687}688 689define <vscale x 4 x i32> @vmul_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {690; CHECK-LABEL: vmul_vv_nxv4i32_unmasked:691; CHECK: # %bb.0:692; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma693; CHECK-NEXT: vmul.vv v8, v8, v10694; CHECK-NEXT: ret695 %v = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)696 ret <vscale x 4 x i32> %v697}698 699define <vscale x 4 x i32> @vmul_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {700; CHECK-LABEL: vmul_vx_nxv4i32:701; CHECK: # %bb.0:702; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma703; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t704; CHECK-NEXT: ret705 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0706 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer707 %v = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)708 ret <vscale x 4 x i32> %v709}710 711define <vscale x 4 x i32> @vmul_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {712; CHECK-LABEL: vmul_vx_nxv4i32_unmasked:713; CHECK: # %bb.0:714; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma715; CHECK-NEXT: vmul.vx v8, v8, a0716; CHECK-NEXT: ret717 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0718 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer719 %v = call <vscale x 4 x i32> @llvm.vp.mul.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)720 ret <vscale x 4 x i32> %v721}722 723define <vscale x 7 x i32> @vmul_vv_nxv7i32(<vscale x 7 x i32> %va, <vscale x 7 x i32> %b, <vscale x 7 x i1> %m, i32 zeroext %evl) {724; CHECK-LABEL: vmul_vv_nxv7i32:725; CHECK: # %bb.0:726; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma727; CHECK-NEXT: vmul.vv v8, v8, v12, v0.t728; CHECK-NEXT: ret729 %v = call <vscale x 7 x i32> @llvm.vp.mul.nxv7i32(<vscale x 7 x i32> %va, <vscale x 7 x i32> %b, <vscale x 7 x i1> %m, i32 %evl)730 ret <vscale x 7 x i32> %v731}732 733define <vscale x 7 x i32> @vmul_vv_nxv7i32_unmasked(<vscale x 7 x i32> %va, <vscale x 7 x i32> %b, i32 zeroext %evl) {734; CHECK-LABEL: vmul_vv_nxv7i32_unmasked:735; CHECK: # %bb.0:736; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma737; CHECK-NEXT: vmul.vv v8, v8, v12738; CHECK-NEXT: ret739 %v = call <vscale x 7 x i32> @llvm.vp.mul.nxv7i32(<vscale x 7 x i32> %va, <vscale x 7 x i32> %b, <vscale x 7 x i1> splat (i1 true), i32 %evl)740 ret <vscale x 7 x i32> %v741}742 743define <vscale x 7 x i32> @vmul_vx_nxv7i32(<vscale x 7 x i32> %va, i32 %b, <vscale x 7 x i1> %m, i32 zeroext %evl) {744; CHECK-LABEL: vmul_vx_nxv7i32:745; CHECK: # %bb.0:746; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma747; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t748; CHECK-NEXT: ret749 %elt.head = insertelement <vscale x 7 x i32> poison, i32 %b, i32 0750 %vb = shufflevector <vscale x 7 x i32> %elt.head, <vscale x 7 x i32> poison, <vscale x 7 x i32> zeroinitializer751 %v = call <vscale x 7 x i32> @llvm.vp.mul.nxv7i32(<vscale x 7 x i32> %va, <vscale x 7 x i32> %vb, <vscale x 7 x i1> %m, i32 %evl)752 ret <vscale x 7 x i32> %v753}754 755define <vscale x 7 x i32> @vmul_vx_nxv7i32_unmasked(<vscale x 7 x i32> %va, i32 %b, i32 zeroext %evl) {756; CHECK-LABEL: vmul_vx_nxv7i32_unmasked:757; CHECK: # %bb.0:758; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma759; CHECK-NEXT: vmul.vx v8, v8, a0760; CHECK-NEXT: ret761 %elt.head = insertelement <vscale x 7 x i32> poison, i32 %b, i32 0762 %vb = shufflevector <vscale x 7 x i32> %elt.head, <vscale x 7 x i32> poison, <vscale x 7 x i32> zeroinitializer763 %v = call <vscale x 7 x i32> @llvm.vp.mul.nxv7i32(<vscale x 7 x i32> %va, <vscale x 7 x i32> %vb, <vscale x 7 x i1> splat (i1 true), i32 %evl)764 ret <vscale x 7 x i32> %v765}766 767define <vscale x 8 x i32> @vmul_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {768; CHECK-LABEL: vmul_vv_nxv8i32:769; CHECK: # %bb.0:770; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma771; CHECK-NEXT: vmul.vv v8, v8, v12, v0.t772; CHECK-NEXT: ret773 %v = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)774 ret <vscale x 8 x i32> %v775}776 777define <vscale x 8 x i32> @vmul_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {778; CHECK-LABEL: vmul_vv_nxv8i32_unmasked:779; CHECK: # %bb.0:780; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma781; CHECK-NEXT: vmul.vv v8, v8, v12782; CHECK-NEXT: ret783 %v = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)784 ret <vscale x 8 x i32> %v785}786 787define <vscale x 8 x i32> @vmul_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {788; CHECK-LABEL: vmul_vx_nxv8i32:789; CHECK: # %bb.0:790; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma791; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t792; CHECK-NEXT: ret793 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0794 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer795 %v = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)796 ret <vscale x 8 x i32> %v797}798 799define <vscale x 8 x i32> @vmul_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {800; CHECK-LABEL: vmul_vx_nxv8i32_unmasked:801; CHECK: # %bb.0:802; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma803; CHECK-NEXT: vmul.vx v8, v8, a0804; CHECK-NEXT: ret805 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0806 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer807 %v = call <vscale x 8 x i32> @llvm.vp.mul.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)808 ret <vscale x 8 x i32> %v809}810 811define <vscale x 16 x i32> @vmul_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {812; CHECK-LABEL: vmul_vv_nxv16i32:813; CHECK: # %bb.0:814; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma815; CHECK-NEXT: vmul.vv v8, v8, v16, v0.t816; CHECK-NEXT: ret817 %v = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)818 ret <vscale x 16 x i32> %v819}820 821define <vscale x 16 x i32> @vmul_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {822; CHECK-LABEL: vmul_vv_nxv16i32_unmasked:823; CHECK: # %bb.0:824; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma825; CHECK-NEXT: vmul.vv v8, v8, v16826; CHECK-NEXT: ret827 %v = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)828 ret <vscale x 16 x i32> %v829}830 831define <vscale x 16 x i32> @vmul_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {832; CHECK-LABEL: vmul_vx_nxv16i32:833; CHECK: # %bb.0:834; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma835; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t836; CHECK-NEXT: ret837 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0838 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer839 %v = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)840 ret <vscale x 16 x i32> %v841}842 843define <vscale x 16 x i32> @vmul_vx_nxv16i32_commute(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {844; CHECK-LABEL: vmul_vx_nxv16i32_commute:845; CHECK: # %bb.0:846; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma847; CHECK-NEXT: vmul.vx v8, v8, a0, v0.t848; CHECK-NEXT: ret849 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0850 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer851 %v = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %vb, <vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 %evl)852 ret <vscale x 16 x i32> %v853}854 855define <vscale x 16 x i32> @vmul_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {856; CHECK-LABEL: vmul_vx_nxv16i32_unmasked:857; CHECK: # %bb.0:858; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma859; CHECK-NEXT: vmul.vx v8, v8, a0860; CHECK-NEXT: ret861 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0862 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer863 %v = call <vscale x 16 x i32> @llvm.vp.mul.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)864 ret <vscale x 16 x i32> %v865}866 867define <vscale x 1 x i64> @vmul_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {868; CHECK-LABEL: vmul_vv_nxv1i64:869; CHECK: # %bb.0:870; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma871; CHECK-NEXT: vmul.vv v8, v8, v9, v0.t872; CHECK-NEXT: ret873 %v = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)874 ret <vscale x 1 x i64> %v875}876 877define <vscale x 1 x i64> @vmul_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {878; CHECK-LABEL: vmul_vv_nxv1i64_unmasked:879; CHECK: # %bb.0:880; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma881; CHECK-NEXT: vmul.vv v8, v8, v9882; CHECK-NEXT: ret883 %v = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)884 ret <vscale x 1 x i64> %v885}886 887define <vscale x 1 x i64> @vmul_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {888; RV32-LABEL: vmul_vx_nxv1i64:889; RV32: # %bb.0:890; RV32-NEXT: addi sp, sp, -16891; RV32-NEXT: .cfi_def_cfa_offset 16892; RV32-NEXT: sw a0, 8(sp)893; RV32-NEXT: sw a1, 12(sp)894; RV32-NEXT: addi a0, sp, 8895; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma896; RV32-NEXT: vlse64.v v9, (a0), zero897; RV32-NEXT: vmul.vv v8, v8, v9, v0.t898; RV32-NEXT: addi sp, sp, 16899; RV32-NEXT: .cfi_def_cfa_offset 0900; RV32-NEXT: ret901;902; RV64-LABEL: vmul_vx_nxv1i64:903; RV64: # %bb.0:904; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma905; RV64-NEXT: vmul.vx v8, v8, a0, v0.t906; RV64-NEXT: ret907 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0908 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer909 %v = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)910 ret <vscale x 1 x i64> %v911}912 913define <vscale x 1 x i64> @vmul_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {914; RV32-LABEL: vmul_vx_nxv1i64_unmasked:915; RV32: # %bb.0:916; RV32-NEXT: addi sp, sp, -16917; RV32-NEXT: .cfi_def_cfa_offset 16918; RV32-NEXT: sw a0, 8(sp)919; RV32-NEXT: sw a1, 12(sp)920; RV32-NEXT: addi a0, sp, 8921; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma922; RV32-NEXT: vlse64.v v9, (a0), zero923; RV32-NEXT: vmul.vv v8, v8, v9924; RV32-NEXT: addi sp, sp, 16925; RV32-NEXT: .cfi_def_cfa_offset 0926; RV32-NEXT: ret927;928; RV64-LABEL: vmul_vx_nxv1i64_unmasked:929; RV64: # %bb.0:930; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma931; RV64-NEXT: vmul.vx v8, v8, a0932; RV64-NEXT: ret933 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0934 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer935 %v = call <vscale x 1 x i64> @llvm.vp.mul.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)936 ret <vscale x 1 x i64> %v937}938 939define <vscale x 2 x i64> @vmul_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {940; CHECK-LABEL: vmul_vv_nxv2i64:941; CHECK: # %bb.0:942; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma943; CHECK-NEXT: vmul.vv v8, v8, v10, v0.t944; CHECK-NEXT: ret945 %v = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)946 ret <vscale x 2 x i64> %v947}948 949define <vscale x 2 x i64> @vmul_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {950; CHECK-LABEL: vmul_vv_nxv2i64_unmasked:951; CHECK: # %bb.0:952; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma953; CHECK-NEXT: vmul.vv v8, v8, v10954; CHECK-NEXT: ret955 %v = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)956 ret <vscale x 2 x i64> %v957}958 959define <vscale x 2 x i64> @vmul_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {960; RV32-LABEL: vmul_vx_nxv2i64:961; RV32: # %bb.0:962; RV32-NEXT: addi sp, sp, -16963; RV32-NEXT: .cfi_def_cfa_offset 16964; RV32-NEXT: sw a0, 8(sp)965; RV32-NEXT: sw a1, 12(sp)966; RV32-NEXT: addi a0, sp, 8967; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma968; RV32-NEXT: vlse64.v v10, (a0), zero969; RV32-NEXT: vmul.vv v8, v8, v10, v0.t970; RV32-NEXT: addi sp, sp, 16971; RV32-NEXT: .cfi_def_cfa_offset 0972; RV32-NEXT: ret973;974; RV64-LABEL: vmul_vx_nxv2i64:975; RV64: # %bb.0:976; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma977; RV64-NEXT: vmul.vx v8, v8, a0, v0.t978; RV64-NEXT: ret979 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0980 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer981 %v = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)982 ret <vscale x 2 x i64> %v983}984 985define <vscale x 2 x i64> @vmul_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {986; RV32-LABEL: vmul_vx_nxv2i64_unmasked:987; RV32: # %bb.0:988; RV32-NEXT: addi sp, sp, -16989; RV32-NEXT: .cfi_def_cfa_offset 16990; RV32-NEXT: sw a0, 8(sp)991; RV32-NEXT: sw a1, 12(sp)992; RV32-NEXT: addi a0, sp, 8993; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma994; RV32-NEXT: vlse64.v v10, (a0), zero995; RV32-NEXT: vmul.vv v8, v8, v10996; RV32-NEXT: addi sp, sp, 16997; RV32-NEXT: .cfi_def_cfa_offset 0998; RV32-NEXT: ret999;1000; RV64-LABEL: vmul_vx_nxv2i64_unmasked:1001; RV64: # %bb.0:1002; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma1003; RV64-NEXT: vmul.vx v8, v8, a01004; RV64-NEXT: ret1005 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01006 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1007 %v = call <vscale x 2 x i64> @llvm.vp.mul.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)1008 ret <vscale x 2 x i64> %v1009}1010 1011define <vscale x 4 x i64> @vmul_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1012; CHECK-LABEL: vmul_vv_nxv4i64:1013; CHECK: # %bb.0:1014; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1015; CHECK-NEXT: vmul.vv v8, v8, v12, v0.t1016; CHECK-NEXT: ret1017 %v = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)1018 ret <vscale x 4 x i64> %v1019}1020 1021define <vscale x 4 x i64> @vmul_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {1022; CHECK-LABEL: vmul_vv_nxv4i64_unmasked:1023; CHECK: # %bb.0:1024; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1025; CHECK-NEXT: vmul.vv v8, v8, v121026; CHECK-NEXT: ret1027 %v = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)1028 ret <vscale x 4 x i64> %v1029}1030 1031define <vscale x 4 x i64> @vmul_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1032; RV32-LABEL: vmul_vx_nxv4i64:1033; RV32: # %bb.0:1034; RV32-NEXT: addi sp, sp, -161035; RV32-NEXT: .cfi_def_cfa_offset 161036; RV32-NEXT: sw a0, 8(sp)1037; RV32-NEXT: sw a1, 12(sp)1038; RV32-NEXT: addi a0, sp, 81039; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1040; RV32-NEXT: vlse64.v v12, (a0), zero1041; RV32-NEXT: vmul.vv v8, v8, v12, v0.t1042; RV32-NEXT: addi sp, sp, 161043; RV32-NEXT: .cfi_def_cfa_offset 01044; RV32-NEXT: ret1045;1046; RV64-LABEL: vmul_vx_nxv4i64:1047; RV64: # %bb.0:1048; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1049; RV64-NEXT: vmul.vx v8, v8, a0, v0.t1050; RV64-NEXT: ret1051 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01052 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1053 %v = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)1054 ret <vscale x 4 x i64> %v1055}1056 1057define <vscale x 4 x i64> @vmul_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {1058; RV32-LABEL: vmul_vx_nxv4i64_unmasked:1059; RV32: # %bb.0:1060; RV32-NEXT: addi sp, sp, -161061; RV32-NEXT: .cfi_def_cfa_offset 161062; RV32-NEXT: sw a0, 8(sp)1063; RV32-NEXT: sw a1, 12(sp)1064; RV32-NEXT: addi a0, sp, 81065; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1066; RV32-NEXT: vlse64.v v12, (a0), zero1067; RV32-NEXT: vmul.vv v8, v8, v121068; RV32-NEXT: addi sp, sp, 161069; RV32-NEXT: .cfi_def_cfa_offset 01070; RV32-NEXT: ret1071;1072; RV64-LABEL: vmul_vx_nxv4i64_unmasked:1073; RV64: # %bb.0:1074; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1075; RV64-NEXT: vmul.vx v8, v8, a01076; RV64-NEXT: ret1077 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01078 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1079 %v = call <vscale x 4 x i64> @llvm.vp.mul.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)1080 ret <vscale x 4 x i64> %v1081}1082 1083define <vscale x 8 x i64> @vmul_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1084; CHECK-LABEL: vmul_vv_nxv8i64:1085; CHECK: # %bb.0:1086; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1087; CHECK-NEXT: vmul.vv v8, v8, v16, v0.t1088; CHECK-NEXT: ret1089 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)1090 ret <vscale x 8 x i64> %v1091}1092 1093define <vscale x 8 x i64> @vmul_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {1094; CHECK-LABEL: vmul_vv_nxv8i64_unmasked:1095; CHECK: # %bb.0:1096; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1097; CHECK-NEXT: vmul.vv v8, v8, v161098; CHECK-NEXT: ret1099 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)1100 ret <vscale x 8 x i64> %v1101}1102 1103define <vscale x 8 x i64> @vmul_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1104; RV32-LABEL: vmul_vx_nxv8i64:1105; RV32: # %bb.0:1106; RV32-NEXT: addi sp, sp, -161107; RV32-NEXT: .cfi_def_cfa_offset 161108; RV32-NEXT: sw a0, 8(sp)1109; RV32-NEXT: sw a1, 12(sp)1110; RV32-NEXT: addi a0, sp, 81111; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma1112; RV32-NEXT: vlse64.v v16, (a0), zero1113; RV32-NEXT: vmul.vv v8, v8, v16, v0.t1114; RV32-NEXT: addi sp, sp, 161115; RV32-NEXT: .cfi_def_cfa_offset 01116; RV32-NEXT: ret1117;1118; RV64-LABEL: vmul_vx_nxv8i64:1119; RV64: # %bb.0:1120; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma1121; RV64-NEXT: vmul.vx v8, v8, a0, v0.t1122; RV64-NEXT: ret1123 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01124 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1125 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1126 ret <vscale x 8 x i64> %v1127}1128 1129define <vscale x 8 x i64> @vmul_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {1130; RV32-LABEL: vmul_vx_nxv8i64_unmasked:1131; RV32: # %bb.0:1132; RV32-NEXT: addi sp, sp, -161133; RV32-NEXT: .cfi_def_cfa_offset 161134; RV32-NEXT: sw a0, 8(sp)1135; RV32-NEXT: sw a1, 12(sp)1136; RV32-NEXT: addi a0, sp, 81137; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma1138; RV32-NEXT: vlse64.v v16, (a0), zero1139; RV32-NEXT: vmul.vv v8, v8, v161140; RV32-NEXT: addi sp, sp, 161141; RV32-NEXT: .cfi_def_cfa_offset 01142; RV32-NEXT: ret1143;1144; RV64-LABEL: vmul_vx_nxv8i64_unmasked:1145; RV64: # %bb.0:1146; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma1147; RV64-NEXT: vmul.vx v8, v8, a01148; RV64-NEXT: ret1149 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01150 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1151 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)1152 ret <vscale x 8 x i64> %v1153}1154 1155define <vscale x 8 x i64> @vmul_vv_undef_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1156; CHECK-LABEL: vmul_vv_undef_nxv8i64:1157; CHECK: # %bb.0:1158; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma1159; CHECK-NEXT: vmv.v.i v8, 01160; CHECK-NEXT: ret1161 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> poison, <vscale x 8 x i1> %m, i32 %evl)1162 ret <vscale x 8 x i64> %v1163}1164 1165define <vscale x 8 x i64> @vmul_vx_undef_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {1166; CHECK-LABEL: vmul_vx_undef_nxv8i64_unmasked:1167; CHECK: # %bb.0:1168; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma1169; CHECK-NEXT: vmv.v.i v8, 01170; CHECK-NEXT: ret1171 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 01172 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer1173 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> poison, <vscale x 8 x i1> %m, i32 %evl)1174 ret <vscale x 8 x i64> %v1175}1176 1177define <vscale x 8 x i64> @vmul_vx_zero_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1178; CHECK-LABEL: vmul_vx_zero_nxv8i64:1179; CHECK: # %bb.0:1180; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma1181; CHECK-NEXT: vmv.v.i v8, 01182; CHECK-NEXT: ret1183 %elt.head = insertelement <vscale x 8 x i64> poison, i64 0, i32 01184 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1185 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1186 ret <vscale x 8 x i64> %v1187}1188 1189define <vscale x 8 x i64> @vmul_vx_zero_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {1190; CHECK-LABEL: vmul_vx_zero_nxv8i64_unmasked:1191; CHECK: # %bb.0:1192; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma1193; CHECK-NEXT: vmv.v.i v8, 01194; CHECK-NEXT: ret1195 %elt.head = insertelement <vscale x 8 x i64> poison, i64 0, i32 01196 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1197 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 01198 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer1199 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1200 ret <vscale x 8 x i64> %v1201}1202 1203define <vscale x 8 x i64> @vmul_vx_one_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1204; CHECK-LABEL: vmul_vx_one_nxv8i64:1205; CHECK: # %bb.0:1206; CHECK-NEXT: ret1207 %elt.head = insertelement <vscale x 8 x i64> poison, i64 1, i32 01208 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1209 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1210 ret <vscale x 8 x i64> %v1211}1212 1213define <vscale x 8 x i64> @vmul_vx_one_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {1214; CHECK-LABEL: vmul_vx_one_nxv8i64_unmasked:1215; CHECK: # %bb.0:1216; CHECK-NEXT: ret1217 %elt.head = insertelement <vscale x 8 x i64> poison, i64 1, i32 01218 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1219 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 01220 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer1221 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1222 ret <vscale x 8 x i64> %v1223}1224 1225define <vscale x 8 x i64> @vmul_vx_negone_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1226; CHECK-LABEL: vmul_vx_negone_nxv8i64:1227; CHECK: # %bb.0:1228; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1229; CHECK-NEXT: vrsub.vi v8, v8, 0, v0.t1230; CHECK-NEXT: ret1231 %elt.head = insertelement <vscale x 8 x i64> poison, i64 -1, i32 01232 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1233 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1234 ret <vscale x 8 x i64> %v1235}1236 1237define <vscale x 8 x i64> @vmul_vx_negone_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {1238; CHECK-LABEL: vmul_vx_negone_nxv8i64_unmasked:1239; CHECK: # %bb.0:1240; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1241; CHECK-NEXT: vrsub.vi v8, v8, 01242; CHECK-NEXT: ret1243 %elt.head = insertelement <vscale x 8 x i64> poison, i64 -1, i32 01244 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1245 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 01246 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer1247 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1248 ret <vscale x 8 x i64> %v1249}1250 1251define <vscale x 8 x i64> @vmul_vx_pow2_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1252; CHECK-LABEL: vmul_vx_pow2_nxv8i64:1253; CHECK: # %bb.0:1254; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1255; CHECK-NEXT: vsll.vi v8, v8, 6, v0.t1256; CHECK-NEXT: ret1257 %elt.head = insertelement <vscale x 8 x i64> poison, i64 64, i32 01258 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1259 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1260 ret <vscale x 8 x i64> %v1261}1262 1263define <vscale x 8 x i64> @vmul_vx_pow2_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {1264; CHECK-LABEL: vmul_vx_pow2_nxv8i64_unmasked:1265; CHECK: # %bb.0:1266; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1267; CHECK-NEXT: vsll.vi v8, v8, 61268; CHECK-NEXT: ret1269 %elt.head = insertelement <vscale x 8 x i64> poison, i64 64, i32 01270 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1271 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 01272 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer1273 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1274 ret <vscale x 8 x i64> %v1275}1276 1277define <vscale x 8 x i64> @vmul_vx_negpow2_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1278; CHECK-LABEL: vmul_vx_negpow2_nxv8i64:1279; CHECK: # %bb.0:1280; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1281; CHECK-NEXT: vsll.vi v8, v8, 6, v0.t1282; CHECK-NEXT: vrsub.vi v8, v8, 0, v0.t1283; CHECK-NEXT: ret1284 %elt.head = insertelement <vscale x 8 x i64> poison, i64 -64, i32 01285 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1286 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1287 ret <vscale x 8 x i64> %v1288}1289 1290define <vscale x 8 x i64> @vmul_vx_negpow2_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {1291; CHECK-LABEL: vmul_vx_negpow2_nxv8i64_unmasked:1292; CHECK: # %bb.0:1293; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1294; CHECK-NEXT: vsll.vi v8, v8, 61295; CHECK-NEXT: vrsub.vi v8, v8, 01296; CHECK-NEXT: ret1297 %elt.head = insertelement <vscale x 8 x i64> poison, i64 -64, i32 01298 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1299 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 01300 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer1301 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1302 ret <vscale x 8 x i64> %v1303}1304 1305define <vscale x 8 x i64> @vmul_vshl_vx_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1306; CHECK-LABEL: vmul_vshl_vx_nxv8i64:1307; CHECK: # %bb.0:1308; CHECK-NEXT: li a0, 561309; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, ma1310; CHECK-NEXT: vmul.vx v8, v8, a01311; CHECK-NEXT: ret1312 %elt.head1 = insertelement <vscale x 8 x i64> poison, i64 3, i32 01313 %vb = shufflevector <vscale x 8 x i64> %elt.head1, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1314 %elt.head2 = insertelement <vscale x 8 x i64> poison, i64 7, i32 01315 %vc = shufflevector <vscale x 8 x i64> %elt.head2, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1316 %vshl = call <vscale x 8 x i64> @llvm.vp.shl.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1317 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %vshl, <vscale x 8 x i64> %vc, <vscale x 8 x i1> %m, i32 %evl)1318 ret <vscale x 8 x i64> %v1319}1320 1321define <vscale x 8 x i64> @vmul_vshl_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {1322; CHECK-LABEL: vmul_vshl_vx_nxv8i64_unmasked:1323; CHECK: # %bb.0:1324; CHECK-NEXT: li a0, 561325; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, ma1326; CHECK-NEXT: vmul.vx v8, v8, a01327; CHECK-NEXT: ret1328 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 01329 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer1330 %elt.head1 = insertelement <vscale x 8 x i64> poison, i64 3, i32 01331 %vb = shufflevector <vscale x 8 x i64> %elt.head1, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1332 %elt.head2 = insertelement <vscale x 8 x i64> poison, i64 7, i32 01333 %vc = shufflevector <vscale x 8 x i64> %elt.head2, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1334 %vshl = call <vscale x 8 x i64> @llvm.vp.shl.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1335 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %vshl, <vscale x 8 x i64> %vc, <vscale x 8 x i1> %m, i32 %evl)1336 ret <vscale x 8 x i64> %v1337}1338 1339define <vscale x 8 x i64> @vmul_vshl_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 zeroext %evl) {1340; CHECK-LABEL: vmul_vshl_vv_nxv8i64:1341; CHECK: # %bb.0:1342; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1343; CHECK-NEXT: vmul.vv v8, v8, v16, v0.t1344; CHECK-NEXT: vsll.vi v8, v8, 7, v0.t1345; CHECK-NEXT: ret1346 %elt.head = insertelement <vscale x 8 x i64> poison, i64 7, i32 01347 %vc = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1348 %vshl = call <vscale x 8 x i64> @llvm.vp.shl.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vc, <vscale x 8 x i1> %m, i32 %evl)1349 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %vshl, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1350 ret <vscale x 8 x i64> %v1351}1352 1353define <vscale x 8 x i64> @vmul_vshl_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, i32 zeroext %evl) {1354; CHECK-LABEL: vmul_vshl_vv_nxv8i64_unmasked:1355; CHECK: # %bb.0:1356; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1357; CHECK-NEXT: vmul.vv v8, v8, v161358; CHECK-NEXT: vsll.vi v8, v8, 71359; CHECK-NEXT: ret1360 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 01361 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer1362 %elt.head = insertelement <vscale x 8 x i64> poison, i64 7, i32 01363 %vc = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1364 %vshl = call <vscale x 8 x i64> @llvm.vp.shl.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vc, <vscale x 8 x i1> %m, i32 %evl)1365 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %vshl, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1366 ret <vscale x 8 x i64> %v1367}1368 1369define <vscale x 8 x i64> @vmul_vadd_vx_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1370; CHECK-LABEL: vmul_vadd_vx_nxv8i64:1371; CHECK: # %bb.0:1372; CHECK-NEXT: li a1, 71373; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1374; CHECK-NEXT: vmul.vx v8, v8, a1, v0.t1375; CHECK-NEXT: li a0, 211376; CHECK-NEXT: vadd.vx v8, v8, a0, v0.t1377; CHECK-NEXT: ret1378 %elt.head1 = insertelement <vscale x 8 x i64> poison, i64 3, i32 01379 %vb = shufflevector <vscale x 8 x i64> %elt.head1, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1380 %elt.head2 = insertelement <vscale x 8 x i64> poison, i64 7, i32 01381 %vc = shufflevector <vscale x 8 x i64> %elt.head2, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1382 %vadd = call <vscale x 8 x i64> @llvm.vp.add.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1383 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %vadd, <vscale x 8 x i64> %vc, <vscale x 8 x i1> %m, i32 %evl)1384 ret <vscale x 8 x i64> %v1385}1386 1387define <vscale x 8 x i64> @vmul_vadd_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {1388; CHECK-LABEL: vmul_vadd_vx_nxv8i64_unmasked:1389; CHECK: # %bb.0:1390; CHECK-NEXT: li a1, 211391; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1392; CHECK-NEXT: vmv.v.x v16, a11393; CHECK-NEXT: li a0, 71394; CHECK-NEXT: vmadd.vx v8, a0, v161395; CHECK-NEXT: ret1396 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 01397 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer1398 %elt.head1 = insertelement <vscale x 8 x i64> poison, i64 3, i32 01399 %vb = shufflevector <vscale x 8 x i64> %elt.head1, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1400 %elt.head2 = insertelement <vscale x 8 x i64> poison, i64 7, i32 01401 %vc = shufflevector <vscale x 8 x i64> %elt.head2, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1402 %vadd = call <vscale x 8 x i64> @llvm.vp.add.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1403 %v = call <vscale x 8 x i64> @llvm.vp.mul.nxv8i64(<vscale x 8 x i64> %vadd, <vscale x 8 x i64> %vc, <vscale x 8 x i1> %m, i32 %evl)1404 ret <vscale x 8 x i64> %v1405}1406