brintos

brintos / llvm-project-archived public Read only

0
0
Text · 80.9 KiB · c64b755 Raw
1778 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> @vadd_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {8; CHECK-LABEL: vadd_vx_nxv8i7:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma11; CHECK-NEXT:    vadd.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.add.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> @vadd_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: vadd_vv_nxv1i8:21; CHECK:       # %bb.0:22; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma23; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t24; CHECK-NEXT:    ret25  %v = call <vscale x 1 x i8> @llvm.vp.add.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> @vadd_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {30; CHECK-LABEL: vadd_vv_nxv1i8_unmasked:31; CHECK:       # %bb.0:32; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma33; CHECK-NEXT:    vadd.vv v8, v8, v934; CHECK-NEXT:    ret35  %v = call <vscale x 1 x i8> @llvm.vp.add.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> @vadd_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {40; CHECK-LABEL: vadd_vx_nxv1i8:41; CHECK:       # %bb.0:42; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma43; CHECK-NEXT:    vadd.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.add.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> @vadd_vx_nxv1i8_commute(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {52; CHECK-LABEL: vadd_vx_nxv1i8_commute:53; CHECK:       # %bb.0:54; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma55; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t56; 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.add.nxv1i8(<vscale x 1 x i8> %vb, <vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 %evl)60  ret <vscale x 1 x i8> %v61}62 63define <vscale x 1 x i8> @vadd_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {64; CHECK-LABEL: vadd_vx_nxv1i8_unmasked:65; CHECK:       # %bb.0:66; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma67; CHECK-NEXT:    vadd.vx v8, v8, a068; CHECK-NEXT:    ret69  %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 070  %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer71  %v = call <vscale x 1 x i8> @llvm.vp.add.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)72  ret <vscale x 1 x i8> %v73}74 75define <vscale x 1 x i8> @vadd_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {76; CHECK-LABEL: vadd_vi_nxv1i8:77; CHECK:       # %bb.0:78; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma79; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t80; CHECK-NEXT:    ret81  %v = call <vscale x 1 x i8> @llvm.vp.add.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 -1), <vscale x 1 x i1> %m, i32 %evl)82  ret <vscale x 1 x i8> %v83}84 85define <vscale x 1 x i8> @vadd_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {86; CHECK-LABEL: vadd_vi_nxv1i8_unmasked:87; CHECK:       # %bb.0:88; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma89; CHECK-NEXT:    vadd.vi v8, v8, -190; CHECK-NEXT:    ret91  %v = call <vscale x 1 x i8> @llvm.vp.add.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)92  ret <vscale x 1 x i8> %v93}94 95define <vscale x 2 x i8> @vadd_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {96; CHECK-LABEL: vadd_vv_nxv2i8:97; CHECK:       # %bb.0:98; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma99; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t100; CHECK-NEXT:    ret101  %v = call <vscale x 2 x i8> @llvm.vp.add.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)102  ret <vscale x 2 x i8> %v103}104 105define <vscale x 2 x i8> @vadd_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {106; CHECK-LABEL: vadd_vv_nxv2i8_unmasked:107; CHECK:       # %bb.0:108; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma109; CHECK-NEXT:    vadd.vv v8, v8, v9110; CHECK-NEXT:    ret111  %v = call <vscale x 2 x i8> @llvm.vp.add.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)112  ret <vscale x 2 x i8> %v113}114 115define <vscale x 2 x i8> @vadd_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {116; CHECK-LABEL: vadd_vx_nxv2i8:117; CHECK:       # %bb.0:118; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma119; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t120; CHECK-NEXT:    ret121  %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0122  %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer123  %v = call <vscale x 2 x i8> @llvm.vp.add.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)124  ret <vscale x 2 x i8> %v125}126 127define <vscale x 2 x i8> @vadd_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {128; CHECK-LABEL: vadd_vx_nxv2i8_unmasked:129; CHECK:       # %bb.0:130; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma131; CHECK-NEXT:    vadd.vx v8, v8, a0132; CHECK-NEXT:    ret133  %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0134  %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer135  %v = call <vscale x 2 x i8> @llvm.vp.add.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)136  ret <vscale x 2 x i8> %v137}138 139define <vscale x 2 x i8> @vadd_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {140; CHECK-LABEL: vadd_vi_nxv2i8:141; CHECK:       # %bb.0:142; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma143; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t144; CHECK-NEXT:    ret145  %v = call <vscale x 2 x i8> @llvm.vp.add.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 -1), <vscale x 2 x i1> %m, i32 %evl)146  ret <vscale x 2 x i8> %v147}148 149define <vscale x 2 x i8> @vadd_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {150; CHECK-LABEL: vadd_vi_nxv2i8_unmasked:151; CHECK:       # %bb.0:152; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma153; CHECK-NEXT:    vadd.vi v8, v8, -1154; CHECK-NEXT:    ret155  %v = call <vscale x 2 x i8> @llvm.vp.add.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)156  ret <vscale x 2 x i8> %v157}158 159define <vscale x 3 x i8> @vadd_vv_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {160; CHECK-LABEL: vadd_vv_nxv3i8:161; CHECK:       # %bb.0:162; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma163; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t164; CHECK-NEXT:    ret165  %v = call <vscale x 3 x i8> @llvm.vp.add.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 %evl)166  ret <vscale x 3 x i8> %v167}168 169define <vscale x 3 x i8> @vadd_vv_nxv3i8_unmasked(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, i32 zeroext %evl) {170; CHECK-LABEL: vadd_vv_nxv3i8_unmasked:171; CHECK:       # %bb.0:172; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma173; CHECK-NEXT:    vadd.vv v8, v8, v9174; CHECK-NEXT:    ret175  %v = call <vscale x 3 x i8> @llvm.vp.add.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> splat (i1 true), i32 %evl)176  ret <vscale x 3 x i8> %v177}178 179define <vscale x 3 x i8> @vadd_vx_nxv3i8(<vscale x 3 x i8> %va, i8 %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {180; CHECK-LABEL: vadd_vx_nxv3i8:181; CHECK:       # %bb.0:182; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma183; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t184; CHECK-NEXT:    ret185  %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0186  %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer187  %v = call <vscale x 3 x i8> @llvm.vp.add.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> %m, i32 %evl)188  ret <vscale x 3 x i8> %v189}190 191define <vscale x 3 x i8> @vadd_vx_nxv3i8_unmasked(<vscale x 3 x i8> %va, i8 %b, i32 zeroext %evl) {192; CHECK-LABEL: vadd_vx_nxv3i8_unmasked:193; CHECK:       # %bb.0:194; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma195; CHECK-NEXT:    vadd.vx v8, v8, a0196; CHECK-NEXT:    ret197  %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0198  %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer199  %v = call <vscale x 3 x i8> @llvm.vp.add.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> splat (i1 true), i32 %evl)200  ret <vscale x 3 x i8> %v201}202 203define <vscale x 3 x i8> @vadd_vi_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i1> %m, i32 zeroext %evl) {204; CHECK-LABEL: vadd_vi_nxv3i8:205; CHECK:       # %bb.0:206; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma207; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t208; CHECK-NEXT:    ret209  %v = call <vscale x 3 x i8> @llvm.vp.add.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> splat (i8 -1), <vscale x 3 x i1> %m, i32 %evl)210  ret <vscale x 3 x i8> %v211}212 213define <vscale x 3 x i8> @vadd_vi_nxv3i8_unmasked(<vscale x 3 x i8> %va, i32 zeroext %evl) {214; CHECK-LABEL: vadd_vi_nxv3i8_unmasked:215; CHECK:       # %bb.0:216; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma217; CHECK-NEXT:    vadd.vi v8, v8, -1218; CHECK-NEXT:    ret219  %v = call <vscale x 3 x i8> @llvm.vp.add.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> splat (i8 -1), <vscale x 3 x i1> splat (i1 true), i32 %evl)220  ret <vscale x 3 x i8> %v221}222 223define <vscale x 4 x i8> @vadd_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {224; CHECK-LABEL: vadd_vv_nxv4i8:225; CHECK:       # %bb.0:226; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma227; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t228; CHECK-NEXT:    ret229  %v = call <vscale x 4 x i8> @llvm.vp.add.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)230  ret <vscale x 4 x i8> %v231}232 233define <vscale x 4 x i8> @vadd_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {234; CHECK-LABEL: vadd_vv_nxv4i8_unmasked:235; CHECK:       # %bb.0:236; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma237; CHECK-NEXT:    vadd.vv v8, v8, v9238; CHECK-NEXT:    ret239  %v = call <vscale x 4 x i8> @llvm.vp.add.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)240  ret <vscale x 4 x i8> %v241}242 243define <vscale x 4 x i8> @vadd_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {244; CHECK-LABEL: vadd_vx_nxv4i8:245; CHECK:       # %bb.0:246; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma247; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t248; CHECK-NEXT:    ret249  %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0250  %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer251  %v = call <vscale x 4 x i8> @llvm.vp.add.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)252  ret <vscale x 4 x i8> %v253}254 255define <vscale x 4 x i8> @vadd_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {256; CHECK-LABEL: vadd_vx_nxv4i8_unmasked:257; CHECK:       # %bb.0:258; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma259; CHECK-NEXT:    vadd.vx v8, v8, a0260; CHECK-NEXT:    ret261  %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0262  %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer263  %v = call <vscale x 4 x i8> @llvm.vp.add.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)264  ret <vscale x 4 x i8> %v265}266 267define <vscale x 4 x i8> @vadd_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {268; CHECK-LABEL: vadd_vi_nxv4i8:269; CHECK:       # %bb.0:270; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma271; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t272; CHECK-NEXT:    ret273  %v = call <vscale x 4 x i8> @llvm.vp.add.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 -1), <vscale x 4 x i1> %m, i32 %evl)274  ret <vscale x 4 x i8> %v275}276 277define <vscale x 4 x i8> @vadd_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {278; CHECK-LABEL: vadd_vi_nxv4i8_unmasked:279; CHECK:       # %bb.0:280; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma281; CHECK-NEXT:    vadd.vi v8, v8, -1282; CHECK-NEXT:    ret283  %v = call <vscale x 4 x i8> @llvm.vp.add.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)284  ret <vscale x 4 x i8> %v285}286 287define <vscale x 8 x i8> @vadd_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {288; CHECK-LABEL: vadd_vv_nxv8i8:289; CHECK:       # %bb.0:290; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma291; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t292; CHECK-NEXT:    ret293  %v = call <vscale x 8 x i8> @llvm.vp.add.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)294  ret <vscale x 8 x i8> %v295}296 297define <vscale x 8 x i8> @vadd_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {298; CHECK-LABEL: vadd_vv_nxv8i8_unmasked:299; CHECK:       # %bb.0:300; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma301; CHECK-NEXT:    vadd.vv v8, v8, v9302; CHECK-NEXT:    ret303  %v = call <vscale x 8 x i8> @llvm.vp.add.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)304  ret <vscale x 8 x i8> %v305}306 307define <vscale x 8 x i8> @vadd_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {308; CHECK-LABEL: vadd_vx_nxv8i8:309; CHECK:       # %bb.0:310; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma311; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t312; CHECK-NEXT:    ret313  %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0314  %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer315  %v = call <vscale x 8 x i8> @llvm.vp.add.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)316  ret <vscale x 8 x i8> %v317}318 319define <vscale x 8 x i8> @vadd_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {320; CHECK-LABEL: vadd_vx_nxv8i8_unmasked:321; CHECK:       # %bb.0:322; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma323; CHECK-NEXT:    vadd.vx v8, v8, a0324; CHECK-NEXT:    ret325  %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0326  %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer327  %v = call <vscale x 8 x i8> @llvm.vp.add.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)328  ret <vscale x 8 x i8> %v329}330 331define <vscale x 8 x i8> @vadd_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {332; CHECK-LABEL: vadd_vi_nxv8i8:333; CHECK:       # %bb.0:334; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma335; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t336; CHECK-NEXT:    ret337  %v = call <vscale x 8 x i8> @llvm.vp.add.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 -1), <vscale x 8 x i1> %m, i32 %evl)338  ret <vscale x 8 x i8> %v339}340 341define <vscale x 8 x i8> @vadd_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {342; CHECK-LABEL: vadd_vi_nxv8i8_unmasked:343; CHECK:       # %bb.0:344; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma345; CHECK-NEXT:    vadd.vi v8, v8, -1346; CHECK-NEXT:    ret347  %v = call <vscale x 8 x i8> @llvm.vp.add.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)348  ret <vscale x 8 x i8> %v349}350 351define <vscale x 16 x i8> @vadd_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {352; CHECK-LABEL: vadd_vv_nxv16i8:353; CHECK:       # %bb.0:354; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma355; CHECK-NEXT:    vadd.vv v8, v8, v10, v0.t356; CHECK-NEXT:    ret357  %v = call <vscale x 16 x i8> @llvm.vp.add.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)358  ret <vscale x 16 x i8> %v359}360 361define <vscale x 16 x i8> @vadd_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {362; CHECK-LABEL: vadd_vv_nxv16i8_unmasked:363; CHECK:       # %bb.0:364; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma365; CHECK-NEXT:    vadd.vv v8, v8, v10366; CHECK-NEXT:    ret367  %v = call <vscale x 16 x i8> @llvm.vp.add.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)368  ret <vscale x 16 x i8> %v369}370 371define <vscale x 16 x i8> @vadd_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {372; CHECK-LABEL: vadd_vx_nxv16i8:373; CHECK:       # %bb.0:374; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma375; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t376; CHECK-NEXT:    ret377  %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0378  %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer379  %v = call <vscale x 16 x i8> @llvm.vp.add.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)380  ret <vscale x 16 x i8> %v381}382 383define <vscale x 16 x i8> @vadd_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {384; CHECK-LABEL: vadd_vx_nxv16i8_unmasked:385; CHECK:       # %bb.0:386; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma387; CHECK-NEXT:    vadd.vx v8, v8, a0388; CHECK-NEXT:    ret389  %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0390  %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer391  %v = call <vscale x 16 x i8> @llvm.vp.add.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)392  ret <vscale x 16 x i8> %v393}394 395define <vscale x 16 x i8> @vadd_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {396; CHECK-LABEL: vadd_vi_nxv16i8:397; CHECK:       # %bb.0:398; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma399; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t400; CHECK-NEXT:    ret401  %v = call <vscale x 16 x i8> @llvm.vp.add.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 -1), <vscale x 16 x i1> %m, i32 %evl)402  ret <vscale x 16 x i8> %v403}404 405define <vscale x 16 x i8> @vadd_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {406; CHECK-LABEL: vadd_vi_nxv16i8_unmasked:407; CHECK:       # %bb.0:408; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma409; CHECK-NEXT:    vadd.vi v8, v8, -1410; CHECK-NEXT:    ret411  %v = call <vscale x 16 x i8> @llvm.vp.add.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 -1), <vscale x 16 x i1> splat (i1 true), i32 %evl)412  ret <vscale x 16 x i8> %v413}414 415define <vscale x 32 x i8> @vadd_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {416; CHECK-LABEL: vadd_vv_nxv32i8:417; CHECK:       # %bb.0:418; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma419; CHECK-NEXT:    vadd.vv v8, v8, v12, v0.t420; CHECK-NEXT:    ret421  %v = call <vscale x 32 x i8> @llvm.vp.add.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)422  ret <vscale x 32 x i8> %v423}424 425define <vscale x 32 x i8> @vadd_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {426; CHECK-LABEL: vadd_vv_nxv32i8_unmasked:427; CHECK:       # %bb.0:428; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma429; CHECK-NEXT:    vadd.vv v8, v8, v12430; CHECK-NEXT:    ret431  %v = call <vscale x 32 x i8> @llvm.vp.add.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)432  ret <vscale x 32 x i8> %v433}434 435define <vscale x 32 x i8> @vadd_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {436; CHECK-LABEL: vadd_vx_nxv32i8:437; CHECK:       # %bb.0:438; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma439; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t440; CHECK-NEXT:    ret441  %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0442  %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer443  %v = call <vscale x 32 x i8> @llvm.vp.add.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)444  ret <vscale x 32 x i8> %v445}446 447define <vscale x 32 x i8> @vadd_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {448; CHECK-LABEL: vadd_vx_nxv32i8_unmasked:449; CHECK:       # %bb.0:450; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma451; CHECK-NEXT:    vadd.vx v8, v8, a0452; CHECK-NEXT:    ret453  %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0454  %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer455  %v = call <vscale x 32 x i8> @llvm.vp.add.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)456  ret <vscale x 32 x i8> %v457}458 459define <vscale x 32 x i8> @vadd_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {460; CHECK-LABEL: vadd_vi_nxv32i8:461; CHECK:       # %bb.0:462; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma463; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t464; CHECK-NEXT:    ret465  %v = call <vscale x 32 x i8> @llvm.vp.add.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 -1), <vscale x 32 x i1> %m, i32 %evl)466  ret <vscale x 32 x i8> %v467}468 469define <vscale x 32 x i8> @vadd_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {470; CHECK-LABEL: vadd_vi_nxv32i8_unmasked:471; CHECK:       # %bb.0:472; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma473; CHECK-NEXT:    vadd.vi v8, v8, -1474; CHECK-NEXT:    ret475  %v = call <vscale x 32 x i8> @llvm.vp.add.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 -1), <vscale x 32 x i1> splat (i1 true), i32 %evl)476  ret <vscale x 32 x i8> %v477}478 479define <vscale x 64 x i8> @vadd_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {480; CHECK-LABEL: vadd_vv_nxv64i8:481; CHECK:       # %bb.0:482; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma483; CHECK-NEXT:    vadd.vv v8, v8, v16, v0.t484; CHECK-NEXT:    ret485  %v = call <vscale x 64 x i8> @llvm.vp.add.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)486  ret <vscale x 64 x i8> %v487}488 489define <vscale x 64 x i8> @vadd_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {490; CHECK-LABEL: vadd_vv_nxv64i8_unmasked:491; CHECK:       # %bb.0:492; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma493; CHECK-NEXT:    vadd.vv v8, v8, v16494; CHECK-NEXT:    ret495  %v = call <vscale x 64 x i8> @llvm.vp.add.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)496  ret <vscale x 64 x i8> %v497}498 499define <vscale x 64 x i8> @vadd_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {500; CHECK-LABEL: vadd_vx_nxv64i8:501; CHECK:       # %bb.0:502; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma503; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t504; CHECK-NEXT:    ret505  %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0506  %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer507  %v = call <vscale x 64 x i8> @llvm.vp.add.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)508  ret <vscale x 64 x i8> %v509}510 511define <vscale x 64 x i8> @vadd_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {512; CHECK-LABEL: vadd_vx_nxv64i8_unmasked:513; CHECK:       # %bb.0:514; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma515; CHECK-NEXT:    vadd.vx v8, v8, a0516; CHECK-NEXT:    ret517  %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0518  %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer519  %v = call <vscale x 64 x i8> @llvm.vp.add.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)520  ret <vscale x 64 x i8> %v521}522 523define <vscale x 64 x i8> @vadd_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {524; CHECK-LABEL: vadd_vi_nxv64i8:525; CHECK:       # %bb.0:526; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma527; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t528; CHECK-NEXT:    ret529  %v = call <vscale x 64 x i8> @llvm.vp.add.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 -1), <vscale x 64 x i1> %m, i32 %evl)530  ret <vscale x 64 x i8> %v531}532 533define <vscale x 64 x i8> @vadd_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {534; CHECK-LABEL: vadd_vi_nxv64i8_unmasked:535; CHECK:       # %bb.0:536; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma537; CHECK-NEXT:    vadd.vi v8, v8, -1538; CHECK-NEXT:    ret539  %v = call <vscale x 64 x i8> @llvm.vp.add.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 -1), <vscale x 64 x i1> splat (i1 true), i32 %evl)540  ret <vscale x 64 x i8> %v541}542 543; Test that split-legalization works when the mask itself needs splitting.544 545define <vscale x 128 x i8> @vadd_vi_nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i1> %m, i32 zeroext %evl) {546; CHECK-LABEL: vadd_vi_nxv128i8:547; CHECK:       # %bb.0:548; CHECK-NEXT:    vsetvli a2, zero, e8, m8, ta, ma549; CHECK-NEXT:    vmv1r.v v24, v0550; CHECK-NEXT:    vlm.v v0, (a0)551; CHECK-NEXT:    csrr a0, vlenb552; CHECK-NEXT:    slli a0, a0, 3553; CHECK-NEXT:    sub a2, a1, a0554; CHECK-NEXT:    sltu a3, a1, a2555; CHECK-NEXT:    addi a3, a3, -1556; CHECK-NEXT:    and a2, a3, a2557; CHECK-NEXT:    vsetvli zero, a2, e8, m8, ta, ma558; CHECK-NEXT:    vadd.vi v16, v16, -1, v0.t559; CHECK-NEXT:    bltu a1, a0, .LBB50_2560; CHECK-NEXT:  # %bb.1:561; CHECK-NEXT:    mv a1, a0562; CHECK-NEXT:  .LBB50_2:563; CHECK-NEXT:    vmv1r.v v0, v24564; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma565; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t566; CHECK-NEXT:    ret567  %v = call <vscale x 128 x i8> @llvm.vp.add.nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> splat (i8 -1), <vscale x 128 x i1> %m, i32 %evl)568  ret <vscale x 128 x i8> %v569}570 571define <vscale x 128 x i8> @vadd_vi_nxv128i8_unmasked(<vscale x 128 x i8> %va, i32 zeroext %evl) {572; CHECK-LABEL: vadd_vi_nxv128i8_unmasked:573; CHECK:       # %bb.0:574; CHECK-NEXT:    csrr a1, vlenb575; CHECK-NEXT:    slli a1, a1, 3576; CHECK-NEXT:    sub a2, a0, a1577; CHECK-NEXT:    sltu a3, a0, a2578; CHECK-NEXT:    addi a3, a3, -1579; CHECK-NEXT:    and a2, a3, a2580; CHECK-NEXT:    vsetvli zero, a2, e8, m8, ta, ma581; CHECK-NEXT:    vadd.vi v16, v16, -1582; CHECK-NEXT:    bltu a0, a1, .LBB51_2583; CHECK-NEXT:  # %bb.1:584; CHECK-NEXT:    mv a0, a1585; CHECK-NEXT:  .LBB51_2:586; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma587; CHECK-NEXT:    vadd.vi v8, v8, -1588; CHECK-NEXT:    ret589  %v = call <vscale x 128 x i8> @llvm.vp.add.nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> splat (i8 -1), <vscale x 128 x i1> splat (i1 true), i32 %evl)590  ret <vscale x 128 x i8> %v591}592 593define <vscale x 1 x i16> @vadd_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {594; CHECK-LABEL: vadd_vv_nxv1i16:595; CHECK:       # %bb.0:596; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma597; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t598; CHECK-NEXT:    ret599  %v = call <vscale x 1 x i16> @llvm.vp.add.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)600  ret <vscale x 1 x i16> %v601}602 603define <vscale x 1 x i16> @vadd_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {604; CHECK-LABEL: vadd_vv_nxv1i16_unmasked:605; CHECK:       # %bb.0:606; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma607; CHECK-NEXT:    vadd.vv v8, v8, v9608; CHECK-NEXT:    ret609  %v = call <vscale x 1 x i16> @llvm.vp.add.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)610  ret <vscale x 1 x i16> %v611}612 613define <vscale x 1 x i16> @vadd_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {614; CHECK-LABEL: vadd_vx_nxv1i16:615; CHECK:       # %bb.0:616; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma617; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t618; CHECK-NEXT:    ret619  %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0620  %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer621  %v = call <vscale x 1 x i16> @llvm.vp.add.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)622  ret <vscale x 1 x i16> %v623}624 625define <vscale x 1 x i16> @vadd_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {626; CHECK-LABEL: vadd_vx_nxv1i16_unmasked:627; CHECK:       # %bb.0:628; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma629; CHECK-NEXT:    vadd.vx v8, v8, a0630; CHECK-NEXT:    ret631  %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0632  %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer633  %v = call <vscale x 1 x i16> @llvm.vp.add.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)634  ret <vscale x 1 x i16> %v635}636 637define <vscale x 1 x i16> @vadd_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {638; CHECK-LABEL: vadd_vi_nxv1i16:639; CHECK:       # %bb.0:640; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma641; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t642; CHECK-NEXT:    ret643  %v = call <vscale x 1 x i16> @llvm.vp.add.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 -1), <vscale x 1 x i1> %m, i32 %evl)644  ret <vscale x 1 x i16> %v645}646 647define <vscale x 1 x i16> @vadd_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {648; CHECK-LABEL: vadd_vi_nxv1i16_unmasked:649; CHECK:       # %bb.0:650; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma651; CHECK-NEXT:    vadd.vi v8, v8, -1652; CHECK-NEXT:    ret653  %v = call <vscale x 1 x i16> @llvm.vp.add.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)654  ret <vscale x 1 x i16> %v655}656 657define <vscale x 2 x i16> @vadd_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {658; CHECK-LABEL: vadd_vv_nxv2i16:659; CHECK:       # %bb.0:660; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma661; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t662; CHECK-NEXT:    ret663  %v = call <vscale x 2 x i16> @llvm.vp.add.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)664  ret <vscale x 2 x i16> %v665}666 667define <vscale x 2 x i16> @vadd_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {668; CHECK-LABEL: vadd_vv_nxv2i16_unmasked:669; CHECK:       # %bb.0:670; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma671; CHECK-NEXT:    vadd.vv v8, v8, v9672; CHECK-NEXT:    ret673  %v = call <vscale x 2 x i16> @llvm.vp.add.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)674  ret <vscale x 2 x i16> %v675}676 677define <vscale x 2 x i16> @vadd_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {678; CHECK-LABEL: vadd_vx_nxv2i16:679; CHECK:       # %bb.0:680; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma681; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t682; CHECK-NEXT:    ret683  %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0684  %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer685  %v = call <vscale x 2 x i16> @llvm.vp.add.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)686  ret <vscale x 2 x i16> %v687}688 689define <vscale x 2 x i16> @vadd_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {690; CHECK-LABEL: vadd_vx_nxv2i16_unmasked:691; CHECK:       # %bb.0:692; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma693; CHECK-NEXT:    vadd.vx v8, v8, a0694; CHECK-NEXT:    ret695  %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0696  %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer697  %v = call <vscale x 2 x i16> @llvm.vp.add.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)698  ret <vscale x 2 x i16> %v699}700 701define <vscale x 2 x i16> @vadd_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {702; CHECK-LABEL: vadd_vi_nxv2i16:703; CHECK:       # %bb.0:704; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma705; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t706; CHECK-NEXT:    ret707  %v = call <vscale x 2 x i16> @llvm.vp.add.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 -1), <vscale x 2 x i1> %m, i32 %evl)708  ret <vscale x 2 x i16> %v709}710 711define <vscale x 2 x i16> @vadd_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {712; CHECK-LABEL: vadd_vi_nxv2i16_unmasked:713; CHECK:       # %bb.0:714; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma715; CHECK-NEXT:    vadd.vi v8, v8, -1716; CHECK-NEXT:    ret717  %v = call <vscale x 2 x i16> @llvm.vp.add.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)718  ret <vscale x 2 x i16> %v719}720 721define <vscale x 4 x i16> @vadd_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {722; CHECK-LABEL: vadd_vv_nxv4i16:723; CHECK:       # %bb.0:724; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma725; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t726; CHECK-NEXT:    ret727  %v = call <vscale x 4 x i16> @llvm.vp.add.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)728  ret <vscale x 4 x i16> %v729}730 731define <vscale x 4 x i16> @vadd_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {732; CHECK-LABEL: vadd_vv_nxv4i16_unmasked:733; CHECK:       # %bb.0:734; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma735; CHECK-NEXT:    vadd.vv v8, v8, v9736; CHECK-NEXT:    ret737  %v = call <vscale x 4 x i16> @llvm.vp.add.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)738  ret <vscale x 4 x i16> %v739}740 741define <vscale x 4 x i16> @vadd_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {742; CHECK-LABEL: vadd_vx_nxv4i16:743; CHECK:       # %bb.0:744; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma745; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t746; CHECK-NEXT:    ret747  %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0748  %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer749  %v = call <vscale x 4 x i16> @llvm.vp.add.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)750  ret <vscale x 4 x i16> %v751}752 753define <vscale x 4 x i16> @vadd_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {754; CHECK-LABEL: vadd_vx_nxv4i16_unmasked:755; CHECK:       # %bb.0:756; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma757; CHECK-NEXT:    vadd.vx v8, v8, a0758; CHECK-NEXT:    ret759  %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0760  %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer761  %v = call <vscale x 4 x i16> @llvm.vp.add.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)762  ret <vscale x 4 x i16> %v763}764 765define <vscale x 4 x i16> @vadd_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {766; CHECK-LABEL: vadd_vi_nxv4i16:767; CHECK:       # %bb.0:768; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma769; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t770; CHECK-NEXT:    ret771  %v = call <vscale x 4 x i16> @llvm.vp.add.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 -1), <vscale x 4 x i1> %m, i32 %evl)772  ret <vscale x 4 x i16> %v773}774 775define <vscale x 4 x i16> @vadd_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {776; CHECK-LABEL: vadd_vi_nxv4i16_unmasked:777; CHECK:       # %bb.0:778; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma779; CHECK-NEXT:    vadd.vi v8, v8, -1780; CHECK-NEXT:    ret781  %v = call <vscale x 4 x i16> @llvm.vp.add.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)782  ret <vscale x 4 x i16> %v783}784 785define <vscale x 8 x i16> @vadd_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {786; CHECK-LABEL: vadd_vv_nxv8i16:787; CHECK:       # %bb.0:788; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma789; CHECK-NEXT:    vadd.vv v8, v8, v10, v0.t790; CHECK-NEXT:    ret791  %v = call <vscale x 8 x i16> @llvm.vp.add.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)792  ret <vscale x 8 x i16> %v793}794 795define <vscale x 8 x i16> @vadd_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {796; CHECK-LABEL: vadd_vv_nxv8i16_unmasked:797; CHECK:       # %bb.0:798; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma799; CHECK-NEXT:    vadd.vv v8, v8, v10800; CHECK-NEXT:    ret801  %v = call <vscale x 8 x i16> @llvm.vp.add.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)802  ret <vscale x 8 x i16> %v803}804 805define <vscale x 8 x i16> @vadd_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {806; CHECK-LABEL: vadd_vx_nxv8i16:807; CHECK:       # %bb.0:808; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma809; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t810; CHECK-NEXT:    ret811  %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0812  %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer813  %v = call <vscale x 8 x i16> @llvm.vp.add.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)814  ret <vscale x 8 x i16> %v815}816 817define <vscale x 8 x i16> @vadd_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {818; CHECK-LABEL: vadd_vx_nxv8i16_unmasked:819; CHECK:       # %bb.0:820; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma821; CHECK-NEXT:    vadd.vx v8, v8, a0822; CHECK-NEXT:    ret823  %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0824  %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer825  %v = call <vscale x 8 x i16> @llvm.vp.add.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)826  ret <vscale x 8 x i16> %v827}828 829define <vscale x 8 x i16> @vadd_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {830; CHECK-LABEL: vadd_vi_nxv8i16:831; CHECK:       # %bb.0:832; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma833; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t834; CHECK-NEXT:    ret835  %v = call <vscale x 8 x i16> @llvm.vp.add.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 -1), <vscale x 8 x i1> %m, i32 %evl)836  ret <vscale x 8 x i16> %v837}838 839define <vscale x 8 x i16> @vadd_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {840; CHECK-LABEL: vadd_vi_nxv8i16_unmasked:841; CHECK:       # %bb.0:842; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma843; CHECK-NEXT:    vadd.vi v8, v8, -1844; CHECK-NEXT:    ret845  %v = call <vscale x 8 x i16> @llvm.vp.add.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)846  ret <vscale x 8 x i16> %v847}848 849define <vscale x 16 x i16> @vadd_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {850; CHECK-LABEL: vadd_vv_nxv16i16:851; CHECK:       # %bb.0:852; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma853; CHECK-NEXT:    vadd.vv v8, v8, v12, v0.t854; CHECK-NEXT:    ret855  %v = call <vscale x 16 x i16> @llvm.vp.add.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)856  ret <vscale x 16 x i16> %v857}858 859define <vscale x 16 x i16> @vadd_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {860; CHECK-LABEL: vadd_vv_nxv16i16_unmasked:861; CHECK:       # %bb.0:862; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma863; CHECK-NEXT:    vadd.vv v8, v8, v12864; CHECK-NEXT:    ret865  %v = call <vscale x 16 x i16> @llvm.vp.add.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)866  ret <vscale x 16 x i16> %v867}868 869define <vscale x 16 x i16> @vadd_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {870; CHECK-LABEL: vadd_vx_nxv16i16:871; CHECK:       # %bb.0:872; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma873; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t874; CHECK-NEXT:    ret875  %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0876  %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer877  %v = call <vscale x 16 x i16> @llvm.vp.add.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)878  ret <vscale x 16 x i16> %v879}880 881define <vscale x 16 x i16> @vadd_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {882; CHECK-LABEL: vadd_vx_nxv16i16_unmasked:883; CHECK:       # %bb.0:884; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma885; CHECK-NEXT:    vadd.vx v8, v8, a0886; CHECK-NEXT:    ret887  %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0888  %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer889  %v = call <vscale x 16 x i16> @llvm.vp.add.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)890  ret <vscale x 16 x i16> %v891}892 893define <vscale x 16 x i16> @vadd_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {894; CHECK-LABEL: vadd_vi_nxv16i16:895; CHECK:       # %bb.0:896; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma897; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t898; CHECK-NEXT:    ret899  %v = call <vscale x 16 x i16> @llvm.vp.add.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 -1), <vscale x 16 x i1> %m, i32 %evl)900  ret <vscale x 16 x i16> %v901}902 903define <vscale x 16 x i16> @vadd_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {904; CHECK-LABEL: vadd_vi_nxv16i16_unmasked:905; CHECK:       # %bb.0:906; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma907; CHECK-NEXT:    vadd.vi v8, v8, -1908; CHECK-NEXT:    ret909  %v = call <vscale x 16 x i16> @llvm.vp.add.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 -1), <vscale x 16 x i1> splat (i1 true), i32 %evl)910  ret <vscale x 16 x i16> %v911}912 913define <vscale x 32 x i16> @vadd_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {914; CHECK-LABEL: vadd_vv_nxv32i16:915; CHECK:       # %bb.0:916; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma917; CHECK-NEXT:    vadd.vv v8, v8, v16, v0.t918; CHECK-NEXT:    ret919  %v = call <vscale x 32 x i16> @llvm.vp.add.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)920  ret <vscale x 32 x i16> %v921}922 923define <vscale x 32 x i16> @vadd_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {924; CHECK-LABEL: vadd_vv_nxv32i16_unmasked:925; CHECK:       # %bb.0:926; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma927; CHECK-NEXT:    vadd.vv v8, v8, v16928; CHECK-NEXT:    ret929  %v = call <vscale x 32 x i16> @llvm.vp.add.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)930  ret <vscale x 32 x i16> %v931}932 933define <vscale x 32 x i16> @vadd_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {934; CHECK-LABEL: vadd_vx_nxv32i16:935; CHECK:       # %bb.0:936; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma937; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t938; CHECK-NEXT:    ret939  %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0940  %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer941  %v = call <vscale x 32 x i16> @llvm.vp.add.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)942  ret <vscale x 32 x i16> %v943}944 945define <vscale x 32 x i16> @vadd_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {946; CHECK-LABEL: vadd_vx_nxv32i16_unmasked:947; CHECK:       # %bb.0:948; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma949; CHECK-NEXT:    vadd.vx v8, v8, a0950; CHECK-NEXT:    ret951  %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0952  %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer953  %v = call <vscale x 32 x i16> @llvm.vp.add.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)954  ret <vscale x 32 x i16> %v955}956 957define <vscale x 32 x i16> @vadd_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {958; CHECK-LABEL: vadd_vi_nxv32i16:959; CHECK:       # %bb.0:960; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma961; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t962; CHECK-NEXT:    ret963  %v = call <vscale x 32 x i16> @llvm.vp.add.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 -1), <vscale x 32 x i1> %m, i32 %evl)964  ret <vscale x 32 x i16> %v965}966 967define <vscale x 32 x i16> @vadd_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {968; CHECK-LABEL: vadd_vi_nxv32i16_unmasked:969; CHECK:       # %bb.0:970; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma971; CHECK-NEXT:    vadd.vi v8, v8, -1972; CHECK-NEXT:    ret973  %v = call <vscale x 32 x i16> @llvm.vp.add.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 -1), <vscale x 32 x i1> splat (i1 true), i32 %evl)974  ret <vscale x 32 x i16> %v975}976 977define <vscale x 1 x i32> @vadd_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {978; CHECK-LABEL: vadd_vv_nxv1i32:979; CHECK:       # %bb.0:980; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma981; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t982; CHECK-NEXT:    ret983  %v = call <vscale x 1 x i32> @llvm.vp.add.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)984  ret <vscale x 1 x i32> %v985}986 987define <vscale x 1 x i32> @vadd_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {988; CHECK-LABEL: vadd_vv_nxv1i32_unmasked:989; CHECK:       # %bb.0:990; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma991; CHECK-NEXT:    vadd.vv v8, v8, v9992; CHECK-NEXT:    ret993  %v = call <vscale x 1 x i32> @llvm.vp.add.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)994  ret <vscale x 1 x i32> %v995}996 997define <vscale x 1 x i32> @vadd_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {998; CHECK-LABEL: vadd_vx_nxv1i32:999; CHECK:       # %bb.0:1000; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma1001; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t1002; CHECK-NEXT:    ret1003  %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 01004  %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer1005  %v = call <vscale x 1 x i32> @llvm.vp.add.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)1006  ret <vscale x 1 x i32> %v1007}1008 1009define <vscale x 1 x i32> @vadd_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {1010; CHECK-LABEL: vadd_vx_nxv1i32_unmasked:1011; CHECK:       # %bb.0:1012; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma1013; CHECK-NEXT:    vadd.vx v8, v8, a01014; CHECK-NEXT:    ret1015  %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 01016  %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer1017  %v = call <vscale x 1 x i32> @llvm.vp.add.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)1018  ret <vscale x 1 x i32> %v1019}1020 1021define <vscale x 1 x i32> @vadd_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {1022; CHECK-LABEL: vadd_vi_nxv1i32:1023; CHECK:       # %bb.0:1024; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma1025; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t1026; CHECK-NEXT:    ret1027  %v = call <vscale x 1 x i32> @llvm.vp.add.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 -1), <vscale x 1 x i1> %m, i32 %evl)1028  ret <vscale x 1 x i32> %v1029}1030 1031define <vscale x 1 x i32> @vadd_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {1032; CHECK-LABEL: vadd_vi_nxv1i32_unmasked:1033; CHECK:       # %bb.0:1034; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma1035; CHECK-NEXT:    vadd.vi v8, v8, -11036; CHECK-NEXT:    ret1037  %v = call <vscale x 1 x i32> @llvm.vp.add.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)1038  ret <vscale x 1 x i32> %v1039}1040 1041define <vscale x 2 x i32> @vadd_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1042; CHECK-LABEL: vadd_vv_nxv2i32:1043; CHECK:       # %bb.0:1044; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma1045; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t1046; CHECK-NEXT:    ret1047  %v = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)1048  ret <vscale x 2 x i32> %v1049}1050 1051define <vscale x 2 x i32> @vadd_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {1052; CHECK-LABEL: vadd_vv_nxv2i32_unmasked:1053; CHECK:       # %bb.0:1054; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma1055; CHECK-NEXT:    vadd.vv v8, v8, v91056; CHECK-NEXT:    ret1057  %v = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)1058  ret <vscale x 2 x i32> %v1059}1060 1061define <vscale x 2 x i32> @vadd_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1062; CHECK-LABEL: vadd_vx_nxv2i32:1063; CHECK:       # %bb.0:1064; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma1065; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t1066; CHECK-NEXT:    ret1067  %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 01068  %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer1069  %v = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)1070  ret <vscale x 2 x i32> %v1071}1072 1073define <vscale x 2 x i32> @vadd_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {1074; CHECK-LABEL: vadd_vx_nxv2i32_unmasked:1075; CHECK:       # %bb.0:1076; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma1077; CHECK-NEXT:    vadd.vx v8, v8, a01078; CHECK-NEXT:    ret1079  %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 01080  %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer1081  %v = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)1082  ret <vscale x 2 x i32> %v1083}1084 1085define <vscale x 2 x i32> @vadd_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {1086; CHECK-LABEL: vadd_vi_nxv2i32:1087; CHECK:       # %bb.0:1088; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma1089; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t1090; CHECK-NEXT:    ret1091  %v = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 -1), <vscale x 2 x i1> %m, i32 %evl)1092  ret <vscale x 2 x i32> %v1093}1094 1095define <vscale x 2 x i32> @vadd_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {1096; CHECK-LABEL: vadd_vi_nxv2i32_unmasked:1097; CHECK:       # %bb.0:1098; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma1099; CHECK-NEXT:    vadd.vi v8, v8, -11100; CHECK-NEXT:    ret1101  %v = call <vscale x 2 x i32> @llvm.vp.add.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)1102  ret <vscale x 2 x i32> %v1103}1104 1105define <vscale x 4 x i32> @vadd_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1106; CHECK-LABEL: vadd_vv_nxv4i32:1107; CHECK:       # %bb.0:1108; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma1109; CHECK-NEXT:    vadd.vv v8, v8, v10, v0.t1110; CHECK-NEXT:    ret1111  %v = call <vscale x 4 x i32> @llvm.vp.add.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)1112  ret <vscale x 4 x i32> %v1113}1114 1115define <vscale x 4 x i32> @vadd_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {1116; CHECK-LABEL: vadd_vv_nxv4i32_unmasked:1117; CHECK:       # %bb.0:1118; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma1119; CHECK-NEXT:    vadd.vv v8, v8, v101120; CHECK-NEXT:    ret1121  %v = call <vscale x 4 x i32> @llvm.vp.add.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)1122  ret <vscale x 4 x i32> %v1123}1124 1125define <vscale x 4 x i32> @vadd_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1126; CHECK-LABEL: vadd_vx_nxv4i32:1127; CHECK:       # %bb.0:1128; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma1129; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t1130; CHECK-NEXT:    ret1131  %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 01132  %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1133  %v = call <vscale x 4 x i32> @llvm.vp.add.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)1134  ret <vscale x 4 x i32> %v1135}1136 1137define <vscale x 4 x i32> @vadd_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {1138; CHECK-LABEL: vadd_vx_nxv4i32_unmasked:1139; CHECK:       # %bb.0:1140; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma1141; CHECK-NEXT:    vadd.vx v8, v8, a01142; CHECK-NEXT:    ret1143  %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 01144  %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1145  %v = call <vscale x 4 x i32> @llvm.vp.add.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)1146  ret <vscale x 4 x i32> %v1147}1148 1149define <vscale x 4 x i32> @vadd_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {1150; CHECK-LABEL: vadd_vi_nxv4i32:1151; CHECK:       # %bb.0:1152; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma1153; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t1154; CHECK-NEXT:    ret1155  %v = call <vscale x 4 x i32> @llvm.vp.add.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 -1), <vscale x 4 x i1> %m, i32 %evl)1156  ret <vscale x 4 x i32> %v1157}1158 1159define <vscale x 4 x i32> @vadd_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {1160; CHECK-LABEL: vadd_vi_nxv4i32_unmasked:1161; CHECK:       # %bb.0:1162; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma1163; CHECK-NEXT:    vadd.vi v8, v8, -11164; CHECK-NEXT:    ret1165  %v = call <vscale x 4 x i32> @llvm.vp.add.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)1166  ret <vscale x 4 x i32> %v1167}1168 1169define <vscale x 8 x i32> @vadd_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1170; CHECK-LABEL: vadd_vv_nxv8i32:1171; CHECK:       # %bb.0:1172; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma1173; CHECK-NEXT:    vadd.vv v8, v8, v12, v0.t1174; CHECK-NEXT:    ret1175  %v = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)1176  ret <vscale x 8 x i32> %v1177}1178 1179define <vscale x 8 x i32> @vadd_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {1180; CHECK-LABEL: vadd_vv_nxv8i32_unmasked:1181; CHECK:       # %bb.0:1182; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma1183; CHECK-NEXT:    vadd.vv v8, v8, v121184; CHECK-NEXT:    ret1185  %v = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)1186  ret <vscale x 8 x i32> %v1187}1188 1189define <vscale x 8 x i32> @vadd_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1190; CHECK-LABEL: vadd_vx_nxv8i32:1191; CHECK:       # %bb.0:1192; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma1193; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t1194; CHECK-NEXT:    ret1195  %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 01196  %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer1197  %v = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)1198  ret <vscale x 8 x i32> %v1199}1200 1201define <vscale x 8 x i32> @vadd_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {1202; CHECK-LABEL: vadd_vx_nxv8i32_unmasked:1203; CHECK:       # %bb.0:1204; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma1205; CHECK-NEXT:    vadd.vx v8, v8, a01206; CHECK-NEXT:    ret1207  %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 01208  %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer1209  %v = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)1210  ret <vscale x 8 x i32> %v1211}1212 1213define <vscale x 8 x i32> @vadd_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1214; CHECK-LABEL: vadd_vi_nxv8i32:1215; CHECK:       # %bb.0:1216; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma1217; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t1218; CHECK-NEXT:    ret1219  %v = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 -1), <vscale x 8 x i1> %m, i32 %evl)1220  ret <vscale x 8 x i32> %v1221}1222 1223define <vscale x 8 x i32> @vadd_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {1224; CHECK-LABEL: vadd_vi_nxv8i32_unmasked:1225; CHECK:       # %bb.0:1226; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma1227; CHECK-NEXT:    vadd.vi v8, v8, -11228; CHECK-NEXT:    ret1229  %v = call <vscale x 8 x i32> @llvm.vp.add.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)1230  ret <vscale x 8 x i32> %v1231}1232 1233define <vscale x 16 x i32> @vadd_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {1234; CHECK-LABEL: vadd_vv_nxv16i32:1235; CHECK:       # %bb.0:1236; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1237; CHECK-NEXT:    vadd.vv v8, v8, v16, v0.t1238; CHECK-NEXT:    ret1239  %v = call <vscale x 16 x i32> @llvm.vp.add.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)1240  ret <vscale x 16 x i32> %v1241}1242 1243define <vscale x 16 x i32> @vadd_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {1244; CHECK-LABEL: vadd_vv_nxv16i32_unmasked:1245; CHECK:       # %bb.0:1246; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1247; CHECK-NEXT:    vadd.vv v8, v8, v161248; CHECK-NEXT:    ret1249  %v = call <vscale x 16 x i32> @llvm.vp.add.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)1250  ret <vscale x 16 x i32> %v1251}1252 1253define <vscale x 16 x i32> @vadd_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {1254; CHECK-LABEL: vadd_vx_nxv16i32:1255; CHECK:       # %bb.0:1256; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma1257; CHECK-NEXT:    vadd.vx v8, v8, a0, v0.t1258; CHECK-NEXT:    ret1259  %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 01260  %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer1261  %v = call <vscale x 16 x i32> @llvm.vp.add.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)1262  ret <vscale x 16 x i32> %v1263}1264 1265define <vscale x 16 x i32> @vadd_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {1266; CHECK-LABEL: vadd_vx_nxv16i32_unmasked:1267; CHECK:       # %bb.0:1268; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma1269; CHECK-NEXT:    vadd.vx v8, v8, a01270; CHECK-NEXT:    ret1271  %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 01272  %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer1273  %v = call <vscale x 16 x i32> @llvm.vp.add.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)1274  ret <vscale x 16 x i32> %v1275}1276 1277define <vscale x 16 x i32> @vadd_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {1278; CHECK-LABEL: vadd_vi_nxv16i32:1279; CHECK:       # %bb.0:1280; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1281; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t1282; CHECK-NEXT:    ret1283  %v = call <vscale x 16 x i32> @llvm.vp.add.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 -1), <vscale x 16 x i1> %m, i32 %evl)1284  ret <vscale x 16 x i32> %v1285}1286 1287define <vscale x 16 x i32> @vadd_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {1288; CHECK-LABEL: vadd_vi_nxv16i32_unmasked:1289; CHECK:       # %bb.0:1290; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1291; CHECK-NEXT:    vadd.vi v8, v8, -11292; CHECK-NEXT:    ret1293  %v = call <vscale x 16 x i32> @llvm.vp.add.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 -1), <vscale x 16 x i1> splat (i1 true), i32 %evl)1294  ret <vscale x 16 x i32> %v1295}1296 1297; Test that split-legalization works then the mask needs manual splitting.1298 1299define <vscale x 32 x i32> @vadd_vi_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {1300; CHECK-LABEL: vadd_vi_nxv32i32:1301; CHECK:       # %bb.0:1302; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma1303; CHECK-NEXT:    vmv1r.v v24, v01304; CHECK-NEXT:    csrr a1, vlenb1305; CHECK-NEXT:    srli a2, a1, 21306; CHECK-NEXT:    slli a1, a1, 11307; CHECK-NEXT:    vslidedown.vx v0, v0, a21308; CHECK-NEXT:    sub a2, a0, a11309; CHECK-NEXT:    sltu a3, a0, a21310; CHECK-NEXT:    addi a3, a3, -11311; CHECK-NEXT:    and a2, a3, a21312; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma1313; CHECK-NEXT:    vadd.vi v16, v16, -1, v0.t1314; CHECK-NEXT:    bltu a0, a1, .LBB118_21315; CHECK-NEXT:  # %bb.1:1316; CHECK-NEXT:    mv a0, a11317; CHECK-NEXT:  .LBB118_2:1318; CHECK-NEXT:    vmv1r.v v0, v241319; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1320; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t1321; CHECK-NEXT:    ret1322  %v = call <vscale x 32 x i32> @llvm.vp.add.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> splat (i32 -1), <vscale x 32 x i1> %m, i32 %evl)1323  ret <vscale x 32 x i32> %v1324}1325 1326define <vscale x 32 x i32> @vadd_vi_nxv32i32_unmasked(<vscale x 32 x i32> %va, i32 zeroext %evl) {1327; CHECK-LABEL: vadd_vi_nxv32i32_unmasked:1328; CHECK:       # %bb.0:1329; CHECK-NEXT:    csrr a1, vlenb1330; CHECK-NEXT:    slli a1, a1, 11331; CHECK-NEXT:    sub a2, a0, a11332; CHECK-NEXT:    sltu a3, a0, a21333; CHECK-NEXT:    addi a3, a3, -11334; CHECK-NEXT:    and a2, a3, a21335; CHECK-NEXT:    vsetvli zero, a2, e32, m8, ta, ma1336; CHECK-NEXT:    vadd.vi v16, v16, -11337; CHECK-NEXT:    bltu a0, a1, .LBB119_21338; CHECK-NEXT:  # %bb.1:1339; CHECK-NEXT:    mv a0, a11340; CHECK-NEXT:  .LBB119_2:1341; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1342; CHECK-NEXT:    vadd.vi v8, v8, -11343; CHECK-NEXT:    ret1344  %v = call <vscale x 32 x i32> @llvm.vp.add.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> splat (i32 -1), <vscale x 32 x i1> splat (i1 true), i32 %evl)1345  ret <vscale x 32 x i32> %v1346}1347 1348; Test splitting when the %evl is a constant (albeit an unknown one).1349 1350define <vscale x 32 x i32> @vadd_vi_nxv32i32_evl_nx8(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m) {1351; RV32-LABEL: vadd_vi_nxv32i32_evl_nx8:1352; RV32:       # %bb.0:1353; RV32-NEXT:    csrr a0, vlenb1354; RV32-NEXT:    srli a1, a0, 21355; RV32-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1356; RV32-NEXT:    vadd.vi v8, v8, -1, v0.t1357; RV32-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma1358; RV32-NEXT:    vslidedown.vx v0, v0, a11359; RV32-NEXT:    slli a1, a0, 11360; RV32-NEXT:    sub a1, a0, a11361; RV32-NEXT:    sltu a0, a0, a11362; RV32-NEXT:    addi a0, a0, -11363; RV32-NEXT:    and a0, a0, a11364; RV32-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1365; RV32-NEXT:    vadd.vi v16, v16, -1, v0.t1366; RV32-NEXT:    ret1367;1368; RV64-LABEL: vadd_vi_nxv32i32_evl_nx8:1369; RV64:       # %bb.0:1370; RV64-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma1371; RV64-NEXT:    vmv1r.v v24, v01372; RV64-NEXT:    csrr a0, vlenb1373; RV64-NEXT:    srli a2, a0, 21374; RV64-NEXT:    slli a1, a0, 11375; RV64-NEXT:    vslidedown.vx v0, v0, a21376; RV64-NEXT:    sub a2, a0, a11377; RV64-NEXT:    sltu a3, a0, a21378; RV64-NEXT:    addi a3, a3, -11379; RV64-NEXT:    and a2, a3, a21380; RV64-NEXT:    vsetvli zero, a2, e32, m8, ta, ma1381; RV64-NEXT:    vadd.vi v16, v16, -1, v0.t1382; RV64-NEXT:    bltu a0, a1, .LBB120_21383; RV64-NEXT:  # %bb.1:1384; RV64-NEXT:    mv a0, a11385; RV64-NEXT:  .LBB120_2:1386; RV64-NEXT:    vmv1r.v v0, v241387; RV64-NEXT:    vsetvli zero, a0, e32, m8, ta, ma1388; RV64-NEXT:    vadd.vi v8, v8, -1, v0.t1389; RV64-NEXT:    ret1390  %evl = call i32 @llvm.vscale.i32()1391  %evl0 = mul i32 %evl, 81392  %v = call <vscale x 32 x i32> @llvm.vp.add.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> splat (i32 -1), <vscale x 32 x i1> %m, i32 %evl0)1393  ret <vscale x 32 x i32> %v1394}1395 1396; The attribute vscale_range(2,1024) given here can remove the zero_extend for1397; the i32 %evl to i64 on RV64 through KnownBits analysis.1398 1399define <vscale x 32 x i32> @vadd_vi_nxv32i32_evl_nx16(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m) vscale_range(2,1024) {1400; CHECK-LABEL: vadd_vi_nxv32i32_evl_nx16:1401; CHECK:       # %bb.0:1402; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma1403; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t1404; CHECK-NEXT:    ret1405  %evl = call i32 @llvm.vscale.i32()1406  %evl0 = mul i32 %evl, 161407  %v = call <vscale x 32 x i32> @llvm.vp.add.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> splat (i32 -1), <vscale x 32 x i1> %m, i32 %evl0)1408  ret <vscale x 32 x i32> %v1409}1410 1411define <vscale x 1 x i64> @vadd_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1412; CHECK-LABEL: vadd_vv_nxv1i64:1413; CHECK:       # %bb.0:1414; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma1415; CHECK-NEXT:    vadd.vv v8, v8, v9, v0.t1416; CHECK-NEXT:    ret1417  %v = call <vscale x 1 x i64> @llvm.vp.add.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)1418  ret <vscale x 1 x i64> %v1419}1420 1421define <vscale x 1 x i64> @vadd_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {1422; CHECK-LABEL: vadd_vv_nxv1i64_unmasked:1423; CHECK:       # %bb.0:1424; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma1425; CHECK-NEXT:    vadd.vv v8, v8, v91426; CHECK-NEXT:    ret1427  %v = call <vscale x 1 x i64> @llvm.vp.add.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)1428  ret <vscale x 1 x i64> %v1429}1430 1431define <vscale x 1 x i64> @vadd_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1432; RV32-LABEL: vadd_vx_nxv1i64:1433; RV32:       # %bb.0:1434; RV32-NEXT:    addi sp, sp, -161435; RV32-NEXT:    .cfi_def_cfa_offset 161436; RV32-NEXT:    sw a0, 8(sp)1437; RV32-NEXT:    sw a1, 12(sp)1438; RV32-NEXT:    addi a0, sp, 81439; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma1440; RV32-NEXT:    vlse64.v v9, (a0), zero1441; RV32-NEXT:    vadd.vv v8, v8, v9, v0.t1442; RV32-NEXT:    addi sp, sp, 161443; RV32-NEXT:    .cfi_def_cfa_offset 01444; RV32-NEXT:    ret1445;1446; RV64-LABEL: vadd_vx_nxv1i64:1447; RV64:       # %bb.0:1448; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma1449; RV64-NEXT:    vadd.vx v8, v8, a0, v0.t1450; RV64-NEXT:    ret1451  %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01452  %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1453  %v = call <vscale x 1 x i64> @llvm.vp.add.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)1454  ret <vscale x 1 x i64> %v1455}1456 1457define <vscale x 1 x i64> @vadd_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {1458; RV32-LABEL: vadd_vx_nxv1i64_unmasked:1459; RV32:       # %bb.0:1460; RV32-NEXT:    addi sp, sp, -161461; RV32-NEXT:    .cfi_def_cfa_offset 161462; RV32-NEXT:    sw a0, 8(sp)1463; RV32-NEXT:    sw a1, 12(sp)1464; RV32-NEXT:    addi a0, sp, 81465; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma1466; RV32-NEXT:    vlse64.v v9, (a0), zero1467; RV32-NEXT:    vadd.vv v8, v8, v91468; RV32-NEXT:    addi sp, sp, 161469; RV32-NEXT:    .cfi_def_cfa_offset 01470; RV32-NEXT:    ret1471;1472; RV64-LABEL: vadd_vx_nxv1i64_unmasked:1473; RV64:       # %bb.0:1474; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma1475; RV64-NEXT:    vadd.vx v8, v8, a01476; RV64-NEXT:    ret1477  %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01478  %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1479  %v = call <vscale x 1 x i64> @llvm.vp.add.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)1480  ret <vscale x 1 x i64> %v1481}1482 1483define <vscale x 1 x i64> @vadd_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {1484; CHECK-LABEL: vadd_vi_nxv1i64:1485; CHECK:       # %bb.0:1486; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma1487; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t1488; CHECK-NEXT:    ret1489  %v = call <vscale x 1 x i64> @llvm.vp.add.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 -1), <vscale x 1 x i1> %m, i32 %evl)1490  ret <vscale x 1 x i64> %v1491}1492 1493define <vscale x 1 x i64> @vadd_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {1494; CHECK-LABEL: vadd_vi_nxv1i64_unmasked:1495; CHECK:       # %bb.0:1496; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma1497; CHECK-NEXT:    vadd.vi v8, v8, -11498; CHECK-NEXT:    ret1499  %v = call <vscale x 1 x i64> @llvm.vp.add.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 -1), <vscale x 1 x i1> splat (i1 true), i32 %evl)1500  ret <vscale x 1 x i64> %v1501}1502 1503define <vscale x 2 x i64> @vadd_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1504; CHECK-LABEL: vadd_vv_nxv2i64:1505; CHECK:       # %bb.0:1506; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma1507; CHECK-NEXT:    vadd.vv v8, v8, v10, v0.t1508; CHECK-NEXT:    ret1509  %v = call <vscale x 2 x i64> @llvm.vp.add.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)1510  ret <vscale x 2 x i64> %v1511}1512 1513define <vscale x 2 x i64> @vadd_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {1514; CHECK-LABEL: vadd_vv_nxv2i64_unmasked:1515; CHECK:       # %bb.0:1516; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma1517; CHECK-NEXT:    vadd.vv v8, v8, v101518; CHECK-NEXT:    ret1519  %v = call <vscale x 2 x i64> @llvm.vp.add.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)1520  ret <vscale x 2 x i64> %v1521}1522 1523define <vscale x 2 x i64> @vadd_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1524; RV32-LABEL: vadd_vx_nxv2i64:1525; RV32:       # %bb.0:1526; RV32-NEXT:    addi sp, sp, -161527; RV32-NEXT:    .cfi_def_cfa_offset 161528; RV32-NEXT:    sw a0, 8(sp)1529; RV32-NEXT:    sw a1, 12(sp)1530; RV32-NEXT:    addi a0, sp, 81531; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma1532; RV32-NEXT:    vlse64.v v10, (a0), zero1533; RV32-NEXT:    vadd.vv v8, v8, v10, v0.t1534; RV32-NEXT:    addi sp, sp, 161535; RV32-NEXT:    .cfi_def_cfa_offset 01536; RV32-NEXT:    ret1537;1538; RV64-LABEL: vadd_vx_nxv2i64:1539; RV64:       # %bb.0:1540; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma1541; RV64-NEXT:    vadd.vx v8, v8, a0, v0.t1542; RV64-NEXT:    ret1543  %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01544  %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1545  %v = call <vscale x 2 x i64> @llvm.vp.add.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)1546  ret <vscale x 2 x i64> %v1547}1548 1549define <vscale x 2 x i64> @vadd_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {1550; RV32-LABEL: vadd_vx_nxv2i64_unmasked:1551; RV32:       # %bb.0:1552; RV32-NEXT:    addi sp, sp, -161553; RV32-NEXT:    .cfi_def_cfa_offset 161554; RV32-NEXT:    sw a0, 8(sp)1555; RV32-NEXT:    sw a1, 12(sp)1556; RV32-NEXT:    addi a0, sp, 81557; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma1558; RV32-NEXT:    vlse64.v v10, (a0), zero1559; RV32-NEXT:    vadd.vv v8, v8, v101560; RV32-NEXT:    addi sp, sp, 161561; RV32-NEXT:    .cfi_def_cfa_offset 01562; RV32-NEXT:    ret1563;1564; RV64-LABEL: vadd_vx_nxv2i64_unmasked:1565; RV64:       # %bb.0:1566; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma1567; RV64-NEXT:    vadd.vx v8, v8, a01568; RV64-NEXT:    ret1569  %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01570  %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1571  %v = call <vscale x 2 x i64> @llvm.vp.add.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)1572  ret <vscale x 2 x i64> %v1573}1574 1575define <vscale x 2 x i64> @vadd_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {1576; CHECK-LABEL: vadd_vi_nxv2i64:1577; CHECK:       # %bb.0:1578; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma1579; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t1580; CHECK-NEXT:    ret1581  %v = call <vscale x 2 x i64> @llvm.vp.add.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 -1), <vscale x 2 x i1> %m, i32 %evl)1582  ret <vscale x 2 x i64> %v1583}1584 1585define <vscale x 2 x i64> @vadd_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {1586; CHECK-LABEL: vadd_vi_nxv2i64_unmasked:1587; CHECK:       # %bb.0:1588; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma1589; CHECK-NEXT:    vadd.vi v8, v8, -11590; CHECK-NEXT:    ret1591  %v = call <vscale x 2 x i64> @llvm.vp.add.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 -1), <vscale x 2 x i1> splat (i1 true), i32 %evl)1592  ret <vscale x 2 x i64> %v1593}1594 1595define <vscale x 4 x i64> @vadd_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1596; CHECK-LABEL: vadd_vv_nxv4i64:1597; CHECK:       # %bb.0:1598; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma1599; CHECK-NEXT:    vadd.vv v8, v8, v12, v0.t1600; CHECK-NEXT:    ret1601  %v = call <vscale x 4 x i64> @llvm.vp.add.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)1602  ret <vscale x 4 x i64> %v1603}1604 1605define <vscale x 4 x i64> @vadd_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {1606; CHECK-LABEL: vadd_vv_nxv4i64_unmasked:1607; CHECK:       # %bb.0:1608; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma1609; CHECK-NEXT:    vadd.vv v8, v8, v121610; CHECK-NEXT:    ret1611  %v = call <vscale x 4 x i64> @llvm.vp.add.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)1612  ret <vscale x 4 x i64> %v1613}1614 1615define <vscale x 4 x i64> @vadd_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1616; RV32-LABEL: vadd_vx_nxv4i64:1617; RV32:       # %bb.0:1618; RV32-NEXT:    addi sp, sp, -161619; RV32-NEXT:    .cfi_def_cfa_offset 161620; RV32-NEXT:    sw a0, 8(sp)1621; RV32-NEXT:    sw a1, 12(sp)1622; RV32-NEXT:    addi a0, sp, 81623; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma1624; RV32-NEXT:    vlse64.v v12, (a0), zero1625; RV32-NEXT:    vadd.vv v8, v8, v12, v0.t1626; RV32-NEXT:    addi sp, sp, 161627; RV32-NEXT:    .cfi_def_cfa_offset 01628; RV32-NEXT:    ret1629;1630; RV64-LABEL: vadd_vx_nxv4i64:1631; RV64:       # %bb.0:1632; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma1633; RV64-NEXT:    vadd.vx v8, v8, a0, v0.t1634; RV64-NEXT:    ret1635  %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01636  %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1637  %v = call <vscale x 4 x i64> @llvm.vp.add.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)1638  ret <vscale x 4 x i64> %v1639}1640 1641define <vscale x 4 x i64> @vadd_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {1642; RV32-LABEL: vadd_vx_nxv4i64_unmasked:1643; RV32:       # %bb.0:1644; RV32-NEXT:    addi sp, sp, -161645; RV32-NEXT:    .cfi_def_cfa_offset 161646; RV32-NEXT:    sw a0, 8(sp)1647; RV32-NEXT:    sw a1, 12(sp)1648; RV32-NEXT:    addi a0, sp, 81649; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma1650; RV32-NEXT:    vlse64.v v12, (a0), zero1651; RV32-NEXT:    vadd.vv v8, v8, v121652; RV32-NEXT:    addi sp, sp, 161653; RV32-NEXT:    .cfi_def_cfa_offset 01654; RV32-NEXT:    ret1655;1656; RV64-LABEL: vadd_vx_nxv4i64_unmasked:1657; RV64:       # %bb.0:1658; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma1659; RV64-NEXT:    vadd.vx v8, v8, a01660; RV64-NEXT:    ret1661  %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01662  %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1663  %v = call <vscale x 4 x i64> @llvm.vp.add.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)1664  ret <vscale x 4 x i64> %v1665}1666 1667define <vscale x 4 x i64> @vadd_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {1668; CHECK-LABEL: vadd_vi_nxv4i64:1669; CHECK:       # %bb.0:1670; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma1671; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t1672; CHECK-NEXT:    ret1673  %v = call <vscale x 4 x i64> @llvm.vp.add.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 -1), <vscale x 4 x i1> %m, i32 %evl)1674  ret <vscale x 4 x i64> %v1675}1676 1677define <vscale x 4 x i64> @vadd_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {1678; CHECK-LABEL: vadd_vi_nxv4i64_unmasked:1679; CHECK:       # %bb.0:1680; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma1681; CHECK-NEXT:    vadd.vi v8, v8, -11682; CHECK-NEXT:    ret1683  %v = call <vscale x 4 x i64> @llvm.vp.add.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 -1), <vscale x 4 x i1> splat (i1 true), i32 %evl)1684  ret <vscale x 4 x i64> %v1685}1686 1687define <vscale x 8 x i64> @vadd_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1688; CHECK-LABEL: vadd_vv_nxv8i64:1689; CHECK:       # %bb.0:1690; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma1691; CHECK-NEXT:    vadd.vv v8, v8, v16, v0.t1692; CHECK-NEXT:    ret1693  %v = call <vscale x 8 x i64> @llvm.vp.add.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)1694  ret <vscale x 8 x i64> %v1695}1696 1697define <vscale x 8 x i64> @vadd_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {1698; CHECK-LABEL: vadd_vv_nxv8i64_unmasked:1699; CHECK:       # %bb.0:1700; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma1701; CHECK-NEXT:    vadd.vv v8, v8, v161702; CHECK-NEXT:    ret1703  %v = call <vscale x 8 x i64> @llvm.vp.add.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)1704  ret <vscale x 8 x i64> %v1705}1706 1707define <vscale x 8 x i64> @vadd_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1708; RV32-LABEL: vadd_vx_nxv8i64:1709; RV32:       # %bb.0:1710; RV32-NEXT:    addi sp, sp, -161711; RV32-NEXT:    .cfi_def_cfa_offset 161712; RV32-NEXT:    sw a0, 8(sp)1713; RV32-NEXT:    sw a1, 12(sp)1714; RV32-NEXT:    addi a0, sp, 81715; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma1716; RV32-NEXT:    vlse64.v v16, (a0), zero1717; RV32-NEXT:    vadd.vv v8, v8, v16, v0.t1718; RV32-NEXT:    addi sp, sp, 161719; RV32-NEXT:    .cfi_def_cfa_offset 01720; RV32-NEXT:    ret1721;1722; RV64-LABEL: vadd_vx_nxv8i64:1723; RV64:       # %bb.0:1724; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma1725; RV64-NEXT:    vadd.vx v8, v8, a0, v0.t1726; RV64-NEXT:    ret1727  %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01728  %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1729  %v = 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)1730  ret <vscale x 8 x i64> %v1731}1732 1733define <vscale x 8 x i64> @vadd_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {1734; RV32-LABEL: vadd_vx_nxv8i64_unmasked:1735; RV32:       # %bb.0:1736; RV32-NEXT:    addi sp, sp, -161737; RV32-NEXT:    .cfi_def_cfa_offset 161738; RV32-NEXT:    sw a0, 8(sp)1739; RV32-NEXT:    sw a1, 12(sp)1740; RV32-NEXT:    addi a0, sp, 81741; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma1742; RV32-NEXT:    vlse64.v v16, (a0), zero1743; RV32-NEXT:    vadd.vv v8, v8, v161744; RV32-NEXT:    addi sp, sp, 161745; RV32-NEXT:    .cfi_def_cfa_offset 01746; RV32-NEXT:    ret1747;1748; RV64-LABEL: vadd_vx_nxv8i64_unmasked:1749; RV64:       # %bb.0:1750; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma1751; RV64-NEXT:    vadd.vx v8, v8, a01752; RV64-NEXT:    ret1753  %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01754  %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1755  %v = 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> splat (i1 true), i32 %evl)1756  ret <vscale x 8 x i64> %v1757}1758 1759define <vscale x 8 x i64> @vadd_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1760; CHECK-LABEL: vadd_vi_nxv8i64:1761; CHECK:       # %bb.0:1762; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma1763; CHECK-NEXT:    vadd.vi v8, v8, -1, v0.t1764; CHECK-NEXT:    ret1765  %v = call <vscale x 8 x i64> @llvm.vp.add.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 -1), <vscale x 8 x i1> %m, i32 %evl)1766  ret <vscale x 8 x i64> %v1767}1768 1769define <vscale x 8 x i64> @vadd_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {1770; CHECK-LABEL: vadd_vi_nxv8i64_unmasked:1771; CHECK:       # %bb.0:1772; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma1773; CHECK-NEXT:    vadd.vi v8, v8, -11774; CHECK-NEXT:    ret1775  %v = call <vscale x 8 x i64> @llvm.vp.add.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 -1), <vscale x 8 x i1> splat (i1 true), i32 %evl)1776  ret <vscale x 8 x i64> %v1777}1778