1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \ 3; RUN: | FileCheck %s --check-prefixes=CHECK,RV32 4; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \ 5; RUN: | FileCheck %s --check-prefixes=CHECK,RV64 6 7declare <vscale x 8 x i7> @llvm.vp.uadd.sat.nxv8i7(<vscale x 8 x i7>, <vscale x 8 x i7>, <vscale x 8 x i1>, i32) 8 9define <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) { 10; CHECK-LABEL: vsaddu_vx_nxv8i7: 11; CHECK: # %bb.0: 12; CHECK-NEXT: li a2, 127 13; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 14; CHECK-NEXT: vmv.v.x v9, a0 15; CHECK-NEXT: vand.vx v8, v8, a2 16; CHECK-NEXT: vand.vx v9, v9, a2 17; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t 18; CHECK-NEXT: vminu.vx v8, v8, a2, v0.t 19; CHECK-NEXT: ret 20 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0 21 %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer 22 %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) 23 ret <vscale x 8 x i7> %v 24} 25 26declare <vscale x 1 x i8> @llvm.vp.uadd.sat.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32) 27 28define <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) { 29; CHECK-LABEL: vsaddu_vv_nxv1i8: 30; CHECK: # %bb.0: 31; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 32; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t 33; CHECK-NEXT: ret 34 %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) 35 ret <vscale x 1 x i8> %v 36} 37 38define <vscale x 1 x i8> @vsaddu_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) { 39; CHECK-LABEL: vsaddu_vv_nxv1i8_unmasked: 40; CHECK: # %bb.0: 41; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 42; CHECK-NEXT: vsaddu.vv v8, v8, v9 43; CHECK-NEXT: ret 44 %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) 45 ret <vscale x 1 x i8> %v 46} 47 48define <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) { 49; CHECK-LABEL: vsaddu_vx_nxv1i8: 50; CHECK: # %bb.0: 51; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 52; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 53; CHECK-NEXT: ret 54 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0 55 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer 56 %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) 57 ret <vscale x 1 x i8> %v 58} 59 60define <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) { 61; CHECK-LABEL: vsaddu_vx_nxv1i8_commute: 62; CHECK: # %bb.0: 63; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 64; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 65; CHECK-NEXT: ret 66 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0 67 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer 68 %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) 69 ret <vscale x 1 x i8> %v 70} 71 72define <vscale x 1 x i8> @vsaddu_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) { 73; CHECK-LABEL: vsaddu_vx_nxv1i8_unmasked: 74; CHECK: # %bb.0: 75; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 76; CHECK-NEXT: vsaddu.vx v8, v8, a0 77; CHECK-NEXT: ret 78 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0 79 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer 80 %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) 81 ret <vscale x 1 x i8> %v 82} 83 84define <vscale x 1 x i8> @vsaddu_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) { 85; CHECK-LABEL: vsaddu_vi_nxv1i8: 86; CHECK: # %bb.0: 87; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 88; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 89; CHECK-NEXT: ret 90 %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) 91 ret <vscale x 1 x i8> %v 92} 93 94define <vscale x 1 x i8> @vsaddu_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) { 95; CHECK-LABEL: vsaddu_vi_nxv1i8_unmasked: 96; CHECK: # %bb.0: 97; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 98; CHECK-NEXT: vsaddu.vi v8, v8, -1 99; CHECK-NEXT: ret 100 %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) 101 ret <vscale x 1 x i8> %v 102} 103 104declare <vscale x 2 x i8> @llvm.vp.uadd.sat.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32) 105 106define <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) { 107; CHECK-LABEL: vsaddu_vv_nxv2i8: 108; CHECK: # %bb.0: 109; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 110; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t 111; CHECK-NEXT: ret 112 %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) 113 ret <vscale x 2 x i8> %v 114} 115 116define <vscale x 2 x i8> @vsaddu_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) { 117; CHECK-LABEL: vsaddu_vv_nxv2i8_unmasked: 118; CHECK: # %bb.0: 119; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 120; CHECK-NEXT: vsaddu.vv v8, v8, v9 121; CHECK-NEXT: ret 122 %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) 123 ret <vscale x 2 x i8> %v 124} 125 126define <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) { 127; CHECK-LABEL: vsaddu_vx_nxv2i8: 128; CHECK: # %bb.0: 129; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 130; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 131; CHECK-NEXT: ret 132 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0 133 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer 134 %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) 135 ret <vscale x 2 x i8> %v 136} 137 138define <vscale x 2 x i8> @vsaddu_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) { 139; CHECK-LABEL: vsaddu_vx_nxv2i8_unmasked: 140; CHECK: # %bb.0: 141; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 142; CHECK-NEXT: vsaddu.vx v8, v8, a0 143; CHECK-NEXT: ret 144 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0 145 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer 146 %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) 147 ret <vscale x 2 x i8> %v 148} 149 150define <vscale x 2 x i8> @vsaddu_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 151; CHECK-LABEL: vsaddu_vi_nxv2i8: 152; CHECK: # %bb.0: 153; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 154; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 155; CHECK-NEXT: ret 156 %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) 157 ret <vscale x 2 x i8> %v 158} 159 160define <vscale x 2 x i8> @vsaddu_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) { 161; CHECK-LABEL: vsaddu_vi_nxv2i8_unmasked: 162; CHECK: # %bb.0: 163; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 164; CHECK-NEXT: vsaddu.vi v8, v8, -1 165; CHECK-NEXT: ret 166 %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) 167 ret <vscale x 2 x i8> %v 168} 169 170declare <vscale x 3 x i8> @llvm.vp.uadd.sat.nxv3i8(<vscale x 3 x i8>, <vscale x 3 x i8>, <vscale x 3 x i1>, i32) 171 172define <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) { 173; CHECK-LABEL: vsaddu_vv_nxv3i8: 174; CHECK: # %bb.0: 175; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 176; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t 177; CHECK-NEXT: ret 178 %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) 179 ret <vscale x 3 x i8> %v 180} 181 182define <vscale x 3 x i8> @vsaddu_vv_nxv3i8_unmasked(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, i32 zeroext %evl) { 183; CHECK-LABEL: vsaddu_vv_nxv3i8_unmasked: 184; CHECK: # %bb.0: 185; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 186; CHECK-NEXT: vsaddu.vv v8, v8, v9 187; CHECK-NEXT: ret 188 %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) 189 ret <vscale x 3 x i8> %v 190} 191 192define <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) { 193; CHECK-LABEL: vsaddu_vx_nxv3i8: 194; CHECK: # %bb.0: 195; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 196; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 197; CHECK-NEXT: ret 198 %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0 199 %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer 200 %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) 201 ret <vscale x 3 x i8> %v 202} 203 204define <vscale x 3 x i8> @vsaddu_vx_nxv3i8_unmasked(<vscale x 3 x i8> %va, i8 %b, i32 zeroext %evl) { 205; CHECK-LABEL: vsaddu_vx_nxv3i8_unmasked: 206; CHECK: # %bb.0: 207; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 208; CHECK-NEXT: vsaddu.vx v8, v8, a0 209; CHECK-NEXT: ret 210 %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0 211 %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer 212 %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) 213 ret <vscale x 3 x i8> %v 214} 215 216define <vscale x 3 x i8> @vsaddu_vi_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i1> %m, i32 zeroext %evl) { 217; CHECK-LABEL: vsaddu_vi_nxv3i8: 218; CHECK: # %bb.0: 219; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 220; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 221; CHECK-NEXT: ret 222 %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) 223 ret <vscale x 3 x i8> %v 224} 225 226define <vscale x 3 x i8> @vsaddu_vi_nxv3i8_unmasked(<vscale x 3 x i8> %va, i32 zeroext %evl) { 227; CHECK-LABEL: vsaddu_vi_nxv3i8_unmasked: 228; CHECK: # %bb.0: 229; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 230; CHECK-NEXT: vsaddu.vi v8, v8, -1 231; CHECK-NEXT: ret 232 %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) 233 ret <vscale x 3 x i8> %v 234} 235 236declare <vscale x 4 x i8> @llvm.vp.uadd.sat.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32) 237 238define <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) { 239; CHECK-LABEL: vsaddu_vv_nxv4i8: 240; CHECK: # %bb.0: 241; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 242; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t 243; CHECK-NEXT: ret 244 %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) 245 ret <vscale x 4 x i8> %v 246} 247 248define <vscale x 4 x i8> @vsaddu_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) { 249; CHECK-LABEL: vsaddu_vv_nxv4i8_unmasked: 250; CHECK: # %bb.0: 251; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 252; CHECK-NEXT: vsaddu.vv v8, v8, v9 253; CHECK-NEXT: ret 254 %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) 255 ret <vscale x 4 x i8> %v 256} 257 258define <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) { 259; CHECK-LABEL: vsaddu_vx_nxv4i8: 260; CHECK: # %bb.0: 261; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 262; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 263; CHECK-NEXT: ret 264 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0 265 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer 266 %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) 267 ret <vscale x 4 x i8> %v 268} 269 270define <vscale x 4 x i8> @vsaddu_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) { 271; CHECK-LABEL: vsaddu_vx_nxv4i8_unmasked: 272; CHECK: # %bb.0: 273; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 274; CHECK-NEXT: vsaddu.vx v8, v8, a0 275; CHECK-NEXT: ret 276 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0 277 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer 278 %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) 279 ret <vscale x 4 x i8> %v 280} 281 282define <vscale x 4 x i8> @vsaddu_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) { 283; CHECK-LABEL: vsaddu_vi_nxv4i8: 284; CHECK: # %bb.0: 285; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 286; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 287; CHECK-NEXT: ret 288 %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) 289 ret <vscale x 4 x i8> %v 290} 291 292define <vscale x 4 x i8> @vsaddu_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) { 293; CHECK-LABEL: vsaddu_vi_nxv4i8_unmasked: 294; CHECK: # %bb.0: 295; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 296; CHECK-NEXT: vsaddu.vi v8, v8, -1 297; CHECK-NEXT: ret 298 %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) 299 ret <vscale x 4 x i8> %v 300} 301 302declare <vscale x 8 x i8> @llvm.vp.uadd.sat.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32) 303 304define <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) { 305; CHECK-LABEL: vsaddu_vv_nxv8i8: 306; CHECK: # %bb.0: 307; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 308; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t 309; CHECK-NEXT: ret 310 %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) 311 ret <vscale x 8 x i8> %v 312} 313 314define <vscale x 8 x i8> @vsaddu_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) { 315; CHECK-LABEL: vsaddu_vv_nxv8i8_unmasked: 316; CHECK: # %bb.0: 317; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 318; CHECK-NEXT: vsaddu.vv v8, v8, v9 319; CHECK-NEXT: ret 320 %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) 321 ret <vscale x 8 x i8> %v 322} 323 324define <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) { 325; CHECK-LABEL: vsaddu_vx_nxv8i8: 326; CHECK: # %bb.0: 327; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 328; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 329; CHECK-NEXT: ret 330 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 331 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 332 %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) 333 ret <vscale x 8 x i8> %v 334} 335 336define <vscale x 8 x i8> @vsaddu_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) { 337; CHECK-LABEL: vsaddu_vx_nxv8i8_unmasked: 338; CHECK: # %bb.0: 339; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 340; CHECK-NEXT: vsaddu.vx v8, v8, a0 341; CHECK-NEXT: ret 342 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0 343 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer 344 %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) 345 ret <vscale x 8 x i8> %v 346} 347 348define <vscale x 8 x i8> @vsaddu_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) { 349; CHECK-LABEL: vsaddu_vi_nxv8i8: 350; CHECK: # %bb.0: 351; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 352; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 353; CHECK-NEXT: ret 354 %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) 355 ret <vscale x 8 x i8> %v 356} 357 358define <vscale x 8 x i8> @vsaddu_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) { 359; CHECK-LABEL: vsaddu_vi_nxv8i8_unmasked: 360; CHECK: # %bb.0: 361; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 362; CHECK-NEXT: vsaddu.vi v8, v8, -1 363; CHECK-NEXT: ret 364 %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) 365 ret <vscale x 8 x i8> %v 366} 367 368declare <vscale x 16 x i8> @llvm.vp.uadd.sat.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32) 369 370define <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) { 371; CHECK-LABEL: vsaddu_vv_nxv16i8: 372; CHECK: # %bb.0: 373; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 374; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t 375; CHECK-NEXT: ret 376 %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) 377 ret <vscale x 16 x i8> %v 378} 379 380define <vscale x 16 x i8> @vsaddu_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) { 381; CHECK-LABEL: vsaddu_vv_nxv16i8_unmasked: 382; CHECK: # %bb.0: 383; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 384; CHECK-NEXT: vsaddu.vv v8, v8, v10 385; CHECK-NEXT: ret 386 %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) 387 ret <vscale x 16 x i8> %v 388} 389 390define <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) { 391; CHECK-LABEL: vsaddu_vx_nxv16i8: 392; CHECK: # %bb.0: 393; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma 394; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 395; CHECK-NEXT: ret 396 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0 397 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer 398 %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) 399 ret <vscale x 16 x i8> %v 400} 401 402define <vscale x 16 x i8> @vsaddu_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) { 403; CHECK-LABEL: vsaddu_vx_nxv16i8_unmasked: 404; CHECK: # %bb.0: 405; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma 406; CHECK-NEXT: vsaddu.vx v8, v8, a0 407; CHECK-NEXT: ret 408 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0 409 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer 410 %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) 411 ret <vscale x 16 x i8> %v 412} 413 414define <vscale x 16 x i8> @vsaddu_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) { 415; CHECK-LABEL: vsaddu_vi_nxv16i8: 416; CHECK: # %bb.0: 417; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 418; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 419; CHECK-NEXT: ret 420 %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) 421 ret <vscale x 16 x i8> %v 422} 423 424define <vscale x 16 x i8> @vsaddu_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) { 425; CHECK-LABEL: vsaddu_vi_nxv16i8_unmasked: 426; CHECK: # %bb.0: 427; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 428; CHECK-NEXT: vsaddu.vi v8, v8, -1 429; CHECK-NEXT: ret 430 %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) 431 ret <vscale x 16 x i8> %v 432} 433 434declare <vscale x 32 x i8> @llvm.vp.uadd.sat.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32) 435 436define <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) { 437; CHECK-LABEL: vsaddu_vv_nxv32i8: 438; CHECK: # %bb.0: 439; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 440; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t 441; CHECK-NEXT: ret 442 %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) 443 ret <vscale x 32 x i8> %v 444} 445 446define <vscale x 32 x i8> @vsaddu_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) { 447; CHECK-LABEL: vsaddu_vv_nxv32i8_unmasked: 448; CHECK: # %bb.0: 449; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 450; CHECK-NEXT: vsaddu.vv v8, v8, v12 451; CHECK-NEXT: ret 452 %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) 453 ret <vscale x 32 x i8> %v 454} 455 456define <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) { 457; CHECK-LABEL: vsaddu_vx_nxv32i8: 458; CHECK: # %bb.0: 459; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma 460; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 461; CHECK-NEXT: ret 462 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0 463 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer 464 %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) 465 ret <vscale x 32 x i8> %v 466} 467 468define <vscale x 32 x i8> @vsaddu_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) { 469; CHECK-LABEL: vsaddu_vx_nxv32i8_unmasked: 470; CHECK: # %bb.0: 471; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma 472; CHECK-NEXT: vsaddu.vx v8, v8, a0 473; CHECK-NEXT: ret 474 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0 475 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer 476 %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) 477 ret <vscale x 32 x i8> %v 478} 479 480define <vscale x 32 x i8> @vsaddu_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) { 481; CHECK-LABEL: vsaddu_vi_nxv32i8: 482; CHECK: # %bb.0: 483; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 484; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 485; CHECK-NEXT: ret 486 %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) 487 ret <vscale x 32 x i8> %v 488} 489 490define <vscale x 32 x i8> @vsaddu_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) { 491; CHECK-LABEL: vsaddu_vi_nxv32i8_unmasked: 492; CHECK: # %bb.0: 493; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 494; CHECK-NEXT: vsaddu.vi v8, v8, -1 495; CHECK-NEXT: ret 496 %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) 497 ret <vscale x 32 x i8> %v 498} 499 500declare <vscale x 64 x i8> @llvm.vp.uadd.sat.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32) 501 502define <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) { 503; CHECK-LABEL: vsaddu_vv_nxv64i8: 504; CHECK: # %bb.0: 505; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 506; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t 507; CHECK-NEXT: ret 508 %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) 509 ret <vscale x 64 x i8> %v 510} 511 512define <vscale x 64 x i8> @vsaddu_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) { 513; CHECK-LABEL: vsaddu_vv_nxv64i8_unmasked: 514; CHECK: # %bb.0: 515; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 516; CHECK-NEXT: vsaddu.vv v8, v8, v16 517; CHECK-NEXT: ret 518 %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) 519 ret <vscale x 64 x i8> %v 520} 521 522define <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) { 523; CHECK-LABEL: vsaddu_vx_nxv64i8: 524; CHECK: # %bb.0: 525; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma 526; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 527; CHECK-NEXT: ret 528 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0 529 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer 530 %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) 531 ret <vscale x 64 x i8> %v 532} 533 534define <vscale x 64 x i8> @vsaddu_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) { 535; CHECK-LABEL: vsaddu_vx_nxv64i8_unmasked: 536; CHECK: # %bb.0: 537; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma 538; CHECK-NEXT: vsaddu.vx v8, v8, a0 539; CHECK-NEXT: ret 540 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0 541 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer 542 %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) 543 ret <vscale x 64 x i8> %v 544} 545 546define <vscale x 64 x i8> @vsaddu_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) { 547; CHECK-LABEL: vsaddu_vi_nxv64i8: 548; CHECK: # %bb.0: 549; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 550; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 551; CHECK-NEXT: ret 552 %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) 553 ret <vscale x 64 x i8> %v 554} 555 556define <vscale x 64 x i8> @vsaddu_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) { 557; CHECK-LABEL: vsaddu_vi_nxv64i8_unmasked: 558; CHECK: # %bb.0: 559; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 560; CHECK-NEXT: vsaddu.vi v8, v8, -1 561; CHECK-NEXT: ret 562 %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) 563 ret <vscale x 64 x i8> %v 564} 565 566; Test that split-legalization works when the mask itself needs splitting. 567 568declare <vscale x 128 x i8> @llvm.vp.uadd.sat.nxv128i8(<vscale x 128 x i8>, <vscale x 128 x i8>, <vscale x 128 x i1>, i32) 569 570define <vscale x 128 x i8> @vsaddu_vi_nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i1> %m, i32 zeroext %evl) { 571; CHECK-LABEL: vsaddu_vi_nxv128i8: 572; CHECK: # %bb.0: 573; CHECK-NEXT: vsetvli a2, zero, e8, m8, ta, ma 574; CHECK-NEXT: vmv1r.v v24, v0 575; CHECK-NEXT: vlm.v v0, (a0) 576; CHECK-NEXT: csrr a0, vlenb 577; CHECK-NEXT: slli a0, a0, 3 578; CHECK-NEXT: sub a2, a1, a0 579; CHECK-NEXT: sltu a3, a1, a2 580; CHECK-NEXT: addi a3, a3, -1 581; CHECK-NEXT: and a2, a3, a2 582; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma 583; CHECK-NEXT: vsaddu.vi v16, v16, -1, v0.t 584; CHECK-NEXT: bltu a1, a0, .LBB50_2 585; CHECK-NEXT: # %bb.1: 586; CHECK-NEXT: mv a1, a0 587; CHECK-NEXT: .LBB50_2: 588; CHECK-NEXT: vmv1r.v v0, v24 589; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma 590; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 591; CHECK-NEXT: ret 592 %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) 593 ret <vscale x 128 x i8> %v 594} 595 596define <vscale x 128 x i8> @vsaddu_vi_nxv128i8_unmasked(<vscale x 128 x i8> %va, i32 zeroext %evl) { 597; CHECK-LABEL: vsaddu_vi_nxv128i8_unmasked: 598; CHECK: # %bb.0: 599; CHECK-NEXT: csrr a1, vlenb 600; CHECK-NEXT: slli a1, a1, 3 601; CHECK-NEXT: sub a2, a0, a1 602; CHECK-NEXT: sltu a3, a0, a2 603; CHECK-NEXT: addi a3, a3, -1 604; CHECK-NEXT: and a2, a3, a2 605; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma 606; CHECK-NEXT: vsaddu.vi v16, v16, -1 607; CHECK-NEXT: bltu a0, a1, .LBB51_2 608; CHECK-NEXT: # %bb.1: 609; CHECK-NEXT: mv a0, a1 610; CHECK-NEXT: .LBB51_2: 611; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 612; CHECK-NEXT: vsaddu.vi v8, v8, -1 613; CHECK-NEXT: ret 614 %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) 615 ret <vscale x 128 x i8> %v 616} 617 618declare <vscale x 1 x i16> @llvm.vp.uadd.sat.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32) 619 620define <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) { 621; CHECK-LABEL: vsaddu_vv_nxv1i16: 622; CHECK: # %bb.0: 623; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 624; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t 625; CHECK-NEXT: ret 626 %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) 627 ret <vscale x 1 x i16> %v 628} 629 630define <vscale x 1 x i16> @vsaddu_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) { 631; CHECK-LABEL: vsaddu_vv_nxv1i16_unmasked: 632; CHECK: # %bb.0: 633; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 634; CHECK-NEXT: vsaddu.vv v8, v8, v9 635; CHECK-NEXT: ret 636 %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) 637 ret <vscale x 1 x i16> %v 638} 639 640define <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) { 641; CHECK-LABEL: vsaddu_vx_nxv1i16: 642; CHECK: # %bb.0: 643; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 644; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 645; CHECK-NEXT: ret 646 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0 647 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer 648 %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) 649 ret <vscale x 1 x i16> %v 650} 651 652define <vscale x 1 x i16> @vsaddu_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) { 653; CHECK-LABEL: vsaddu_vx_nxv1i16_unmasked: 654; CHECK: # %bb.0: 655; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 656; CHECK-NEXT: vsaddu.vx v8, v8, a0 657; CHECK-NEXT: ret 658 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0 659 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer 660 %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) 661 ret <vscale x 1 x i16> %v 662} 663 664define <vscale x 1 x i16> @vsaddu_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) { 665; CHECK-LABEL: vsaddu_vi_nxv1i16: 666; CHECK: # %bb.0: 667; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 668; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 669; CHECK-NEXT: ret 670 %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) 671 ret <vscale x 1 x i16> %v 672} 673 674define <vscale x 1 x i16> @vsaddu_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) { 675; CHECK-LABEL: vsaddu_vi_nxv1i16_unmasked: 676; CHECK: # %bb.0: 677; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 678; CHECK-NEXT: vsaddu.vi v8, v8, -1 679; CHECK-NEXT: ret 680 %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) 681 ret <vscale x 1 x i16> %v 682} 683 684declare <vscale x 2 x i16> @llvm.vp.uadd.sat.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32) 685 686define <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) { 687; CHECK-LABEL: vsaddu_vv_nxv2i16: 688; CHECK: # %bb.0: 689; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 690; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t 691; CHECK-NEXT: ret 692 %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) 693 ret <vscale x 2 x i16> %v 694} 695 696define <vscale x 2 x i16> @vsaddu_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) { 697; CHECK-LABEL: vsaddu_vv_nxv2i16_unmasked: 698; CHECK: # %bb.0: 699; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 700; CHECK-NEXT: vsaddu.vv v8, v8, v9 701; CHECK-NEXT: ret 702 %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) 703 ret <vscale x 2 x i16> %v 704} 705 706define <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) { 707; CHECK-LABEL: vsaddu_vx_nxv2i16: 708; CHECK: # %bb.0: 709; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 710; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 711; CHECK-NEXT: ret 712 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0 713 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer 714 %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) 715 ret <vscale x 2 x i16> %v 716} 717 718define <vscale x 2 x i16> @vsaddu_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) { 719; CHECK-LABEL: vsaddu_vx_nxv2i16_unmasked: 720; CHECK: # %bb.0: 721; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 722; CHECK-NEXT: vsaddu.vx v8, v8, a0 723; CHECK-NEXT: ret 724 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0 725 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer 726 %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) 727 ret <vscale x 2 x i16> %v 728} 729 730define <vscale x 2 x i16> @vsaddu_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 731; CHECK-LABEL: vsaddu_vi_nxv2i16: 732; CHECK: # %bb.0: 733; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 734; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 735; CHECK-NEXT: ret 736 %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) 737 ret <vscale x 2 x i16> %v 738} 739 740define <vscale x 2 x i16> @vsaddu_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) { 741; CHECK-LABEL: vsaddu_vi_nxv2i16_unmasked: 742; CHECK: # %bb.0: 743; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 744; CHECK-NEXT: vsaddu.vi v8, v8, -1 745; CHECK-NEXT: ret 746 %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) 747 ret <vscale x 2 x i16> %v 748} 749 750declare <vscale x 4 x i16> @llvm.vp.uadd.sat.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32) 751 752define <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) { 753; CHECK-LABEL: vsaddu_vv_nxv4i16: 754; CHECK: # %bb.0: 755; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 756; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t 757; CHECK-NEXT: ret 758 %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) 759 ret <vscale x 4 x i16> %v 760} 761 762define <vscale x 4 x i16> @vsaddu_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) { 763; CHECK-LABEL: vsaddu_vv_nxv4i16_unmasked: 764; CHECK: # %bb.0: 765; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 766; CHECK-NEXT: vsaddu.vv v8, v8, v9 767; CHECK-NEXT: ret 768 %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) 769 ret <vscale x 4 x i16> %v 770} 771 772define <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) { 773; CHECK-LABEL: vsaddu_vx_nxv4i16: 774; CHECK: # %bb.0: 775; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 776; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 777; CHECK-NEXT: ret 778 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0 779 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer 780 %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) 781 ret <vscale x 4 x i16> %v 782} 783 784define <vscale x 4 x i16> @vsaddu_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) { 785; CHECK-LABEL: vsaddu_vx_nxv4i16_unmasked: 786; CHECK: # %bb.0: 787; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 788; CHECK-NEXT: vsaddu.vx v8, v8, a0 789; CHECK-NEXT: ret 790 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0 791 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer 792 %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) 793 ret <vscale x 4 x i16> %v 794} 795 796define <vscale x 4 x i16> @vsaddu_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) { 797; CHECK-LABEL: vsaddu_vi_nxv4i16: 798; CHECK: # %bb.0: 799; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 800; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 801; CHECK-NEXT: ret 802 %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) 803 ret <vscale x 4 x i16> %v 804} 805 806define <vscale x 4 x i16> @vsaddu_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) { 807; CHECK-LABEL: vsaddu_vi_nxv4i16_unmasked: 808; CHECK: # %bb.0: 809; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 810; CHECK-NEXT: vsaddu.vi v8, v8, -1 811; CHECK-NEXT: ret 812 %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) 813 ret <vscale x 4 x i16> %v 814} 815 816declare <vscale x 8 x i16> @llvm.vp.uadd.sat.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32) 817 818define <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) { 819; CHECK-LABEL: vsaddu_vv_nxv8i16: 820; CHECK: # %bb.0: 821; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 822; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t 823; CHECK-NEXT: ret 824 %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) 825 ret <vscale x 8 x i16> %v 826} 827 828define <vscale x 8 x i16> @vsaddu_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) { 829; CHECK-LABEL: vsaddu_vv_nxv8i16_unmasked: 830; CHECK: # %bb.0: 831; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 832; CHECK-NEXT: vsaddu.vv v8, v8, v10 833; CHECK-NEXT: ret 834 %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) 835 ret <vscale x 8 x i16> %v 836} 837 838define <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) { 839; CHECK-LABEL: vsaddu_vx_nxv8i16: 840; CHECK: # %bb.0: 841; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 842; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 843; CHECK-NEXT: ret 844 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 845 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 846 %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) 847 ret <vscale x 8 x i16> %v 848} 849 850define <vscale x 8 x i16> @vsaddu_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) { 851; CHECK-LABEL: vsaddu_vx_nxv8i16_unmasked: 852; CHECK: # %bb.0: 853; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 854; CHECK-NEXT: vsaddu.vx v8, v8, a0 855; CHECK-NEXT: ret 856 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0 857 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer 858 %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) 859 ret <vscale x 8 x i16> %v 860} 861 862define <vscale x 8 x i16> @vsaddu_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) { 863; CHECK-LABEL: vsaddu_vi_nxv8i16: 864; CHECK: # %bb.0: 865; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 866; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 867; CHECK-NEXT: ret 868 %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) 869 ret <vscale x 8 x i16> %v 870} 871 872define <vscale x 8 x i16> @vsaddu_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) { 873; CHECK-LABEL: vsaddu_vi_nxv8i16_unmasked: 874; CHECK: # %bb.0: 875; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 876; CHECK-NEXT: vsaddu.vi v8, v8, -1 877; CHECK-NEXT: ret 878 %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) 879 ret <vscale x 8 x i16> %v 880} 881 882declare <vscale x 16 x i16> @llvm.vp.uadd.sat.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32) 883 884define <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) { 885; CHECK-LABEL: vsaddu_vv_nxv16i16: 886; CHECK: # %bb.0: 887; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 888; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t 889; CHECK-NEXT: ret 890 %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) 891 ret <vscale x 16 x i16> %v 892} 893 894define <vscale x 16 x i16> @vsaddu_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) { 895; CHECK-LABEL: vsaddu_vv_nxv16i16_unmasked: 896; CHECK: # %bb.0: 897; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 898; CHECK-NEXT: vsaddu.vv v8, v8, v12 899; CHECK-NEXT: ret 900 %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) 901 ret <vscale x 16 x i16> %v 902} 903 904define <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) { 905; CHECK-LABEL: vsaddu_vx_nxv16i16: 906; CHECK: # %bb.0: 907; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma 908; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 909; CHECK-NEXT: ret 910 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0 911 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer 912 %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) 913 ret <vscale x 16 x i16> %v 914} 915 916define <vscale x 16 x i16> @vsaddu_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) { 917; CHECK-LABEL: vsaddu_vx_nxv16i16_unmasked: 918; CHECK: # %bb.0: 919; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma 920; CHECK-NEXT: vsaddu.vx v8, v8, a0 921; CHECK-NEXT: ret 922 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0 923 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer 924 %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) 925 ret <vscale x 16 x i16> %v 926} 927 928define <vscale x 16 x i16> @vsaddu_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) { 929; CHECK-LABEL: vsaddu_vi_nxv16i16: 930; CHECK: # %bb.0: 931; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 932; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 933; CHECK-NEXT: ret 934 %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) 935 ret <vscale x 16 x i16> %v 936} 937 938define <vscale x 16 x i16> @vsaddu_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) { 939; CHECK-LABEL: vsaddu_vi_nxv16i16_unmasked: 940; CHECK: # %bb.0: 941; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 942; CHECK-NEXT: vsaddu.vi v8, v8, -1 943; CHECK-NEXT: ret 944 %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) 945 ret <vscale x 16 x i16> %v 946} 947 948declare <vscale x 32 x i16> @llvm.vp.uadd.sat.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32) 949 950define <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) { 951; CHECK-LABEL: vsaddu_vv_nxv32i16: 952; CHECK: # %bb.0: 953; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 954; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t 955; CHECK-NEXT: ret 956 %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) 957 ret <vscale x 32 x i16> %v 958} 959 960define <vscale x 32 x i16> @vsaddu_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) { 961; CHECK-LABEL: vsaddu_vv_nxv32i16_unmasked: 962; CHECK: # %bb.0: 963; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 964; CHECK-NEXT: vsaddu.vv v8, v8, v16 965; CHECK-NEXT: ret 966 %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) 967 ret <vscale x 32 x i16> %v 968} 969 970define <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) { 971; CHECK-LABEL: vsaddu_vx_nxv32i16: 972; CHECK: # %bb.0: 973; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 974; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 975; CHECK-NEXT: ret 976 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0 977 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer 978 %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) 979 ret <vscale x 32 x i16> %v 980} 981 982define <vscale x 32 x i16> @vsaddu_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) { 983; CHECK-LABEL: vsaddu_vx_nxv32i16_unmasked: 984; CHECK: # %bb.0: 985; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma 986; CHECK-NEXT: vsaddu.vx v8, v8, a0 987; CHECK-NEXT: ret 988 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0 989 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer 990 %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) 991 ret <vscale x 32 x i16> %v 992} 993 994define <vscale x 32 x i16> @vsaddu_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) { 995; CHECK-LABEL: vsaddu_vi_nxv32i16: 996; CHECK: # %bb.0: 997; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 998; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 999; CHECK-NEXT: ret 1000 %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) 1001 ret <vscale x 32 x i16> %v 1002} 1003 1004define <vscale x 32 x i16> @vsaddu_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) { 1005; CHECK-LABEL: vsaddu_vi_nxv32i16_unmasked: 1006; CHECK: # %bb.0: 1007; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 1008; CHECK-NEXT: vsaddu.vi v8, v8, -1 1009; CHECK-NEXT: ret 1010 %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) 1011 ret <vscale x 32 x i16> %v 1012} 1013 1014declare <vscale x 1 x i32> @llvm.vp.uadd.sat.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32) 1015 1016define <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) { 1017; CHECK-LABEL: vsaddu_vv_nxv1i32: 1018; CHECK: # %bb.0: 1019; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 1020; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t 1021; CHECK-NEXT: ret 1022 %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) 1023 ret <vscale x 1 x i32> %v 1024} 1025 1026define <vscale x 1 x i32> @vsaddu_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) { 1027; CHECK-LABEL: vsaddu_vv_nxv1i32_unmasked: 1028; CHECK: # %bb.0: 1029; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 1030; CHECK-NEXT: vsaddu.vv v8, v8, v9 1031; CHECK-NEXT: ret 1032 %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) 1033 ret <vscale x 1 x i32> %v 1034} 1035 1036define <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) { 1037; CHECK-LABEL: vsaddu_vx_nxv1i32: 1038; CHECK: # %bb.0: 1039; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 1040; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 1041; CHECK-NEXT: ret 1042 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0 1043 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer 1044 %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) 1045 ret <vscale x 1 x i32> %v 1046} 1047 1048define <vscale x 1 x i32> @vsaddu_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) { 1049; CHECK-LABEL: vsaddu_vx_nxv1i32_unmasked: 1050; CHECK: # %bb.0: 1051; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 1052; CHECK-NEXT: vsaddu.vx v8, v8, a0 1053; CHECK-NEXT: ret 1054 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0 1055 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer 1056 %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) 1057 ret <vscale x 1 x i32> %v 1058} 1059 1060define <vscale x 1 x i32> @vsaddu_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1061; CHECK-LABEL: vsaddu_vi_nxv1i32: 1062; CHECK: # %bb.0: 1063; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 1064; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 1065; CHECK-NEXT: ret 1066 %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) 1067 ret <vscale x 1 x i32> %v 1068} 1069 1070define <vscale x 1 x i32> @vsaddu_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) { 1071; CHECK-LABEL: vsaddu_vi_nxv1i32_unmasked: 1072; CHECK: # %bb.0: 1073; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 1074; CHECK-NEXT: vsaddu.vi v8, v8, -1 1075; CHECK-NEXT: ret 1076 %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) 1077 ret <vscale x 1 x i32> %v 1078} 1079 1080declare <vscale x 2 x i32> @llvm.vp.uadd.sat.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32) 1081 1082define <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) { 1083; CHECK-LABEL: vsaddu_vv_nxv2i32: 1084; CHECK: # %bb.0: 1085; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 1086; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t 1087; CHECK-NEXT: ret 1088 %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) 1089 ret <vscale x 2 x i32> %v 1090} 1091 1092define <vscale x 2 x i32> @vsaddu_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) { 1093; CHECK-LABEL: vsaddu_vv_nxv2i32_unmasked: 1094; CHECK: # %bb.0: 1095; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 1096; CHECK-NEXT: vsaddu.vv v8, v8, v9 1097; CHECK-NEXT: ret 1098 %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) 1099 ret <vscale x 2 x i32> %v 1100} 1101 1102define <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) { 1103; CHECK-LABEL: vsaddu_vx_nxv2i32: 1104; CHECK: # %bb.0: 1105; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 1106; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 1107; CHECK-NEXT: ret 1108 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0 1109 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer 1110 %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) 1111 ret <vscale x 2 x i32> %v 1112} 1113 1114define <vscale x 2 x i32> @vsaddu_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) { 1115; CHECK-LABEL: vsaddu_vx_nxv2i32_unmasked: 1116; CHECK: # %bb.0: 1117; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 1118; CHECK-NEXT: vsaddu.vx v8, v8, a0 1119; CHECK-NEXT: ret 1120 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0 1121 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer 1122 %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) 1123 ret <vscale x 2 x i32> %v 1124} 1125 1126define <vscale x 2 x i32> @vsaddu_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1127; CHECK-LABEL: vsaddu_vi_nxv2i32: 1128; CHECK: # %bb.0: 1129; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 1130; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 1131; CHECK-NEXT: ret 1132 %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) 1133 ret <vscale x 2 x i32> %v 1134} 1135 1136define <vscale x 2 x i32> @vsaddu_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) { 1137; CHECK-LABEL: vsaddu_vi_nxv2i32_unmasked: 1138; CHECK: # %bb.0: 1139; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 1140; CHECK-NEXT: vsaddu.vi v8, v8, -1 1141; CHECK-NEXT: ret 1142 %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) 1143 ret <vscale x 2 x i32> %v 1144} 1145 1146declare <vscale x 4 x i32> @llvm.vp.uadd.sat.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32) 1147 1148define <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) { 1149; CHECK-LABEL: vsaddu_vv_nxv4i32: 1150; CHECK: # %bb.0: 1151; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1152; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t 1153; CHECK-NEXT: ret 1154 %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) 1155 ret <vscale x 4 x i32> %v 1156} 1157 1158define <vscale x 4 x i32> @vsaddu_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) { 1159; CHECK-LABEL: vsaddu_vv_nxv4i32_unmasked: 1160; CHECK: # %bb.0: 1161; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1162; CHECK-NEXT: vsaddu.vv v8, v8, v10 1163; CHECK-NEXT: ret 1164 %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) 1165 ret <vscale x 4 x i32> %v 1166} 1167 1168define <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) { 1169; CHECK-LABEL: vsaddu_vx_nxv4i32: 1170; CHECK: # %bb.0: 1171; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1172; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 1173; CHECK-NEXT: ret 1174 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0 1175 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer 1176 %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) 1177 ret <vscale x 4 x i32> %v 1178} 1179 1180define <vscale x 4 x i32> @vsaddu_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) { 1181; CHECK-LABEL: vsaddu_vx_nxv4i32_unmasked: 1182; CHECK: # %bb.0: 1183; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 1184; CHECK-NEXT: vsaddu.vx v8, v8, a0 1185; CHECK-NEXT: ret 1186 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0 1187 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer 1188 %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) 1189 ret <vscale x 4 x i32> %v 1190} 1191 1192define <vscale x 4 x i32> @vsaddu_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) { 1193; CHECK-LABEL: vsaddu_vi_nxv4i32: 1194; CHECK: # %bb.0: 1195; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1196; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 1197; CHECK-NEXT: ret 1198 %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) 1199 ret <vscale x 4 x i32> %v 1200} 1201 1202define <vscale x 4 x i32> @vsaddu_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) { 1203; CHECK-LABEL: vsaddu_vi_nxv4i32_unmasked: 1204; CHECK: # %bb.0: 1205; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 1206; CHECK-NEXT: vsaddu.vi v8, v8, -1 1207; CHECK-NEXT: ret 1208 %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) 1209 ret <vscale x 4 x i32> %v 1210} 1211 1212declare <vscale x 8 x i32> @llvm.vp.uadd.sat.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32) 1213 1214define <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) { 1215; CHECK-LABEL: vsaddu_vv_nxv8i32: 1216; CHECK: # %bb.0: 1217; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 1218; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t 1219; CHECK-NEXT: ret 1220 %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) 1221 ret <vscale x 8 x i32> %v 1222} 1223 1224define <vscale x 8 x i32> @vsaddu_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) { 1225; CHECK-LABEL: vsaddu_vv_nxv8i32_unmasked: 1226; CHECK: # %bb.0: 1227; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 1228; CHECK-NEXT: vsaddu.vv v8, v8, v12 1229; CHECK-NEXT: ret 1230 %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) 1231 ret <vscale x 8 x i32> %v 1232} 1233 1234define <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) { 1235; CHECK-LABEL: vsaddu_vx_nxv8i32: 1236; CHECK: # %bb.0: 1237; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma 1238; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 1239; CHECK-NEXT: ret 1240 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1241 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1242 %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) 1243 ret <vscale x 8 x i32> %v 1244} 1245 1246define <vscale x 8 x i32> @vsaddu_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) { 1247; CHECK-LABEL: vsaddu_vx_nxv8i32_unmasked: 1248; CHECK: # %bb.0: 1249; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma 1250; CHECK-NEXT: vsaddu.vx v8, v8, a0 1251; CHECK-NEXT: ret 1252 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0 1253 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 1254 %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) 1255 ret <vscale x 8 x i32> %v 1256} 1257 1258define <vscale x 8 x i32> @vsaddu_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1259; CHECK-LABEL: vsaddu_vi_nxv8i32: 1260; CHECK: # %bb.0: 1261; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 1262; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 1263; CHECK-NEXT: ret 1264 %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) 1265 ret <vscale x 8 x i32> %v 1266} 1267 1268define <vscale x 8 x i32> @vsaddu_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) { 1269; CHECK-LABEL: vsaddu_vi_nxv8i32_unmasked: 1270; CHECK: # %bb.0: 1271; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 1272; CHECK-NEXT: vsaddu.vi v8, v8, -1 1273; CHECK-NEXT: ret 1274 %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) 1275 ret <vscale x 8 x i32> %v 1276} 1277 1278declare <vscale x 16 x i32> @llvm.vp.uadd.sat.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32) 1279 1280define <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) { 1281; CHECK-LABEL: vsaddu_vv_nxv16i32: 1282; CHECK: # %bb.0: 1283; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1284; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t 1285; CHECK-NEXT: ret 1286 %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) 1287 ret <vscale x 16 x i32> %v 1288} 1289 1290define <vscale x 16 x i32> @vsaddu_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) { 1291; CHECK-LABEL: vsaddu_vv_nxv16i32_unmasked: 1292; CHECK: # %bb.0: 1293; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1294; CHECK-NEXT: vsaddu.vv v8, v8, v16 1295; CHECK-NEXT: ret 1296 %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) 1297 ret <vscale x 16 x i32> %v 1298} 1299 1300define <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) { 1301; CHECK-LABEL: vsaddu_vx_nxv16i32: 1302; CHECK: # %bb.0: 1303; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 1304; CHECK-NEXT: vsaddu.vx v8, v8, a0, v0.t 1305; CHECK-NEXT: ret 1306 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0 1307 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer 1308 %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) 1309 ret <vscale x 16 x i32> %v 1310} 1311 1312define <vscale x 16 x i32> @vsaddu_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) { 1313; CHECK-LABEL: vsaddu_vx_nxv16i32_unmasked: 1314; CHECK: # %bb.0: 1315; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma 1316; CHECK-NEXT: vsaddu.vx v8, v8, a0 1317; CHECK-NEXT: ret 1318 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0 1319 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer 1320 %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) 1321 ret <vscale x 16 x i32> %v 1322} 1323 1324define <vscale x 16 x i32> @vsaddu_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) { 1325; CHECK-LABEL: vsaddu_vi_nxv16i32: 1326; CHECK: # %bb.0: 1327; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1328; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 1329; CHECK-NEXT: ret 1330 %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) 1331 ret <vscale x 16 x i32> %v 1332} 1333 1334define <vscale x 16 x i32> @vsaddu_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) { 1335; CHECK-LABEL: vsaddu_vi_nxv16i32_unmasked: 1336; CHECK: # %bb.0: 1337; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1338; CHECK-NEXT: vsaddu.vi v8, v8, -1 1339; CHECK-NEXT: ret 1340 %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) 1341 ret <vscale x 16 x i32> %v 1342} 1343 1344; Test that split-legalization works then the mask needs manual splitting. 1345 1346declare <vscale x 32 x i32> @llvm.vp.uadd.sat.nxv32i32(<vscale x 32 x i32>, <vscale x 32 x i32>, <vscale x 32 x i1>, i32) 1347 1348define <vscale x 32 x i32> @vsaddu_vi_nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) { 1349; CHECK-LABEL: vsaddu_vi_nxv32i32: 1350; CHECK: # %bb.0: 1351; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma 1352; CHECK-NEXT: vmv1r.v v24, v0 1353; CHECK-NEXT: csrr a1, vlenb 1354; CHECK-NEXT: srli a2, a1, 2 1355; CHECK-NEXT: slli a1, a1, 1 1356; CHECK-NEXT: vslidedown.vx v0, v0, a2 1357; CHECK-NEXT: sub a2, a0, a1 1358; CHECK-NEXT: sltu a3, a0, a2 1359; CHECK-NEXT: addi a3, a3, -1 1360; CHECK-NEXT: and a2, a3, a2 1361; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma 1362; CHECK-NEXT: vsaddu.vi v16, v16, -1, v0.t 1363; CHECK-NEXT: bltu a0, a1, .LBB118_2 1364; CHECK-NEXT: # %bb.1: 1365; CHECK-NEXT: mv a0, a1 1366; CHECK-NEXT: .LBB118_2: 1367; CHECK-NEXT: vmv1r.v v0, v24 1368; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1369; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 1370; CHECK-NEXT: ret 1371 %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) 1372 ret <vscale x 32 x i32> %v 1373} 1374 1375define <vscale x 32 x i32> @vsaddu_vi_nxv32i32_unmasked(<vscale x 32 x i32> %va, i32 zeroext %evl) { 1376; CHECK-LABEL: vsaddu_vi_nxv32i32_unmasked: 1377; CHECK: # %bb.0: 1378; CHECK-NEXT: csrr a1, vlenb 1379; CHECK-NEXT: slli a1, a1, 1 1380; CHECK-NEXT: sub a2, a0, a1 1381; CHECK-NEXT: sltu a3, a0, a2 1382; CHECK-NEXT: addi a3, a3, -1 1383; CHECK-NEXT: and a2, a3, a2 1384; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma 1385; CHECK-NEXT: vsaddu.vi v16, v16, -1 1386; CHECK-NEXT: bltu a0, a1, .LBB119_2 1387; CHECK-NEXT: # %bb.1: 1388; CHECK-NEXT: mv a0, a1 1389; CHECK-NEXT: .LBB119_2: 1390; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 1391; CHECK-NEXT: vsaddu.vi v8, v8, -1 1392; CHECK-NEXT: ret 1393 %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) 1394 ret <vscale x 32 x i32> %v 1395} 1396 1397declare <vscale x 1 x i64> @llvm.vp.uadd.sat.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32) 1398 1399define <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) { 1400; CHECK-LABEL: vsaddu_vv_nxv1i64: 1401; CHECK: # %bb.0: 1402; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1403; CHECK-NEXT: vsaddu.vv v8, v8, v9, v0.t 1404; CHECK-NEXT: ret 1405 %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) 1406 ret <vscale x 1 x i64> %v 1407} 1408 1409define <vscale x 1 x i64> @vsaddu_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) { 1410; CHECK-LABEL: vsaddu_vv_nxv1i64_unmasked: 1411; CHECK: # %bb.0: 1412; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1413; CHECK-NEXT: vsaddu.vv v8, v8, v9 1414; CHECK-NEXT: ret 1415 %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) 1416 ret <vscale x 1 x i64> %v 1417} 1418 1419define <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) { 1420; RV32-LABEL: vsaddu_vx_nxv1i64: 1421; RV32: # %bb.0: 1422; RV32-NEXT: addi sp, sp, -16 1423; RV32-NEXT: .cfi_def_cfa_offset 16 1424; RV32-NEXT: sw a0, 8(sp) 1425; RV32-NEXT: sw a1, 12(sp) 1426; RV32-NEXT: addi a0, sp, 8 1427; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma 1428; RV32-NEXT: vlse64.v v9, (a0), zero 1429; RV32-NEXT: vsaddu.vv v8, v8, v9, v0.t 1430; RV32-NEXT: addi sp, sp, 16 1431; RV32-NEXT: .cfi_def_cfa_offset 0 1432; RV32-NEXT: ret 1433; 1434; RV64-LABEL: vsaddu_vx_nxv1i64: 1435; RV64: # %bb.0: 1436; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma 1437; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t 1438; RV64-NEXT: ret 1439 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0 1440 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer 1441 %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) 1442 ret <vscale x 1 x i64> %v 1443} 1444 1445define <vscale x 1 x i64> @vsaddu_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) { 1446; RV32-LABEL: vsaddu_vx_nxv1i64_unmasked: 1447; RV32: # %bb.0: 1448; RV32-NEXT: addi sp, sp, -16 1449; RV32-NEXT: .cfi_def_cfa_offset 16 1450; RV32-NEXT: sw a0, 8(sp) 1451; RV32-NEXT: sw a1, 12(sp) 1452; RV32-NEXT: addi a0, sp, 8 1453; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma 1454; RV32-NEXT: vlse64.v v9, (a0), zero 1455; RV32-NEXT: vsaddu.vv v8, v8, v9 1456; RV32-NEXT: addi sp, sp, 16 1457; RV32-NEXT: .cfi_def_cfa_offset 0 1458; RV32-NEXT: ret 1459; 1460; RV64-LABEL: vsaddu_vx_nxv1i64_unmasked: 1461; RV64: # %bb.0: 1462; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma 1463; RV64-NEXT: vsaddu.vx v8, v8, a0 1464; RV64-NEXT: ret 1465 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0 1466 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer 1467 %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) 1468 ret <vscale x 1 x i64> %v 1469} 1470 1471define <vscale x 1 x i64> @vsaddu_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) { 1472; CHECK-LABEL: vsaddu_vi_nxv1i64: 1473; CHECK: # %bb.0: 1474; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1475; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 1476; CHECK-NEXT: ret 1477 %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) 1478 ret <vscale x 1 x i64> %v 1479} 1480 1481define <vscale x 1 x i64> @vsaddu_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) { 1482; CHECK-LABEL: vsaddu_vi_nxv1i64_unmasked: 1483; CHECK: # %bb.0: 1484; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1485; CHECK-NEXT: vsaddu.vi v8, v8, -1 1486; CHECK-NEXT: ret 1487 %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) 1488 ret <vscale x 1 x i64> %v 1489} 1490 1491declare <vscale x 2 x i64> @llvm.vp.uadd.sat.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32) 1492 1493define <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) { 1494; CHECK-LABEL: vsaddu_vv_nxv2i64: 1495; CHECK: # %bb.0: 1496; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1497; CHECK-NEXT: vsaddu.vv v8, v8, v10, v0.t 1498; CHECK-NEXT: ret 1499 %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) 1500 ret <vscale x 2 x i64> %v 1501} 1502 1503define <vscale x 2 x i64> @vsaddu_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) { 1504; CHECK-LABEL: vsaddu_vv_nxv2i64_unmasked: 1505; CHECK: # %bb.0: 1506; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1507; CHECK-NEXT: vsaddu.vv v8, v8, v10 1508; CHECK-NEXT: ret 1509 %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) 1510 ret <vscale x 2 x i64> %v 1511} 1512 1513define <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) { 1514; RV32-LABEL: vsaddu_vx_nxv2i64: 1515; RV32: # %bb.0: 1516; RV32-NEXT: addi sp, sp, -16 1517; RV32-NEXT: .cfi_def_cfa_offset 16 1518; RV32-NEXT: sw a0, 8(sp) 1519; RV32-NEXT: sw a1, 12(sp) 1520; RV32-NEXT: addi a0, sp, 8 1521; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma 1522; RV32-NEXT: vlse64.v v10, (a0), zero 1523; RV32-NEXT: vsaddu.vv v8, v8, v10, v0.t 1524; RV32-NEXT: addi sp, sp, 16 1525; RV32-NEXT: .cfi_def_cfa_offset 0 1526; RV32-NEXT: ret 1527; 1528; RV64-LABEL: vsaddu_vx_nxv2i64: 1529; RV64: # %bb.0: 1530; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma 1531; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t 1532; RV64-NEXT: ret 1533 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0 1534 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer 1535 %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) 1536 ret <vscale x 2 x i64> %v 1537} 1538 1539define <vscale x 2 x i64> @vsaddu_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) { 1540; RV32-LABEL: vsaddu_vx_nxv2i64_unmasked: 1541; RV32: # %bb.0: 1542; RV32-NEXT: addi sp, sp, -16 1543; RV32-NEXT: .cfi_def_cfa_offset 16 1544; RV32-NEXT: sw a0, 8(sp) 1545; RV32-NEXT: sw a1, 12(sp) 1546; RV32-NEXT: addi a0, sp, 8 1547; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma 1548; RV32-NEXT: vlse64.v v10, (a0), zero 1549; RV32-NEXT: vsaddu.vv v8, v8, v10 1550; RV32-NEXT: addi sp, sp, 16 1551; RV32-NEXT: .cfi_def_cfa_offset 0 1552; RV32-NEXT: ret 1553; 1554; RV64-LABEL: vsaddu_vx_nxv2i64_unmasked: 1555; RV64: # %bb.0: 1556; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma 1557; RV64-NEXT: vsaddu.vx v8, v8, a0 1558; RV64-NEXT: ret 1559 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0 1560 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer 1561 %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) 1562 ret <vscale x 2 x i64> %v 1563} 1564 1565define <vscale x 2 x i64> @vsaddu_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 1566; CHECK-LABEL: vsaddu_vi_nxv2i64: 1567; CHECK: # %bb.0: 1568; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1569; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 1570; CHECK-NEXT: ret 1571 %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) 1572 ret <vscale x 2 x i64> %v 1573} 1574 1575define <vscale x 2 x i64> @vsaddu_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) { 1576; CHECK-LABEL: vsaddu_vi_nxv2i64_unmasked: 1577; CHECK: # %bb.0: 1578; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1579; CHECK-NEXT: vsaddu.vi v8, v8, -1 1580; CHECK-NEXT: ret 1581 %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) 1582 ret <vscale x 2 x i64> %v 1583} 1584 1585declare <vscale x 4 x i64> @llvm.vp.uadd.sat.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32) 1586 1587define <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) { 1588; CHECK-LABEL: vsaddu_vv_nxv4i64: 1589; CHECK: # %bb.0: 1590; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1591; CHECK-NEXT: vsaddu.vv v8, v8, v12, v0.t 1592; CHECK-NEXT: ret 1593 %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) 1594 ret <vscale x 4 x i64> %v 1595} 1596 1597define <vscale x 4 x i64> @vsaddu_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) { 1598; CHECK-LABEL: vsaddu_vv_nxv4i64_unmasked: 1599; CHECK: # %bb.0: 1600; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1601; CHECK-NEXT: vsaddu.vv v8, v8, v12 1602; CHECK-NEXT: ret 1603 %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) 1604 ret <vscale x 4 x i64> %v 1605} 1606 1607define <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) { 1608; RV32-LABEL: vsaddu_vx_nxv4i64: 1609; RV32: # %bb.0: 1610; RV32-NEXT: addi sp, sp, -16 1611; RV32-NEXT: .cfi_def_cfa_offset 16 1612; RV32-NEXT: sw a0, 8(sp) 1613; RV32-NEXT: sw a1, 12(sp) 1614; RV32-NEXT: addi a0, sp, 8 1615; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1616; RV32-NEXT: vlse64.v v12, (a0), zero 1617; RV32-NEXT: vsaddu.vv v8, v8, v12, v0.t 1618; RV32-NEXT: addi sp, sp, 16 1619; RV32-NEXT: .cfi_def_cfa_offset 0 1620; RV32-NEXT: ret 1621; 1622; RV64-LABEL: vsaddu_vx_nxv4i64: 1623; RV64: # %bb.0: 1624; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1625; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t 1626; RV64-NEXT: ret 1627 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0 1628 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer 1629 %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) 1630 ret <vscale x 4 x i64> %v 1631} 1632 1633define <vscale x 4 x i64> @vsaddu_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) { 1634; RV32-LABEL: vsaddu_vx_nxv4i64_unmasked: 1635; RV32: # %bb.0: 1636; RV32-NEXT: addi sp, sp, -16 1637; RV32-NEXT: .cfi_def_cfa_offset 16 1638; RV32-NEXT: sw a0, 8(sp) 1639; RV32-NEXT: sw a1, 12(sp) 1640; RV32-NEXT: addi a0, sp, 8 1641; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1642; RV32-NEXT: vlse64.v v12, (a0), zero 1643; RV32-NEXT: vsaddu.vv v8, v8, v12 1644; RV32-NEXT: addi sp, sp, 16 1645; RV32-NEXT: .cfi_def_cfa_offset 0 1646; RV32-NEXT: ret 1647; 1648; RV64-LABEL: vsaddu_vx_nxv4i64_unmasked: 1649; RV64: # %bb.0: 1650; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1651; RV64-NEXT: vsaddu.vx v8, v8, a0 1652; RV64-NEXT: ret 1653 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0 1654 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer 1655 %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) 1656 ret <vscale x 4 x i64> %v 1657} 1658 1659define <vscale x 4 x i64> @vsaddu_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) { 1660; CHECK-LABEL: vsaddu_vi_nxv4i64: 1661; CHECK: # %bb.0: 1662; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1663; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 1664; CHECK-NEXT: ret 1665 %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) 1666 ret <vscale x 4 x i64> %v 1667} 1668 1669define <vscale x 4 x i64> @vsaddu_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) { 1670; CHECK-LABEL: vsaddu_vi_nxv4i64_unmasked: 1671; CHECK: # %bb.0: 1672; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1673; CHECK-NEXT: vsaddu.vi v8, v8, -1 1674; CHECK-NEXT: ret 1675 %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) 1676 ret <vscale x 4 x i64> %v 1677} 1678 1679declare <vscale x 8 x i64> @llvm.vp.uadd.sat.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32) 1680 1681define <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) { 1682; CHECK-LABEL: vsaddu_vv_nxv8i64: 1683; CHECK: # %bb.0: 1684; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1685; CHECK-NEXT: vsaddu.vv v8, v8, v16, v0.t 1686; CHECK-NEXT: ret 1687 %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) 1688 ret <vscale x 8 x i64> %v 1689} 1690 1691define <vscale x 8 x i64> @vsaddu_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) { 1692; CHECK-LABEL: vsaddu_vv_nxv8i64_unmasked: 1693; CHECK: # %bb.0: 1694; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1695; CHECK-NEXT: vsaddu.vv v8, v8, v16 1696; CHECK-NEXT: ret 1697 %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) 1698 ret <vscale x 8 x i64> %v 1699} 1700 1701define <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) { 1702; RV32-LABEL: vsaddu_vx_nxv8i64: 1703; RV32: # %bb.0: 1704; RV32-NEXT: addi sp, sp, -16 1705; RV32-NEXT: .cfi_def_cfa_offset 16 1706; RV32-NEXT: sw a0, 8(sp) 1707; RV32-NEXT: sw a1, 12(sp) 1708; RV32-NEXT: addi a0, sp, 8 1709; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma 1710; RV32-NEXT: vlse64.v v16, (a0), zero 1711; RV32-NEXT: vsaddu.vv v8, v8, v16, v0.t 1712; RV32-NEXT: addi sp, sp, 16 1713; RV32-NEXT: .cfi_def_cfa_offset 0 1714; RV32-NEXT: ret 1715; 1716; RV64-LABEL: vsaddu_vx_nxv8i64: 1717; RV64: # %bb.0: 1718; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma 1719; RV64-NEXT: vsaddu.vx v8, v8, a0, v0.t 1720; RV64-NEXT: ret 1721 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 1722 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 1723 %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) 1724 ret <vscale x 8 x i64> %v 1725} 1726 1727define <vscale x 8 x i64> @vsaddu_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) { 1728; RV32-LABEL: vsaddu_vx_nxv8i64_unmasked: 1729; RV32: # %bb.0: 1730; RV32-NEXT: addi sp, sp, -16 1731; RV32-NEXT: .cfi_def_cfa_offset 16 1732; RV32-NEXT: sw a0, 8(sp) 1733; RV32-NEXT: sw a1, 12(sp) 1734; RV32-NEXT: addi a0, sp, 8 1735; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma 1736; RV32-NEXT: vlse64.v v16, (a0), zero 1737; RV32-NEXT: vsaddu.vv v8, v8, v16 1738; RV32-NEXT: addi sp, sp, 16 1739; RV32-NEXT: .cfi_def_cfa_offset 0 1740; RV32-NEXT: ret 1741; 1742; RV64-LABEL: vsaddu_vx_nxv8i64_unmasked: 1743; RV64: # %bb.0: 1744; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma 1745; RV64-NEXT: vsaddu.vx v8, v8, a0 1746; RV64-NEXT: ret 1747 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0 1748 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 1749 %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) 1750 ret <vscale x 8 x i64> %v 1751} 1752 1753define <vscale x 8 x i64> @vsaddu_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) { 1754; CHECK-LABEL: vsaddu_vi_nxv8i64: 1755; CHECK: # %bb.0: 1756; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1757; CHECK-NEXT: vsaddu.vi v8, v8, -1, v0.t 1758; CHECK-NEXT: ret 1759 %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) 1760 ret <vscale x 8 x i64> %v 1761} 1762 1763define <vscale x 8 x i64> @vsaddu_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) { 1764; CHECK-LABEL: vsaddu_vi_nxv8i64_unmasked: 1765; CHECK: # %bb.0: 1766; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1767; CHECK-NEXT: vsaddu.vi v8, v8, -1 1768; CHECK-NEXT: ret 1769 %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) 1770 ret <vscale x 8 x i64> %v 1771} 1772