brintos

brintos / llvm-project-archived public Read only

0
0
Text · 68.4 KiB · 8d690bc Raw
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