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