@@ -1666,92 +1666,95 @@ void AArch64TargetLowering::addTypeForStreamingSVE(MVT VT) {
1666
1666
for (unsigned Op = 0; Op < ISD::BUILTIN_OP_END; ++Op)
1667
1667
setOperationAction(Op, VT, Expand);
1668
1668
1669
+ assert(VT.isFixedLengthVector() && "Expected fixed length vector type!");
1670
+
1671
+ if (VT.isFloatingPoint()) {
1672
+ setCondCodeAction(ISD::SETO, VT, Expand);
1673
+ setCondCodeAction(ISD::SETOLT, VT, Expand);
1674
+ setCondCodeAction(ISD::SETOLE, VT, Expand);
1675
+ setCondCodeAction(ISD::SETULT, VT, Expand);
1676
+ setCondCodeAction(ISD::SETULE, VT, Expand);
1677
+ setCondCodeAction(ISD::SETUGE, VT, Expand);
1678
+ setCondCodeAction(ISD::SETUGT, VT, Expand);
1679
+ setCondCodeAction(ISD::SETUEQ, VT, Expand);
1680
+ setCondCodeAction(ISD::SETONE, VT, Expand);
1681
+ }
1682
+
1669
1683
// STORE, LOAD, SCALAR_TO_VECTOR and BITCAST are natively supported,
1670
1684
// so no need to Custom/Expand them.
1671
1685
setOperationAction(ISD::STORE, VT, Legal);
1672
1686
setOperationAction(ISD::LOAD, VT, Legal);
1673
1687
setOperationAction(ISD::SCALAR_TO_VECTOR, VT, Legal);
1674
1688
setOperationAction(ISD::BITCAST, VT, Legal);
1675
1689
1690
+ setOperationAction(ISD::ABS, VT, Custom);
1691
+ setOperationAction(ISD::ADD, VT, Custom);
1692
+ setOperationAction(ISD::AND, VT, Custom);
1693
+ setOperationAction(ISD::ANY_EXTEND, VT, Custom);
1694
+ setOperationAction(ISD::BUILD_VECTOR, VT, Custom);
1695
+ setOperationAction(ISD::CONCAT_VECTORS, VT, Custom);
1696
+ setOperationAction(ISD::CTLZ, VT, Custom);
1697
+ setOperationAction(ISD::CTPOP, VT, Custom);
1676
1698
setOperationAction(ISD::EXTRACT_SUBVECTOR, VT, Custom);
1699
+ setOperationAction(ISD::EXTRACT_VECTOR_ELT, VT, Custom);
1700
+ setOperationAction(ISD::FABS, VT, Custom);
1701
+ setOperationAction(ISD::FADD, VT, Custom);
1702
+ setOperationAction(ISD::FCEIL, VT, Custom);
1703
+ setOperationAction(ISD::FCOPYSIGN, VT, Custom);
1704
+ setOperationAction(ISD::FDIV, VT, Custom);
1705
+ setOperationAction(ISD::FFLOOR, VT, Custom);
1706
+ setOperationAction(ISD::FMA, VT, Custom);
1707
+ setOperationAction(ISD::FMAXIMUM, VT, Custom);
1708
+ setOperationAction(ISD::FMAXNUM, VT, Custom);
1709
+ setOperationAction(ISD::FMINIMUM, VT, Custom);
1710
+ setOperationAction(ISD::FMINNUM, VT, Custom);
1711
+ setOperationAction(ISD::FMUL, VT, Custom);
1712
+ setOperationAction(ISD::FNEARBYINT, VT, Custom);
1713
+ setOperationAction(ISD::FNEG, VT, Custom);
1714
+ setOperationAction(ISD::FP_ROUND, VT, Custom);
1715
+ setOperationAction(ISD::FP_TO_SINT, VT, Custom);
1716
+ setOperationAction(ISD::FP_TO_UINT, VT, Custom);
1717
+ setOperationAction(ISD::FRINT, VT, Custom);
1718
+ setOperationAction(ISD::FROUND, VT, Custom);
1719
+ setOperationAction(ISD::FROUNDEVEN, VT, Custom);
1720
+ setOperationAction(ISD::FSQRT, VT, Custom);
1721
+ setOperationAction(ISD::FSUB, VT, Custom);
1722
+ setOperationAction(ISD::FTRUNC, VT, Custom);
1723
+ setOperationAction(ISD::INSERT_VECTOR_ELT, VT, Custom);
1677
1724
setOperationAction(ISD::MLOAD, VT, Custom);
1678
1725
setOperationAction(ISD::MSTORE, VT, Custom);
1679
- setOperationAction(ISD::EXTRACT_VECTOR_ELT, VT, Custom);
1680
- setOperationAction(ISD::VECTOR_SHUFFLE, VT, Custom);
1726
+ setOperationAction(ISD::MUL, VT, Custom);
1727
+ setOperationAction(ISD::MULHS, VT, Custom);
1728
+ setOperationAction(ISD::MULHU, VT, Custom);
1729
+ setOperationAction(ISD::OR, VT, Custom);
1681
1730
setOperationAction(ISD::SDIV, VT, Custom);
1731
+ setOperationAction(ISD::SETCC, VT, Custom);
1682
1732
setOperationAction(ISD::SHL, VT, Custom);
1733
+ setOperationAction(ISD::SIGN_EXTEND, VT, Custom);
1734
+ setOperationAction(ISD::SINT_TO_FP, VT, Custom);
1735
+ setOperationAction(ISD::SMAX, VT, Custom);
1736
+ setOperationAction(ISD::SMIN, VT, Custom);
1737
+ setOperationAction(ISD::SPLAT_VECTOR, VT, Custom);
1683
1738
setOperationAction(ISD::SRA, VT, Custom);
1684
1739
setOperationAction(ISD::SRL, VT, Custom);
1685
- setOperationAction(ISD::OR , VT, Custom);
1686
- setOperationAction(ISD::SETCC , VT, Custom);
1740
+ setOperationAction(ISD::SUB , VT, Custom);
1741
+ setOperationAction(ISD::TRUNCATE , VT, Custom);
1687
1742
setOperationAction(ISD::UDIV, VT, Custom);
1688
- setOperationAction(ISD::SINT_TO_FP, VT, Custom);
1689
- setOperationAction(ISD::FP_TO_SINT, VT, Custom);
1690
- setOperationAction(ISD::FP_TO_UINT, VT, Custom);
1691
1743
setOperationAction(ISD::UINT_TO_FP, VT, Custom);
1692
- setOperationAction(ISD::VECREDUCE_FMIN, VT, Custom);
1744
+ setOperationAction(ISD::UMAX, VT, Custom);
1745
+ setOperationAction(ISD::UMIN, VT, Custom);
1746
+ setOperationAction(ISD::VECREDUCE_ADD, VT, Custom);
1747
+ setOperationAction(ISD::VECREDUCE_FADD, VT, Custom);
1693
1748
setOperationAction(ISD::VECREDUCE_FMAX, VT, Custom);
1749
+ setOperationAction(ISD::VECREDUCE_FMIN, VT, Custom);
1694
1750
setOperationAction(ISD::VECREDUCE_SEQ_FADD, VT, Custom);
1695
- setOperationAction(ISD::BUILD_VECTOR, VT, Custom);
1696
- setOperationAction(ISD::INSERT_VECTOR_ELT, VT, Custom);
1697
- setOperationAction(ISD::FCOPYSIGN, VT, Custom);
1698
- setOperationAction(ISD::ANY_EXTEND, VT, Custom);
1699
- setOperationAction(ISD::ZERO_EXTEND, VT, Custom);
1700
- setOperationAction(ISD::SIGN_EXTEND, VT, Custom);
1701
- setOperationAction(ISD::SPLAT_VECTOR, VT, Custom);
1702
- setOperationAction(ISD::CONCAT_VECTORS, VT, Custom);
1703
- setOperationAction(ISD::AND, VT, Custom);
1704
- setOperationAction(ISD::ADD, VT, Custom);
1705
- setOperationAction(ISD::SUB, VT, Custom);
1706
- setOperationAction(ISD::MUL, VT, Custom);
1707
- setOperationAction(ISD::MULHS, VT, Custom);
1708
- setOperationAction(ISD::MULHU, VT, Custom);
1709
- setOperationAction(ISD::ABS, VT, Custom);
1710
- setOperationAction(ISD::XOR, VT, Custom);
1711
- setOperationAction(ISD::TRUNCATE, VT, Custom);
1712
- setOperationAction(ISD::FMUL, VT, Custom);
1713
- setOperationAction(ISD::FADD, VT, Custom);
1714
- setOperationAction(ISD::FDIV, VT, Custom);
1715
- setOperationAction(ISD::FMA, VT, Custom);
1716
- setOperationAction(ISD::FNEG, VT, Custom);
1717
- setOperationAction(ISD::FSQRT, VT, Custom);
1718
- setOperationAction(ISD::FSUB, VT, Custom);
1719
- setOperationAction(ISD::FABS, VT, Custom);
1720
- setOperationAction(ISD::SMIN, VT, Custom);
1721
- setOperationAction(ISD::SMAX, VT, Custom);
1722
- setOperationAction(ISD::UMIN, VT, Custom);
1723
- setOperationAction(ISD::UMAX, VT, Custom);
1724
- setOperationAction(ISD::FMAXNUM, VT, Custom);
1725
- setOperationAction(ISD::FMINNUM, VT, Custom);
1726
- setOperationAction(ISD::FMAXIMUM, VT, Custom);
1727
- setOperationAction(ISD::FMINIMUM, VT, Custom);
1728
1751
setOperationAction(ISD::VECREDUCE_SMAX, VT, Custom);
1729
1752
setOperationAction(ISD::VECREDUCE_SMIN, VT, Custom);
1730
1753
setOperationAction(ISD::VECREDUCE_UMAX, VT, Custom);
1731
1754
setOperationAction(ISD::VECREDUCE_UMIN, VT, Custom);
1732
- setOperationAction(ISD::VECREDUCE_ADD, VT, Custom);
1733
- setOperationAction(ISD::VECREDUCE_FADD, VT, Custom);
1734
- setOperationAction(ISD::FP_ROUND, VT, Custom);
1735
- setOperationAction(ISD::FCEIL, VT, Custom);
1736
- setOperationAction(ISD::FFLOOR, VT, Custom);
1737
- setOperationAction(ISD::FNEARBYINT, VT, Custom);
1738
- setOperationAction(ISD::FRINT, VT, Custom);
1739
- setOperationAction(ISD::FROUND, VT, Custom);
1740
- setOperationAction(ISD::FROUNDEVEN, VT, Custom);
1741
- setOperationAction(ISD::FTRUNC, VT, Custom);
1742
- setOperationAction(ISD::CTLZ, VT, Custom);
1743
- setOperationAction(ISD::CTPOP, VT, Custom);
1744
- if (VT.isFloatingPoint()) {
1745
- setCondCodeAction(ISD::SETO, VT, Expand);
1746
- setCondCodeAction(ISD::SETOLT, VT, Expand);
1747
- setCondCodeAction(ISD::SETOLE, VT, Expand);
1748
- setCondCodeAction(ISD::SETULT, VT, Expand);
1749
- setCondCodeAction(ISD::SETULE, VT, Expand);
1750
- setCondCodeAction(ISD::SETUGE, VT, Expand);
1751
- setCondCodeAction(ISD::SETUGT, VT, Expand);
1752
- setCondCodeAction(ISD::SETUEQ, VT, Expand);
1753
- setCondCodeAction(ISD::SETONE, VT, Expand);
1754
- }
1755
+ setOperationAction(ISD::VECTOR_SHUFFLE, VT, Custom);
1756
+ setOperationAction(ISD::XOR, VT, Custom);
1757
+ setOperationAction(ISD::ZERO_EXTEND, VT, Custom);
1755
1758
}
1756
1759
1757
1760
void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT) {
@@ -1761,9 +1764,6 @@ void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT) {
1761
1764
for (unsigned Op = 0; Op < ISD::BUILTIN_OP_END; ++Op)
1762
1765
setOperationAction(Op, VT, Expand);
1763
1766
1764
- // We use EXTRACT_SUBVECTOR to "cast" a scalable vector to a fixed length one.
1765
- setOperationAction(ISD::EXTRACT_SUBVECTOR, VT, Custom);
1766
-
1767
1767
if (VT.isFloatingPoint()) {
1768
1768
setCondCodeAction(ISD::SETO, VT, Expand);
1769
1769
setCondCodeAction(ISD::SETOLT, VT, Expand);
@@ -1807,15 +1807,16 @@ void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT) {
1807
1807
setOperationAction(ISD::ANY_EXTEND, VT, Custom);
1808
1808
setOperationAction(ISD::BITCAST, VT, Custom);
1809
1809
setOperationAction(ISD::BITREVERSE, VT, Custom);
1810
- setOperationAction(ISD::BUILD_VECTOR, VT, Custom);
1811
1810
setOperationAction(ISD::BSWAP, VT, Custom);
1811
+ setOperationAction(ISD::BUILD_VECTOR, VT, Custom);
1812
1812
setOperationAction(ISD::CONCAT_VECTORS, VT, Custom);
1813
1813
setOperationAction(ISD::CTLZ, VT, Custom);
1814
1814
setOperationAction(ISD::CTPOP, VT, Custom);
1815
1815
setOperationAction(ISD::CTTZ, VT, Custom);
1816
+ setOperationAction(ISD::EXTRACT_SUBVECTOR, VT, Custom);
1817
+ setOperationAction(ISD::EXTRACT_VECTOR_ELT, VT, Custom);
1816
1818
setOperationAction(ISD::FABS, VT, Custom);
1817
1819
setOperationAction(ISD::FADD, VT, Custom);
1818
- setOperationAction(ISD::EXTRACT_VECTOR_ELT, VT, Custom);
1819
1820
setOperationAction(ISD::FCEIL, VT, Custom);
1820
1821
setOperationAction(ISD::FCOPYSIGN, VT, Custom);
1821
1822
setOperationAction(ISD::FDIV, VT, Custom);
@@ -1838,6 +1839,7 @@ void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT) {
1838
1839
setOperationAction(ISD::FSQRT, VT, Custom);
1839
1840
setOperationAction(ISD::FSUB, VT, Custom);
1840
1841
setOperationAction(ISD::FTRUNC, VT, Custom);
1842
+ setOperationAction(ISD::INSERT_VECTOR_ELT, VT, Custom);
1841
1843
setOperationAction(ISD::LOAD, VT, Custom);
1842
1844
setOperationAction(ISD::MGATHER, VT, Custom);
1843
1845
setOperationAction(ISD::MLOAD, VT, Custom);
@@ -1857,7 +1859,6 @@ void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT) {
1857
1859
setOperationAction(ISD::SMAX, VT, Custom);
1858
1860
setOperationAction(ISD::SMIN, VT, Custom);
1859
1861
setOperationAction(ISD::SPLAT_VECTOR, VT, Custom);
1860
- setOperationAction(ISD::VECTOR_SPLICE, VT, Custom);
1861
1862
setOperationAction(ISD::SRA, VT, Custom);
1862
1863
setOperationAction(ISD::SRL, VT, Custom);
1863
1864
setOperationAction(ISD::STORE, VT, Custom);
@@ -1870,17 +1871,17 @@ void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT) {
1870
1871
setOperationAction(ISD::VECREDUCE_ADD, VT, Custom);
1871
1872
setOperationAction(ISD::VECREDUCE_AND, VT, Custom);
1872
1873
setOperationAction(ISD::VECREDUCE_FADD, VT, Custom);
1873
- setOperationAction(ISD::VECREDUCE_SEQ_FADD, VT, Custom);
1874
1874
setOperationAction(ISD::VECREDUCE_FMAX, VT, Custom);
1875
1875
setOperationAction(ISD::VECREDUCE_FMIN, VT, Custom);
1876
1876
setOperationAction(ISD::VECREDUCE_OR, VT, Custom);
1877
- setOperationAction(ISD::INSERT_VECTOR_ELT , VT, Custom);
1877
+ setOperationAction(ISD::VECREDUCE_SEQ_FADD , VT, Custom);
1878
1878
setOperationAction(ISD::VECREDUCE_SMAX, VT, Custom);
1879
1879
setOperationAction(ISD::VECREDUCE_SMIN, VT, Custom);
1880
1880
setOperationAction(ISD::VECREDUCE_UMAX, VT, Custom);
1881
1881
setOperationAction(ISD::VECREDUCE_UMIN, VT, Custom);
1882
1882
setOperationAction(ISD::VECREDUCE_XOR, VT, Custom);
1883
1883
setOperationAction(ISD::VECTOR_SHUFFLE, VT, Custom);
1884
+ setOperationAction(ISD::VECTOR_SPLICE, VT, Custom);
1884
1885
setOperationAction(ISD::VSELECT, VT, Custom);
1885
1886
setOperationAction(ISD::XOR, VT, Custom);
1886
1887
setOperationAction(ISD::ZERO_EXTEND, VT, Custom);
0 commit comments