xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vaaddu.ll (revision 97982a8c605fac7c86d02e641a6cd7898b3ca343)
10c24c175SChia; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
20c24c175SChia; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32
30c24c175SChia; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64
40c24c175SChia
5a79d13f1SChiadefine <8 x i8> @vaaddu_vv_v8i8_floor(<8 x i8> %x, <8 x i8> %y) {
6a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i8_floor:
70c24c175SChia; CHECK:       # %bb.0:
80c24c175SChia; CHECK-NEXT:    csrwi vxrm, 2
90ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
100c24c175SChia; CHECK-NEXT:    vaaddu.vv v8, v8, v9
110c24c175SChia; CHECK-NEXT:    ret
120c24c175SChia  %xzv = zext <8 x i8> %x to <8 x i16>
130c24c175SChia  %yzv = zext <8 x i8> %y to <8 x i16>
140c24c175SChia  %add = add nuw nsw <8 x i16> %xzv, %yzv
150c24c175SChia  %div = lshr <8 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
160c24c175SChia  %ret = trunc <8 x i16> %div to <8 x i8>
170c24c175SChia  ret <8 x i8> %ret
180c24c175SChia}
190c24c175SChia
20a79d13f1SChiadefine <8 x i8> @vaaddu_vx_v8i8_floor(<8 x i8> %x, i8 %y) {
21a79d13f1SChia; CHECK-LABEL: vaaddu_vx_v8i8_floor:
220c24c175SChia; CHECK:       # %bb.0:
230c24c175SChia; CHECK-NEXT:    csrwi vxrm, 2
240ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
250c24c175SChia; CHECK-NEXT:    vaaddu.vx v8, v8, a0
260c24c175SChia; CHECK-NEXT:    ret
270c24c175SChia  %xzv = zext <8 x i8> %x to <8 x i16>
280c24c175SChia  %yhead = insertelement <8 x i8> poison, i8 %y, i32 0
290c24c175SChia  %ysplat = shufflevector <8 x i8> %yhead, <8 x i8> poison, <8 x i32> zeroinitializer
300c24c175SChia  %yzv = zext <8 x i8> %ysplat to <8 x i16>
310c24c175SChia  %add = add nuw nsw <8 x i16> %xzv, %yzv
32d8d131dfSLuke Lau  %div = lshr <8 x i16> %add, splat (i16 1)
330c24c175SChia  %ret = trunc <8 x i16> %div to <8 x i8>
340c24c175SChia  ret <8 x i8> %ret
350c24c175SChia}
360c24c175SChia
370c24c175SChia
38a79d13f1SChiadefine <8 x i8> @vaaddu_vv_v8i8_floor_sexti16(<8 x i8> %x, <8 x i8> %y) {
39a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i8_floor_sexti16:
400c24c175SChia; CHECK:       # %bb.0:
416246b495SCraig Topper; CHECK-NEXT:    csrwi vxrm, 2
420c24c175SChia; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
436246b495SCraig Topper; CHECK-NEXT:    vaadd.vv v8, v8, v9
440c24c175SChia; CHECK-NEXT:    ret
450c24c175SChia  %xzv = sext <8 x i8> %x to <8 x i16>
460c24c175SChia  %yzv = sext <8 x i8> %y to <8 x i16>
470c24c175SChia  %add = add nuw nsw <8 x i16> %xzv, %yzv
480c24c175SChia  %div = lshr <8 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
490c24c175SChia  %ret = trunc <8 x i16> %div to <8 x i8>
500c24c175SChia  ret <8 x i8> %ret
510c24c175SChia}
520c24c175SChia
53a79d13f1SChiadefine <8 x i8> @vaaddu_vv_v8i8_floor_zexti32(<8 x i8> %x, <8 x i8> %y) {
54a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i8_floor_zexti32:
550c24c175SChia; CHECK:       # %bb.0:
560c24c175SChia; CHECK-NEXT:    csrwi vxrm, 2
570ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
580c24c175SChia; CHECK-NEXT:    vaaddu.vv v8, v8, v9
590c24c175SChia; CHECK-NEXT:    ret
600c24c175SChia  %xzv = zext <8 x i8> %x to <8 x i32>
610c24c175SChia  %yzv = zext <8 x i8> %y to <8 x i32>
620c24c175SChia  %add = add nuw nsw <8 x i32> %xzv, %yzv
630c24c175SChia  %div = lshr <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
640c24c175SChia  %ret = trunc <8 x i32> %div to <8 x i8>
650c24c175SChia  ret <8 x i8> %ret
660c24c175SChia}
670c24c175SChia
68a79d13f1SChiadefine <8 x i8> @vaaddu_vv_v8i8_floor_lshr2(<8 x i8> %x, <8 x i8> %y) {
69a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i8_floor_lshr2:
700c24c175SChia; CHECK:       # %bb.0:
710c24c175SChia; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
720c24c175SChia; CHECK-NEXT:    vwaddu.vv v10, v8, v9
730c24c175SChia; CHECK-NEXT:    vnsrl.wi v8, v10, 2
740c24c175SChia; CHECK-NEXT:    ret
750c24c175SChia  %xzv = zext <8 x i8> %x to <8 x i16>
760c24c175SChia  %yzv = zext <8 x i8> %y to <8 x i16>
770c24c175SChia  %add = add nuw nsw <8 x i16> %xzv, %yzv
780c24c175SChia  %div = lshr <8 x i16> %add, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
790c24c175SChia  %ret = trunc <8 x i16> %div to <8 x i8>
800c24c175SChia  ret <8 x i8> %ret
810c24c175SChia}
820c24c175SChia
83a79d13f1SChiadefine <8 x i16> @vaaddu_vv_v8i16_floor(<8 x i16> %x, <8 x i16> %y) {
84a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i16_floor:
850c24c175SChia; CHECK:       # %bb.0:
860c24c175SChia; CHECK-NEXT:    csrwi vxrm, 2
870ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
880c24c175SChia; CHECK-NEXT:    vaaddu.vv v8, v8, v9
890c24c175SChia; CHECK-NEXT:    ret
900c24c175SChia  %xzv = zext <8 x i16> %x to <8 x i32>
910c24c175SChia  %yzv = zext <8 x i16> %y to <8 x i32>
920c24c175SChia  %add = add nuw nsw <8 x i32> %xzv, %yzv
930c24c175SChia  %div = lshr <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
940c24c175SChia  %ret = trunc <8 x i32> %div to <8 x i16>
950c24c175SChia  ret <8 x i16> %ret
960c24c175SChia}
970c24c175SChia
98a79d13f1SChiadefine <8 x i16> @vaaddu_vx_v8i16_floor(<8 x i16> %x, i16 %y) {
99a79d13f1SChia; CHECK-LABEL: vaaddu_vx_v8i16_floor:
1000c24c175SChia; CHECK:       # %bb.0:
1010c24c175SChia; CHECK-NEXT:    csrwi vxrm, 2
1020ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1030c24c175SChia; CHECK-NEXT:    vaaddu.vx v8, v8, a0
1040c24c175SChia; CHECK-NEXT:    ret
1050c24c175SChia  %xzv = zext <8 x i16> %x to <8 x i32>
1060c24c175SChia  %yhead = insertelement <8 x i16> poison, i16 %y, i16 0
1070c24c175SChia  %ysplat = shufflevector <8 x i16> %yhead, <8 x i16> poison, <8 x i32> zeroinitializer
1080c24c175SChia  %yzv = zext <8 x i16> %ysplat to <8 x i32>
1090c24c175SChia  %add = add nuw nsw <8 x i32> %xzv, %yzv
110d8d131dfSLuke Lau  %div = lshr <8 x i32> %add, splat (i32 1)
1110c24c175SChia  %ret = trunc <8 x i32> %div to <8 x i16>
1120c24c175SChia  ret <8 x i16> %ret
1130c24c175SChia}
1140c24c175SChia
115a79d13f1SChiadefine <8 x i32> @vaaddu_vv_v8i32_floor(<8 x i32> %x, <8 x i32> %y) {
116a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i32_floor:
1170c24c175SChia; CHECK:       # %bb.0:
1180c24c175SChia; CHECK-NEXT:    csrwi vxrm, 2
1190ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
1200c24c175SChia; CHECK-NEXT:    vaaddu.vv v8, v8, v10
1210c24c175SChia; CHECK-NEXT:    ret
1220c24c175SChia  %xzv = zext <8 x i32> %x to <8 x i64>
1230c24c175SChia  %yzv = zext <8 x i32> %y to <8 x i64>
1240c24c175SChia  %add = add nuw nsw <8 x i64> %xzv, %yzv
1250c24c175SChia  %div = lshr <8 x i64> %add, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
1260c24c175SChia  %ret = trunc <8 x i64> %div to <8 x i32>
1270c24c175SChia  ret <8 x i32> %ret
1280c24c175SChia}
1290c24c175SChia
130a79d13f1SChiadefine <8 x i32> @vaaddu_vx_v8i32_floor(<8 x i32> %x, i32 %y) {
131a79d13f1SChia; CHECK-LABEL: vaaddu_vx_v8i32_floor:
1320c24c175SChia; CHECK:       # %bb.0:
1330c24c175SChia; CHECK-NEXT:    csrwi vxrm, 2
1340ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
1350c24c175SChia; CHECK-NEXT:    vaaddu.vx v8, v8, a0
1360c24c175SChia; CHECK-NEXT:    ret
1370c24c175SChia  %xzv = zext <8 x i32> %x to <8 x i64>
1380c24c175SChia  %yhead = insertelement <8 x i32> poison, i32 %y, i32 0
1390c24c175SChia  %ysplat = shufflevector <8 x i32> %yhead, <8 x i32> poison, <8 x i32> zeroinitializer
1400c24c175SChia  %yzv = zext <8 x i32> %ysplat to <8 x i64>
1410c24c175SChia  %add = add nuw nsw <8 x i64> %xzv, %yzv
142d8d131dfSLuke Lau  %div = lshr <8 x i64> %add, splat (i64 1)
1430c24c175SChia  %ret = trunc <8 x i64> %div to <8 x i32>
1440c24c175SChia  ret <8 x i32> %ret
1450c24c175SChia}
1460c24c175SChia
147a79d13f1SChiadefine <8 x i64> @vaaddu_vv_v8i64_floor(<8 x i64> %x, <8 x i64> %y) {
148a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i64_floor:
1490c24c175SChia; CHECK:       # %bb.0:
1500c24c175SChia; CHECK-NEXT:    csrwi vxrm, 2
1510ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1520c24c175SChia; CHECK-NEXT:    vaaddu.vv v8, v8, v12
1530c24c175SChia; CHECK-NEXT:    ret
1540c24c175SChia  %xzv = zext <8 x i64> %x to <8 x i128>
1550c24c175SChia  %yzv = zext <8 x i64> %y to <8 x i128>
1560c24c175SChia  %add = add nuw nsw <8 x i128> %xzv, %yzv
1570c24c175SChia  %div = lshr <8 x i128> %add, <i128 1, i128 1, i128 1, i128 1, i128 1, i128 1, i128 1, i128 1>
1580c24c175SChia  %ret = trunc <8 x i128> %div to <8 x i64>
1590c24c175SChia  ret <8 x i64> %ret
1600c24c175SChia}
1610c24c175SChia
162a79d13f1SChiadefine <8 x i1> @vaaddu_vv_v8i1_floor(<8 x i1> %x, <8 x i1> %y) {
163a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i1_floor:
1640c24c175SChia; CHECK:       # %bb.0:
1650c24c175SChia; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
1660c24c175SChia; CHECK-NEXT:    vmv.v.i v9, 0
1670c24c175SChia; CHECK-NEXT:    vmerge.vim v10, v9, 1, v0
1680c24c175SChia; CHECK-NEXT:    vmv1r.v v0, v8
1690c24c175SChia; CHECK-NEXT:    vmerge.vim v8, v9, 1, v0
1700c24c175SChia; CHECK-NEXT:    csrwi vxrm, 2
1710c24c175SChia; CHECK-NEXT:    vaaddu.vv v8, v10, v8
1720c24c175SChia; CHECK-NEXT:    vand.vi v8, v8, 1
1730c24c175SChia; CHECK-NEXT:    vmsne.vi v0, v8, 0
1740c24c175SChia; CHECK-NEXT:    ret
1750c24c175SChia  %xzv = zext <8 x i1> %x to <8 x i8>
1760c24c175SChia  %yzv = zext <8 x i1> %y to <8 x i8>
1770c24c175SChia  %add = add nuw nsw <8 x i8> %xzv, %yzv
1780c24c175SChia  %div = lshr <8 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1790c24c175SChia  %ret = trunc <8 x i8> %div to <8 x i1>
1800c24c175SChia  ret <8 x i1> %ret
1810c24c175SChia}
1820c24c175SChia
183a79d13f1SChiadefine <8 x i64> @vaaddu_vx_v8i64_floor(<8 x i64> %x, i64 %y) {
184a79d13f1SChia; RV32-LABEL: vaaddu_vx_v8i64_floor:
1850c24c175SChia; RV32:       # %bb.0:
1860c24c175SChia; RV32-NEXT:    addi sp, sp, -16
1870c24c175SChia; RV32-NEXT:    .cfi_def_cfa_offset 16
1880c24c175SChia; RV32-NEXT:    sw a0, 8(sp)
1892967e5f8SAlex Bradbury; RV32-NEXT:    sw a1, 12(sp)
1900c24c175SChia; RV32-NEXT:    addi a0, sp, 8
1910c24c175SChia; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1920c24c175SChia; RV32-NEXT:    vlse64.v v12, (a0), zero
1930c24c175SChia; RV32-NEXT:    csrwi vxrm, 2
1940c24c175SChia; RV32-NEXT:    vaaddu.vv v8, v8, v12
1950c24c175SChia; RV32-NEXT:    addi sp, sp, 16
196*97982a8cSdlav-sc; RV32-NEXT:    .cfi_def_cfa_offset 0
1970c24c175SChia; RV32-NEXT:    ret
1980c24c175SChia;
199a79d13f1SChia; RV64-LABEL: vaaddu_vx_v8i64_floor:
2000c24c175SChia; RV64:       # %bb.0:
2010c24c175SChia; RV64-NEXT:    csrwi vxrm, 2
2020ebe48f0SLuke Lau; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
2030c24c175SChia; RV64-NEXT:    vaaddu.vx v8, v8, a0
2040c24c175SChia; RV64-NEXT:    ret
2050c24c175SChia  %xzv = zext <8 x i64> %x to <8 x i128>
2060c24c175SChia  %yhead = insertelement <8 x i64> poison, i64 %y, i64 0
2070c24c175SChia  %ysplat = shufflevector <8 x i64> %yhead, <8 x i64> poison, <8 x i32> zeroinitializer
2080c24c175SChia  %yzv = zext <8 x i64> %ysplat to <8 x i128>
2090c24c175SChia  %add = add nuw nsw <8 x i128> %xzv, %yzv
210d8d131dfSLuke Lau  %div = lshr <8 x i128> %add, splat (i128 1)
2110c24c175SChia  %ret = trunc <8 x i128> %div to <8 x i64>
2120c24c175SChia  ret <8 x i64> %ret
2130c24c175SChia}
214a79d13f1SChia
215a79d13f1SChiadefine <8 x i8> @vaaddu_vv_v8i8_ceil(<8 x i8> %x, <8 x i8> %y) {
216a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i8_ceil:
217a79d13f1SChia; CHECK:       # %bb.0:
218a79d13f1SChia; CHECK-NEXT:    csrwi vxrm, 0
2190ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
220a79d13f1SChia; CHECK-NEXT:    vaaddu.vv v8, v8, v9
221a79d13f1SChia; CHECK-NEXT:    ret
222a79d13f1SChia  %xzv = zext <8 x i8> %x to <8 x i16>
223a79d13f1SChia  %yzv = zext <8 x i8> %y to <8 x i16>
224a79d13f1SChia  %add = add nuw nsw <8 x i16> %xzv, %yzv
225a79d13f1SChia  %add1 = add nuw nsw <8 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
226a79d13f1SChia  %div = lshr <8 x i16> %add1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
227a79d13f1SChia  %ret = trunc <8 x i16> %div to <8 x i8>
228a79d13f1SChia  ret <8 x i8> %ret
229a79d13f1SChia}
230a79d13f1SChia
231a79d13f1SChiadefine <8 x i8> @vaaddu_vx_v8i8_ceil(<8 x i8> %x, i8 %y) {
232a79d13f1SChia; CHECK-LABEL: vaaddu_vx_v8i8_ceil:
233a79d13f1SChia; CHECK:       # %bb.0:
234a79d13f1SChia; CHECK-NEXT:    csrwi vxrm, 0
2350ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
236a79d13f1SChia; CHECK-NEXT:    vaaddu.vx v8, v8, a0
237a79d13f1SChia; CHECK-NEXT:    ret
238a79d13f1SChia  %xzv = zext <8 x i8> %x to <8 x i16>
239a79d13f1SChia  %yhead = insertelement <8 x i8> poison, i8 %y, i32 0
240a79d13f1SChia  %ysplat = shufflevector <8 x i8> %yhead, <8 x i8> poison, <8 x i32> zeroinitializer
241a79d13f1SChia  %yzv = zext <8 x i8> %ysplat to <8 x i16>
242a79d13f1SChia  %add = add nuw nsw <8 x i16> %xzv, %yzv
243a79d13f1SChia  %add1 = add nuw nsw <8 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
244d8d131dfSLuke Lau  %div = lshr <8 x i16> %add1, splat (i16 1)
245a79d13f1SChia  %ret = trunc <8 x i16> %div to <8 x i8>
246a79d13f1SChia  ret <8 x i8> %ret
247a79d13f1SChia}
248a79d13f1SChia
249a79d13f1SChiadefine <8 x i8> @vaaddu_vv_v8i8_ceil_sexti16(<8 x i8> %x, <8 x i8> %y) {
250a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i8_ceil_sexti16:
251a79d13f1SChia; CHECK:       # %bb.0:
2526246b495SCraig Topper; CHECK-NEXT:    csrwi vxrm, 0
253a79d13f1SChia; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
2546246b495SCraig Topper; CHECK-NEXT:    vaadd.vv v8, v8, v9
255a79d13f1SChia; CHECK-NEXT:    ret
256a79d13f1SChia  %xzv = sext <8 x i8> %x to <8 x i16>
257a79d13f1SChia  %yzv = sext <8 x i8> %y to <8 x i16>
258a79d13f1SChia  %add = add nuw nsw <8 x i16> %xzv, %yzv
259a79d13f1SChia  %add1 = add nuw nsw <8 x i16> %add, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
260a79d13f1SChia  %div = lshr <8 x i16> %add1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
261a79d13f1SChia  %ret = trunc <8 x i16> %div to <8 x i8>
262a79d13f1SChia  ret <8 x i8> %ret
263a79d13f1SChia}
264a79d13f1SChia
265a79d13f1SChiadefine <8 x i8> @vaaddu_vv_v8i8_ceil_zexti32(<8 x i8> %x, <8 x i8> %y) {
266a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i8_ceil_zexti32:
267a79d13f1SChia; CHECK:       # %bb.0:
268a79d13f1SChia; CHECK-NEXT:    csrwi vxrm, 0
2690ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
270a79d13f1SChia; CHECK-NEXT:    vaaddu.vv v8, v8, v9
271a79d13f1SChia; CHECK-NEXT:    ret
272a79d13f1SChia  %xzv = zext <8 x i8> %x to <8 x i32>
273a79d13f1SChia  %yzv = zext <8 x i8> %y to <8 x i32>
274a79d13f1SChia  %add = add nuw nsw <8 x i32> %xzv, %yzv
275a79d13f1SChia  %add1 = add nuw nsw <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
276a79d13f1SChia  %div = lshr <8 x i32> %add1, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
277a79d13f1SChia  %ret = trunc <8 x i32> %div to <8 x i8>
278a79d13f1SChia  ret <8 x i8> %ret
279a79d13f1SChia}
280a79d13f1SChia
281a79d13f1SChiadefine <8 x i8> @vaaddu_vv_v8i8_ceil_lshr2(<8 x i8> %x, <8 x i8> %y) {
282a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i8_ceil_lshr2:
283a79d13f1SChia; CHECK:       # %bb.0:
284a79d13f1SChia; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
285a79d13f1SChia; CHECK-NEXT:    vwaddu.vv v10, v8, v9
286a79d13f1SChia; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
287a79d13f1SChia; CHECK-NEXT:    vadd.vi v8, v10, 2
288a79d13f1SChia; CHECK-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
289a79d13f1SChia; CHECK-NEXT:    vnsrl.wi v8, v8, 2
290a79d13f1SChia; CHECK-NEXT:    ret
291a79d13f1SChia  %xzv = zext <8 x i8> %x to <8 x i16>
292a79d13f1SChia  %yzv = zext <8 x i8> %y to <8 x i16>
293a79d13f1SChia  %add = add nuw nsw <8 x i16> %xzv, %yzv
294a79d13f1SChia  %add1 = add nuw nsw <8 x i16> %add, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
295a79d13f1SChia  %div = lshr <8 x i16> %add1, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
296a79d13f1SChia  %ret = trunc <8 x i16> %div to <8 x i8>
297a79d13f1SChia  ret <8 x i8> %ret
298a79d13f1SChia}
299a79d13f1SChia
300a79d13f1SChiadefine <8 x i8> @vaaddu_vv_v8i8_ceil_add2(<8 x i8> %x, <8 x i8> %y) {
301a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i8_ceil_add2:
302a79d13f1SChia; CHECK:       # %bb.0:
303a79d13f1SChia; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
304a79d13f1SChia; CHECK-NEXT:    vwaddu.vv v10, v8, v9
305a79d13f1SChia; CHECK-NEXT:    li a0, 2
306a79d13f1SChia; CHECK-NEXT:    csrwi vxrm, 2
3070ebe48f0SLuke Lau; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
308a79d13f1SChia; CHECK-NEXT:    vaaddu.vx v8, v10, a0
309a79d13f1SChia; CHECK-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
310a79d13f1SChia; CHECK-NEXT:    vnsrl.wi v8, v8, 0
311a79d13f1SChia; CHECK-NEXT:    ret
312a79d13f1SChia  %xzv = zext <8 x i8> %x to <8 x i16>
313a79d13f1SChia  %yzv = zext <8 x i8> %y to <8 x i16>
314a79d13f1SChia  %add = add nuw nsw <8 x i16> %xzv, %yzv
315a79d13f1SChia  %add1 = add nuw nsw <8 x i16> %add, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
316a79d13f1SChia  %div = lshr <8 x i16> %add1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
317a79d13f1SChia  %ret = trunc <8 x i16> %div to <8 x i8>
318a79d13f1SChia  ret <8 x i8> %ret
319a79d13f1SChia}
320a79d13f1SChia
321a79d13f1SChiadefine <8 x i16> @vaaddu_vv_v8i16_ceil(<8 x i16> %x, <8 x i16> %y) {
322a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i16_ceil:
323a79d13f1SChia; CHECK:       # %bb.0:
324a79d13f1SChia; CHECK-NEXT:    csrwi vxrm, 0
3250ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
326a79d13f1SChia; CHECK-NEXT:    vaaddu.vv v8, v8, v9
327a79d13f1SChia; CHECK-NEXT:    ret
328a79d13f1SChia  %xzv = zext <8 x i16> %x to <8 x i32>
329a79d13f1SChia  %yzv = zext <8 x i16> %y to <8 x i32>
330a79d13f1SChia  %add = add nuw nsw <8 x i32> %xzv, %yzv
331a79d13f1SChia  %add1 = add nuw nsw <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
332a79d13f1SChia  %div = lshr <8 x i32> %add1, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
333a79d13f1SChia  %ret = trunc <8 x i32> %div to <8 x i16>
334a79d13f1SChia  ret <8 x i16> %ret
335a79d13f1SChia}
336a79d13f1SChia
337a79d13f1SChiadefine <8 x i16> @vaaddu_vx_v8i16_ceil(<8 x i16> %x, i16 %y) {
338a79d13f1SChia; CHECK-LABEL: vaaddu_vx_v8i16_ceil:
339a79d13f1SChia; CHECK:       # %bb.0:
340a79d13f1SChia; CHECK-NEXT:    csrwi vxrm, 0
3410ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
342a79d13f1SChia; CHECK-NEXT:    vaaddu.vx v8, v8, a0
343a79d13f1SChia; CHECK-NEXT:    ret
344a79d13f1SChia  %xzv = zext <8 x i16> %x to <8 x i32>
345a79d13f1SChia  %yhead = insertelement <8 x i16> poison, i16 %y, i16 0
346a79d13f1SChia  %ysplat = shufflevector <8 x i16> %yhead, <8 x i16> poison, <8 x i32> zeroinitializer
347a79d13f1SChia  %yzv = zext <8 x i16> %ysplat to <8 x i32>
348a79d13f1SChia  %add = add nuw nsw <8 x i32> %xzv, %yzv
349a79d13f1SChia  %add1 = add nuw nsw <8 x i32> %add, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
350d8d131dfSLuke Lau  %div = lshr <8 x i32> %add1, splat (i32 1)
351a79d13f1SChia  %ret = trunc <8 x i32> %div to <8 x i16>
352a79d13f1SChia  ret <8 x i16> %ret
353a79d13f1SChia}
354a79d13f1SChia
355a79d13f1SChiadefine <8 x i32> @vaaddu_vv_v8i32_ceil(<8 x i32> %x, <8 x i32> %y) {
356a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i32_ceil:
357a79d13f1SChia; CHECK:       # %bb.0:
358a79d13f1SChia; CHECK-NEXT:    csrwi vxrm, 0
3590ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
360a79d13f1SChia; CHECK-NEXT:    vaaddu.vv v8, v8, v10
361a79d13f1SChia; CHECK-NEXT:    ret
362a79d13f1SChia  %xzv = zext <8 x i32> %x to <8 x i64>
363a79d13f1SChia  %yzv = zext <8 x i32> %y to <8 x i64>
364a79d13f1SChia  %add = add nuw nsw <8 x i64> %xzv, %yzv
365a79d13f1SChia  %add1 = add nuw nsw <8 x i64> %add, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
366a79d13f1SChia  %div = lshr <8 x i64> %add1, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
367a79d13f1SChia  %ret = trunc <8 x i64> %div to <8 x i32>
368a79d13f1SChia  ret <8 x i32> %ret
369a79d13f1SChia}
370a79d13f1SChia
371a79d13f1SChiadefine <8 x i32> @vaaddu_vx_v8i32_ceil(<8 x i32> %x, i32 %y) {
372a79d13f1SChia; CHECK-LABEL: vaaddu_vx_v8i32_ceil:
373a79d13f1SChia; CHECK:       # %bb.0:
374a79d13f1SChia; CHECK-NEXT:    csrwi vxrm, 0
3750ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
376a79d13f1SChia; CHECK-NEXT:    vaaddu.vx v8, v8, a0
377a79d13f1SChia; CHECK-NEXT:    ret
378a79d13f1SChia  %xzv = zext <8 x i32> %x to <8 x i64>
379a79d13f1SChia  %yhead = insertelement <8 x i32> poison, i32 %y, i32 0
380a79d13f1SChia  %ysplat = shufflevector <8 x i32> %yhead, <8 x i32> poison, <8 x i32> zeroinitializer
381a79d13f1SChia  %yzv = zext <8 x i32> %ysplat to <8 x i64>
382a79d13f1SChia  %add = add nuw nsw <8 x i64> %xzv, %yzv
383a79d13f1SChia  %add1 = add nuw nsw <8 x i64> %add, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1, i64 1>
384d8d131dfSLuke Lau  %div = lshr <8 x i64> %add1, splat (i64 1)
385a79d13f1SChia  %ret = trunc <8 x i64> %div to <8 x i32>
386a79d13f1SChia  ret <8 x i32> %ret
387a79d13f1SChia}
388a79d13f1SChia
389a79d13f1SChiadefine <8 x i64> @vaaddu_vv_v8i64_ceil(<8 x i64> %x, <8 x i64> %y) {
390a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i64_ceil:
391a79d13f1SChia; CHECK:       # %bb.0:
392a79d13f1SChia; CHECK-NEXT:    csrwi vxrm, 0
3930ebe48f0SLuke Lau; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
394a79d13f1SChia; CHECK-NEXT:    vaaddu.vv v8, v8, v12
395a79d13f1SChia; CHECK-NEXT:    ret
396a79d13f1SChia  %xzv = zext <8 x i64> %x to <8 x i128>
397a79d13f1SChia  %yzv = zext <8 x i64> %y to <8 x i128>
398a79d13f1SChia  %add = add nuw nsw <8 x i128> %xzv, %yzv
399a79d13f1SChia  %add1 = add nuw nsw <8 x i128> %add, <i128 1, i128 1, i128 1, i128 1, i128 1, i128 1, i128 1, i128 1>
400a79d13f1SChia  %div = lshr <8 x i128> %add1, <i128 1, i128 1, i128 1, i128 1, i128 1, i128 1, i128 1, i128 1>
401a79d13f1SChia  %ret = trunc <8 x i128> %div to <8 x i64>
402a79d13f1SChia  ret <8 x i64> %ret
403a79d13f1SChia}
404a79d13f1SChia
405a79d13f1SChiadefine <8 x i1> @vaaddu_vv_v8i1_ceil(<8 x i1> %x, <8 x i1> %y) {
406a79d13f1SChia; CHECK-LABEL: vaaddu_vv_v8i1_ceil:
407a79d13f1SChia; CHECK:       # %bb.0:
408a79d13f1SChia; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
409a79d13f1SChia; CHECK-NEXT:    vmv.v.i v9, 0
410a79d13f1SChia; CHECK-NEXT:    vmerge.vim v10, v9, 1, v0
411a79d13f1SChia; CHECK-NEXT:    vmv1r.v v0, v8
412a79d13f1SChia; CHECK-NEXT:    vmerge.vim v8, v9, 1, v0
413a79d13f1SChia; CHECK-NEXT:    csrwi vxrm, 0
414a79d13f1SChia; CHECK-NEXT:    vaaddu.vv v8, v10, v8
415a79d13f1SChia; CHECK-NEXT:    vand.vi v8, v8, 1
416a79d13f1SChia; CHECK-NEXT:    vmsne.vi v0, v8, 0
417a79d13f1SChia; CHECK-NEXT:    ret
418a79d13f1SChia  %xzv = zext <8 x i1> %x to <8 x i8>
419a79d13f1SChia  %yzv = zext <8 x i1> %y to <8 x i8>
420a79d13f1SChia  %add = add nuw nsw <8 x i8> %xzv, %yzv
421a79d13f1SChia  %add1 = add nuw nsw <8 x i8> %add, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
422a79d13f1SChia  %div = lshr <8 x i8> %add1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
423a79d13f1SChia  %ret = trunc <8 x i8> %div to <8 x i1>
424a79d13f1SChia  ret <8 x i1> %ret
425a79d13f1SChia}
426a79d13f1SChia
427a79d13f1SChiadefine <8 x i64> @vaaddu_vx_v8i64_ceil(<8 x i64> %x, i64 %y) {
428a79d13f1SChia; RV32-LABEL: vaaddu_vx_v8i64_ceil:
429a79d13f1SChia; RV32:       # %bb.0:
430a79d13f1SChia; RV32-NEXT:    addi sp, sp, -16
431a79d13f1SChia; RV32-NEXT:    .cfi_def_cfa_offset 16
432a79d13f1SChia; RV32-NEXT:    sw a0, 8(sp)
4332967e5f8SAlex Bradbury; RV32-NEXT:    sw a1, 12(sp)
434a79d13f1SChia; RV32-NEXT:    addi a0, sp, 8
435a79d13f1SChia; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
436a79d13f1SChia; RV32-NEXT:    vlse64.v v12, (a0), zero
437a79d13f1SChia; RV32-NEXT:    csrwi vxrm, 0
438a79d13f1SChia; RV32-NEXT:    vaaddu.vv v8, v8, v12
439a79d13f1SChia; RV32-NEXT:    addi sp, sp, 16
440*97982a8cSdlav-sc; RV32-NEXT:    .cfi_def_cfa_offset 0
441a79d13f1SChia; RV32-NEXT:    ret
442a79d13f1SChia;
443a79d13f1SChia; RV64-LABEL: vaaddu_vx_v8i64_ceil:
444a79d13f1SChia; RV64:       # %bb.0:
445a79d13f1SChia; RV64-NEXT:    csrwi vxrm, 0
4460ebe48f0SLuke Lau; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
447a79d13f1SChia; RV64-NEXT:    vaaddu.vx v8, v8, a0
448a79d13f1SChia; RV64-NEXT:    ret
449a79d13f1SChia  %xzv = zext <8 x i64> %x to <8 x i128>
450a79d13f1SChia  %yhead = insertelement <8 x i64> poison, i64 %y, i64 0
451a79d13f1SChia  %ysplat = shufflevector <8 x i64> %yhead, <8 x i64> poison, <8 x i32> zeroinitializer
452a79d13f1SChia  %yzv = zext <8 x i64> %ysplat to <8 x i128>
453a79d13f1SChia  %add = add nuw nsw <8 x i128> %xzv, %yzv
454a79d13f1SChia  %add1 = add nuw nsw <8 x i128> %add, <i128 1, i128 1, i128 1, i128 1, i128 1, i128 1, i128 1, i128 1>
455d8d131dfSLuke Lau  %div = lshr <8 x i128> %add1, splat (i128 1)
456a79d13f1SChia  %ret = trunc <8 x i128> %div to <8 x i64>
457a79d13f1SChia  ret <8 x i64> %ret
458a79d13f1SChia}
459