Skip to content

Commit ab6a238

Browse files
committed
[RISCV] add test patterns for splat vector with extension.
1 parent 9c58f3a commit ab6a238

File tree

1 file changed

+162
-0
lines changed

1 file changed

+162
-0
lines changed

llvm/test/CodeGen/RISCV/rvv/vwadd-sdnode.ll

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1466,3 +1466,165 @@ define <vscale x 2 x i32> @vwadd_wv_disjoint_or(<vscale x 2 x i32> %x.i32, <vsca
14661466
%or = or disjoint <vscale x 2 x i32> %x.i32, %y.i32
14671467
ret <vscale x 2 x i32> %or
14681468
}
1469+
1470+
define <vscale x 8 x i64> @vwadd_vx_splat_zext(<vscale x 8 x i32> %va, i32 %b) {
1471+
; RV32-LABEL: vwadd_vx_splat_zext:
1472+
; RV32: # %bb.0:
1473+
; RV32-NEXT: addi sp, sp, -16
1474+
; RV32-NEXT: .cfi_def_cfa_offset 16
1475+
; RV32-NEXT: sw zero, 12(sp)
1476+
; RV32-NEXT: sw a0, 8(sp)
1477+
; RV32-NEXT: addi a0, sp, 8
1478+
; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma
1479+
; RV32-NEXT: vlse64.v v16, (a0), zero
1480+
; RV32-NEXT: vwaddu.wv v16, v16, v8
1481+
; RV32-NEXT: vmv8r.v v8, v16
1482+
; RV32-NEXT: addi sp, sp, 16
1483+
; RV32-NEXT: ret
1484+
;
1485+
; RV64-LABEL: vwadd_vx_splat_zext:
1486+
; RV64: # %bb.0:
1487+
; RV64-NEXT: slli a0, a0, 32
1488+
; RV64-NEXT: srli a0, a0, 32
1489+
; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1490+
; RV64-NEXT: vmv.v.x v16, a0
1491+
; RV64-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1492+
; RV64-NEXT: vwaddu.wv v16, v16, v8
1493+
; RV64-NEXT: vmv8r.v v8, v16
1494+
; RV64-NEXT: ret
1495+
%zb = zext i32 %b to i64
1496+
%head = insertelement <vscale x 8 x i64> poison, i64 %zb, i32 0
1497+
%splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1498+
%vc = zext <vscale x 8 x i32> %va to <vscale x 8 x i64>
1499+
%ve = add <vscale x 8 x i64> %vc, %splat
1500+
ret <vscale x 8 x i64> %ve
1501+
}
1502+
1503+
define <vscale x 8 x i32> @vwadd_vx_splat_zext_i1(<vscale x 8 x i1> %va, i16 %b) {
1504+
; RV32-LABEL: vwadd_vx_splat_zext_i1:
1505+
; RV32: # %bb.0:
1506+
; RV32-NEXT: slli a0, a0, 16
1507+
; RV32-NEXT: srli a0, a0, 16
1508+
; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu
1509+
; RV32-NEXT: vmv.v.x v8, a0
1510+
; RV32-NEXT: vadd.vi v8, v8, 1, v0.t
1511+
; RV32-NEXT: ret
1512+
;
1513+
; RV64-LABEL: vwadd_vx_splat_zext_i1:
1514+
; RV64: # %bb.0:
1515+
; RV64-NEXT: slli a0, a0, 48
1516+
; RV64-NEXT: srli a0, a0, 48
1517+
; RV64-NEXT: vsetvli a1, zero, e32, m4, ta, mu
1518+
; RV64-NEXT: vmv.v.x v8, a0
1519+
; RV64-NEXT: vadd.vi v8, v8, 1, v0.t
1520+
; RV64-NEXT: ret
1521+
%zb = zext i16 %b to i32
1522+
%head = insertelement <vscale x 8 x i32> poison, i32 %zb, i32 0
1523+
%splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1524+
%vc = zext <vscale x 8 x i1> %va to <vscale x 8 x i32>
1525+
%ve = add <vscale x 8 x i32> %vc, %splat
1526+
ret <vscale x 8 x i32> %ve
1527+
}
1528+
1529+
define <vscale x 8 x i64> @vwadd_wx_splat_zext(<vscale x 8 x i64> %va, i32 %b) {
1530+
; RV32-LABEL: vwadd_wx_splat_zext:
1531+
; RV32: # %bb.0:
1532+
; RV32-NEXT: addi sp, sp, -16
1533+
; RV32-NEXT: .cfi_def_cfa_offset 16
1534+
; RV32-NEXT: sw zero, 12(sp)
1535+
; RV32-NEXT: sw a0, 8(sp)
1536+
; RV32-NEXT: addi a0, sp, 8
1537+
; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1538+
; RV32-NEXT: vlse64.v v16, (a0), zero
1539+
; RV32-NEXT: vadd.vv v8, v8, v16
1540+
; RV32-NEXT: addi sp, sp, 16
1541+
; RV32-NEXT: ret
1542+
;
1543+
; RV64-LABEL: vwadd_wx_splat_zext:
1544+
; RV64: # %bb.0:
1545+
; RV64-NEXT: slli a0, a0, 32
1546+
; RV64-NEXT: srli a0, a0, 32
1547+
; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1548+
; RV64-NEXT: vadd.vx v8, v8, a0
1549+
; RV64-NEXT: ret
1550+
%zb = zext i32 %b to i64
1551+
%head = insertelement <vscale x 8 x i64> poison, i64 %zb, i32 0
1552+
%splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1553+
%ve = add <vscale x 8 x i64> %va, %splat
1554+
ret <vscale x 8 x i64> %ve
1555+
}
1556+
1557+
define <vscale x 8 x i64> @vwadd_vx_splat_sext(<vscale x 8 x i32> %va, i32 %b) {
1558+
; RV32-LABEL: vwadd_vx_splat_sext:
1559+
; RV32: # %bb.0:
1560+
; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1561+
; RV32-NEXT: vmv.v.x v16, a0
1562+
; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1563+
; RV32-NEXT: vwadd.wv v16, v16, v8
1564+
; RV32-NEXT: vmv8r.v v8, v16
1565+
; RV32-NEXT: ret
1566+
;
1567+
; RV64-LABEL: vwadd_vx_splat_sext:
1568+
; RV64: # %bb.0:
1569+
; RV64-NEXT: sext.w a0, a0
1570+
; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1571+
; RV64-NEXT: vmv.v.x v16, a0
1572+
; RV64-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1573+
; RV64-NEXT: vwadd.wv v16, v16, v8
1574+
; RV64-NEXT: vmv8r.v v8, v16
1575+
; RV64-NEXT: ret
1576+
%sb = sext i32 %b to i64
1577+
%head = insertelement <vscale x 8 x i64> poison, i64 %sb, i32 0
1578+
%splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1579+
%vc = sext <vscale x 8 x i32> %va to <vscale x 8 x i64>
1580+
%ve = add <vscale x 8 x i64> %vc, %splat
1581+
ret <vscale x 8 x i64> %ve
1582+
}
1583+
1584+
define <vscale x 8 x i32> @vwadd_vx_splat_sext_i1(<vscale x 8 x i1> %va, i16 %b) {
1585+
; RV32-LABEL: vwadd_vx_splat_sext_i1:
1586+
; RV32: # %bb.0:
1587+
; RV32-NEXT: slli a0, a0, 16
1588+
; RV32-NEXT: srai a0, a0, 16
1589+
; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu
1590+
; RV32-NEXT: vmv.v.x v8, a0
1591+
; RV32-NEXT: li a0, 1
1592+
; RV32-NEXT: vsub.vx v8, v8, a0, v0.t
1593+
; RV32-NEXT: ret
1594+
;
1595+
; RV64-LABEL: vwadd_vx_splat_sext_i1:
1596+
; RV64: # %bb.0:
1597+
; RV64-NEXT: slli a0, a0, 48
1598+
; RV64-NEXT: srai a0, a0, 48
1599+
; RV64-NEXT: vsetvli a1, zero, e32, m4, ta, mu
1600+
; RV64-NEXT: vmv.v.x v8, a0
1601+
; RV64-NEXT: li a0, 1
1602+
; RV64-NEXT: vsub.vx v8, v8, a0, v0.t
1603+
; RV64-NEXT: ret
1604+
%sb = sext i16 %b to i32
1605+
%head = insertelement <vscale x 8 x i32> poison, i32 %sb, i32 0
1606+
%splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1607+
%vc = sext <vscale x 8 x i1> %va to <vscale x 8 x i32>
1608+
%ve = add <vscale x 8 x i32> %vc, %splat
1609+
ret <vscale x 8 x i32> %ve
1610+
}
1611+
1612+
define <vscale x 8 x i64> @vwadd_wx_splat_sext(<vscale x 8 x i64> %va, i32 %b) {
1613+
; RV32-LABEL: vwadd_wx_splat_sext:
1614+
; RV32: # %bb.0:
1615+
; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1616+
; RV32-NEXT: vadd.vx v8, v8, a0
1617+
; RV32-NEXT: ret
1618+
;
1619+
; RV64-LABEL: vwadd_wx_splat_sext:
1620+
; RV64: # %bb.0:
1621+
; RV64-NEXT: sext.w a0, a0
1622+
; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1623+
; RV64-NEXT: vadd.vx v8, v8, a0
1624+
; RV64-NEXT: ret
1625+
%sb = sext i32 %b to i64
1626+
%head = insertelement <vscale x 8 x i64> poison, i64 %sb, i32 0
1627+
%splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1628+
%ve = add <vscale x 8 x i64> %va, %splat
1629+
ret <vscale x 8 x i64> %ve
1630+
}

0 commit comments

Comments
 (0)