Skip to content

Commit dc4fc05

Browse files
committed
Pre-commit test
1 parent c452de1 commit dc4fc05

File tree

1 file changed

+186
-2
lines changed

1 file changed

+186
-2
lines changed

llvm/test/CodeGen/RISCV/sextw-removal.ll

Lines changed: 186 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22
; RUN: llc < %s -mtriple=riscv64 -mattr=+m,+f,+zknh,+v -target-abi=lp64f \
33
; RUN: | FileCheck %s --check-prefixes=CHECK,RV64I
4-
; RUN: llc < %s -mtriple=riscv64 -mattr=+m,+zba,+zbb,+f,+zknh,+v -target-abi=lp64f \
4+
; RUN: llc < %s -mtriple=riscv64 -mattr=+m,+zba,+zbb,+zbkb,+f,+zknh,+v -target-abi=lp64f \
55
; RUN: | FileCheck %s --check-prefixes=CHECK,RV64ZBB
6-
; RUN: llc < %s -mtriple=riscv64 -mattr=+m,+zba,+zbb,+f,+zknh,+v -target-abi=lp64f \
6+
; RUN: llc < %s -mtriple=riscv64 -mattr=+m,+zba,+zbb,+zbkb,+f,+zknh,+v -target-abi=lp64f \
77
; RUN: -riscv-disable-sextw-removal | FileCheck %s --check-prefix=NOREMOVAL
88

99
define void @test1(i32 signext %arg, i32 signext %arg1) nounwind {
@@ -1499,3 +1499,187 @@ bb7: ; preds = %bb2
14991499
}
15001500

