|
2 | 2 | ; RUN: llc -mtriple=riscv64 -mattr=+c,+zbb -verify-machineinstrs < %s \
|
3 | 3 | ; RUN: | FileCheck -check-prefix=NOSFB %s
|
4 | 4 | ; RUN: llc -mtriple=riscv64 -mcpu=sifive-u74 -mattr=+zbb -verify-machineinstrs < %s \
|
5 |
| -; RUN: | FileCheck -check-prefixes=SFB,NOZICOND,RV64SFB %s |
| 5 | +; RUN: | FileCheck -check-prefixes=SFB,NOZICOND,RV64SFB,RV64SFBSIFIVEU74 %s |
| 6 | +; RUN: llc -mtriple=riscv64 -mcpu=andes-ax45 -mattr=+zbb -verify-machineinstrs < %s \ |
| 7 | +; RUN: | FileCheck -check-prefixes=SFB,NOZICOND,RV64SFB,RV64SFBANDESAX45 %s |
6 | 8 | ; RUN: llc -mtriple=riscv64 -mcpu=sifive-u74 -mattr=+zicond,+zbb \
|
7 | 9 | ; RUN: -verify-machineinstrs < %s | FileCheck -check-prefixes=SFB,ZICOND %s
|
8 | 10 | ; RUN: llc -mtriple=riscv32 -mcpu=sifive-e76 -mattr=+zbb -verify-machineinstrs < %s \
|
@@ -67,18 +69,31 @@ define signext i32 @test3(i32 signext %v, i32 signext %w, i32 signext %x, i32 si
|
67 | 69 | ; NOSFB-NEXT: addw a0, a1, a2
|
68 | 70 | ; NOSFB-NEXT: ret
|
69 | 71 | ;
|
70 |
| -; RV64SFB-LABEL: test3: |
71 |
| -; RV64SFB: # %bb.0: |
72 |
| -; RV64SFB-NEXT: beqz a4, .LBB2_2 |
73 |
| -; RV64SFB-NEXT: # %bb.1: |
74 |
| -; RV64SFB-NEXT: mv a2, a3 |
75 |
| -; RV64SFB-NEXT: .LBB2_2: |
76 |
| -; RV64SFB-NEXT: bnez a4, .LBB2_4 |
77 |
| -; RV64SFB-NEXT: # %bb.3: |
78 |
| -; RV64SFB-NEXT: mv a0, a1 |
79 |
| -; RV64SFB-NEXT: .LBB2_4: |
80 |
| -; RV64SFB-NEXT: addw a0, a0, a2 |
81 |
| -; RV64SFB-NEXT: ret |
| 72 | +; RV64SFBSIFIVEU74-LABEL: test3: |
| 73 | +; RV64SFBSIFIVEU74: # %bb.0: |
| 74 | +; RV64SFBSIFIVEU74-NEXT: beqz a4, .LBB2_2 |
| 75 | +; RV64SFBSIFIVEU74-NEXT: # %bb.1: |
| 76 | +; RV64SFBSIFIVEU74-NEXT: mv a2, a3 |
| 77 | +; RV64SFBSIFIVEU74-NEXT: .LBB2_2: |
| 78 | +; RV64SFBSIFIVEU74-NEXT: bnez a4, .LBB2_4 |
| 79 | +; RV64SFBSIFIVEU74-NEXT: # %bb.3: |
| 80 | +; RV64SFBSIFIVEU74-NEXT: mv a0, a1 |
| 81 | +; RV64SFBSIFIVEU74-NEXT: .LBB2_4: |
| 82 | +; RV64SFBSIFIVEU74-NEXT: addw a0, a0, a2 |
| 83 | +; RV64SFBSIFIVEU74-NEXT: ret |
| 84 | +; |
| 85 | +; RV64SFBANDESAX45-LABEL: test3: |
| 86 | +; RV64SFBANDESAX45: # %bb.0: |
| 87 | +; RV64SFBANDESAX45-NEXT: bnez a4, .LBB2_2 |
| 88 | +; RV64SFBANDESAX45-NEXT: # %bb.1: |
| 89 | +; RV64SFBANDESAX45-NEXT: mv a0, a1 |
| 90 | +; RV64SFBANDESAX45-NEXT: .LBB2_2: |
| 91 | +; RV64SFBANDESAX45-NEXT: beqz a4, .LBB2_4 |
| 92 | +; RV64SFBANDESAX45-NEXT: # %bb.3: |
| 93 | +; RV64SFBANDESAX45-NEXT: mv a2, a3 |
| 94 | +; RV64SFBANDESAX45-NEXT: .LBB2_4: |
| 95 | +; RV64SFBANDESAX45-NEXT: addw a0, a0, a2 |
| 96 | +; RV64SFBANDESAX45-NEXT: ret |
82 | 97 | ;
|
83 | 98 | ; ZICOND-LABEL: test3:
|
84 | 99 | ; ZICOND: # %bb.0:
|
@@ -1692,3 +1707,130 @@ entry:
|
1692 | 1707 | %2 = select i1 %cond, i64 %C, i64 %1
|
1693 | 1708 | ret i64 %2
|
1694 | 1709 | }
|
| 1710 | + |
| 1711 | +define i64 @select_bfoz(i64 %A, i64 %B, i1 zeroext %cond) { |
| 1712 | +; NOSFB-LABEL: select_bfoz: |
| 1713 | +; NOSFB: # %bb.0: # %entry |
| 1714 | +; NOSFB-NEXT: bnez a2, .LBB39_2 |
| 1715 | +; NOSFB-NEXT: # %bb.1: # %entry |
| 1716 | +; NOSFB-NEXT: slli a0, a0, 38 |
| 1717 | +; NOSFB-NEXT: srli a1, a0, 61 |
| 1718 | +; NOSFB-NEXT: .LBB39_2: # %entry |
| 1719 | +; NOSFB-NEXT: mv a0, a1 |
| 1720 | +; NOSFB-NEXT: ret |
| 1721 | +; |
| 1722 | +; RV64SFBSIFIVEU74-LABEL: select_bfoz: |
| 1723 | +; RV64SFBSIFIVEU74: # %bb.0: # %entry |
| 1724 | +; RV64SFBSIFIVEU74-NEXT: slli a0, a0, 38 |
| 1725 | +; RV64SFBSIFIVEU74-NEXT: bnez a2, .LBB39_2 |
| 1726 | +; RV64SFBSIFIVEU74-NEXT: # %bb.1: # %entry |
| 1727 | +; RV64SFBSIFIVEU74-NEXT: srli a1, a0, 61 |
| 1728 | +; RV64SFBSIFIVEU74-NEXT: .LBB39_2: # %entry |
| 1729 | +; RV64SFBSIFIVEU74-NEXT: mv a0, a1 |
| 1730 | +; RV64SFBSIFIVEU74-NEXT: ret |
| 1731 | +; |
| 1732 | +; RV64SFBANDESAX45-LABEL: select_bfoz: |
| 1733 | +; RV64SFBANDESAX45: # %bb.0: # %entry |
| 1734 | +; RV64SFBANDESAX45-NEXT: bnez a2, .LBB39_2 |
| 1735 | +; RV64SFBANDESAX45-NEXT: # %bb.1: # %entry |
| 1736 | +; RV64SFBANDESAX45-NEXT: nds.bfoz a1, a0, 25, 23 |
| 1737 | +; RV64SFBANDESAX45-NEXT: .LBB39_2: # %entry |
| 1738 | +; RV64SFBANDESAX45-NEXT: mv a0, a1 |
| 1739 | +; RV64SFBANDESAX45-NEXT: ret |
| 1740 | +; |
| 1741 | +; ZICOND-LABEL: select_bfoz: |
| 1742 | +; ZICOND: # %bb.0: # %entry |
| 1743 | +; ZICOND-NEXT: slli a0, a0, 38 |
| 1744 | +; ZICOND-NEXT: bnez a2, .LBB39_2 |
| 1745 | +; ZICOND-NEXT: # %bb.1: # %entry |
| 1746 | +; ZICOND-NEXT: srli a1, a0, 61 |
| 1747 | +; ZICOND-NEXT: .LBB39_2: # %entry |
| 1748 | +; ZICOND-NEXT: mv a0, a1 |
| 1749 | +; ZICOND-NEXT: ret |
| 1750 | +; |
| 1751 | +; RV32SFB-LABEL: select_bfoz: |
| 1752 | +; RV32SFB: # %bb.0: # %entry |
| 1753 | +; RV32SFB-NEXT: slli a0, a0, 6 |
| 1754 | +; RV32SFB-NEXT: mv a1, a3 |
| 1755 | +; RV32SFB-NEXT: bnez a4, .LBB39_2 |
| 1756 | +; RV32SFB-NEXT: # %bb.1: # %entry |
| 1757 | +; RV32SFB-NEXT: srli a2, a0, 29 |
| 1758 | +; RV32SFB-NEXT: .LBB39_2: # %entry |
| 1759 | +; RV32SFB-NEXT: bnez a4, .LBB39_4 |
| 1760 | +; RV32SFB-NEXT: # %bb.3: # %entry |
| 1761 | +; RV32SFB-NEXT: li a1, 0 |
| 1762 | +; RV32SFB-NEXT: .LBB39_4: # %entry |
| 1763 | +; RV32SFB-NEXT: mv a0, a2 |
| 1764 | +; RV32SFB-NEXT: ret |
| 1765 | +entry: |
| 1766 | + %0 = lshr i64 %A, 23 |
| 1767 | + %1 = and i64 %0, 7 |
| 1768 | + %2 = select i1 %cond, i64 %B, i64 %1 |
| 1769 | + ret i64 %2 |
| 1770 | +} |
| 1771 | + |
| 1772 | +define i64 @select_bfos(i64 %A, i64 %B, i1 zeroext %cond) { |
| 1773 | +; NOSFB-LABEL: select_bfos: |
| 1774 | +; NOSFB: # %bb.0: # %entry |
| 1775 | +; NOSFB-NEXT: bnez a2, .LBB40_2 |
| 1776 | +; NOSFB-NEXT: # %bb.1: # %entry |
| 1777 | +; NOSFB-NEXT: slli a0, a0, 31 |
| 1778 | +; NOSFB-NEXT: srai a1, a0, 17 |
| 1779 | +; NOSFB-NEXT: .LBB40_2: # %entry |
| 1780 | +; NOSFB-NEXT: mv a0, a1 |
| 1781 | +; NOSFB-NEXT: ret |
| 1782 | +; |
| 1783 | +; RV64SFBSIFIVEU74-LABEL: select_bfos: |
| 1784 | +; RV64SFBSIFIVEU74: # %bb.0: # %entry |
| 1785 | +; RV64SFBSIFIVEU74-NEXT: slli a0, a0, 31 |
| 1786 | +; RV64SFBSIFIVEU74-NEXT: bnez a2, .LBB40_2 |
| 1787 | +; RV64SFBSIFIVEU74-NEXT: # %bb.1: # %entry |
| 1788 | +; RV64SFBSIFIVEU74-NEXT: srai a1, a0, 17 |
| 1789 | +; RV64SFBSIFIVEU74-NEXT: .LBB40_2: # %entry |
| 1790 | +; RV64SFBSIFIVEU74-NEXT: mv a0, a1 |
| 1791 | +; RV64SFBSIFIVEU74-NEXT: ret |
| 1792 | +; |
| 1793 | +; RV64SFBANDESAX45-LABEL: select_bfos: |
| 1794 | +; RV64SFBANDESAX45: # %bb.0: # %entry |
| 1795 | +; RV64SFBANDESAX45-NEXT: bnez a2, .LBB40_2 |
| 1796 | +; RV64SFBANDESAX45-NEXT: # %bb.1: # %entry |
| 1797 | +; RV64SFBANDESAX45-NEXT: nds.bfos a1, a0, 14, 46 |
| 1798 | +; RV64SFBANDESAX45-NEXT: .LBB40_2: # %entry |
| 1799 | +; RV64SFBANDESAX45-NEXT: mv a0, a1 |
| 1800 | +; RV64SFBANDESAX45-NEXT: ret |
| 1801 | +; |
| 1802 | +; ZICOND-LABEL: select_bfos: |
| 1803 | +; ZICOND: # %bb.0: # %entry |
| 1804 | +; ZICOND-NEXT: slli a0, a0, 31 |
| 1805 | +; ZICOND-NEXT: bnez a2, .LBB40_2 |
| 1806 | +; ZICOND-NEXT: # %bb.1: # %entry |
| 1807 | +; ZICOND-NEXT: srai a1, a0, 17 |
| 1808 | +; ZICOND-NEXT: .LBB40_2: # %entry |
| 1809 | +; ZICOND-NEXT: mv a0, a1 |
| 1810 | +; ZICOND-NEXT: ret |
| 1811 | +; |
| 1812 | +; RV32SFB-LABEL: select_bfos: |
| 1813 | +; RV32SFB: # %bb.0: # %entry |
| 1814 | +; RV32SFB-NEXT: srli a5, a0, 1 |
| 1815 | +; RV32SFB-NEXT: slli a6, a1, 31 |
| 1816 | +; RV32SFB-NEXT: slli a0, a0, 31 |
| 1817 | +; RV32SFB-NEXT: slli a1, a5, 15 |
| 1818 | +; RV32SFB-NEXT: srli a0, a0, 17 |
| 1819 | +; RV32SFB-NEXT: or a5, a6, a5 |
| 1820 | +; RV32SFB-NEXT: bnez a4, .LBB40_2 |
| 1821 | +; RV32SFB-NEXT: # %bb.1: # %entry |
| 1822 | +; RV32SFB-NEXT: or a2, a0, a1 |
| 1823 | +; RV32SFB-NEXT: .LBB40_2: # %entry |
| 1824 | +; RV32SFB-NEXT: bnez a4, .LBB40_4 |
| 1825 | +; RV32SFB-NEXT: # %bb.3: # %entry |
| 1826 | +; RV32SFB-NEXT: srai a3, a5, 17 |
| 1827 | +; RV32SFB-NEXT: .LBB40_4: # %entry |
| 1828 | +; RV32SFB-NEXT: mv a0, a2 |
| 1829 | +; RV32SFB-NEXT: mv a1, a3 |
| 1830 | +; RV32SFB-NEXT: ret |
| 1831 | +entry: |
| 1832 | + %0 = shl i64 %A, 31 |
| 1833 | + %1 = ashr i64 %0, 17 |
| 1834 | + %2 = select i1 %cond, i64 %B, i64 %1 |
| 1835 | + ret i64 %2 |
| 1836 | +} |
0 commit comments