1720 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> @vsaddu_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {8; CHECK-LABEL: vsaddu_vx_nxv8i7:9; CHECK: # %bb.0:10; CHECK-NEXT: li a2, 12711; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma12; CHECK-NEXT: vmv.v.x v9, a013; CHECK-NEXT: vand.vx v8, v8, a214; CHECK-NEXT: vand.vx v9, v9, a215; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t16; CHECK-NEXT: vminu.vx v8, v8, a2, v0.t17; CHECK-NEXT: ret18 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 019 %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer20 %v = call <vscale x 8 x i7> @llvm.vp.uadd.sat.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)21 ret <vscale x 8 x i7> %v22}23 24define <vscale x 1 x i8> @vsaddu_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {25; CHECK-LABEL: vsaddu_vv_nxv1i8:26; CHECK: # %bb.0:27; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma28; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t29; CHECK-NEXT: ret30 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)31 ret <vscale x 1 x i8> %v32}33 34define <vscale x 1 x i8> @vsaddu_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {35; CHECK-LABEL: vsaddu_vv_nxv1i8_unmasked:36; CHECK: # %bb.0:37; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma38; CHECK-NEXT: vsaddu.vv v8, v8, v939; CHECK-NEXT: ret40 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)41 ret <vscale x 1 x i8> %v42}43 44define <vscale x 1 x i8> @vsaddu_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {45; CHECK-LABEL: vsaddu_vx_nxv1i8:46; CHECK: # %bb.0:47; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma48; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t49; CHECK-NEXT: ret50 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 051 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer52 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)53 ret <vscale x 1 x i8> %v54}55 56define <vscale x 1 x i8> @vsaddu_vx_nxv1i8_commute(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {57; CHECK-LABEL: vsaddu_vx_nxv1i8_commute:58; CHECK: # %bb.0:59; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma60; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t61; CHECK-NEXT: ret62 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 063 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer64 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %vb, <vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 %evl)65 ret <vscale x 1 x i8> %v66}67 68define <vscale x 1 x i8> @vsaddu_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {69; CHECK-LABEL: vsaddu_vx_nxv1i8_unmasked:70; CHECK: # %bb.0:71; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma72; CHECK-NEXT: vsaddu.vx v8, v8, a073; CHECK-NEXT: ret74 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 075 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer76 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)77 ret <vscale x 1 x i8> %v78}79 80define <vscale x 1 x i8> @vsaddu_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {81; CHECK-LABEL: vsaddu_vi_nxv1i8:82; CHECK: # %bb.0:83; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma84; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t85; CHECK-NEXT: ret86 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 -1), <vscale x 1 x i1> %m, i32 %evl)87 ret <vscale x 1 x i8> %v88}89 90define <vscale x 1 x i8> @vsaddu_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {91; CHECK-LABEL: vsaddu_vi_nxv1i8_unmasked:92; CHECK: # %bb.0:93; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma94; CHECK-NEXT: vsaddu.vi v8, v8, -195; CHECK-NEXT: ret96 %v = call <vscale x 1 x i8> @llvm.vp.uadd.sat.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)97 ret <vscale x 1 x i8> %v98}99 100define <vscale x 2 x i8> @vsaddu_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {101; CHECK-LABEL: vsaddu_vv_nxv2i8:102; CHECK: # %bb.0:103; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma104; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t105; CHECK-NEXT: ret106 %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)107 ret <vscale x 2 x i8> %v108}109 110define <vscale x 2 x i8> @vsaddu_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {111; CHECK-LABEL: vsaddu_vv_nxv2i8_unmasked:112; CHECK: # %bb.0:113; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma114; CHECK-NEXT: vsaddu.vv v8, v8, v9115; CHECK-NEXT: ret116 %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)117 ret <vscale x 2 x i8> %v118}119 120define <vscale x 2 x i8> @vsaddu_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {121; CHECK-LABEL: vsaddu_vx_nxv2i8:122; CHECK: # %bb.0:123; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma124; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t125; CHECK-NEXT: ret126 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0127 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer128 %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)129 ret <vscale x 2 x i8> %v130}131 132define <vscale x 2 x i8> @vsaddu_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {133; CHECK-LABEL: vsaddu_vx_nxv2i8_unmasked:134; CHECK: # %bb.0:135; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma136; CHECK-NEXT: vsaddu.vx v8, v8, a0137; CHECK-NEXT: ret138 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0139 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer140 %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)141 ret <vscale x 2 x i8> %v142}143 144define <vscale x 2 x i8> @vsaddu_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {145; CHECK-LABEL: vsaddu_vi_nxv2i8:146; CHECK: # %bb.0:147; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma148; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t149; CHECK-NEXT: ret150 %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 -1), <vscale x 2 x i1> %m, i32 %evl)151 ret <vscale x 2 x i8> %v152}153 154define <vscale x 2 x i8> @vsaddu_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {155; CHECK-LABEL: vsaddu_vi_nxv2i8_unmasked:156; CHECK: # %bb.0:157; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma158; CHECK-NEXT: vsaddu.vi v8, v8, -1159; CHECK-NEXT: ret160 %v = call <vscale x 2 x i8> @llvm.vp.uadd.sat.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)161 ret <vscale x 2 x i8> %v162}163 164define <vscale x 3 x i8> @vsaddu_vv_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {165; CHECK-LABEL: vsaddu_vv_nxv3i8:166; CHECK: # %bb.0:167; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma168; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t169; CHECK-NEXT: ret170 %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 %evl)171 ret <vscale x 3 x i8> %v172}173 174define <vscale x 3 x i8> @vsaddu_vv_nxv3i8_unmasked(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, i32 zeroext %evl) {175; CHECK-LABEL: vsaddu_vv_nxv3i8_unmasked:176; CHECK: # %bb.0:177; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma178; CHECK-NEXT: vsaddu.vv v8, v8, v9179; CHECK-NEXT: ret180 %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> splat (i1 true), i32 %evl)181 ret <vscale x 3 x i8> %v182}183 184define <vscale x 3 x i8> @vsaddu_vx_nxv3i8(<vscale x 3 x i8> %va, i8 %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {185; CHECK-LABEL: vsaddu_vx_nxv3i8:186; CHECK: # %bb.0:187; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma188; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t189; CHECK-NEXT: ret190 %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0191 %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer192 %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> %m, i32 %evl)193 ret <vscale x 3 x i8> %v194}195 196define <vscale x 3 x i8> @vsaddu_vx_nxv3i8_unmasked(<vscale x 3 x i8> %va, i8 %b, i32 zeroext %evl) {197; CHECK-LABEL: vsaddu_vx_nxv3i8_unmasked:198; CHECK: # %bb.0:199; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma200; CHECK-NEXT: vsaddu.vx v8, v8, a0201; CHECK-NEXT: ret202 %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0203 %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer204 %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> splat (i1 true), i32 %evl)205 ret <vscale x 3 x i8> %v206}207 208define <vscale x 3 x i8> @vsaddu_vi_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i1> %m, i32 zeroext %evl) {209; CHECK-LABEL: vsaddu_vi_nxv3i8:210; CHECK: # %bb.0:211; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma212; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t213; CHECK-NEXT: ret214 %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> splat (i8 -1), <vscale x 3 x i1> %m, i32 %evl)215 ret <vscale x 3 x i8> %v216}217 218define <vscale x 3 x i8> @vsaddu_vi_nxv3i8_unmasked(<vscale x 3 x i8> %va, i32 zeroext %evl) {219; CHECK-LABEL: vsaddu_vi_nxv3i8_unmasked:220; CHECK: # %bb.0:221; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma222; CHECK-NEXT: vsaddu.vi v8, v8, -1223; CHECK-NEXT: ret224 %v = call <vscale x 3 x i8> @llvm.vp.uadd.sat.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)225 ret <vscale x 3 x i8> %v226}227 228define <vscale x 4 x i8> @vsaddu_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {229; CHECK-LABEL: vsaddu_vv_nxv4i8:230; CHECK: # %bb.0:231; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma232; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t233; CHECK-NEXT: ret234 %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)235 ret <vscale x 4 x i8> %v236}237 238define <vscale x 4 x i8> @vsaddu_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {239; CHECK-LABEL: vsaddu_vv_nxv4i8_unmasked:240; CHECK: # %bb.0:241; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma242; CHECK-NEXT: vsaddu.vv v8, v8, v9243; CHECK-NEXT: ret244 %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)245 ret <vscale x 4 x i8> %v246}247 248define <vscale x 4 x i8> @vsaddu_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {249; CHECK-LABEL: vsaddu_vx_nxv4i8:250; CHECK: # %bb.0:251; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma252; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t253; CHECK-NEXT: ret254 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0255 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer256 %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)257 ret <vscale x 4 x i8> %v258}259 260define <vscale x 4 x i8> @vsaddu_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {261; CHECK-LABEL: vsaddu_vx_nxv4i8_unmasked:262; CHECK: # %bb.0:263; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma264; CHECK-NEXT: vsaddu.vx v8, v8, a0265; CHECK-NEXT: ret266 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0267 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer268 %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)269 ret <vscale x 4 x i8> %v270}271 272define <vscale x 4 x i8> @vsaddu_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {273; CHECK-LABEL: vsaddu_vi_nxv4i8:274; CHECK: # %bb.0:275; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma276; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t277; CHECK-NEXT: ret278 %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 -1), <vscale x 4 x i1> %m, i32 %evl)279 ret <vscale x 4 x i8> %v280}281 282define <vscale x 4 x i8> @vsaddu_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {283; CHECK-LABEL: vsaddu_vi_nxv4i8_unmasked:284; CHECK: # %bb.0:285; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma286; CHECK-NEXT: vsaddu.vi v8, v8, -1287; CHECK-NEXT: ret288 %v = call <vscale x 4 x i8> @llvm.vp.uadd.sat.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)289 ret <vscale x 4 x i8> %v290}291 292define <vscale x 8 x i8> @vsaddu_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {293; CHECK-LABEL: vsaddu_vv_nxv8i8:294; CHECK: # %bb.0:295; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma296; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t297; CHECK-NEXT: ret298 %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)299 ret <vscale x 8 x i8> %v300}301 302define <vscale x 8 x i8> @vsaddu_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {303; CHECK-LABEL: vsaddu_vv_nxv8i8_unmasked:304; CHECK: # %bb.0:305; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma306; CHECK-NEXT: vsaddu.vv v8, v8, v9307; CHECK-NEXT: ret308 %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)309 ret <vscale x 8 x i8> %v310}311 312define <vscale x 8 x i8> @vsaddu_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {313; CHECK-LABEL: vsaddu_vx_nxv8i8:314; CHECK: # %bb.0:315; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma316; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t317; CHECK-NEXT: ret318 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0319 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer320 %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)321 ret <vscale x 8 x i8> %v322}323 324define <vscale x 8 x i8> @vsaddu_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {325; CHECK-LABEL: vsaddu_vx_nxv8i8_unmasked:326; CHECK: # %bb.0:327; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma328; CHECK-NEXT: vsaddu.vx v8, v8, a0329; CHECK-NEXT: ret330 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0331 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer332 %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)333 ret <vscale x 8 x i8> %v334}335 336define <vscale x 8 x i8> @vsaddu_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {337; CHECK-LABEL: vsaddu_vi_nxv8i8:338; CHECK: # %bb.0:339; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma340; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t341; CHECK-NEXT: ret342 %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 -1), <vscale x 8 x i1> %m, i32 %evl)343 ret <vscale x 8 x i8> %v344}345 346define <vscale x 8 x i8> @vsaddu_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {347; CHECK-LABEL: vsaddu_vi_nxv8i8_unmasked:348; CHECK: # %bb.0:349; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma350; CHECK-NEXT: vsaddu.vi v8, v8, -1351; CHECK-NEXT: ret352 %v = call <vscale x 8 x i8> @llvm.vp.uadd.sat.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)353 ret <vscale x 8 x i8> %v354}355 356define <vscale x 16 x i8> @vsaddu_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {357; CHECK-LABEL: vsaddu_vv_nxv16i8:358; CHECK: # %bb.0:359; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma360; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t361; CHECK-NEXT: ret362 %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)363 ret <vscale x 16 x i8> %v364}365 366define <vscale x 16 x i8> @vsaddu_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {367; CHECK-LABEL: vsaddu_vv_nxv16i8_unmasked:368; CHECK: # %bb.0:369; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma370; CHECK-NEXT: vsaddu.vv v8, v8, v10371; CHECK-NEXT: ret372 %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)373 ret <vscale x 16 x i8> %v374}375 376define <vscale x 16 x i8> @vsaddu_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {377; CHECK-LABEL: vsaddu_vx_nxv16i8:378; CHECK: # %bb.0:379; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma380; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t381; CHECK-NEXT: ret382 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0383 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer384 %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)385 ret <vscale x 16 x i8> %v386}387 388define <vscale x 16 x i8> @vsaddu_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {389; CHECK-LABEL: vsaddu_vx_nxv16i8_unmasked:390; CHECK: # %bb.0:391; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma392; CHECK-NEXT: vsaddu.vx v8, v8, a0393; CHECK-NEXT: ret394 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0395 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer396 %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)397 ret <vscale x 16 x i8> %v398}399 400define <vscale x 16 x i8> @vsaddu_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {401; CHECK-LABEL: vsaddu_vi_nxv16i8:402; CHECK: # %bb.0:403; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma404; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t405; CHECK-NEXT: ret406 %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 -1), <vscale x 16 x i1> %m, i32 %evl)407 ret <vscale x 16 x i8> %v408}409 410define <vscale x 16 x i8> @vsaddu_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {411; CHECK-LABEL: vsaddu_vi_nxv16i8_unmasked:412; CHECK: # %bb.0:413; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma414; CHECK-NEXT: vsaddu.vi v8, v8, -1415; CHECK-NEXT: ret416 %v = call <vscale x 16 x i8> @llvm.vp.uadd.sat.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)417 ret <vscale x 16 x i8> %v418}419 420define <vscale x 32 x i8> @vsaddu_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {421; CHECK-LABEL: vsaddu_vv_nxv32i8:422; CHECK: # %bb.0:423; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma424; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t425; CHECK-NEXT: ret426 %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)427 ret <vscale x 32 x i8> %v428}429 430define <vscale x 32 x i8> @vsaddu_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {431; CHECK-LABEL: vsaddu_vv_nxv32i8_unmasked:432; CHECK: # %bb.0:433; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma434; CHECK-NEXT: vsaddu.vv v8, v8, v12435; CHECK-NEXT: ret436 %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)437 ret <vscale x 32 x i8> %v438}439 440define <vscale x 32 x i8> @vsaddu_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {441; CHECK-LABEL: vsaddu_vx_nxv32i8:442; CHECK: # %bb.0:443; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma444; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t445; CHECK-NEXT: ret446 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0447 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer448 %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)449 ret <vscale x 32 x i8> %v450}451 452define <vscale x 32 x i8> @vsaddu_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {453; CHECK-LABEL: vsaddu_vx_nxv32i8_unmasked:454; CHECK: # %bb.0:455; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma456; CHECK-NEXT: vsaddu.vx v8, v8, a0457; CHECK-NEXT: ret458 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0459 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer460 %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)461 ret <vscale x 32 x i8> %v462}463 464define <vscale x 32 x i8> @vsaddu_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {465; CHECK-LABEL: vsaddu_vi_nxv32i8:466; CHECK: # %bb.0:467; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma468; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t469; CHECK-NEXT: ret470 %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 -1), <vscale x 32 x i1> %m, i32 %evl)471 ret <vscale x 32 x i8> %v472}473 474define <vscale x 32 x i8> @vsaddu_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {475; CHECK-LABEL: vsaddu_vi_nxv32i8_unmasked:476; CHECK: # %bb.0:477; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma478; CHECK-NEXT: vsaddu.vi v8, v8, -1479; CHECK-NEXT: ret480 %v = call <vscale x 32 x i8> @llvm.vp.uadd.sat.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)481 ret <vscale x 32 x i8> %v482}483 484define <vscale x 64 x i8> @vsaddu_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {485; CHECK-LABEL: vsaddu_vv_nxv64i8:486; CHECK: # %bb.0:487; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma488; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t489; CHECK-NEXT: ret490 %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)491 ret <vscale x 64 x i8> %v492}493 494define <vscale x 64 x i8> @vsaddu_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {495; CHECK-LABEL: vsaddu_vv_nxv64i8_unmasked:496; CHECK: # %bb.0:497; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma498; CHECK-NEXT: vsaddu.vv v8, v8, v16499; CHECK-NEXT: ret500 %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)501 ret <vscale x 64 x i8> %v502}503 504define <vscale x 64 x i8> @vsaddu_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {505; CHECK-LABEL: vsaddu_vx_nxv64i8:506; CHECK: # %bb.0:507; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma508; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t509; CHECK-NEXT: ret510 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0511 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer512 %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)513 ret <vscale x 64 x i8> %v514}515 516define <vscale x 64 x i8> @vsaddu_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {517; CHECK-LABEL: vsaddu_vx_nxv64i8_unmasked:518; CHECK: # %bb.0:519; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma520; CHECK-NEXT: vsaddu.vx v8, v8, a0521; CHECK-NEXT: ret522 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0523 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer524 %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)525 ret <vscale x 64 x i8> %v526}527 528define <vscale x 64 x i8> @vsaddu_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {529; CHECK-LABEL: vsaddu_vi_nxv64i8:530; CHECK: # %bb.0:531; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma532; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t533; CHECK-NEXT: ret534 %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 -1), <vscale x 64 x i1> %m, i32 %evl)535 ret <vscale x 64 x i8> %v536}537 538define <vscale x 64 x i8> @vsaddu_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {539; CHECK-LABEL: vsaddu_vi_nxv64i8_unmasked:540; CHECK: # %bb.0:541; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma542; CHECK-NEXT: vsaddu.vi v8, v8, -1543; CHECK-NEXT: ret544 %v = call <vscale x 64 x i8> @llvm.vp.uadd.sat.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)545 ret <vscale x 64 x i8> %v546}547 548; Test that split-legalization works when the mask itself needs splitting.549 550define <vscale x 128 x i8> @vsaddu_vi_nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i1> %m, i32 zeroext %evl) {551; CHECK-LABEL: vsaddu_vi_nxv128i8:552; CHECK: # %bb.0:553; CHECK-NEXT: vsetvli a2, zero, e8, m8, ta, ma554; CHECK-NEXT: vmv1r.v v24, v0555; CHECK-NEXT: vlm.v v0, (a0)556; CHECK-NEXT: csrr a0, vlenb557; CHECK-NEXT: slli a0, a0, 3558; CHECK-NEXT: sub a2, a1, a0559; CHECK-NEXT: sltu a3, a1, a2560; CHECK-NEXT: addi a3, a3, -1561; CHECK-NEXT: and a2, a3, a2562; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma563; CHECK-NEXT: vsaddu.vi v16, v16, -1, v0.t564; CHECK-NEXT: bltu a1, a0, .LBB50_2565; CHECK-NEXT: # %bb.1:566; CHECK-NEXT: mv a1, a0567; CHECK-NEXT: .LBB50_2:568; CHECK-NEXT: vmv1r.v v0, v24569; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma570; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t571; CHECK-NEXT: ret572 %v = call <vscale x 128 x i8> @llvm.vp.uadd.sat.nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> splat (i8 -1), <vscale x 128 x i1> %m, i32 %evl)573 ret <vscale x 128 x i8> %v574}575 576define <vscale x 128 x i8> @vsaddu_vi_nxv128i8_unmasked(<vscale x 128 x i8> %va, i32 zeroext %evl) {577; CHECK-LABEL: vsaddu_vi_nxv128i8_unmasked:578; CHECK: # %bb.0:579; CHECK-NEXT: csrr a1, vlenb580; CHECK-NEXT: slli a1, a1, 3581; CHECK-NEXT: sub a2, a0, a1582; CHECK-NEXT: sltu a3, a0, a2583; CHECK-NEXT: addi a3, a3, -1584; CHECK-NEXT: and a2, a3, a2585; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma586; CHECK-NEXT: vsaddu.vi v16, v16, -1587; CHECK-NEXT: bltu a0, a1, .LBB51_2588; CHECK-NEXT: # %bb.1:589; CHECK-NEXT: mv a0, a1590; CHECK-NEXT: .LBB51_2:591; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma592; CHECK-NEXT: vsaddu.vi v8, v8, -1593; CHECK-NEXT: ret594 %v = call <vscale x 128 x i8> @llvm.vp.uadd.sat.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)595 ret <vscale x 128 x i8> %v596}597 598define <vscale x 1 x i16> @vsaddu_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {599; CHECK-LABEL: vsaddu_vv_nxv1i16:600; CHECK: # %bb.0:601; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma602; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t603; CHECK-NEXT: ret604 %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)605 ret <vscale x 1 x i16> %v606}607 608define <vscale x 1 x i16> @vsaddu_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {609; CHECK-LABEL: vsaddu_vv_nxv1i16_unmasked:610; CHECK: # %bb.0:611; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma612; CHECK-NEXT: vsaddu.vv v8, v8, v9613; CHECK-NEXT: ret614 %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)615 ret <vscale x 1 x i16> %v616}617 618define <vscale x 1 x i16> @vsaddu_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {619; CHECK-LABEL: vsaddu_vx_nxv1i16:620; CHECK: # %bb.0:621; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma622; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t623; CHECK-NEXT: ret624 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0625 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer626 %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)627 ret <vscale x 1 x i16> %v628}629 630define <vscale x 1 x i16> @vsaddu_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {631; CHECK-LABEL: vsaddu_vx_nxv1i16_unmasked:632; CHECK: # %bb.0:633; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma634; CHECK-NEXT: vsaddu.vx v8, v8, a0635; CHECK-NEXT: ret636 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0637 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer638 %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)639 ret <vscale x 1 x i16> %v640}641 642define <vscale x 1 x i16> @vsaddu_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {643; CHECK-LABEL: vsaddu_vi_nxv1i16:644; CHECK: # %bb.0:645; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma646; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t647; CHECK-NEXT: ret648 %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 -1), <vscale x 1 x i1> %m, i32 %evl)649 ret <vscale x 1 x i16> %v650}651 652define <vscale x 1 x i16> @vsaddu_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {653; CHECK-LABEL: vsaddu_vi_nxv1i16_unmasked:654; CHECK: # %bb.0:655; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma656; CHECK-NEXT: vsaddu.vi v8, v8, -1657; CHECK-NEXT: ret658 %v = call <vscale x 1 x i16> @llvm.vp.uadd.sat.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)659 ret <vscale x 1 x i16> %v660}661 662define <vscale x 2 x i16> @vsaddu_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {663; CHECK-LABEL: vsaddu_vv_nxv2i16:664; CHECK: # %bb.0:665; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma666; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t667; CHECK-NEXT: ret668 %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)669 ret <vscale x 2 x i16> %v670}671 672define <vscale x 2 x i16> @vsaddu_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {673; CHECK-LABEL: vsaddu_vv_nxv2i16_unmasked:674; CHECK: # %bb.0:675; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma676; CHECK-NEXT: vsaddu.vv v8, v8, v9677; CHECK-NEXT: ret678 %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)679 ret <vscale x 2 x i16> %v680}681 682define <vscale x 2 x i16> @vsaddu_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {683; CHECK-LABEL: vsaddu_vx_nxv2i16:684; CHECK: # %bb.0:685; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma686; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t687; CHECK-NEXT: ret688 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0689 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer690 %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)691 ret <vscale x 2 x i16> %v692}693 694define <vscale x 2 x i16> @vsaddu_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {695; CHECK-LABEL: vsaddu_vx_nxv2i16_unmasked:696; CHECK: # %bb.0:697; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma698; CHECK-NEXT: vsaddu.vx v8, v8, a0699; CHECK-NEXT: ret700 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0701 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer702 %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)703 ret <vscale x 2 x i16> %v704}705 706define <vscale x 2 x i16> @vsaddu_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {707; CHECK-LABEL: vsaddu_vi_nxv2i16:708; CHECK: # %bb.0:709; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma710; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t711; CHECK-NEXT: ret712 %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 -1), <vscale x 2 x i1> %m, i32 %evl)713 ret <vscale x 2 x i16> %v714}715 716define <vscale x 2 x i16> @vsaddu_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {717; CHECK-LABEL: vsaddu_vi_nxv2i16_unmasked:718; CHECK: # %bb.0:719; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma720; CHECK-NEXT: vsaddu.vi v8, v8, -1721; CHECK-NEXT: ret722 %v = call <vscale x 2 x i16> @llvm.vp.uadd.sat.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)723 ret <vscale x 2 x i16> %v724}725 726define <vscale x 4 x i16> @vsaddu_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {727; CHECK-LABEL: vsaddu_vv_nxv4i16:728; CHECK: # %bb.0:729; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma730; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t731; CHECK-NEXT: ret732 %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)733 ret <vscale x 4 x i16> %v734}735 736define <vscale x 4 x i16> @vsaddu_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {737; CHECK-LABEL: vsaddu_vv_nxv4i16_unmasked:738; CHECK: # %bb.0:739; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma740; CHECK-NEXT: vsaddu.vv v8, v8, v9741; CHECK-NEXT: ret742 %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)743 ret <vscale x 4 x i16> %v744}745 746define <vscale x 4 x i16> @vsaddu_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {747; CHECK-LABEL: vsaddu_vx_nxv4i16:748; CHECK: # %bb.0:749; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma750; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t751; CHECK-NEXT: ret752 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0753 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer754 %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)755 ret <vscale x 4 x i16> %v756}757 758define <vscale x 4 x i16> @vsaddu_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {759; CHECK-LABEL: vsaddu_vx_nxv4i16_unmasked:760; CHECK: # %bb.0:761; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma762; CHECK-NEXT: vsaddu.vx v8, v8, a0763; CHECK-NEXT: ret764 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0765 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer766 %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)767 ret <vscale x 4 x i16> %v768}769 770define <vscale x 4 x i16> @vsaddu_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {771; CHECK-LABEL: vsaddu_vi_nxv4i16:772; CHECK: # %bb.0:773; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma774; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t775; CHECK-NEXT: ret776 %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 -1), <vscale x 4 x i1> %m, i32 %evl)777 ret <vscale x 4 x i16> %v778}779 780define <vscale x 4 x i16> @vsaddu_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {781; CHECK-LABEL: vsaddu_vi_nxv4i16_unmasked:782; CHECK: # %bb.0:783; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma784; CHECK-NEXT: vsaddu.vi v8, v8, -1785; CHECK-NEXT: ret786 %v = call <vscale x 4 x i16> @llvm.vp.uadd.sat.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)787 ret <vscale x 4 x i16> %v788}789 790define <vscale x 8 x i16> @vsaddu_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {791; CHECK-LABEL: vsaddu_vv_nxv8i16:792; CHECK: # %bb.0:793; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma794; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t795; CHECK-NEXT: ret796 %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)797 ret <vscale x 8 x i16> %v798}799 800define <vscale x 8 x i16> @vsaddu_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {801; CHECK-LABEL: vsaddu_vv_nxv8i16_unmasked:802; CHECK: # %bb.0:803; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma804; CHECK-NEXT: vsaddu.vv v8, v8, v10805; CHECK-NEXT: ret806 %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)807 ret <vscale x 8 x i16> %v808}809 810define <vscale x 8 x i16> @vsaddu_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {811; CHECK-LABEL: vsaddu_vx_nxv8i16:812; CHECK: # %bb.0:813; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma814; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t815; CHECK-NEXT: ret816 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0817 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer818 %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)819 ret <vscale x 8 x i16> %v820}821 822define <vscale x 8 x i16> @vsaddu_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {823; CHECK-LABEL: vsaddu_vx_nxv8i16_unmasked:824; CHECK: # %bb.0:825; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma826; CHECK-NEXT: vsaddu.vx v8, v8, a0827; CHECK-NEXT: ret828 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0829 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer830 %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)831 ret <vscale x 8 x i16> %v832}833 834define <vscale x 8 x i16> @vsaddu_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {835; CHECK-LABEL: vsaddu_vi_nxv8i16:836; CHECK: # %bb.0:837; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma838; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t839; CHECK-NEXT: ret840 %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 -1), <vscale x 8 x i1> %m, i32 %evl)841 ret <vscale x 8 x i16> %v842}843 844define <vscale x 8 x i16> @vsaddu_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {845; CHECK-LABEL: vsaddu_vi_nxv8i16_unmasked:846; CHECK: # %bb.0:847; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma848; CHECK-NEXT: vsaddu.vi v8, v8, -1849; CHECK-NEXT: ret850 %v = call <vscale x 8 x i16> @llvm.vp.uadd.sat.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)851 ret <vscale x 8 x i16> %v852}853 854define <vscale x 16 x i16> @vsaddu_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {855; CHECK-LABEL: vsaddu_vv_nxv16i16:856; CHECK: # %bb.0:857; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma858; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t859; CHECK-NEXT: ret860 %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)861 ret <vscale x 16 x i16> %v862}863 864define <vscale x 16 x i16> @vsaddu_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {865; CHECK-LABEL: vsaddu_vv_nxv16i16_unmasked:866; CHECK: # %bb.0:867; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma868; CHECK-NEXT: vsaddu.vv v8, v8, v12869; CHECK-NEXT: ret870 %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)871 ret <vscale x 16 x i16> %v872}873 874define <vscale x 16 x i16> @vsaddu_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {875; CHECK-LABEL: vsaddu_vx_nxv16i16:876; CHECK: # %bb.0:877; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma878; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t879; CHECK-NEXT: ret880 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0881 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer882 %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)883 ret <vscale x 16 x i16> %v884}885 886define <vscale x 16 x i16> @vsaddu_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {887; CHECK-LABEL: vsaddu_vx_nxv16i16_unmasked:888; CHECK: # %bb.0:889; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma890; CHECK-NEXT: vsaddu.vx v8, v8, a0891; CHECK-NEXT: ret892 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0893 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer894 %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)895 ret <vscale x 16 x i16> %v896}897 898define <vscale x 16 x i16> @vsaddu_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {899; CHECK-LABEL: vsaddu_vi_nxv16i16:900; CHECK: # %bb.0:901; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma902; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t903; CHECK-NEXT: ret904 %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 -1), <vscale x 16 x i1> %m, i32 %evl)905 ret <vscale x 16 x i16> %v906}907 908define <vscale x 16 x i16> @vsaddu_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {909; CHECK-LABEL: vsaddu_vi_nxv16i16_unmasked:910; CHECK: # %bb.0:911; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma912; CHECK-NEXT: vsaddu.vi v8, v8, -1913; CHECK-NEXT: ret914 %v = call <vscale x 16 x i16> @llvm.vp.uadd.sat.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)915 ret <vscale x 16 x i16> %v916}917 918define <vscale x 32 x i16> @vsaddu_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {919; CHECK-LABEL: vsaddu_vv_nxv32i16:920; CHECK: # %bb.0:921; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma922; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t923; CHECK-NEXT: ret924 %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)925 ret <vscale x 32 x i16> %v926}927 928define <vscale x 32 x i16> @vsaddu_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {929; CHECK-LABEL: vsaddu_vv_nxv32i16_unmasked:930; CHECK: # %bb.0:931; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma932; CHECK-NEXT: vsaddu.vv v8, v8, v16933; CHECK-NEXT: ret934 %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)935 ret <vscale x 32 x i16> %v936}937 938define <vscale x 32 x i16> @vsaddu_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {939; CHECK-LABEL: vsaddu_vx_nxv32i16:940; CHECK: # %bb.0:941; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma942; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t943; CHECK-NEXT: ret944 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0945 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer946 %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)947 ret <vscale x 32 x i16> %v948}949 950define <vscale x 32 x i16> @vsaddu_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {951; CHECK-LABEL: vsaddu_vx_nxv32i16_unmasked:952; CHECK: # %bb.0:953; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma954; CHECK-NEXT: vsaddu.vx v8, v8, a0955; CHECK-NEXT: ret956 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0957 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer958 %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)959 ret <vscale x 32 x i16> %v960}961 962define <vscale x 32 x i16> @vsaddu_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {963; CHECK-LABEL: vsaddu_vi_nxv32i16:964; CHECK: # %bb.0:965; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma966; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t967; CHECK-NEXT: ret968 %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 -1), <vscale x 32 x i1> %m, i32 %evl)969 ret <vscale x 32 x i16> %v970}971 972define <vscale x 32 x i16> @vsaddu_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {973; CHECK-LABEL: vsaddu_vi_nxv32i16_unmasked:974; CHECK: # %bb.0:975; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma976; CHECK-NEXT: vsaddu.vi v8, v8, -1977; CHECK-NEXT: ret978 %v = call <vscale x 32 x i16> @llvm.vp.uadd.sat.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)979 ret <vscale x 32 x i16> %v980}981 982define <vscale x 1 x i32> @vsaddu_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {983; CHECK-LABEL: vsaddu_vv_nxv1i32:984; CHECK: # %bb.0:985; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma986; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t987; CHECK-NEXT: ret988 %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)989 ret <vscale x 1 x i32> %v990}991 992define <vscale x 1 x i32> @vsaddu_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {993; CHECK-LABEL: vsaddu_vv_nxv1i32_unmasked:994; CHECK: # %bb.0:995; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma996; CHECK-NEXT: vsaddu.vv v8, v8, v9997; CHECK-NEXT: ret998 %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)999 ret <vscale x 1 x i32> %v1000}1001 1002define <vscale x 1 x i32> @vsaddu_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1003; CHECK-LABEL: vsaddu_vx_nxv1i32:1004; CHECK: # %bb.0:1005; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma1006; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t1007; CHECK-NEXT: ret1008 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 01009 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer1010 %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)1011 ret <vscale x 1 x i32> %v1012}1013 1014define <vscale x 1 x i32> @vsaddu_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {1015; CHECK-LABEL: vsaddu_vx_nxv1i32_unmasked:1016; CHECK: # %bb.0:1017; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma1018; CHECK-NEXT: vsaddu.vx v8, v8, a01019; CHECK-NEXT: ret1020 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 01021 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer1022 %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)1023 ret <vscale x 1 x i32> %v1024}1025 1026define <vscale x 1 x i32> @vsaddu_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {1027; CHECK-LABEL: vsaddu_vi_nxv1i32:1028; CHECK: # %bb.0:1029; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma1030; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t1031; CHECK-NEXT: ret1032 %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 -1), <vscale x 1 x i1> %m, i32 %evl)1033 ret <vscale x 1 x i32> %v1034}1035 1036define <vscale x 1 x i32> @vsaddu_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {1037; CHECK-LABEL: vsaddu_vi_nxv1i32_unmasked:1038; CHECK: # %bb.0:1039; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma1040; CHECK-NEXT: vsaddu.vi v8, v8, -11041; CHECK-NEXT: ret1042 %v = call <vscale x 1 x i32> @llvm.vp.uadd.sat.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)1043 ret <vscale x 1 x i32> %v1044}1045 1046define <vscale x 2 x i32> @vsaddu_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1047; CHECK-LABEL: vsaddu_vv_nxv2i32:1048; CHECK: # %bb.0:1049; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma1050; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t1051; CHECK-NEXT: ret1052 %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)1053 ret <vscale x 2 x i32> %v1054}1055 1056define <vscale x 2 x i32> @vsaddu_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {1057; CHECK-LABEL: vsaddu_vv_nxv2i32_unmasked:1058; CHECK: # %bb.0:1059; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma1060; CHECK-NEXT: vsaddu.vv v8, v8, v91061; CHECK-NEXT: ret1062 %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)1063 ret <vscale x 2 x i32> %v1064}1065 1066define <vscale x 2 x i32> @vsaddu_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1067; CHECK-LABEL: vsaddu_vx_nxv2i32:1068; CHECK: # %bb.0:1069; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma1070; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t1071; CHECK-NEXT: ret1072 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 01073 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer1074 %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)1075 ret <vscale x 2 x i32> %v1076}1077 1078define <vscale x 2 x i32> @vsaddu_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {1079; CHECK-LABEL: vsaddu_vx_nxv2i32_unmasked:1080; CHECK: # %bb.0:1081; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma1082; CHECK-NEXT: vsaddu.vx v8, v8, a01083; CHECK-NEXT: ret1084 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 01085 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer1086 %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)1087 ret <vscale x 2 x i32> %v1088}1089 1090define <vscale x 2 x i32> @vsaddu_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {1091; CHECK-LABEL: vsaddu_vi_nxv2i32:1092; CHECK: # %bb.0:1093; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma1094; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t1095; CHECK-NEXT: ret1096 %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 -1), <vscale x 2 x i1> %m, i32 %evl)1097 ret <vscale x 2 x i32> %v1098}1099 1100define <vscale x 2 x i32> @vsaddu_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {1101; CHECK-LABEL: vsaddu_vi_nxv2i32_unmasked:1102; CHECK: # %bb.0:1103; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma1104; CHECK-NEXT: vsaddu.vi v8, v8, -11105; CHECK-NEXT: ret1106 %v = call <vscale x 2 x i32> @llvm.vp.uadd.sat.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)1107 ret <vscale x 2 x i32> %v1108}1109 1110define <vscale x 4 x i32> @vsaddu_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1111; CHECK-LABEL: vsaddu_vv_nxv4i32:1112; CHECK: # %bb.0:1113; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1114; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t1115; CHECK-NEXT: ret1116 %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)1117 ret <vscale x 4 x i32> %v1118}1119 1120define <vscale x 4 x i32> @vsaddu_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {1121; CHECK-LABEL: vsaddu_vv_nxv4i32_unmasked:1122; CHECK: # %bb.0:1123; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1124; CHECK-NEXT: vsaddu.vv v8, v8, v101125; CHECK-NEXT: ret1126 %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)1127 ret <vscale x 4 x i32> %v1128}1129 1130define <vscale x 4 x i32> @vsaddu_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1131; CHECK-LABEL: vsaddu_vx_nxv4i32:1132; CHECK: # %bb.0:1133; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma1134; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t1135; CHECK-NEXT: ret1136 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 01137 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1138 %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)1139 ret <vscale x 4 x i32> %v1140}1141 1142define <vscale x 4 x i32> @vsaddu_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {1143; CHECK-LABEL: vsaddu_vx_nxv4i32_unmasked:1144; CHECK: # %bb.0:1145; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma1146; CHECK-NEXT: vsaddu.vx v8, v8, a01147; CHECK-NEXT: ret1148 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 01149 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer1150 %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)1151 ret <vscale x 4 x i32> %v1152}1153 1154define <vscale x 4 x i32> @vsaddu_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {1155; CHECK-LABEL: vsaddu_vi_nxv4i32:1156; CHECK: # %bb.0:1157; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1158; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t1159; CHECK-NEXT: ret1160 %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 -1), <vscale x 4 x i1> %m, i32 %evl)1161 ret <vscale x 4 x i32> %v1162}1163 1164define <vscale x 4 x i32> @vsaddu_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {1165; CHECK-LABEL: vsaddu_vi_nxv4i32_unmasked:1166; CHECK: # %bb.0:1167; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma1168; CHECK-NEXT: vsaddu.vi v8, v8, -11169; CHECK-NEXT: ret1170 %v = call <vscale x 4 x i32> @llvm.vp.uadd.sat.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)1171 ret <vscale x 4 x i32> %v1172}1173 1174define <vscale x 8 x i32> @vsaddu_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1175; CHECK-LABEL: vsaddu_vv_nxv8i32:1176; CHECK: # %bb.0:1177; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma1178; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t1179; CHECK-NEXT: ret1180 %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)1181 ret <vscale x 8 x i32> %v1182}1183 1184define <vscale x 8 x i32> @vsaddu_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {1185; CHECK-LABEL: vsaddu_vv_nxv8i32_unmasked:1186; CHECK: # %bb.0:1187; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma1188; CHECK-NEXT: vsaddu.vv v8, v8, v121189; CHECK-NEXT: ret1190 %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)1191 ret <vscale x 8 x i32> %v1192}1193 1194define <vscale x 8 x i32> @vsaddu_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1195; CHECK-LABEL: vsaddu_vx_nxv8i32:1196; CHECK: # %bb.0:1197; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma1198; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t1199; CHECK-NEXT: ret1200 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 01201 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer1202 %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)1203 ret <vscale x 8 x i32> %v1204}1205 1206define <vscale x 8 x i32> @vsaddu_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {1207; CHECK-LABEL: vsaddu_vx_nxv8i32_unmasked:1208; CHECK: # %bb.0:1209; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma1210; CHECK-NEXT: vsaddu.vx v8, v8, a01211; CHECK-NEXT: ret1212 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 01213 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer1214 %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)1215 ret <vscale x 8 x i32> %v1216}1217 1218define <vscale x 8 x i32> @vsaddu_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1219; CHECK-LABEL: vsaddu_vi_nxv8i32:1220; CHECK: # %bb.0:1221; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma1222; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t1223; CHECK-NEXT: ret1224 %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 -1), <vscale x 8 x i1> %m, i32 %evl)1225 ret <vscale x 8 x i32> %v1226}1227 1228define <vscale x 8 x i32> @vsaddu_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {1229; CHECK-LABEL: vsaddu_vi_nxv8i32_unmasked:1230; CHECK: # %bb.0:1231; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma1232; CHECK-NEXT: vsaddu.vi v8, v8, -11233; CHECK-NEXT: ret1234 %v = call <vscale x 8 x i32> @llvm.vp.uadd.sat.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)1235 ret <vscale x 8 x i32> %v1236}1237 1238define <vscale x 16 x i32> @vsaddu_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {1239; CHECK-LABEL: vsaddu_vv_nxv16i32:1240; CHECK: # %bb.0:1241; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma1242; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t1243; CHECK-NEXT: ret1244 %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)1245 ret <vscale x 16 x i32> %v1246}1247 1248define <vscale x 16 x i32> @vsaddu_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {1249; CHECK-LABEL: vsaddu_vv_nxv16i32_unmasked:1250; CHECK: # %bb.0:1251; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma1252; CHECK-NEXT: vsaddu.vv v8, v8, v161253; CHECK-NEXT: ret1254 %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)1255 ret <vscale x 16 x i32> %v1256}1257 1258define <vscale x 16 x i32> @vsaddu_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {1259; CHECK-LABEL: vsaddu_vx_nxv16i32:1260; CHECK: # %bb.0:1261; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma1262; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t1263; CHECK-NEXT: ret1264 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 01265 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer1266 %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)1267 ret <vscale x 16 x i32> %v1268}1269 1270define <vscale x 16 x i32> @vsaddu_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {1271; CHECK-LABEL: vsaddu_vx_nxv16i32_unmasked:1272; CHECK: # %bb.0:1273; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma1274; CHECK-NEXT: vsaddu.vx v8, v8, a01275; CHECK-NEXT: ret1276 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 01277 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer1278 %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)1279 ret <vscale x 16 x i32> %v1280}1281 1282define <vscale x 16 x i32> @vsaddu_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {1283; CHECK-LABEL: vsaddu_vi_nxv16i32:1284; CHECK: # %bb.0:1285; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma1286; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t1287; CHECK-NEXT: ret1288 %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 -1), <vscale x 16 x i1> %m, i32 %evl)1289 ret <vscale x 16 x i32> %v1290}1291 1292define <vscale x 16 x i32> @vsaddu_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {1293; CHECK-LABEL: vsaddu_vi_nxv16i32_unmasked:1294; CHECK: # %bb.0:1295; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma1296; CHECK-NEXT: vsaddu.vi v8, v8, -11297; CHECK-NEXT: ret1298 %v = call <vscale x 16 x i32> @llvm.vp.uadd.sat.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)1299 ret <vscale x 16 x i32> %v1300}1301 1302; Test that split-legalization works then the mask needs manual splitting.1303 1304define <vscale x 32 x i32> @vsaddu_vi_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {1305; CHECK-LABEL: vsaddu_vi_nxv32i32:1306; CHECK: # %bb.0:1307; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma1308; CHECK-NEXT: vmv1r.v v24, v01309; CHECK-NEXT: csrr a1, vlenb1310; CHECK-NEXT: srli a2, a1, 21311; CHECK-NEXT: slli a1, a1, 11312; CHECK-NEXT: vslidedown.vx v0, v0, a21313; CHECK-NEXT: sub a2, a0, a11314; CHECK-NEXT: sltu a3, a0, a21315; CHECK-NEXT: addi a3, a3, -11316; CHECK-NEXT: and a2, a3, a21317; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma1318; CHECK-NEXT: vsaddu.vi v16, v16, -1, v0.t1319; CHECK-NEXT: bltu a0, a1, .LBB118_21320; CHECK-NEXT: # %bb.1:1321; CHECK-NEXT: mv a0, a11322; CHECK-NEXT: .LBB118_2:1323; CHECK-NEXT: vmv1r.v v0, v241324; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma1325; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t1326; CHECK-NEXT: ret1327 %v = call <vscale x 32 x i32> @llvm.vp.uadd.sat.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> splat (i32 -1), <vscale x 32 x i1> %m, i32 %evl)1328 ret <vscale x 32 x i32> %v1329}1330 1331define <vscale x 32 x i32> @vsaddu_vi_nxv32i32_unmasked(<vscale x 32 x i32> %va, i32 zeroext %evl) {1332; CHECK-LABEL: vsaddu_vi_nxv32i32_unmasked:1333; CHECK: # %bb.0:1334; CHECK-NEXT: csrr a1, vlenb1335; CHECK-NEXT: slli a1, a1, 11336; CHECK-NEXT: sub a2, a0, a11337; CHECK-NEXT: sltu a3, a0, a21338; CHECK-NEXT: addi a3, a3, -11339; CHECK-NEXT: and a2, a3, a21340; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma1341; CHECK-NEXT: vsaddu.vi v16, v16, -11342; CHECK-NEXT: bltu a0, a1, .LBB119_21343; CHECK-NEXT: # %bb.1:1344; CHECK-NEXT: mv a0, a11345; CHECK-NEXT: .LBB119_2:1346; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma1347; CHECK-NEXT: vsaddu.vi v8, v8, -11348; CHECK-NEXT: ret1349 %v = call <vscale x 32 x i32> @llvm.vp.uadd.sat.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)1350 ret <vscale x 32 x i32> %v1351}1352 1353define <vscale x 1 x i64> @vsaddu_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1354; CHECK-LABEL: vsaddu_vv_nxv1i64:1355; CHECK: # %bb.0:1356; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma1357; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t1358; CHECK-NEXT: ret1359 %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)1360 ret <vscale x 1 x i64> %v1361}1362 1363define <vscale x 1 x i64> @vsaddu_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {1364; CHECK-LABEL: vsaddu_vv_nxv1i64_unmasked:1365; CHECK: # %bb.0:1366; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma1367; CHECK-NEXT: vsaddu.vv v8, v8, v91368; CHECK-NEXT: ret1369 %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)1370 ret <vscale x 1 x i64> %v1371}1372 1373define <vscale x 1 x i64> @vsaddu_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1374; RV32-LABEL: vsaddu_vx_nxv1i64:1375; RV32: # %bb.0:1376; RV32-NEXT: addi sp, sp, -161377; RV32-NEXT: .cfi_def_cfa_offset 161378; RV32-NEXT: sw a0, 8(sp)1379; RV32-NEXT: sw a1, 12(sp)1380; RV32-NEXT: addi a0, sp, 81381; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma1382; RV32-NEXT: vlse64.v v9, (a0), zero1383; RV32-NEXT: vsaddu.vv v8, v8, v9, v0.t1384; RV32-NEXT: addi sp, sp, 161385; RV32-NEXT: .cfi_def_cfa_offset 01386; RV32-NEXT: ret1387;1388; RV64-LABEL: vsaddu_vx_nxv1i64:1389; RV64: # %bb.0:1390; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma1391; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t1392; RV64-NEXT: ret1393 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01394 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1395 %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)1396 ret <vscale x 1 x i64> %v1397}1398 1399define <vscale x 1 x i64> @vsaddu_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {1400; RV32-LABEL: vsaddu_vx_nxv1i64_unmasked:1401; RV32: # %bb.0:1402; RV32-NEXT: addi sp, sp, -161403; RV32-NEXT: .cfi_def_cfa_offset 161404; RV32-NEXT: sw a0, 8(sp)1405; RV32-NEXT: sw a1, 12(sp)1406; RV32-NEXT: addi a0, sp, 81407; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma1408; RV32-NEXT: vlse64.v v9, (a0), zero1409; RV32-NEXT: vsaddu.vv v8, v8, v91410; RV32-NEXT: addi sp, sp, 161411; RV32-NEXT: .cfi_def_cfa_offset 01412; RV32-NEXT: ret1413;1414; RV64-LABEL: vsaddu_vx_nxv1i64_unmasked:1415; RV64: # %bb.0:1416; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma1417; RV64-NEXT: vsaddu.vx v8, v8, a01418; RV64-NEXT: ret1419 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01420 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1421 %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)1422 ret <vscale x 1 x i64> %v1423}1424 1425define <vscale x 1 x i64> @vsaddu_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {1426; CHECK-LABEL: vsaddu_vi_nxv1i64:1427; CHECK: # %bb.0:1428; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma1429; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t1430; CHECK-NEXT: ret1431 %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 -1), <vscale x 1 x i1> %m, i32 %evl)1432 ret <vscale x 1 x i64> %v1433}1434 1435define <vscale x 1 x i64> @vsaddu_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {1436; CHECK-LABEL: vsaddu_vi_nxv1i64_unmasked:1437; CHECK: # %bb.0:1438; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma1439; CHECK-NEXT: vsaddu.vi v8, v8, -11440; CHECK-NEXT: ret1441 %v = call <vscale x 1 x i64> @llvm.vp.uadd.sat.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)1442 ret <vscale x 1 x i64> %v1443}1444 1445define <vscale x 2 x i64> @vsaddu_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1446; CHECK-LABEL: vsaddu_vv_nxv2i64:1447; CHECK: # %bb.0:1448; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma1449; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t1450; CHECK-NEXT: ret1451 %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)1452 ret <vscale x 2 x i64> %v1453}1454 1455define <vscale x 2 x i64> @vsaddu_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {1456; CHECK-LABEL: vsaddu_vv_nxv2i64_unmasked:1457; CHECK: # %bb.0:1458; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma1459; CHECK-NEXT: vsaddu.vv v8, v8, v101460; CHECK-NEXT: ret1461 %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)1462 ret <vscale x 2 x i64> %v1463}1464 1465define <vscale x 2 x i64> @vsaddu_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1466; RV32-LABEL: vsaddu_vx_nxv2i64:1467; RV32: # %bb.0:1468; RV32-NEXT: addi sp, sp, -161469; RV32-NEXT: .cfi_def_cfa_offset 161470; RV32-NEXT: sw a0, 8(sp)1471; RV32-NEXT: sw a1, 12(sp)1472; RV32-NEXT: addi a0, sp, 81473; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma1474; RV32-NEXT: vlse64.v v10, (a0), zero1475; RV32-NEXT: vsaddu.vv v8, v8, v10, v0.t1476; RV32-NEXT: addi sp, sp, 161477; RV32-NEXT: .cfi_def_cfa_offset 01478; RV32-NEXT: ret1479;1480; RV64-LABEL: vsaddu_vx_nxv2i64:1481; RV64: # %bb.0:1482; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma1483; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t1484; RV64-NEXT: ret1485 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01486 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1487 %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)1488 ret <vscale x 2 x i64> %v1489}1490 1491define <vscale x 2 x i64> @vsaddu_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {1492; RV32-LABEL: vsaddu_vx_nxv2i64_unmasked:1493; RV32: # %bb.0:1494; RV32-NEXT: addi sp, sp, -161495; RV32-NEXT: .cfi_def_cfa_offset 161496; RV32-NEXT: sw a0, 8(sp)1497; RV32-NEXT: sw a1, 12(sp)1498; RV32-NEXT: addi a0, sp, 81499; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma1500; RV32-NEXT: vlse64.v v10, (a0), zero1501; RV32-NEXT: vsaddu.vv v8, v8, v101502; RV32-NEXT: addi sp, sp, 161503; RV32-NEXT: .cfi_def_cfa_offset 01504; RV32-NEXT: ret1505;1506; RV64-LABEL: vsaddu_vx_nxv2i64_unmasked:1507; RV64: # %bb.0:1508; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma1509; RV64-NEXT: vsaddu.vx v8, v8, a01510; RV64-NEXT: ret1511 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01512 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1513 %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)1514 ret <vscale x 2 x i64> %v1515}1516 1517define <vscale x 2 x i64> @vsaddu_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {1518; CHECK-LABEL: vsaddu_vi_nxv2i64:1519; CHECK: # %bb.0:1520; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma1521; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t1522; CHECK-NEXT: ret1523 %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 -1), <vscale x 2 x i1> %m, i32 %evl)1524 ret <vscale x 2 x i64> %v1525}1526 1527define <vscale x 2 x i64> @vsaddu_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {1528; CHECK-LABEL: vsaddu_vi_nxv2i64_unmasked:1529; CHECK: # %bb.0:1530; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma1531; CHECK-NEXT: vsaddu.vi v8, v8, -11532; CHECK-NEXT: ret1533 %v = call <vscale x 2 x i64> @llvm.vp.uadd.sat.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)1534 ret <vscale x 2 x i64> %v1535}1536 1537define <vscale x 4 x i64> @vsaddu_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1538; CHECK-LABEL: vsaddu_vv_nxv4i64:1539; CHECK: # %bb.0:1540; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1541; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t1542; CHECK-NEXT: ret1543 %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)1544 ret <vscale x 4 x i64> %v1545}1546 1547define <vscale x 4 x i64> @vsaddu_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {1548; CHECK-LABEL: vsaddu_vv_nxv4i64_unmasked:1549; CHECK: # %bb.0:1550; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1551; CHECK-NEXT: vsaddu.vv v8, v8, v121552; CHECK-NEXT: ret1553 %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)1554 ret <vscale x 4 x i64> %v1555}1556 1557define <vscale x 4 x i64> @vsaddu_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1558; RV32-LABEL: vsaddu_vx_nxv4i64:1559; RV32: # %bb.0:1560; RV32-NEXT: addi sp, sp, -161561; RV32-NEXT: .cfi_def_cfa_offset 161562; RV32-NEXT: sw a0, 8(sp)1563; RV32-NEXT: sw a1, 12(sp)1564; RV32-NEXT: addi a0, sp, 81565; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1566; RV32-NEXT: vlse64.v v12, (a0), zero1567; RV32-NEXT: vsaddu.vv v8, v8, v12, v0.t1568; RV32-NEXT: addi sp, sp, 161569; RV32-NEXT: .cfi_def_cfa_offset 01570; RV32-NEXT: ret1571;1572; RV64-LABEL: vsaddu_vx_nxv4i64:1573; RV64: # %bb.0:1574; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1575; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t1576; RV64-NEXT: ret1577 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01578 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1579 %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)1580 ret <vscale x 4 x i64> %v1581}1582 1583define <vscale x 4 x i64> @vsaddu_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {1584; RV32-LABEL: vsaddu_vx_nxv4i64_unmasked:1585; RV32: # %bb.0:1586; RV32-NEXT: addi sp, sp, -161587; RV32-NEXT: .cfi_def_cfa_offset 161588; RV32-NEXT: sw a0, 8(sp)1589; RV32-NEXT: sw a1, 12(sp)1590; RV32-NEXT: addi a0, sp, 81591; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1592; RV32-NEXT: vlse64.v v12, (a0), zero1593; RV32-NEXT: vsaddu.vv v8, v8, v121594; RV32-NEXT: addi sp, sp, 161595; RV32-NEXT: .cfi_def_cfa_offset 01596; RV32-NEXT: ret1597;1598; RV64-LABEL: vsaddu_vx_nxv4i64_unmasked:1599; RV64: # %bb.0:1600; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1601; RV64-NEXT: vsaddu.vx v8, v8, a01602; RV64-NEXT: ret1603 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01604 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1605 %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)1606 ret <vscale x 4 x i64> %v1607}1608 1609define <vscale x 4 x i64> @vsaddu_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {1610; CHECK-LABEL: vsaddu_vi_nxv4i64:1611; CHECK: # %bb.0:1612; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1613; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t1614; CHECK-NEXT: ret1615 %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 -1), <vscale x 4 x i1> %m, i32 %evl)1616 ret <vscale x 4 x i64> %v1617}1618 1619define <vscale x 4 x i64> @vsaddu_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {1620; CHECK-LABEL: vsaddu_vi_nxv4i64_unmasked:1621; CHECK: # %bb.0:1622; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1623; CHECK-NEXT: vsaddu.vi v8, v8, -11624; CHECK-NEXT: ret1625 %v = call <vscale x 4 x i64> @llvm.vp.uadd.sat.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)1626 ret <vscale x 4 x i64> %v1627}1628 1629define <vscale x 8 x i64> @vsaddu_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1630; CHECK-LABEL: vsaddu_vv_nxv8i64:1631; CHECK: # %bb.0:1632; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1633; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t1634; CHECK-NEXT: ret1635 %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)1636 ret <vscale x 8 x i64> %v1637}1638 1639define <vscale x 8 x i64> @vsaddu_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {1640; CHECK-LABEL: vsaddu_vv_nxv8i64_unmasked:1641; CHECK: # %bb.0:1642; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1643; CHECK-NEXT: vsaddu.vv v8, v8, v161644; CHECK-NEXT: ret1645 %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)1646 ret <vscale x 8 x i64> %v1647}1648 1649define <vscale x 8 x i64> @vsaddu_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1650; RV32-LABEL: vsaddu_vx_nxv8i64:1651; RV32: # %bb.0:1652; RV32-NEXT: addi sp, sp, -161653; RV32-NEXT: .cfi_def_cfa_offset 161654; RV32-NEXT: sw a0, 8(sp)1655; RV32-NEXT: sw a1, 12(sp)1656; RV32-NEXT: addi a0, sp, 81657; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma1658; RV32-NEXT: vlse64.v v16, (a0), zero1659; RV32-NEXT: vsaddu.vv v8, v8, v16, v0.t1660; RV32-NEXT: addi sp, sp, 161661; RV32-NEXT: .cfi_def_cfa_offset 01662; RV32-NEXT: ret1663;1664; RV64-LABEL: vsaddu_vx_nxv8i64:1665; RV64: # %bb.0:1666; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma1667; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t1668; RV64-NEXT: ret1669 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01670 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1671 %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1672 ret <vscale x 8 x i64> %v1673}1674 1675define <vscale x 8 x i64> @vsaddu_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {1676; RV32-LABEL: vsaddu_vx_nxv8i64_unmasked:1677; RV32: # %bb.0:1678; RV32-NEXT: addi sp, sp, -161679; RV32-NEXT: .cfi_def_cfa_offset 161680; RV32-NEXT: sw a0, 8(sp)1681; RV32-NEXT: sw a1, 12(sp)1682; RV32-NEXT: addi a0, sp, 81683; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma1684; RV32-NEXT: vlse64.v v16, (a0), zero1685; RV32-NEXT: vsaddu.vv v8, v8, v161686; RV32-NEXT: addi sp, sp, 161687; RV32-NEXT: .cfi_def_cfa_offset 01688; RV32-NEXT: ret1689;1690; RV64-LABEL: vsaddu_vx_nxv8i64_unmasked:1691; RV64: # %bb.0:1692; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma1693; RV64-NEXT: vsaddu.vx v8, v8, a01694; RV64-NEXT: ret1695 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01696 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1697 %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)1698 ret <vscale x 8 x i64> %v1699}1700 1701define <vscale x 8 x i64> @vsaddu_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {1702; CHECK-LABEL: vsaddu_vi_nxv8i64:1703; CHECK: # %bb.0:1704; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1705; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t1706; CHECK-NEXT: ret1707 %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 -1), <vscale x 8 x i1> %m, i32 %evl)1708 ret <vscale x 8 x i64> %v1709}1710 1711define <vscale x 8 x i64> @vsaddu_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {1712; CHECK-LABEL: vsaddu_vi_nxv8i64_unmasked:1713; CHECK: # %bb.0:1714; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1715; CHECK-NEXT: vsaddu.vi v8, v8, -11716; CHECK-NEXT: ret1717 %v = call <vscale x 8 x i64> @llvm.vp.uadd.sat.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)1718 ret <vscale x 8 x i64> %v1719}1720