15011501
declare i32 @llvm.riscv.vmv.x.s.nxv1i32( <vscale x 1 x i32>)
1502+
1503+
; Test that we can look through brev8 in hasAllNBitUsers.
1504+
define signext i32 @test21(i64 %arg1, i64 %arg2, i64 %arg3) {
1505+
; RV64I-LABEL: test21:
1506+
; RV64I: # %bb.0: # %entry
1507+
; RV64I-NEXT: addi a2, a2, -1
1508+
; RV64I-NEXT: lui a3, 61681
1509+
; RV64I-NEXT: lui a4, 209715
1510+
; RV64I-NEXT: addi a3, a3, -241
1511+
; RV64I-NEXT: addi a4, a4, 819
1512+
; RV64I-NEXT: slli a5, a3, 32
1513+
; RV64I-NEXT: add a3, a3, a5
1514+
; RV64I-NEXT: slli a5, a4, 32
1515+
; RV64I-NEXT: add a4, a4, a5
1516+
; RV64I-NEXT: li a5, 256
1517+
; RV64I-NEXT: .LBB25_1: # %bb2
1518+
; RV64I-NEXT: # =>This Inner Loop Header: Depth=1
1519+
; RV64I-NEXT: srli a6, a0, 4
1520+
; RV64I-NEXT: and a0, a0, a3
1521+
; RV64I-NEXT: and a6, a6, a3
1522+
; RV64I-NEXT: slli a0, a0, 4
1523+
; RV64I-NEXT: or a0, a6, a0
1524+
; RV64I-NEXT: srli a6, a0, 2
1525+
; RV64I-NEXT: and a0, a0, a4
1526+
; RV64I-NEXT: and a6, a6, a4
1527+
; RV64I-NEXT: slli a0, a0, 2
1528+
; RV64I-NEXT: or a0, a6, a0
1529+
; RV64I-NEXT: andi a6, a0, 65
1530+
; RV64I-NEXT: srli a0, a0, 1
1531+
; RV64I-NEXT: slli a6, a6, 1
1532+
; RV64I-NEXT: andi a0, a0, 1104
1533+
; RV64I-NEXT: or a0, a0, a6
1534+
; RV64I-NEXT: addi a2, a2, 1
1535+
; RV64I-NEXT: add a0, a0, a1
1536+
; RV64I-NEXT: bltu a2, a5, .LBB25_1
1537+
; RV64I-NEXT: # %bb.2: # %bb7
1538+
; RV64I-NEXT: sext.w a0, a0
1539+
; RV64I-NEXT: ret
1540+
;
1541+
; RV64ZBB-LABEL: test21:
1542+
; RV64ZBB: # %bb.0: # %entry
1543+
; RV64ZBB-NEXT: addi a2, a2, -1
1544+
; RV64ZBB-NEXT: li a3, 256
1545+
; RV64ZBB-NEXT: .LBB25_1: # %bb2
1546+
; RV64ZBB-NEXT: # =>This Inner Loop Header: Depth=1
1547+
; RV64ZBB-NEXT: brev8 a0, a0
1548+
; RV64ZBB-NEXT: andi a0, a0, 1234
1549+
; RV64ZBB-NEXT: addi a2, a2, 1
1550+
; RV64ZBB-NEXT: add a0, a0, a1
1551+
; RV64ZBB-NEXT: bltu a2, a3, .LBB25_1
1552+
; RV64ZBB-NEXT: # %bb.2: # %bb7
1553+
; RV64ZBB-NEXT: sext.w a0, a0
1554+
; RV64ZBB-NEXT: ret
1555+
;
1556+
; NOREMOVAL-LABEL: test21:
1557+
; NOREMOVAL: # %bb.0: # %entry
1558+
; NOREMOVAL-NEXT: addi a2, a2, -1
1559+
; NOREMOVAL-NEXT: li a3, 256
1560+
; NOREMOVAL-NEXT: .LBB25_1: # %bb2
1561+
; NOREMOVAL-NEXT: # =>This Inner Loop Header: Depth=1
1562+
; NOREMOVAL-NEXT: brev8 a0, a0
1563+
; NOREMOVAL-NEXT: andi a0, a0, 1234
1564+
; NOREMOVAL-NEXT: addi a2, a2, 1
1565+
; NOREMOVAL-NEXT: add a0, a0, a1
1566+
; NOREMOVAL-NEXT: bltu a2, a3, .LBB25_1
1567+
; NOREMOVAL-NEXT: # %bb.2: # %bb7
1568+
; NOREMOVAL-NEXT: sext.w a0, a0
1569+
; NOREMOVAL-NEXT: ret
1570+
entry:
1571+
br label %bb2
1572+
1573+
bb2: ; preds = %bb2, %entry
1574+
%i1 = phi i64 [ %arg1, %entry ], [ %i5, %bb2 ]
1575+
%i2 = phi i64 [ %arg3, %entry ], [ %i3, %bb2 ]
1576+
%i3 = add i64 %i2, 1
1577+
%bswap = call i64 @llvm.bswap.i64(i64 %i1)
1578+
%bitreverse = call i64 @llvm.bitreverse.i64(i64 %bswap)
1579+
%i4 = and i64 %bitreverse, 1234
1580+
%i5 = add i64 %i4, %arg2
1581+
%i6 = icmp ugt i64 %i2, 255
1582+
br i1 %i6, label %bb7, label %bb2
1583+
1584+
bb7: ; preds = %bb2
1585+
%i7 = trunc i64 %i5 to i32
1586+
ret i32 %i7
1587+
}
1588+
1589+
; Negative test for looking through brev8. Make sure we consider that it works
1590+
; on bytes.
1591+
define signext i32 @test22(i64 %arg1, i64 %arg2, i64 %arg3) {
1592+
; RV64I-LABEL: test22:
1593+
; RV64I: # %bb.0: # %entry
1594+
; RV64I-NEXT: addi a2, a2, -1
1595+
; RV64I-NEXT: lui a3, %hi(.LCPI26_0)
1596+
; RV64I-NEXT: lui a4, %hi(.LCPI26_1)
1597+
; RV64I-NEXT: lui a5, %hi(.LCPI26_2)
1598+
; RV64I-NEXT: lui a6, %hi(.LCPI26_3)
1599+
; RV64I-NEXT: li a7, 69
1600+
; RV64I-NEXT: ld a3, %lo(.LCPI26_0)(a3)
1601+
; RV64I-NEXT: ld a4, %lo(.LCPI26_1)(a4)
1602+
; RV64I-NEXT: ld a5, %lo(.LCPI26_2)(a5)
1603+
; RV64I-NEXT: ld a6, %lo(.LCPI26_3)(a6)
1604+
; RV64I-NEXT: slli a7, a7, 32
1605+
; RV64I-NEXT: li t0, 65
1606+
; RV64I-NEXT: slli t0, t0, 28
1607+
; RV64I-NEXT: li t1, 256
1608+
; RV64I-NEXT: .LBB26_1: # %bb2
1609+
; RV64I-NEXT: # =>This Inner Loop Header: Depth=1
1610+
; RV64I-NEXT: slli t2, a0, 11
1611+
; RV64I-NEXT: slli a0, a0, 3
1612+
; RV64I-NEXT: and t2, t2, a3
1613+
; RV64I-NEXT: and a0, a0, a4
1614+
; RV64I-NEXT: or a0, a0, t2
1615+
; RV64I-NEXT: srli t2, a0, 2
1616+
; RV64I-NEXT: and a0, a0, a6
1617+
; RV64I-NEXT: and t2, t2, a5
1618+
; RV64I-NEXT: slli a0, a0, 2
1619+
; RV64I-NEXT: or a0, t2, a0
1620+
; RV64I-NEXT: srli t2, a0, 1
1621+
; RV64I-NEXT: and a0, a0, t0
1622+
; RV64I-NEXT: and t2, t2, a7
1623+
; RV64I-NEXT: slli a0, a0, 1
1624+
; RV64I-NEXT: or a0, t2, a0
1625+
; RV64I-NEXT: srli a0, a0, 28
1626+
; RV64I-NEXT: addi a2, a2, 1
1627+
; RV64I-NEXT: add a0, a0, a1
1628+
; RV64I-NEXT: bltu a2, t1, .LBB26_1
1629+
; RV64I-NEXT: # %bb.2: # %bb7
1630+
; RV64I-NEXT: sext.w a0, a0
1631+
; RV64I-NEXT: ret
1632+
;
1633+
; RV64ZBB-LABEL: test22:
1634+
; RV64ZBB: # %bb.0: # %entry
1635+
; RV64ZBB-NEXT: addi a2, a2, -1
1636+
; RV64ZBB-NEXT: li a3, 256
1637+
; RV64ZBB-NEXT: .LBB26_1: # %bb2
1638+
; RV64ZBB-NEXT: # =>This Inner Loop Header: Depth=1
1639+
; RV64ZBB-NEXT: slli a0, a0, 7
1640+
; RV64ZBB-NEXT: brev8 a0, a0
1641+
; RV64ZBB-NEXT: srli a0, a0, 28
1642+
; RV64ZBB-NEXT: andi a0, a0, 1234
1643+
; RV64ZBB-NEXT: addi a2, a2, 1
1644+
; RV64ZBB-NEXT: add a0, a0, a1
1645+
; RV64ZBB-NEXT: bltu a2, a3, .LBB26_1
1646+
; RV64ZBB-NEXT: # %bb.2: # %bb7
1647+
; RV64ZBB-NEXT: sext.w a0, a0
1648+
; RV64ZBB-NEXT: ret
1649+
;
1650+
; NOREMOVAL-LABEL: test22:
1651+
; NOREMOVAL: # %bb.0: # %entry
1652+
; NOREMOVAL-NEXT: addi a2, a2, -1
1653+
; NOREMOVAL-NEXT: li a3, 256
1654+
; NOREMOVAL-NEXT: .LBB26_1: # %bb2
1655+
; NOREMOVAL-NEXT: # =>This Inner Loop Header: Depth=1
1656+
; NOREMOVAL-NEXT: slli a0, a0, 7
1657+
; NOREMOVAL-NEXT: brev8 a0, a0
1658+
; NOREMOVAL-NEXT: srli a0, a0, 28
1659+
; NOREMOVAL-NEXT: andi a0, a0, 1234
1660+
; NOREMOVAL-NEXT: addi a2, a2, 1
1661+
; NOREMOVAL-NEXT: add a0, a0, a1
1662+
; NOREMOVAL-NEXT: bltu a2, a3, .LBB26_1
1663+
; NOREMOVAL-NEXT: # %bb.2: # %bb7
1664+
; NOREMOVAL-NEXT: sext.w a0, a0
1665+
; NOREMOVAL-NEXT: ret
1666+
entry:
1667+
br label %bb2
1668+
1669+
bb2: ; preds = %bb2, %entry
1670+
%i1 = phi i64 [ %arg1, %entry ], [ %i5, %bb2 ]
1671+
%i2 = phi i64 [ %arg3, %entry ], [ %i3, %bb2 ]
1672+
%i3 = add i64 %i2, 1
1673+
%shl = shl i64 %i1, 7
1674+
%bswap = call i64 @llvm.bswap.i64(i64 %shl)
1675+
%bitreverse = call i64 @llvm.bitreverse.i64(i64 %bswap)
1676+
%lshr = lshr i64 %bitreverse, 28
1677+
%i4 = and i64 %lshr, 1234
1678+
%i5 = add i64 %i4, %arg2
1679+
%i6 = icmp ugt i64 %i2, 255
1680+
br i1 %i6, label %bb7, label %bb2
1681+
1682+
bb7: ; preds = %bb2
1683+
%i7 = trunc i64 %i5 to i32
1684+
ret i32 %i7
1685+
}

0 commit comments

Comments
 (0)