1850dde06SYeting Kuo; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2850dde06SYeting Kuo; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \ 3850dde06SYeting Kuo; RUN: | FileCheck %s --check-prefixes=CHECK,RV32 4850dde06SYeting Kuo; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \ 5850dde06SYeting Kuo; RUN: | FileCheck %s --check-prefixes=CHECK,RV64 6850dde06SYeting Kuo 7850dde06SYeting Kuodeclare <8 x i7> @llvm.vp.sadd.sat.v8i7(<8 x i7>, <8 x i7>, <8 x i1>, i32) 8850dde06SYeting Kuo 9850dde06SYeting Kuodefine <8 x i7> @vsadd_vv_v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 zeroext %evl) { 10850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i7: 11850dde06SYeting Kuo; CHECK: # %bb.0: 12850dde06SYeting Kuo; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 13850dde06SYeting Kuo; CHECK-NEXT: vadd.vv v9, v9, v9 14850dde06SYeting Kuo; CHECK-NEXT: vadd.vv v8, v8, v8 159122c523SPengcheng Wang; CHECK-NEXT: li a1, 63 169122c523SPengcheng Wang; CHECK-NEXT: vsra.vi v9, v9, 1 17850dde06SYeting Kuo; CHECK-NEXT: vsra.vi v8, v8, 1 18850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 19850dde06SYeting Kuo; CHECK-NEXT: vadd.vv v8, v8, v9, v0.t 209122c523SPengcheng Wang; CHECK-NEXT: vmin.vx v8, v8, a1, v0.t 21850dde06SYeting Kuo; CHECK-NEXT: li a0, 192 22850dde06SYeting Kuo; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t 23850dde06SYeting Kuo; CHECK-NEXT: ret 24850dde06SYeting Kuo %v = call <8 x i7> @llvm.vp.sadd.sat.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl) 25850dde06SYeting Kuo ret <8 x i7> %v 26850dde06SYeting Kuo} 27850dde06SYeting Kuo 28850dde06SYeting Kuodeclare <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32) 29850dde06SYeting Kuo 30850dde06SYeting Kuodefine <2 x i8> @vsadd_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) { 31850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i8: 32850dde06SYeting Kuo; CHECK: # %bb.0: 33850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 34850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9, v0.t 35850dde06SYeting Kuo; CHECK-NEXT: ret 36850dde06SYeting Kuo %v = call <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl) 37850dde06SYeting Kuo ret <2 x i8> %v 38850dde06SYeting Kuo} 39850dde06SYeting Kuo 40850dde06SYeting Kuodefine <2 x i8> @vsadd_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) { 41850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i8_unmasked: 42850dde06SYeting Kuo; CHECK: # %bb.0: 43850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 44850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9 45850dde06SYeting Kuo; CHECK-NEXT: ret 46d8d131dfSLuke Lau %v = call <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> splat (i1 true), i32 %evl) 47850dde06SYeting Kuo ret <2 x i8> %v 48850dde06SYeting Kuo} 49850dde06SYeting Kuo 50850dde06SYeting Kuodefine <2 x i8> @vsadd_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) { 51850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v2i8: 52850dde06SYeting Kuo; CHECK: # %bb.0: 53850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 54850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 55850dde06SYeting Kuo; CHECK-NEXT: ret 56850dde06SYeting Kuo %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0 57850dde06SYeting Kuo %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer 58850dde06SYeting Kuo %v = call <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl) 59850dde06SYeting Kuo ret <2 x i8> %v 60850dde06SYeting Kuo} 61850dde06SYeting Kuo 62850dde06SYeting Kuodefine <2 x i8> @vsadd_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) { 63850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v2i8_unmasked: 64850dde06SYeting Kuo; CHECK: # %bb.0: 65850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 66850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 67850dde06SYeting Kuo; CHECK-NEXT: ret 68850dde06SYeting Kuo %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0 69850dde06SYeting Kuo %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer 70d8d131dfSLuke Lau %v = call <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> splat (i1 true), i32 %evl) 71850dde06SYeting Kuo ret <2 x i8> %v 72850dde06SYeting Kuo} 73850dde06SYeting Kuo 74850dde06SYeting Kuodefine <2 x i8> @vsadd_vi_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) { 75850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i8: 76850dde06SYeting Kuo; CHECK: # %bb.0: 77850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 78850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 79850dde06SYeting Kuo; CHECK-NEXT: ret 80d8d131dfSLuke Lau %v = call <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8> %va, <2 x i8> splat (i8 -1), <2 x i1> %m, i32 %evl) 81850dde06SYeting Kuo ret <2 x i8> %v 82850dde06SYeting Kuo} 83850dde06SYeting Kuo 84850dde06SYeting Kuodefine <2 x i8> @vsadd_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) { 85850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i8_unmasked: 86850dde06SYeting Kuo; CHECK: # %bb.0: 87850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 88850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 89850dde06SYeting Kuo; CHECK-NEXT: ret 90d8d131dfSLuke Lau %v = call <2 x i8> @llvm.vp.sadd.sat.v2i8(<2 x i8> %va, <2 x i8> splat (i8 -1), <2 x i1> splat (i1 true), i32 %evl) 91850dde06SYeting Kuo ret <2 x i8> %v 92850dde06SYeting Kuo} 93850dde06SYeting Kuo 94850dde06SYeting Kuodeclare <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32) 95850dde06SYeting Kuo 96850dde06SYeting Kuodefine <4 x i8> @vsadd_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) { 97850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i8: 98850dde06SYeting Kuo; CHECK: # %bb.0: 99850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 100850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9, v0.t 101850dde06SYeting Kuo; CHECK-NEXT: ret 102850dde06SYeting Kuo %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl) 103850dde06SYeting Kuo ret <4 x i8> %v 104850dde06SYeting Kuo} 105850dde06SYeting Kuo 106850dde06SYeting Kuodefine <4 x i8> @vsadd_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) { 107850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i8_unmasked: 108850dde06SYeting Kuo; CHECK: # %bb.0: 109850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 110850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9 111850dde06SYeting Kuo; CHECK-NEXT: ret 112d8d131dfSLuke Lau %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> splat (i1 true), i32 %evl) 113850dde06SYeting Kuo ret <4 x i8> %v 114850dde06SYeting Kuo} 115850dde06SYeting Kuo 116850dde06SYeting Kuodefine <4 x i8> @vsadd_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) { 117850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i8: 118850dde06SYeting Kuo; CHECK: # %bb.0: 119850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 120850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 121850dde06SYeting Kuo; CHECK-NEXT: ret 122850dde06SYeting Kuo %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0 123850dde06SYeting Kuo %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer 124850dde06SYeting Kuo %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl) 125850dde06SYeting Kuo ret <4 x i8> %v 126850dde06SYeting Kuo} 127850dde06SYeting Kuo 128850dde06SYeting Kuodefine <4 x i8> @vsadd_vx_v4i8_commute(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) { 129850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i8_commute: 130850dde06SYeting Kuo; CHECK: # %bb.0: 131850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 132850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 133850dde06SYeting Kuo; CHECK-NEXT: ret 134850dde06SYeting Kuo %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0 135850dde06SYeting Kuo %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer 136850dde06SYeting Kuo %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %vb, <4 x i8> %va, <4 x i1> %m, i32 %evl) 137850dde06SYeting Kuo ret <4 x i8> %v 138850dde06SYeting Kuo} 139850dde06SYeting Kuo 140850dde06SYeting Kuodefine <4 x i8> @vsadd_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) { 141850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i8_unmasked: 142850dde06SYeting Kuo; CHECK: # %bb.0: 143850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 144850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 145850dde06SYeting Kuo; CHECK-NEXT: ret 146850dde06SYeting Kuo %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0 147850dde06SYeting Kuo %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer 148d8d131dfSLuke Lau %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> splat (i1 true), i32 %evl) 149850dde06SYeting Kuo ret <4 x i8> %v 150850dde06SYeting Kuo} 151850dde06SYeting Kuo 152850dde06SYeting Kuodefine <4 x i8> @vsadd_vi_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) { 153850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i8: 154850dde06SYeting Kuo; CHECK: # %bb.0: 155850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 156850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 157850dde06SYeting Kuo; CHECK-NEXT: ret 158d8d131dfSLuke Lau %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %va, <4 x i8> splat (i8 -1), <4 x i1> %m, i32 %evl) 159850dde06SYeting Kuo ret <4 x i8> %v 160850dde06SYeting Kuo} 161850dde06SYeting Kuo 162850dde06SYeting Kuodefine <4 x i8> @vsadd_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) { 163850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i8_unmasked: 164850dde06SYeting Kuo; CHECK: # %bb.0: 165850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 166850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 167850dde06SYeting Kuo; CHECK-NEXT: ret 168d8d131dfSLuke Lau %v = call <4 x i8> @llvm.vp.sadd.sat.v4i8(<4 x i8> %va, <4 x i8> splat (i8 -1), <4 x i1> splat (i1 true), i32 %evl) 169850dde06SYeting Kuo ret <4 x i8> %v 170850dde06SYeting Kuo} 171850dde06SYeting Kuo 172850dde06SYeting Kuodeclare <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8>, <5 x i8>, <5 x i1>, i32) 173850dde06SYeting Kuo 174850dde06SYeting Kuodefine <5 x i8> @vsadd_vv_v5i8(<5 x i8> %va, <5 x i8> %b, <5 x i1> %m, i32 zeroext %evl) { 175850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v5i8: 176850dde06SYeting Kuo; CHECK: # %bb.0: 177850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 178850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9, v0.t 179850dde06SYeting Kuo; CHECK-NEXT: ret 180850dde06SYeting Kuo %v = call <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8> %va, <5 x i8> %b, <5 x i1> %m, i32 %evl) 181850dde06SYeting Kuo ret <5 x i8> %v 182850dde06SYeting Kuo} 183850dde06SYeting Kuo 184850dde06SYeting Kuodefine <5 x i8> @vsadd_vv_v5i8_unmasked(<5 x i8> %va, <5 x i8> %b, i32 zeroext %evl) { 185850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v5i8_unmasked: 186850dde06SYeting Kuo; CHECK: # %bb.0: 187850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 188850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9 189850dde06SYeting Kuo; CHECK-NEXT: ret 190d8d131dfSLuke Lau %v = call <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8> %va, <5 x i8> %b, <5 x i1> splat (i1 true), i32 %evl) 191850dde06SYeting Kuo ret <5 x i8> %v 192850dde06SYeting Kuo} 193850dde06SYeting Kuo 194850dde06SYeting Kuodefine <5 x i8> @vsadd_vx_v5i8(<5 x i8> %va, i8 %b, <5 x i1> %m, i32 zeroext %evl) { 195850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v5i8: 196850dde06SYeting Kuo; CHECK: # %bb.0: 197850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 198850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 199850dde06SYeting Kuo; CHECK-NEXT: ret 200850dde06SYeting Kuo %elt.head = insertelement <5 x i8> poison, i8 %b, i32 0 201850dde06SYeting Kuo %vb = shufflevector <5 x i8> %elt.head, <5 x i8> poison, <5 x i32> zeroinitializer 202850dde06SYeting Kuo %v = call <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8> %va, <5 x i8> %vb, <5 x i1> %m, i32 %evl) 203850dde06SYeting Kuo ret <5 x i8> %v 204850dde06SYeting Kuo} 205850dde06SYeting Kuo 206850dde06SYeting Kuodefine <5 x i8> @vsadd_vx_v5i8_unmasked(<5 x i8> %va, i8 %b, i32 zeroext %evl) { 207850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v5i8_unmasked: 208850dde06SYeting Kuo; CHECK: # %bb.0: 209850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 210850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 211850dde06SYeting Kuo; CHECK-NEXT: ret 212850dde06SYeting Kuo %elt.head = insertelement <5 x i8> poison, i8 %b, i32 0 213850dde06SYeting Kuo %vb = shufflevector <5 x i8> %elt.head, <5 x i8> poison, <5 x i32> zeroinitializer 214d8d131dfSLuke Lau %v = call <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8> %va, <5 x i8> %vb, <5 x i1> splat (i1 true), i32 %evl) 215850dde06SYeting Kuo ret <5 x i8> %v 216850dde06SYeting Kuo} 217850dde06SYeting Kuo 218850dde06SYeting Kuodefine <5 x i8> @vsadd_vi_v5i8(<5 x i8> %va, <5 x i1> %m, i32 zeroext %evl) { 219850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v5i8: 220850dde06SYeting Kuo; CHECK: # %bb.0: 221850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 222850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 223850dde06SYeting Kuo; CHECK-NEXT: ret 224d8d131dfSLuke Lau %v = call <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8> %va, <5 x i8> splat (i8 -1), <5 x i1> %m, i32 %evl) 225850dde06SYeting Kuo ret <5 x i8> %v 226850dde06SYeting Kuo} 227850dde06SYeting Kuo 228850dde06SYeting Kuodefine <5 x i8> @vsadd_vi_v5i8_unmasked(<5 x i8> %va, i32 zeroext %evl) { 229850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v5i8_unmasked: 230850dde06SYeting Kuo; CHECK: # %bb.0: 231850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 232850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 233850dde06SYeting Kuo; CHECK-NEXT: ret 234d8d131dfSLuke Lau %v = call <5 x i8> @llvm.vp.sadd.sat.v5i8(<5 x i8> %va, <5 x i8> splat (i8 -1), <5 x i1> splat (i1 true), i32 %evl) 235850dde06SYeting Kuo ret <5 x i8> %v 236850dde06SYeting Kuo} 237850dde06SYeting Kuo 238850dde06SYeting Kuodeclare <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32) 239850dde06SYeting Kuo 240850dde06SYeting Kuodefine <8 x i8> @vsadd_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) { 241850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i8: 242850dde06SYeting Kuo; CHECK: # %bb.0: 243850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 244850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9, v0.t 245850dde06SYeting Kuo; CHECK-NEXT: ret 246850dde06SYeting Kuo %v = call <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl) 247850dde06SYeting Kuo ret <8 x i8> %v 248850dde06SYeting Kuo} 249850dde06SYeting Kuo 250850dde06SYeting Kuodefine <8 x i8> @vsadd_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) { 251850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i8_unmasked: 252850dde06SYeting Kuo; CHECK: # %bb.0: 253850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 254850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9 255850dde06SYeting Kuo; CHECK-NEXT: ret 256d8d131dfSLuke Lau %v = call <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> splat (i1 true), i32 %evl) 257850dde06SYeting Kuo ret <8 x i8> %v 258850dde06SYeting Kuo} 259850dde06SYeting Kuo 260850dde06SYeting Kuodefine <8 x i8> @vsadd_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 261850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v8i8: 262850dde06SYeting Kuo; CHECK: # %bb.0: 263850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 264850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 265850dde06SYeting Kuo; CHECK-NEXT: ret 266850dde06SYeting Kuo %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 267850dde06SYeting Kuo %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 268850dde06SYeting Kuo %v = call <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl) 269850dde06SYeting Kuo ret <8 x i8> %v 270850dde06SYeting Kuo} 271850dde06SYeting Kuo 272850dde06SYeting Kuodefine <8 x i8> @vsadd_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) { 273850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v8i8_unmasked: 274850dde06SYeting Kuo; CHECK: # %bb.0: 275850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 276850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 277850dde06SYeting Kuo; CHECK-NEXT: ret 278850dde06SYeting Kuo %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 279850dde06SYeting Kuo %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 280d8d131dfSLuke Lau %v = call <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> splat (i1 true), i32 %evl) 281850dde06SYeting Kuo ret <8 x i8> %v 282850dde06SYeting Kuo} 283850dde06SYeting Kuo 284850dde06SYeting Kuodefine <8 x i8> @vsadd_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) { 285850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i8: 286850dde06SYeting Kuo; CHECK: # %bb.0: 287850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 288850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 289850dde06SYeting Kuo; CHECK-NEXT: ret 290d8d131dfSLuke Lau %v = call <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8> %va, <8 x i8> splat (i8 -1), <8 x i1> %m, i32 %evl) 291850dde06SYeting Kuo ret <8 x i8> %v 292850dde06SYeting Kuo} 293850dde06SYeting Kuo 294850dde06SYeting Kuodefine <8 x i8> @vsadd_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) { 295850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i8_unmasked: 296850dde06SYeting Kuo; CHECK: # %bb.0: 297850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 298850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 299850dde06SYeting Kuo; CHECK-NEXT: ret 300d8d131dfSLuke Lau %v = call <8 x i8> @llvm.vp.sadd.sat.v8i8(<8 x i8> %va, <8 x i8> splat (i8 -1), <8 x i1> splat (i1 true), i32 %evl) 301850dde06SYeting Kuo ret <8 x i8> %v 302850dde06SYeting Kuo} 303850dde06SYeting Kuo 304850dde06SYeting Kuodeclare <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32) 305850dde06SYeting Kuo 306850dde06SYeting Kuodefine <16 x i8> @vsadd_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) { 307850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i8: 308850dde06SYeting Kuo; CHECK: # %bb.0: 309850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 310850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9, v0.t 311850dde06SYeting Kuo; CHECK-NEXT: ret 312850dde06SYeting Kuo %v = call <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl) 313850dde06SYeting Kuo ret <16 x i8> %v 314850dde06SYeting Kuo} 315850dde06SYeting Kuo 316850dde06SYeting Kuodefine <16 x i8> @vsadd_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) { 317850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i8_unmasked: 318850dde06SYeting Kuo; CHECK: # %bb.0: 319850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 320850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9 321850dde06SYeting Kuo; CHECK-NEXT: ret 322d8d131dfSLuke Lau %v = call <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> splat (i1 true), i32 %evl) 323850dde06SYeting Kuo ret <16 x i8> %v 324850dde06SYeting Kuo} 325850dde06SYeting Kuo 326850dde06SYeting Kuodefine <16 x i8> @vsadd_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) { 327850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v16i8: 328850dde06SYeting Kuo; CHECK: # %bb.0: 329850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 330850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 331850dde06SYeting Kuo; CHECK-NEXT: ret 332850dde06SYeting Kuo %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0 333850dde06SYeting Kuo %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer 334850dde06SYeting Kuo %v = call <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl) 335850dde06SYeting Kuo ret <16 x i8> %v 336850dde06SYeting Kuo} 337850dde06SYeting Kuo 338850dde06SYeting Kuodefine <16 x i8> @vsadd_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) { 339850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v16i8_unmasked: 340850dde06SYeting Kuo; CHECK: # %bb.0: 341850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 342850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 343850dde06SYeting Kuo; CHECK-NEXT: ret 344850dde06SYeting Kuo %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0 345850dde06SYeting Kuo %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer 346d8d131dfSLuke Lau %v = call <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> splat (i1 true), i32 %evl) 347850dde06SYeting Kuo ret <16 x i8> %v 348850dde06SYeting Kuo} 349850dde06SYeting Kuo 350850dde06SYeting Kuodefine <16 x i8> @vsadd_vi_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) { 351850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i8: 352850dde06SYeting Kuo; CHECK: # %bb.0: 353850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 354850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 355850dde06SYeting Kuo; CHECK-NEXT: ret 356d8d131dfSLuke Lau %v = call <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8> %va, <16 x i8> splat (i8 -1), <16 x i1> %m, i32 %evl) 357850dde06SYeting Kuo ret <16 x i8> %v 358850dde06SYeting Kuo} 359850dde06SYeting Kuo 360850dde06SYeting Kuodefine <16 x i8> @vsadd_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) { 361850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i8_unmasked: 362850dde06SYeting Kuo; CHECK: # %bb.0: 363850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 364850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 365850dde06SYeting Kuo; CHECK-NEXT: ret 366d8d131dfSLuke Lau %v = call <16 x i8> @llvm.vp.sadd.sat.v16i8(<16 x i8> %va, <16 x i8> splat (i8 -1), <16 x i1> splat (i1 true), i32 %evl) 367850dde06SYeting Kuo ret <16 x i8> %v 368850dde06SYeting Kuo} 369850dde06SYeting Kuo 370850dde06SYeting Kuodeclare <256 x i8> @llvm.vp.sadd.sat.v258i8(<256 x i8>, <256 x i8>, <256 x i1>, i32) 371850dde06SYeting Kuo 372850dde06SYeting Kuodefine <256 x i8> @vsadd_vi_v258i8(<256 x i8> %va, <256 x i1> %m, i32 zeroext %evl) { 373850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v258i8: 374850dde06SYeting Kuo; CHECK: # %bb.0: 375*b6c0f1bfSLuke Lau; CHECK-NEXT: vsetivli zero, 1, e8, m1, ta, ma 376850dde06SYeting Kuo; CHECK-NEXT: vmv1r.v v24, v0 377850dde06SYeting Kuo; CHECK-NEXT: li a2, 128 378850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma 379850dde06SYeting Kuo; CHECK-NEXT: vlm.v v0, (a0) 380850dde06SYeting Kuo; CHECK-NEXT: addi a0, a1, -128 381850dde06SYeting Kuo; CHECK-NEXT: sltu a3, a1, a0 382850dde06SYeting Kuo; CHECK-NEXT: addi a3, a3, -1 383850dde06SYeting Kuo; CHECK-NEXT: and a0, a3, a0 384850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 385850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v16, v16, -1, v0.t 386850dde06SYeting Kuo; CHECK-NEXT: bltu a1, a2, .LBB32_2 387850dde06SYeting Kuo; CHECK-NEXT: # %bb.1: 388850dde06SYeting Kuo; CHECK-NEXT: li a1, 128 389850dde06SYeting Kuo; CHECK-NEXT: .LBB32_2: 390850dde06SYeting Kuo; CHECK-NEXT: vmv1r.v v0, v24 391675e7bd1SPiyou Chen; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma 392850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 393850dde06SYeting Kuo; CHECK-NEXT: ret 394d8d131dfSLuke Lau %v = call <256 x i8> @llvm.vp.sadd.sat.v258i8(<256 x i8> %va, <256 x i8> splat (i8 -1), <256 x i1> %m, i32 %evl) 395850dde06SYeting Kuo ret <256 x i8> %v 396850dde06SYeting Kuo} 397850dde06SYeting Kuo 398850dde06SYeting Kuodefine <256 x i8> @vsadd_vi_v258i8_unmasked(<256 x i8> %va, i32 zeroext %evl) { 399850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v258i8_unmasked: 400850dde06SYeting Kuo; CHECK: # %bb.0: 401850dde06SYeting Kuo; CHECK-NEXT: li a2, 128 402850dde06SYeting Kuo; CHECK-NEXT: mv a1, a0 403850dde06SYeting Kuo; CHECK-NEXT: bltu a0, a2, .LBB33_2 404850dde06SYeting Kuo; CHECK-NEXT: # %bb.1: 405850dde06SYeting Kuo; CHECK-NEXT: li a1, 128 406850dde06SYeting Kuo; CHECK-NEXT: .LBB33_2: 407850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma 408850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 409850dde06SYeting Kuo; CHECK-NEXT: addi a1, a0, -128 410850dde06SYeting Kuo; CHECK-NEXT: sltu a0, a0, a1 411850dde06SYeting Kuo; CHECK-NEXT: addi a0, a0, -1 412850dde06SYeting Kuo; CHECK-NEXT: and a0, a0, a1 413850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma 414850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v16, v16, -1 415850dde06SYeting Kuo; CHECK-NEXT: ret 416d8d131dfSLuke Lau %v = call <256 x i8> @llvm.vp.sadd.sat.v258i8(<256 x i8> %va, <256 x i8> splat (i8 -1), <256 x i1> splat (i1 true), i32 %evl) 417850dde06SYeting Kuo ret <256 x i8> %v 418850dde06SYeting Kuo} 419850dde06SYeting Kuo 420850dde06SYeting Kuo; Test splitting when the %evl is a known constant. 421850dde06SYeting Kuo 422850dde06SYeting Kuodefine <256 x i8> @vsadd_vi_v258i8_evl129(<256 x i8> %va, <256 x i1> %m) { 423850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v258i8_evl129: 424850dde06SYeting Kuo; CHECK: # %bb.0: 425850dde06SYeting Kuo; CHECK-NEXT: li a1, 128 426850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma 427850dde06SYeting Kuo; CHECK-NEXT: vlm.v v24, (a0) 428850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 429850dde06SYeting Kuo; CHECK-NEXT: vmv1r.v v0, v24 430675e7bd1SPiyou Chen; CHECK-NEXT: vsetivli zero, 1, e8, m8, ta, ma 431850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v16, v16, -1, v0.t 432850dde06SYeting Kuo; CHECK-NEXT: ret 433d8d131dfSLuke Lau %v = call <256 x i8> @llvm.vp.sadd.sat.v258i8(<256 x i8> %va, <256 x i8> splat (i8 -1), <256 x i1> %m, i32 129) 434850dde06SYeting Kuo ret <256 x i8> %v 435850dde06SYeting Kuo} 436850dde06SYeting Kuo 437850dde06SYeting Kuo; FIXME: The upper half is doing nothing. 438850dde06SYeting Kuo 439850dde06SYeting Kuodefine <256 x i8> @vsadd_vi_v258i8_evl128(<256 x i8> %va, <256 x i1> %m) { 440850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v258i8_evl128: 441850dde06SYeting Kuo; CHECK: # %bb.0: 442850dde06SYeting Kuo; CHECK-NEXT: li a1, 128 443850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma 444850dde06SYeting Kuo; CHECK-NEXT: vlm.v v24, (a0) 445850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 446850dde06SYeting Kuo; CHECK-NEXT: vmv1r.v v0, v24 447675e7bd1SPiyou Chen; CHECK-NEXT: vsetivli zero, 0, e8, m8, ta, ma 448850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v16, v16, -1, v0.t 449850dde06SYeting Kuo; CHECK-NEXT: ret 450d8d131dfSLuke Lau %v = call <256 x i8> @llvm.vp.sadd.sat.v258i8(<256 x i8> %va, <256 x i8> splat (i8 -1), <256 x i1> %m, i32 128) 451850dde06SYeting Kuo ret <256 x i8> %v 452850dde06SYeting Kuo} 453850dde06SYeting Kuo 454850dde06SYeting Kuodeclare <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32) 455850dde06SYeting Kuo 456850dde06SYeting Kuodefine <2 x i16> @vsadd_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) { 457850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i16: 458850dde06SYeting Kuo; CHECK: # %bb.0: 459850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 460850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9, v0.t 461850dde06SYeting Kuo; CHECK-NEXT: ret 462850dde06SYeting Kuo %v = call <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl) 463850dde06SYeting Kuo ret <2 x i16> %v 464850dde06SYeting Kuo} 465850dde06SYeting Kuo 466850dde06SYeting Kuodefine <2 x i16> @vsadd_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) { 467850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i16_unmasked: 468850dde06SYeting Kuo; CHECK: # %bb.0: 469850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 470850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9 471850dde06SYeting Kuo; CHECK-NEXT: ret 472d8d131dfSLuke Lau %v = call <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> splat (i1 true), i32 %evl) 473850dde06SYeting Kuo ret <2 x i16> %v 474850dde06SYeting Kuo} 475850dde06SYeting Kuo 476850dde06SYeting Kuodefine <2 x i16> @vsadd_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) { 477850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v2i16: 478850dde06SYeting Kuo; CHECK: # %bb.0: 479850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 480850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 481850dde06SYeting Kuo; CHECK-NEXT: ret 482850dde06SYeting Kuo %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0 483850dde06SYeting Kuo %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer 484850dde06SYeting Kuo %v = call <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl) 485850dde06SYeting Kuo ret <2 x i16> %v 486850dde06SYeting Kuo} 487850dde06SYeting Kuo 488850dde06SYeting Kuodefine <2 x i16> @vsadd_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) { 489850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v2i16_unmasked: 490850dde06SYeting Kuo; CHECK: # %bb.0: 491850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 492850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 493850dde06SYeting Kuo; CHECK-NEXT: ret 494850dde06SYeting Kuo %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0 495850dde06SYeting Kuo %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer 496d8d131dfSLuke Lau %v = call <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> splat (i1 true), i32 %evl) 497850dde06SYeting Kuo ret <2 x i16> %v 498850dde06SYeting Kuo} 499850dde06SYeting Kuo 500850dde06SYeting Kuodefine <2 x i16> @vsadd_vi_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) { 501850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i16: 502850dde06SYeting Kuo; CHECK: # %bb.0: 503850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 504850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 505850dde06SYeting Kuo; CHECK-NEXT: ret 506d8d131dfSLuke Lau %v = call <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16> %va, <2 x i16> splat (i16 -1), <2 x i1> %m, i32 %evl) 507850dde06SYeting Kuo ret <2 x i16> %v 508850dde06SYeting Kuo} 509850dde06SYeting Kuo 510850dde06SYeting Kuodefine <2 x i16> @vsadd_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) { 511850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i16_unmasked: 512850dde06SYeting Kuo; CHECK: # %bb.0: 513850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 514850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 515850dde06SYeting Kuo; CHECK-NEXT: ret 516d8d131dfSLuke Lau %v = call <2 x i16> @llvm.vp.sadd.sat.v2i16(<2 x i16> %va, <2 x i16> splat (i16 -1), <2 x i1> splat (i1 true), i32 %evl) 517850dde06SYeting Kuo ret <2 x i16> %v 518850dde06SYeting Kuo} 519850dde06SYeting Kuo 520850dde06SYeting Kuodeclare <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32) 521850dde06SYeting Kuo 522850dde06SYeting Kuodefine <4 x i16> @vsadd_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) { 523850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i16: 524850dde06SYeting Kuo; CHECK: # %bb.0: 525850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 526850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9, v0.t 527850dde06SYeting Kuo; CHECK-NEXT: ret 528850dde06SYeting Kuo %v = call <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl) 529850dde06SYeting Kuo ret <4 x i16> %v 530850dde06SYeting Kuo} 531850dde06SYeting Kuo 532850dde06SYeting Kuodefine <4 x i16> @vsadd_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) { 533850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i16_unmasked: 534850dde06SYeting Kuo; CHECK: # %bb.0: 535850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 536850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9 537850dde06SYeting Kuo; CHECK-NEXT: ret 538d8d131dfSLuke Lau %v = call <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> splat (i1 true), i32 %evl) 539850dde06SYeting Kuo ret <4 x i16> %v 540850dde06SYeting Kuo} 541850dde06SYeting Kuo 542850dde06SYeting Kuodefine <4 x i16> @vsadd_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) { 543850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i16: 544850dde06SYeting Kuo; CHECK: # %bb.0: 545850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 546850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 547850dde06SYeting Kuo; CHECK-NEXT: ret 548850dde06SYeting Kuo %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0 549850dde06SYeting Kuo %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer 550850dde06SYeting Kuo %v = call <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl) 551850dde06SYeting Kuo ret <4 x i16> %v 552850dde06SYeting Kuo} 553850dde06SYeting Kuo 554850dde06SYeting Kuodefine <4 x i16> @vsadd_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) { 555850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i16_unmasked: 556850dde06SYeting Kuo; CHECK: # %bb.0: 557850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 558850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 559850dde06SYeting Kuo; CHECK-NEXT: ret 560850dde06SYeting Kuo %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0 561850dde06SYeting Kuo %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer 562d8d131dfSLuke Lau %v = call <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> splat (i1 true), i32 %evl) 563850dde06SYeting Kuo ret <4 x i16> %v 564850dde06SYeting Kuo} 565850dde06SYeting Kuo 566850dde06SYeting Kuodefine <4 x i16> @vsadd_vi_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) { 567850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i16: 568850dde06SYeting Kuo; CHECK: # %bb.0: 569850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 570850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 571850dde06SYeting Kuo; CHECK-NEXT: ret 572d8d131dfSLuke Lau %v = call <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16> %va, <4 x i16> splat (i16 -1), <4 x i1> %m, i32 %evl) 573850dde06SYeting Kuo ret <4 x i16> %v 574850dde06SYeting Kuo} 575850dde06SYeting Kuo 576850dde06SYeting Kuodefine <4 x i16> @vsadd_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) { 577850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i16_unmasked: 578850dde06SYeting Kuo; CHECK: # %bb.0: 579850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 580850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 581850dde06SYeting Kuo; CHECK-NEXT: ret 582d8d131dfSLuke Lau %v = call <4 x i16> @llvm.vp.sadd.sat.v4i16(<4 x i16> %va, <4 x i16> splat (i16 -1), <4 x i1> splat (i1 true), i32 %evl) 583850dde06SYeting Kuo ret <4 x i16> %v 584850dde06SYeting Kuo} 585850dde06SYeting Kuo 586850dde06SYeting Kuodeclare <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32) 587850dde06SYeting Kuo 588850dde06SYeting Kuodefine <8 x i16> @vsadd_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) { 589850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i16: 590850dde06SYeting Kuo; CHECK: # %bb.0: 591850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 592850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9, v0.t 593850dde06SYeting Kuo; CHECK-NEXT: ret 594850dde06SYeting Kuo %v = call <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl) 595850dde06SYeting Kuo ret <8 x i16> %v 596850dde06SYeting Kuo} 597850dde06SYeting Kuo 598850dde06SYeting Kuodefine <8 x i16> @vsadd_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) { 599850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i16_unmasked: 600850dde06SYeting Kuo; CHECK: # %bb.0: 601850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 602850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9 603850dde06SYeting Kuo; CHECK-NEXT: ret 604d8d131dfSLuke Lau %v = call <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> splat (i1 true), i32 %evl) 605850dde06SYeting Kuo ret <8 x i16> %v 606850dde06SYeting Kuo} 607850dde06SYeting Kuo 608850dde06SYeting Kuodefine <8 x i16> @vsadd_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) { 609850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v8i16: 610850dde06SYeting Kuo; CHECK: # %bb.0: 611850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 612850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 613850dde06SYeting Kuo; CHECK-NEXT: ret 614850dde06SYeting Kuo %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0 615850dde06SYeting Kuo %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer 616850dde06SYeting Kuo %v = call <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl) 617850dde06SYeting Kuo ret <8 x i16> %v 618850dde06SYeting Kuo} 619850dde06SYeting Kuo 620850dde06SYeting Kuodefine <8 x i16> @vsadd_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) { 621850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v8i16_unmasked: 622850dde06SYeting Kuo; CHECK: # %bb.0: 623850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 624850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 625850dde06SYeting Kuo; CHECK-NEXT: ret 626850dde06SYeting Kuo %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0 627850dde06SYeting Kuo %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer 628d8d131dfSLuke Lau %v = call <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> splat (i1 true), i32 %evl) 629850dde06SYeting Kuo ret <8 x i16> %v 630850dde06SYeting Kuo} 631850dde06SYeting Kuo 632850dde06SYeting Kuodefine <8 x i16> @vsadd_vi_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) { 633850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i16: 634850dde06SYeting Kuo; CHECK: # %bb.0: 635850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 636850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 637850dde06SYeting Kuo; CHECK-NEXT: ret 638d8d131dfSLuke Lau %v = call <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16> %va, <8 x i16> splat (i16 -1), <8 x i1> %m, i32 %evl) 639850dde06SYeting Kuo ret <8 x i16> %v 640850dde06SYeting Kuo} 641850dde06SYeting Kuo 642850dde06SYeting Kuodefine <8 x i16> @vsadd_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) { 643850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i16_unmasked: 644850dde06SYeting Kuo; CHECK: # %bb.0: 645850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 646850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 647850dde06SYeting Kuo; CHECK-NEXT: ret 648d8d131dfSLuke Lau %v = call <8 x i16> @llvm.vp.sadd.sat.v8i16(<8 x i16> %va, <8 x i16> splat (i16 -1), <8 x i1> splat (i1 true), i32 %evl) 649850dde06SYeting Kuo ret <8 x i16> %v 650850dde06SYeting Kuo} 651850dde06SYeting Kuo 652850dde06SYeting Kuodeclare <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32) 653850dde06SYeting Kuo 654850dde06SYeting Kuodefine <16 x i16> @vsadd_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) { 655850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i16: 656850dde06SYeting Kuo; CHECK: # %bb.0: 657850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 658850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v10, v0.t 659850dde06SYeting Kuo; CHECK-NEXT: ret 660850dde06SYeting Kuo %v = call <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl) 661850dde06SYeting Kuo ret <16 x i16> %v 662850dde06SYeting Kuo} 663850dde06SYeting Kuo 664850dde06SYeting Kuodefine <16 x i16> @vsadd_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) { 665850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i16_unmasked: 666850dde06SYeting Kuo; CHECK: # %bb.0: 667850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 668850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v10 669850dde06SYeting Kuo; CHECK-NEXT: ret 670d8d131dfSLuke Lau %v = call <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> splat (i1 true), i32 %evl) 671850dde06SYeting Kuo ret <16 x i16> %v 672850dde06SYeting Kuo} 673850dde06SYeting Kuo 674850dde06SYeting Kuodefine <16 x i16> @vsadd_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) { 675850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v16i16: 676850dde06SYeting Kuo; CHECK: # %bb.0: 677850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 678850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 679850dde06SYeting Kuo; CHECK-NEXT: ret 680850dde06SYeting Kuo %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0 681850dde06SYeting Kuo %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer 682850dde06SYeting Kuo %v = call <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl) 683850dde06SYeting Kuo ret <16 x i16> %v 684850dde06SYeting Kuo} 685850dde06SYeting Kuo 686850dde06SYeting Kuodefine <16 x i16> @vsadd_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) { 687850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v16i16_unmasked: 688850dde06SYeting Kuo; CHECK: # %bb.0: 689850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 690850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 691850dde06SYeting Kuo; CHECK-NEXT: ret 692850dde06SYeting Kuo %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0 693850dde06SYeting Kuo %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer 694d8d131dfSLuke Lau %v = call <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> splat (i1 true), i32 %evl) 695850dde06SYeting Kuo ret <16 x i16> %v 696850dde06SYeting Kuo} 697850dde06SYeting Kuo 698850dde06SYeting Kuodefine <16 x i16> @vsadd_vi_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) { 699850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i16: 700850dde06SYeting Kuo; CHECK: # %bb.0: 701850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 702850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 703850dde06SYeting Kuo; CHECK-NEXT: ret 704d8d131dfSLuke Lau %v = call <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16> %va, <16 x i16> splat (i16 -1), <16 x i1> %m, i32 %evl) 705850dde06SYeting Kuo ret <16 x i16> %v 706850dde06SYeting Kuo} 707850dde06SYeting Kuo 708850dde06SYeting Kuodefine <16 x i16> @vsadd_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) { 709850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i16_unmasked: 710850dde06SYeting Kuo; CHECK: # %bb.0: 711850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 712850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 713850dde06SYeting Kuo; CHECK-NEXT: ret 714d8d131dfSLuke Lau %v = call <16 x i16> @llvm.vp.sadd.sat.v16i16(<16 x i16> %va, <16 x i16> splat (i16 -1), <16 x i1> splat (i1 true), i32 %evl) 715850dde06SYeting Kuo ret <16 x i16> %v 716850dde06SYeting Kuo} 717850dde06SYeting Kuo 718850dde06SYeting Kuodeclare <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32) 719850dde06SYeting Kuo 720850dde06SYeting Kuodefine <2 x i32> @vsadd_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) { 721850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i32: 722850dde06SYeting Kuo; CHECK: # %bb.0: 723850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 724850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9, v0.t 725850dde06SYeting Kuo; CHECK-NEXT: ret 726850dde06SYeting Kuo %v = call <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl) 727850dde06SYeting Kuo ret <2 x i32> %v 728850dde06SYeting Kuo} 729850dde06SYeting Kuo 730850dde06SYeting Kuodefine <2 x i32> @vsadd_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) { 731850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i32_unmasked: 732850dde06SYeting Kuo; CHECK: # %bb.0: 733850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 734850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9 735850dde06SYeting Kuo; CHECK-NEXT: ret 736d8d131dfSLuke Lau %v = call <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> splat (i1 true), i32 %evl) 737850dde06SYeting Kuo ret <2 x i32> %v 738850dde06SYeting Kuo} 739850dde06SYeting Kuo 740850dde06SYeting Kuodefine <2 x i32> @vsadd_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) { 741850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v2i32: 742850dde06SYeting Kuo; CHECK: # %bb.0: 743850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 744850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 745850dde06SYeting Kuo; CHECK-NEXT: ret 746850dde06SYeting Kuo %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0 747850dde06SYeting Kuo %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer 748850dde06SYeting Kuo %v = call <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl) 749850dde06SYeting Kuo ret <2 x i32> %v 750850dde06SYeting Kuo} 751850dde06SYeting Kuo 752850dde06SYeting Kuodefine <2 x i32> @vsadd_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) { 753850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v2i32_unmasked: 754850dde06SYeting Kuo; CHECK: # %bb.0: 755850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 756850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 757850dde06SYeting Kuo; CHECK-NEXT: ret 758850dde06SYeting Kuo %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0 759850dde06SYeting Kuo %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer 760d8d131dfSLuke Lau %v = call <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> splat (i1 true), i32 %evl) 761850dde06SYeting Kuo ret <2 x i32> %v 762850dde06SYeting Kuo} 763850dde06SYeting Kuo 764850dde06SYeting Kuodefine <2 x i32> @vsadd_vi_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) { 765850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i32: 766850dde06SYeting Kuo; CHECK: # %bb.0: 767850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 768850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 769850dde06SYeting Kuo; CHECK-NEXT: ret 770d8d131dfSLuke Lau %v = call <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32> %va, <2 x i32> splat (i32 -1), <2 x i1> %m, i32 %evl) 771850dde06SYeting Kuo ret <2 x i32> %v 772850dde06SYeting Kuo} 773850dde06SYeting Kuo 774850dde06SYeting Kuodefine <2 x i32> @vsadd_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) { 775850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i32_unmasked: 776850dde06SYeting Kuo; CHECK: # %bb.0: 777850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 778850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 779850dde06SYeting Kuo; CHECK-NEXT: ret 780d8d131dfSLuke Lau %v = call <2 x i32> @llvm.vp.sadd.sat.v2i32(<2 x i32> %va, <2 x i32> splat (i32 -1), <2 x i1> splat (i1 true), i32 %evl) 781850dde06SYeting Kuo ret <2 x i32> %v 782850dde06SYeting Kuo} 783850dde06SYeting Kuo 784850dde06SYeting Kuodeclare <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32) 785850dde06SYeting Kuo 786850dde06SYeting Kuodefine <4 x i32> @vsadd_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) { 787850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i32: 788850dde06SYeting Kuo; CHECK: # %bb.0: 789850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 790850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9, v0.t 791850dde06SYeting Kuo; CHECK-NEXT: ret 792850dde06SYeting Kuo %v = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl) 793850dde06SYeting Kuo ret <4 x i32> %v 794850dde06SYeting Kuo} 795850dde06SYeting Kuo 796850dde06SYeting Kuodefine <4 x i32> @vsadd_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) { 797850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i32_unmasked: 798850dde06SYeting Kuo; CHECK: # %bb.0: 799850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 800850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9 801850dde06SYeting Kuo; CHECK-NEXT: ret 802d8d131dfSLuke Lau %v = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> splat (i1 true), i32 %evl) 803850dde06SYeting Kuo ret <4 x i32> %v 804850dde06SYeting Kuo} 805850dde06SYeting Kuo 806850dde06SYeting Kuodefine <4 x i32> @vsadd_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) { 807850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i32: 808850dde06SYeting Kuo; CHECK: # %bb.0: 809850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 810850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 811850dde06SYeting Kuo; CHECK-NEXT: ret 812850dde06SYeting Kuo %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0 813850dde06SYeting Kuo %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer 814850dde06SYeting Kuo %v = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl) 815850dde06SYeting Kuo ret <4 x i32> %v 816850dde06SYeting Kuo} 817850dde06SYeting Kuo 818850dde06SYeting Kuodefine <4 x i32> @vsadd_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) { 819850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v4i32_unmasked: 820850dde06SYeting Kuo; CHECK: # %bb.0: 821850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 822850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 823850dde06SYeting Kuo; CHECK-NEXT: ret 824850dde06SYeting Kuo %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0 825850dde06SYeting Kuo %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer 826d8d131dfSLuke Lau %v = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> splat (i1 true), i32 %evl) 827850dde06SYeting Kuo ret <4 x i32> %v 828850dde06SYeting Kuo} 829850dde06SYeting Kuo 830850dde06SYeting Kuodefine <4 x i32> @vsadd_vi_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) { 831850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i32: 832850dde06SYeting Kuo; CHECK: # %bb.0: 833850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 834850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 835850dde06SYeting Kuo; CHECK-NEXT: ret 836d8d131dfSLuke Lau %v = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %va, <4 x i32> splat (i32 -1), <4 x i1> %m, i32 %evl) 837850dde06SYeting Kuo ret <4 x i32> %v 838850dde06SYeting Kuo} 839850dde06SYeting Kuo 840850dde06SYeting Kuodefine <4 x i32> @vsadd_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) { 841850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i32_unmasked: 842850dde06SYeting Kuo; CHECK: # %bb.0: 843850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 844850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 845850dde06SYeting Kuo; CHECK-NEXT: ret 846d8d131dfSLuke Lau %v = call <4 x i32> @llvm.vp.sadd.sat.v4i32(<4 x i32> %va, <4 x i32> splat (i32 -1), <4 x i1> splat (i1 true), i32 %evl) 847850dde06SYeting Kuo ret <4 x i32> %v 848850dde06SYeting Kuo} 849850dde06SYeting Kuo 850850dde06SYeting Kuodeclare <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32) 851850dde06SYeting Kuo 852850dde06SYeting Kuodefine <8 x i32> @vsadd_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) { 853850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i32: 854850dde06SYeting Kuo; CHECK: # %bb.0: 855850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 856850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v10, v0.t 857850dde06SYeting Kuo; CHECK-NEXT: ret 858850dde06SYeting Kuo %v = call <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl) 859850dde06SYeting Kuo ret <8 x i32> %v 860850dde06SYeting Kuo} 861850dde06SYeting Kuo 862850dde06SYeting Kuodefine <8 x i32> @vsadd_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) { 863850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i32_unmasked: 864850dde06SYeting Kuo; CHECK: # %bb.0: 865850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 866850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v10 867850dde06SYeting Kuo; CHECK-NEXT: ret 868d8d131dfSLuke Lau %v = call <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> splat (i1 true), i32 %evl) 869850dde06SYeting Kuo ret <8 x i32> %v 870850dde06SYeting Kuo} 871850dde06SYeting Kuo 872850dde06SYeting Kuodefine <8 x i32> @vsadd_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 873850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v8i32: 874850dde06SYeting Kuo; CHECK: # %bb.0: 875850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 876850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 877850dde06SYeting Kuo; CHECK-NEXT: ret 878850dde06SYeting Kuo %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 879850dde06SYeting Kuo %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 880850dde06SYeting Kuo %v = call <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl) 881850dde06SYeting Kuo ret <8 x i32> %v 882850dde06SYeting Kuo} 883850dde06SYeting Kuo 884850dde06SYeting Kuodefine <8 x i32> @vsadd_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) { 885850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v8i32_unmasked: 886850dde06SYeting Kuo; CHECK: # %bb.0: 887850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 888850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 889850dde06SYeting Kuo; CHECK-NEXT: ret 890850dde06SYeting Kuo %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 891850dde06SYeting Kuo %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 892d8d131dfSLuke Lau %v = call <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> splat (i1 true), i32 %evl) 893850dde06SYeting Kuo ret <8 x i32> %v 894850dde06SYeting Kuo} 895850dde06SYeting Kuo 896850dde06SYeting Kuodefine <8 x i32> @vsadd_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) { 897850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i32: 898850dde06SYeting Kuo; CHECK: # %bb.0: 899850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 900850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 901850dde06SYeting Kuo; CHECK-NEXT: ret 902d8d131dfSLuke Lau %v = call <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32> %va, <8 x i32> splat (i32 -1), <8 x i1> %m, i32 %evl) 903850dde06SYeting Kuo ret <8 x i32> %v 904850dde06SYeting Kuo} 905850dde06SYeting Kuo 906850dde06SYeting Kuodefine <8 x i32> @vsadd_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) { 907850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i32_unmasked: 908850dde06SYeting Kuo; CHECK: # %bb.0: 909850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 910850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 911850dde06SYeting Kuo; CHECK-NEXT: ret 912d8d131dfSLuke Lau %v = call <8 x i32> @llvm.vp.sadd.sat.v8i32(<8 x i32> %va, <8 x i32> splat (i32 -1), <8 x i1> splat (i1 true), i32 %evl) 913850dde06SYeting Kuo ret <8 x i32> %v 914850dde06SYeting Kuo} 915850dde06SYeting Kuo 916850dde06SYeting Kuodeclare <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32) 917850dde06SYeting Kuo 918850dde06SYeting Kuodefine <16 x i32> @vsadd_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) { 919850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i32: 920850dde06SYeting Kuo; CHECK: # %bb.0: 921850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 922850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v12, v0.t 923850dde06SYeting Kuo; CHECK-NEXT: ret 924850dde06SYeting Kuo %v = call <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl) 925850dde06SYeting Kuo ret <16 x i32> %v 926850dde06SYeting Kuo} 927850dde06SYeting Kuo 928850dde06SYeting Kuodefine <16 x i32> @vsadd_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) { 929850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i32_unmasked: 930850dde06SYeting Kuo; CHECK: # %bb.0: 931850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 932850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v12 933850dde06SYeting Kuo; CHECK-NEXT: ret 934d8d131dfSLuke Lau %v = call <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> splat (i1 true), i32 %evl) 935850dde06SYeting Kuo ret <16 x i32> %v 936850dde06SYeting Kuo} 937850dde06SYeting Kuo 938850dde06SYeting Kuodefine <16 x i32> @vsadd_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) { 939850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v16i32: 940850dde06SYeting Kuo; CHECK: # %bb.0: 941850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma 942850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0, v0.t 943850dde06SYeting Kuo; CHECK-NEXT: ret 944850dde06SYeting Kuo %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0 945850dde06SYeting Kuo %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer 946850dde06SYeting Kuo %v = call <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl) 947850dde06SYeting Kuo ret <16 x i32> %v 948850dde06SYeting Kuo} 949850dde06SYeting Kuo 950850dde06SYeting Kuodefine <16 x i32> @vsadd_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) { 951850dde06SYeting Kuo; CHECK-LABEL: vsadd_vx_v16i32_unmasked: 952850dde06SYeting Kuo; CHECK: # %bb.0: 953850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma 954850dde06SYeting Kuo; CHECK-NEXT: vsadd.vx v8, v8, a0 955850dde06SYeting Kuo; CHECK-NEXT: ret 956850dde06SYeting Kuo %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0 957850dde06SYeting Kuo %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer 958d8d131dfSLuke Lau %v = call <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> splat (i1 true), i32 %evl) 959850dde06SYeting Kuo ret <16 x i32> %v 960850dde06SYeting Kuo} 961850dde06SYeting Kuo 962850dde06SYeting Kuodefine <16 x i32> @vsadd_vi_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) { 963850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i32: 964850dde06SYeting Kuo; CHECK: # %bb.0: 965850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 966850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 967850dde06SYeting Kuo; CHECK-NEXT: ret 968d8d131dfSLuke Lau %v = call <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32> %va, <16 x i32> splat (i32 -1), <16 x i1> %m, i32 %evl) 969850dde06SYeting Kuo ret <16 x i32> %v 970850dde06SYeting Kuo} 971850dde06SYeting Kuo 972850dde06SYeting Kuodefine <16 x i32> @vsadd_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) { 973850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i32_unmasked: 974850dde06SYeting Kuo; CHECK: # %bb.0: 975850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 976850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 977850dde06SYeting Kuo; CHECK-NEXT: ret 978d8d131dfSLuke Lau %v = call <16 x i32> @llvm.vp.sadd.sat.v16i32(<16 x i32> %va, <16 x i32> splat (i32 -1), <16 x i1> splat (i1 true), i32 %evl) 979850dde06SYeting Kuo ret <16 x i32> %v 980850dde06SYeting Kuo} 981850dde06SYeting Kuo 982850dde06SYeting Kuodeclare <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32) 983850dde06SYeting Kuo 984850dde06SYeting Kuodefine <2 x i64> @vsadd_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) { 985850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i64: 986850dde06SYeting Kuo; CHECK: # %bb.0: 987850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 988850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9, v0.t 989850dde06SYeting Kuo; CHECK-NEXT: ret 990850dde06SYeting Kuo %v = call <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl) 991850dde06SYeting Kuo ret <2 x i64> %v 992850dde06SYeting Kuo} 993850dde06SYeting Kuo 994850dde06SYeting Kuodefine <2 x i64> @vsadd_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) { 995850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v2i64_unmasked: 996850dde06SYeting Kuo; CHECK: # %bb.0: 997850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 998850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v9 999850dde06SYeting Kuo; CHECK-NEXT: ret 1000d8d131dfSLuke Lau %v = call <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> splat (i1 true), i32 %evl) 1001850dde06SYeting Kuo ret <2 x i64> %v 1002850dde06SYeting Kuo} 1003850dde06SYeting Kuo 1004850dde06SYeting Kuodefine <2 x i64> @vsadd_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) { 1005850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v2i64: 1006850dde06SYeting Kuo; RV32: # %bb.0: 1007850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, -16 1008850dde06SYeting Kuo; RV32-NEXT: .cfi_def_cfa_offset 16 1009850dde06SYeting Kuo; RV32-NEXT: sw a0, 8(sp) 10102967e5f8SAlex Bradbury; RV32-NEXT: sw a1, 12(sp) 1011850dde06SYeting Kuo; RV32-NEXT: addi a0, sp, 8 1012850dde06SYeting Kuo; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma 1013850dde06SYeting Kuo; RV32-NEXT: vlse64.v v9, (a0), zero 1014850dde06SYeting Kuo; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma 1015850dde06SYeting Kuo; RV32-NEXT: vsadd.vv v8, v8, v9, v0.t 1016850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, 16 101797982a8cSdlav-sc; RV32-NEXT: .cfi_def_cfa_offset 0 1018850dde06SYeting Kuo; RV32-NEXT: ret 1019850dde06SYeting Kuo; 1020850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v2i64: 1021850dde06SYeting Kuo; RV64: # %bb.0: 1022850dde06SYeting Kuo; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma 1023850dde06SYeting Kuo; RV64-NEXT: vsadd.vx v8, v8, a0, v0.t 1024850dde06SYeting Kuo; RV64-NEXT: ret 1025850dde06SYeting Kuo %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0 1026850dde06SYeting Kuo %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer 1027850dde06SYeting Kuo %v = call <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl) 1028850dde06SYeting Kuo ret <2 x i64> %v 1029850dde06SYeting Kuo} 1030850dde06SYeting Kuo 1031850dde06SYeting Kuodefine <2 x i64> @vsadd_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) { 1032850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v2i64_unmasked: 1033850dde06SYeting Kuo; RV32: # %bb.0: 1034850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, -16 1035850dde06SYeting Kuo; RV32-NEXT: .cfi_def_cfa_offset 16 1036850dde06SYeting Kuo; RV32-NEXT: sw a0, 8(sp) 10372967e5f8SAlex Bradbury; RV32-NEXT: sw a1, 12(sp) 1038850dde06SYeting Kuo; RV32-NEXT: addi a0, sp, 8 1039850dde06SYeting Kuo; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma 1040850dde06SYeting Kuo; RV32-NEXT: vlse64.v v9, (a0), zero 1041850dde06SYeting Kuo; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma 1042850dde06SYeting Kuo; RV32-NEXT: vsadd.vv v8, v8, v9 1043850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, 16 104497982a8cSdlav-sc; RV32-NEXT: .cfi_def_cfa_offset 0 1045850dde06SYeting Kuo; RV32-NEXT: ret 1046850dde06SYeting Kuo; 1047850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v2i64_unmasked: 1048850dde06SYeting Kuo; RV64: # %bb.0: 1049850dde06SYeting Kuo; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma 1050850dde06SYeting Kuo; RV64-NEXT: vsadd.vx v8, v8, a0 1051850dde06SYeting Kuo; RV64-NEXT: ret 1052850dde06SYeting Kuo %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0 1053850dde06SYeting Kuo %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer 1054d8d131dfSLuke Lau %v = call <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> splat (i1 true), i32 %evl) 1055850dde06SYeting Kuo ret <2 x i64> %v 1056850dde06SYeting Kuo} 1057850dde06SYeting Kuo 1058850dde06SYeting Kuodefine <2 x i64> @vsadd_vi_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) { 1059850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i64: 1060850dde06SYeting Kuo; CHECK: # %bb.0: 1061850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1062850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 1063850dde06SYeting Kuo; CHECK-NEXT: ret 1064d8d131dfSLuke Lau %v = call <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64> %va, <2 x i64> splat (i64 -1), <2 x i1> %m, i32 %evl) 1065850dde06SYeting Kuo ret <2 x i64> %v 1066850dde06SYeting Kuo} 1067850dde06SYeting Kuo 1068850dde06SYeting Kuodefine <2 x i64> @vsadd_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) { 1069850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v2i64_unmasked: 1070850dde06SYeting Kuo; CHECK: # %bb.0: 1071850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 1072850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 1073850dde06SYeting Kuo; CHECK-NEXT: ret 1074d8d131dfSLuke Lau %v = call <2 x i64> @llvm.vp.sadd.sat.v2i64(<2 x i64> %va, <2 x i64> splat (i64 -1), <2 x i1> splat (i1 true), i32 %evl) 1075850dde06SYeting Kuo ret <2 x i64> %v 1076850dde06SYeting Kuo} 1077850dde06SYeting Kuo 1078850dde06SYeting Kuodeclare <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32) 1079850dde06SYeting Kuo 1080850dde06SYeting Kuodefine <4 x i64> @vsadd_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) { 1081850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i64: 1082850dde06SYeting Kuo; CHECK: # %bb.0: 1083850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1084850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v10, v0.t 1085850dde06SYeting Kuo; CHECK-NEXT: ret 1086850dde06SYeting Kuo %v = call <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl) 1087850dde06SYeting Kuo ret <4 x i64> %v 1088850dde06SYeting Kuo} 1089850dde06SYeting Kuo 1090850dde06SYeting Kuodefine <4 x i64> @vsadd_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) { 1091850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v4i64_unmasked: 1092850dde06SYeting Kuo; CHECK: # %bb.0: 1093850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1094850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v10 1095850dde06SYeting Kuo; CHECK-NEXT: ret 1096d8d131dfSLuke Lau %v = call <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> splat (i1 true), i32 %evl) 1097850dde06SYeting Kuo ret <4 x i64> %v 1098850dde06SYeting Kuo} 1099850dde06SYeting Kuo 1100850dde06SYeting Kuodefine <4 x i64> @vsadd_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) { 1101850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v4i64: 1102850dde06SYeting Kuo; RV32: # %bb.0: 1103850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, -16 1104850dde06SYeting Kuo; RV32-NEXT: .cfi_def_cfa_offset 16 1105850dde06SYeting Kuo; RV32-NEXT: sw a0, 8(sp) 11062967e5f8SAlex Bradbury; RV32-NEXT: sw a1, 12(sp) 1107850dde06SYeting Kuo; RV32-NEXT: addi a0, sp, 8 1108850dde06SYeting Kuo; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma 1109850dde06SYeting Kuo; RV32-NEXT: vlse64.v v10, (a0), zero 1110850dde06SYeting Kuo; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma 1111850dde06SYeting Kuo; RV32-NEXT: vsadd.vv v8, v8, v10, v0.t 1112850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, 16 111397982a8cSdlav-sc; RV32-NEXT: .cfi_def_cfa_offset 0 1114850dde06SYeting Kuo; RV32-NEXT: ret 1115850dde06SYeting Kuo; 1116850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v4i64: 1117850dde06SYeting Kuo; RV64: # %bb.0: 1118850dde06SYeting Kuo; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma 1119850dde06SYeting Kuo; RV64-NEXT: vsadd.vx v8, v8, a0, v0.t 1120850dde06SYeting Kuo; RV64-NEXT: ret 1121850dde06SYeting Kuo %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0 1122850dde06SYeting Kuo %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer 1123850dde06SYeting Kuo %v = call <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl) 1124850dde06SYeting Kuo ret <4 x i64> %v 1125850dde06SYeting Kuo} 1126850dde06SYeting Kuo 1127850dde06SYeting Kuodefine <4 x i64> @vsadd_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) { 1128850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v4i64_unmasked: 1129850dde06SYeting Kuo; RV32: # %bb.0: 1130850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, -16 1131850dde06SYeting Kuo; RV32-NEXT: .cfi_def_cfa_offset 16 1132850dde06SYeting Kuo; RV32-NEXT: sw a0, 8(sp) 11332967e5f8SAlex Bradbury; RV32-NEXT: sw a1, 12(sp) 1134850dde06SYeting Kuo; RV32-NEXT: addi a0, sp, 8 1135850dde06SYeting Kuo; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma 1136850dde06SYeting Kuo; RV32-NEXT: vlse64.v v10, (a0), zero 1137850dde06SYeting Kuo; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma 1138850dde06SYeting Kuo; RV32-NEXT: vsadd.vv v8, v8, v10 1139850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, 16 114097982a8cSdlav-sc; RV32-NEXT: .cfi_def_cfa_offset 0 1141850dde06SYeting Kuo; RV32-NEXT: ret 1142850dde06SYeting Kuo; 1143850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v4i64_unmasked: 1144850dde06SYeting Kuo; RV64: # %bb.0: 1145850dde06SYeting Kuo; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma 1146850dde06SYeting Kuo; RV64-NEXT: vsadd.vx v8, v8, a0 1147850dde06SYeting Kuo; RV64-NEXT: ret 1148850dde06SYeting Kuo %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0 1149850dde06SYeting Kuo %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer 1150d8d131dfSLuke Lau %v = call <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> splat (i1 true), i32 %evl) 1151850dde06SYeting Kuo ret <4 x i64> %v 1152850dde06SYeting Kuo} 1153850dde06SYeting Kuo 1154850dde06SYeting Kuodefine <4 x i64> @vsadd_vi_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) { 1155850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i64: 1156850dde06SYeting Kuo; CHECK: # %bb.0: 1157850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1158850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 1159850dde06SYeting Kuo; CHECK-NEXT: ret 1160d8d131dfSLuke Lau %v = call <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64> %va, <4 x i64> splat (i64 -1), <4 x i1> %m, i32 %evl) 1161850dde06SYeting Kuo ret <4 x i64> %v 1162850dde06SYeting Kuo} 1163850dde06SYeting Kuo 1164850dde06SYeting Kuodefine <4 x i64> @vsadd_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) { 1165850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v4i64_unmasked: 1166850dde06SYeting Kuo; CHECK: # %bb.0: 1167850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 1168850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 1169850dde06SYeting Kuo; CHECK-NEXT: ret 1170d8d131dfSLuke Lau %v = call <4 x i64> @llvm.vp.sadd.sat.v4i64(<4 x i64> %va, <4 x i64> splat (i64 -1), <4 x i1> splat (i1 true), i32 %evl) 1171850dde06SYeting Kuo ret <4 x i64> %v 1172850dde06SYeting Kuo} 1173850dde06SYeting Kuo 1174850dde06SYeting Kuodeclare <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32) 1175850dde06SYeting Kuo 1176850dde06SYeting Kuodefine <8 x i64> @vsadd_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) { 1177850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i64: 1178850dde06SYeting Kuo; CHECK: # %bb.0: 1179850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1180850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v12, v0.t 1181850dde06SYeting Kuo; CHECK-NEXT: ret 1182850dde06SYeting Kuo %v = call <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl) 1183850dde06SYeting Kuo ret <8 x i64> %v 1184850dde06SYeting Kuo} 1185850dde06SYeting Kuo 1186850dde06SYeting Kuodefine <8 x i64> @vsadd_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) { 1187850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v8i64_unmasked: 1188850dde06SYeting Kuo; CHECK: # %bb.0: 1189850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1190850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v12 1191850dde06SYeting Kuo; CHECK-NEXT: ret 1192d8d131dfSLuke Lau %v = call <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> splat (i1 true), i32 %evl) 1193850dde06SYeting Kuo ret <8 x i64> %v 1194850dde06SYeting Kuo} 1195850dde06SYeting Kuo 1196850dde06SYeting Kuodefine <8 x i64> @vsadd_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 1197850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v8i64: 1198850dde06SYeting Kuo; RV32: # %bb.0: 1199850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, -16 1200850dde06SYeting Kuo; RV32-NEXT: .cfi_def_cfa_offset 16 1201850dde06SYeting Kuo; RV32-NEXT: sw a0, 8(sp) 12022967e5f8SAlex Bradbury; RV32-NEXT: sw a1, 12(sp) 1203850dde06SYeting Kuo; RV32-NEXT: addi a0, sp, 8 1204850dde06SYeting Kuo; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1205850dde06SYeting Kuo; RV32-NEXT: vlse64.v v12, (a0), zero 1206850dde06SYeting Kuo; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1207850dde06SYeting Kuo; RV32-NEXT: vsadd.vv v8, v8, v12, v0.t 1208850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, 16 120997982a8cSdlav-sc; RV32-NEXT: .cfi_def_cfa_offset 0 1210850dde06SYeting Kuo; RV32-NEXT: ret 1211850dde06SYeting Kuo; 1212850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v8i64: 1213850dde06SYeting Kuo; RV64: # %bb.0: 1214850dde06SYeting Kuo; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1215850dde06SYeting Kuo; RV64-NEXT: vsadd.vx v8, v8, a0, v0.t 1216850dde06SYeting Kuo; RV64-NEXT: ret 1217850dde06SYeting Kuo %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1218850dde06SYeting Kuo %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1219850dde06SYeting Kuo %v = call <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl) 1220850dde06SYeting Kuo ret <8 x i64> %v 1221850dde06SYeting Kuo} 1222850dde06SYeting Kuo 1223850dde06SYeting Kuodefine <8 x i64> @vsadd_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) { 1224850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v8i64_unmasked: 1225850dde06SYeting Kuo; RV32: # %bb.0: 1226850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, -16 1227850dde06SYeting Kuo; RV32-NEXT: .cfi_def_cfa_offset 16 1228850dde06SYeting Kuo; RV32-NEXT: sw a0, 8(sp) 12292967e5f8SAlex Bradbury; RV32-NEXT: sw a1, 12(sp) 1230850dde06SYeting Kuo; RV32-NEXT: addi a0, sp, 8 1231850dde06SYeting Kuo; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1232850dde06SYeting Kuo; RV32-NEXT: vlse64.v v12, (a0), zero 1233850dde06SYeting Kuo; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 1234850dde06SYeting Kuo; RV32-NEXT: vsadd.vv v8, v8, v12 1235850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, 16 123697982a8cSdlav-sc; RV32-NEXT: .cfi_def_cfa_offset 0 1237850dde06SYeting Kuo; RV32-NEXT: ret 1238850dde06SYeting Kuo; 1239850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v8i64_unmasked: 1240850dde06SYeting Kuo; RV64: # %bb.0: 1241850dde06SYeting Kuo; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 1242850dde06SYeting Kuo; RV64-NEXT: vsadd.vx v8, v8, a0 1243850dde06SYeting Kuo; RV64-NEXT: ret 1244850dde06SYeting Kuo %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 1245850dde06SYeting Kuo %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 1246d8d131dfSLuke Lau %v = call <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> splat (i1 true), i32 %evl) 1247850dde06SYeting Kuo ret <8 x i64> %v 1248850dde06SYeting Kuo} 1249850dde06SYeting Kuo 1250850dde06SYeting Kuodefine <8 x i64> @vsadd_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) { 1251850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i64: 1252850dde06SYeting Kuo; CHECK: # %bb.0: 1253850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1254850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 1255850dde06SYeting Kuo; CHECK-NEXT: ret 1256d8d131dfSLuke Lau %v = call <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64> %va, <8 x i64> splat (i64 -1), <8 x i1> %m, i32 %evl) 1257850dde06SYeting Kuo ret <8 x i64> %v 1258850dde06SYeting Kuo} 1259850dde06SYeting Kuo 1260850dde06SYeting Kuodefine <8 x i64> @vsadd_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) { 1261850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v8i64_unmasked: 1262850dde06SYeting Kuo; CHECK: # %bb.0: 1263850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 1264850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 1265850dde06SYeting Kuo; CHECK-NEXT: ret 1266d8d131dfSLuke Lau %v = call <8 x i64> @llvm.vp.sadd.sat.v8i64(<8 x i64> %va, <8 x i64> splat (i64 -1), <8 x i1> splat (i1 true), i32 %evl) 1267850dde06SYeting Kuo ret <8 x i64> %v 1268850dde06SYeting Kuo} 1269850dde06SYeting Kuo 1270850dde06SYeting Kuodeclare <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32) 1271850dde06SYeting Kuo 1272850dde06SYeting Kuodefine <16 x i64> @vsadd_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) { 1273850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i64: 1274850dde06SYeting Kuo; CHECK: # %bb.0: 1275850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1276850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v16, v0.t 1277850dde06SYeting Kuo; CHECK-NEXT: ret 1278850dde06SYeting Kuo %v = call <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl) 1279850dde06SYeting Kuo ret <16 x i64> %v 1280850dde06SYeting Kuo} 1281850dde06SYeting Kuo 1282850dde06SYeting Kuodefine <16 x i64> @vsadd_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) { 1283850dde06SYeting Kuo; CHECK-LABEL: vsadd_vv_v16i64_unmasked: 1284850dde06SYeting Kuo; CHECK: # %bb.0: 1285850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1286850dde06SYeting Kuo; CHECK-NEXT: vsadd.vv v8, v8, v16 1287850dde06SYeting Kuo; CHECK-NEXT: ret 1288d8d131dfSLuke Lau %v = call <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> splat (i1 true), i32 %evl) 1289850dde06SYeting Kuo ret <16 x i64> %v 1290850dde06SYeting Kuo} 1291850dde06SYeting Kuo 1292850dde06SYeting Kuodefine <16 x i64> @vsadd_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) { 1293850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v16i64: 1294850dde06SYeting Kuo; RV32: # %bb.0: 1295850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, -16 1296850dde06SYeting Kuo; RV32-NEXT: .cfi_def_cfa_offset 16 1297850dde06SYeting Kuo; RV32-NEXT: sw a0, 8(sp) 12982967e5f8SAlex Bradbury; RV32-NEXT: sw a1, 12(sp) 1299850dde06SYeting Kuo; RV32-NEXT: addi a0, sp, 8 1300850dde06SYeting Kuo; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma 1301850dde06SYeting Kuo; RV32-NEXT: vlse64.v v16, (a0), zero 1302850dde06SYeting Kuo; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma 1303850dde06SYeting Kuo; RV32-NEXT: vsadd.vv v8, v8, v16, v0.t 1304850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, 16 130597982a8cSdlav-sc; RV32-NEXT: .cfi_def_cfa_offset 0 1306850dde06SYeting Kuo; RV32-NEXT: ret 1307850dde06SYeting Kuo; 1308850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v16i64: 1309850dde06SYeting Kuo; RV64: # %bb.0: 1310850dde06SYeting Kuo; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma 1311850dde06SYeting Kuo; RV64-NEXT: vsadd.vx v8, v8, a0, v0.t 1312850dde06SYeting Kuo; RV64-NEXT: ret 1313850dde06SYeting Kuo %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0 1314850dde06SYeting Kuo %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer 1315850dde06SYeting Kuo %v = call <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl) 1316850dde06SYeting Kuo ret <16 x i64> %v 1317850dde06SYeting Kuo} 1318850dde06SYeting Kuo 1319850dde06SYeting Kuodefine <16 x i64> @vsadd_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) { 1320850dde06SYeting Kuo; RV32-LABEL: vsadd_vx_v16i64_unmasked: 1321850dde06SYeting Kuo; RV32: # %bb.0: 1322850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, -16 1323850dde06SYeting Kuo; RV32-NEXT: .cfi_def_cfa_offset 16 1324850dde06SYeting Kuo; RV32-NEXT: sw a0, 8(sp) 13252967e5f8SAlex Bradbury; RV32-NEXT: sw a1, 12(sp) 1326850dde06SYeting Kuo; RV32-NEXT: addi a0, sp, 8 1327850dde06SYeting Kuo; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma 1328850dde06SYeting Kuo; RV32-NEXT: vlse64.v v16, (a0), zero 1329850dde06SYeting Kuo; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma 1330850dde06SYeting Kuo; RV32-NEXT: vsadd.vv v8, v8, v16 1331850dde06SYeting Kuo; RV32-NEXT: addi sp, sp, 16 133297982a8cSdlav-sc; RV32-NEXT: .cfi_def_cfa_offset 0 1333850dde06SYeting Kuo; RV32-NEXT: ret 1334850dde06SYeting Kuo; 1335850dde06SYeting Kuo; RV64-LABEL: vsadd_vx_v16i64_unmasked: 1336850dde06SYeting Kuo; RV64: # %bb.0: 1337850dde06SYeting Kuo; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma 1338850dde06SYeting Kuo; RV64-NEXT: vsadd.vx v8, v8, a0 1339850dde06SYeting Kuo; RV64-NEXT: ret 1340850dde06SYeting Kuo %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0 1341850dde06SYeting Kuo %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer 1342d8d131dfSLuke Lau %v = call <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> splat (i1 true), i32 %evl) 1343850dde06SYeting Kuo ret <16 x i64> %v 1344850dde06SYeting Kuo} 1345850dde06SYeting Kuo 1346850dde06SYeting Kuodefine <16 x i64> @vsadd_vi_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) { 1347850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i64: 1348850dde06SYeting Kuo; CHECK: # %bb.0: 1349850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1350850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 1351850dde06SYeting Kuo; CHECK-NEXT: ret 1352d8d131dfSLuke Lau %v = call <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64> %va, <16 x i64> splat (i64 -1), <16 x i1> %m, i32 %evl) 1353850dde06SYeting Kuo ret <16 x i64> %v 1354850dde06SYeting Kuo} 1355850dde06SYeting Kuo 1356850dde06SYeting Kuodefine <16 x i64> @vsadd_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) { 1357850dde06SYeting Kuo; CHECK-LABEL: vsadd_vi_v16i64_unmasked: 1358850dde06SYeting Kuo; CHECK: # %bb.0: 1359850dde06SYeting Kuo; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1360850dde06SYeting Kuo; CHECK-NEXT: vsadd.vi v8, v8, -1 1361850dde06SYeting Kuo; CHECK-NEXT: ret 1362d8d131dfSLuke Lau %v = call <16 x i64> @llvm.vp.sadd.sat.v16i64(<16 x i64> %va, <16 x i64> splat (i64 -1), <16 x i1> splat (i1 true), i32 %evl) 1363850dde06SYeting Kuo ret <16 x i64> %v 1364850dde06SYeting Kuo} 1365850dde06SYeting Kuo 1366850dde06SYeting Kuo; Test that split-legalization works as expected. 1367850dde06SYeting Kuo 1368850dde06SYeting Kuodeclare <32 x i64> @llvm.vp.sadd.sat.v32i64(<32 x i64>, <32 x i64>, <32 x i1>, i32) 1369850dde06SYeting Kuo 1370850dde06SYeting Kuodefine <32 x i64> @vsadd_vx_v32i64(<32 x i64> %va, <32 x i1> %m, i32 zeroext %evl) { 1371c28b1a19SCraig Topper; CHECK-LABEL: vsadd_vx_v32i64: 1372c28b1a19SCraig Topper; CHECK: # %bb.0: 1373c28b1a19SCraig Topper; CHECK-NEXT: li a2, 16 1374c28b1a19SCraig Topper; CHECK-NEXT: vsetivli zero, 2, e8, mf4, ta, ma 1375c28b1a19SCraig Topper; CHECK-NEXT: vslidedown.vi v24, v0, 2 1376c28b1a19SCraig Topper; CHECK-NEXT: mv a1, a0 1377c28b1a19SCraig Topper; CHECK-NEXT: bltu a0, a2, .LBB108_2 1378c28b1a19SCraig Topper; CHECK-NEXT: # %bb.1: 1379c28b1a19SCraig Topper; CHECK-NEXT: li a1, 16 1380c28b1a19SCraig Topper; CHECK-NEXT: .LBB108_2: 1381c28b1a19SCraig Topper; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 1382c28b1a19SCraig Topper; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 1383c28b1a19SCraig Topper; CHECK-NEXT: addi a1, a0, -16 1384c28b1a19SCraig Topper; CHECK-NEXT: sltu a0, a0, a1 1385c28b1a19SCraig Topper; CHECK-NEXT: addi a0, a0, -1 1386c28b1a19SCraig Topper; CHECK-NEXT: and a0, a0, a1 1387c28b1a19SCraig Topper; CHECK-NEXT: vmv1r.v v0, v24 1388c28b1a19SCraig Topper; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1389c28b1a19SCraig Topper; CHECK-NEXT: vsadd.vi v16, v16, -1, v0.t 1390c28b1a19SCraig Topper; CHECK-NEXT: ret 139124e8c6a0SLuke Lau %v = call <32 x i64> @llvm.vp.sadd.sat.v32i64(<32 x i64> %va, <32 x i64> splat (i64 -1), <32 x i1> %m, i32 %evl) 1392850dde06SYeting Kuo ret <32 x i64> %v 1393850dde06SYeting Kuo} 1394850dde06SYeting Kuo 1395850dde06SYeting Kuodefine <32 x i64> @vsadd_vi_v32i64_unmasked(<32 x i64> %va, i32 zeroext %evl) { 1396c28b1a19SCraig Topper; CHECK-LABEL: vsadd_vi_v32i64_unmasked: 1397c28b1a19SCraig Topper; CHECK: # %bb.0: 1398c28b1a19SCraig Topper; CHECK-NEXT: li a2, 16 1399c28b1a19SCraig Topper; CHECK-NEXT: mv a1, a0 1400c28b1a19SCraig Topper; CHECK-NEXT: bltu a0, a2, .LBB109_2 1401c28b1a19SCraig Topper; CHECK-NEXT: # %bb.1: 1402c28b1a19SCraig Topper; CHECK-NEXT: li a1, 16 1403c28b1a19SCraig Topper; CHECK-NEXT: .LBB109_2: 1404c28b1a19SCraig Topper; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma 1405c28b1a19SCraig Topper; CHECK-NEXT: vsadd.vi v8, v8, -1 1406c28b1a19SCraig Topper; CHECK-NEXT: addi a1, a0, -16 1407c28b1a19SCraig Topper; CHECK-NEXT: sltu a0, a0, a1 1408c28b1a19SCraig Topper; CHECK-NEXT: addi a0, a0, -1 1409c28b1a19SCraig Topper; CHECK-NEXT: and a0, a0, a1 1410c28b1a19SCraig Topper; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 1411c28b1a19SCraig Topper; CHECK-NEXT: vsadd.vi v16, v16, -1 1412c28b1a19SCraig Topper; CHECK-NEXT: ret 141324e8c6a0SLuke Lau %v = call <32 x i64> @llvm.vp.sadd.sat.v32i64(<32 x i64> %va, <32 x i64> splat (i64 -1), <32 x i1> splat (i1 true), i32 %evl) 1414850dde06SYeting Kuo ret <32 x i64> %v 1415850dde06SYeting Kuo} 1416850dde06SYeting Kuo 1417850dde06SYeting Kuodefine <32 x i64> @vsadd_vx_v32i64_evl12(<32 x i64> %va, <32 x i1> %m) { 1418c28b1a19SCraig Topper; CHECK-LABEL: vsadd_vx_v32i64_evl12: 1419c28b1a19SCraig Topper; CHECK: # %bb.0: 1420c28b1a19SCraig Topper; CHECK-NEXT: vsetivli zero, 2, e8, mf4, ta, ma 1421c28b1a19SCraig Topper; CHECK-NEXT: vslidedown.vi v24, v0, 2 1422c28b1a19SCraig Topper; CHECK-NEXT: vsetivli zero, 12, e64, m8, ta, ma 1423c28b1a19SCraig Topper; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 1424c28b1a19SCraig Topper; CHECK-NEXT: vmv1r.v v0, v24 1425c28b1a19SCraig Topper; CHECK-NEXT: vsetivli zero, 0, e64, m8, ta, ma 1426c28b1a19SCraig Topper; CHECK-NEXT: vsadd.vi v16, v16, -1, v0.t 1427c28b1a19SCraig Topper; CHECK-NEXT: ret 1428d8d131dfSLuke Lau %v = call <32 x i64> @llvm.vp.sadd.sat.v32i64(<32 x i64> %va, <32 x i64> splat (i64 -1), <32 x i1> %m, i32 12) 1429850dde06SYeting Kuo ret <32 x i64> %v 1430850dde06SYeting Kuo} 1431850dde06SYeting Kuo 1432850dde06SYeting Kuodefine <32 x i64> @vsadd_vx_v32i64_evl27(<32 x i64> %va, <32 x i1> %m) { 1433c28b1a19SCraig Topper; CHECK-LABEL: vsadd_vx_v32i64_evl27: 1434c28b1a19SCraig Topper; CHECK: # %bb.0: 1435c28b1a19SCraig Topper; CHECK-NEXT: vsetivli zero, 2, e8, mf4, ta, ma 1436c28b1a19SCraig Topper; CHECK-NEXT: vslidedown.vi v24, v0, 2 1437c28b1a19SCraig Topper; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma 1438c28b1a19SCraig Topper; CHECK-NEXT: vsadd.vi v8, v8, -1, v0.t 1439c28b1a19SCraig Topper; CHECK-NEXT: vmv1r.v v0, v24 1440c28b1a19SCraig Topper; CHECK-NEXT: vsetivli zero, 11, e64, m8, ta, ma 1441c28b1a19SCraig Topper; CHECK-NEXT: vsadd.vi v16, v16, -1, v0.t 1442c28b1a19SCraig Topper; CHECK-NEXT: ret 1443d8d131dfSLuke Lau %v = call <32 x i64> @llvm.vp.sadd.sat.v32i64(<32 x i64> %va, <32 x i64> splat (i64 -1), <32 x i1> %m, i32 27) 1444850dde06SYeting Kuo ret <32 x i64> %v 1445850dde06SYeting Kuo} 1446