@@ -1612,7 +1612,7 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
1612
1612
1613
1613
// Library call cost - other than size, make it expensive.
1614
1614
unsigned SingleCallCost = CostKind == TTI::TCK_CodeSize ? 1 : 10 ;
1615
- SmallVector< unsigned , 2 > ISDs ;
1615
+ unsigned ISD ;
1616
1616
switch (IID) {
1617
1617
default : {
1618
1618
// Scalable vectors cannot be scalarized, so return Invalid.
@@ -1657,82 +1657,82 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
1657
1657
// Look for intrinsics that can be lowered directly or turned into a scalar
1658
1658
// intrinsic call.
1659
1659
case Intrinsic::sqrt :
1660
- ISDs. push_back ( ISD::FSQRT) ;
1660
+ ISD = ISD ::FSQRT;
1661
1661
break ;
1662
1662
case Intrinsic::sin :
1663
- ISDs. push_back ( ISD::FSIN) ;
1663
+ ISD = ISD ::FSIN;
1664
1664
break ;
1665
1665
case Intrinsic::cos :
1666
- ISDs. push_back ( ISD::FCOS) ;
1666
+ ISD = ISD ::FCOS;
1667
1667
break ;
1668
1668
case Intrinsic::exp :
1669
- ISDs. push_back ( ISD::FEXP) ;
1669
+ ISD = ISD ::FEXP;
1670
1670
break ;
1671
1671
case Intrinsic::exp2 :
1672
- ISDs. push_back ( ISD::FEXP2) ;
1672
+ ISD = ISD ::FEXP2;
1673
1673
break ;
1674
1674
case Intrinsic::log :
1675
- ISDs. push_back ( ISD::FLOG) ;
1675
+ ISD = ISD ::FLOG;
1676
1676
break ;
1677
1677
case Intrinsic::log10 :
1678
- ISDs. push_back ( ISD::FLOG10) ;
1678
+ ISD = ISD ::FLOG10;
1679
1679
break ;
1680
1680
case Intrinsic::log2 :
1681
- ISDs. push_back ( ISD::FLOG2) ;
1681
+ ISD = ISD ::FLOG2;
1682
1682
break ;
1683
1683
case Intrinsic::fabs :
1684
- ISDs. push_back ( ISD::FABS) ;
1684
+ ISD = ISD ::FABS;
1685
1685
break ;
1686
1686
case Intrinsic::canonicalize:
1687
- ISDs. push_back ( ISD::FCANONICALIZE) ;
1687
+ ISD = ISD ::FCANONICALIZE;
1688
1688
break ;
1689
1689
case Intrinsic::minnum:
1690
- ISDs. push_back ( ISD::FMINNUM) ;
1690
+ ISD = ISD ::FMINNUM;
1691
1691
break ;
1692
1692
case Intrinsic::maxnum:
1693
- ISDs. push_back ( ISD::FMAXNUM) ;
1693
+ ISD = ISD ::FMAXNUM;
1694
1694
break ;
1695
1695
case Intrinsic::minimum:
1696
- ISDs. push_back ( ISD::FMINIMUM) ;
1696
+ ISD = ISD ::FMINIMUM;
1697
1697
break ;
1698
1698
case Intrinsic::maximum:
1699
- ISDs. push_back ( ISD::FMAXIMUM) ;
1699
+ ISD = ISD ::FMAXIMUM;
1700
1700
break ;
1701
1701
case Intrinsic::copysign :
1702
- ISDs. push_back ( ISD::FCOPYSIGN) ;
1702
+ ISD = ISD ::FCOPYSIGN;
1703
1703
break ;
1704
1704
case Intrinsic::floor :
1705
- ISDs. push_back ( ISD::FFLOOR) ;
1705
+ ISD = ISD ::FFLOOR;
1706
1706
break ;
1707
1707
case Intrinsic::ceil :
1708
- ISDs. push_back ( ISD::FCEIL) ;
1708
+ ISD = ISD ::FCEIL;
1709
1709
break ;
1710
1710
case Intrinsic::trunc :
1711
- ISDs. push_back ( ISD::FTRUNC) ;
1711
+ ISD = ISD ::FTRUNC;
1712
1712
break ;
1713
1713
case Intrinsic::nearbyint :
1714
- ISDs. push_back ( ISD::FNEARBYINT) ;
1714
+ ISD = ISD ::FNEARBYINT;
1715
1715
break ;
1716
1716
case Intrinsic::rint :
1717
- ISDs. push_back ( ISD::FRINT) ;
1717
+ ISD = ISD ::FRINT;
1718
1718
break ;
1719
1719
case Intrinsic::round :
1720
- ISDs. push_back ( ISD::FROUND) ;
1720
+ ISD = ISD ::FROUND;
1721
1721
break ;
1722
1722
case Intrinsic::roundeven:
1723
- ISDs. push_back ( ISD::FROUNDEVEN) ;
1723
+ ISD = ISD ::FROUNDEVEN;
1724
1724
break ;
1725
1725
case Intrinsic::pow :
1726
- ISDs. push_back ( ISD::FPOW) ;
1726
+ ISD = ISD ::FPOW;
1727
1727
break ;
1728
1728
case Intrinsic::fma :
1729
- ISDs. push_back ( ISD::FMA) ;
1729
+ ISD = ISD ::FMA;
1730
1730
break ;
1731
1731
case Intrinsic::fmuladd:
1732
- ISDs. push_back ( ISD::FMA) ;
1732
+ ISD = ISD ::FMA;
1733
1733
break ;
1734
1734
case Intrinsic::experimental_constrained_fmuladd:
1735
- ISDs. push_back ( ISD::STRICT_FMA) ;
1735
+ ISD = ISD ::STRICT_FMA;
1736
1736
break ;
1737
1737
// FIXME: We should return 0 whenever getIntrinsicCost == TCC_Free.
1738
1738
case Intrinsic::lifetime_start:
@@ -1976,61 +1976,48 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
1976
1976
return Cost;
1977
1977
}
1978
1978
case Intrinsic::ctpop:
1979
- ISDs. push_back ( ISD::CTPOP) ;
1979
+ ISD = ISD ::CTPOP;
1980
1980
// In case of legalization use TCC_Expensive. This is cheaper than a
1981
1981
// library call but still not a cheap instruction.
1982
1982
SingleCallCost = TargetTransformInfo::TCC_Expensive;
1983
1983
break ;
1984
1984
case Intrinsic::ctlz:
1985
- ISDs. push_back ( ISD::CTLZ) ;
1985
+ ISD = ISD ::CTLZ;
1986
1986
break ;
1987
1987
case Intrinsic::cttz:
1988
- ISDs. push_back ( ISD::CTTZ) ;
1988
+ ISD = ISD ::CTTZ;
1989
1989
break ;
1990
1990
case Intrinsic::bswap:
1991
- ISDs. push_back ( ISD::BSWAP) ;
1991
+ ISD = ISD ::BSWAP;
1992
1992
break ;
1993
1993
case Intrinsic::bitreverse:
1994
- ISDs. push_back ( ISD::BITREVERSE) ;
1994
+ ISD = ISD ::BITREVERSE;
1995
1995
break ;
1996
1996
}
1997
1997
1998
1998
const TargetLoweringBase *TLI = getTLI ();
1999
1999
std::pair<InstructionCost, MVT> LT =
2000
2000
TLI->getTypeLegalizationCost (DL, RetTy);
2001
2001
2002
- SmallVector<InstructionCost, 2 > LegalCost;
2003
- SmallVector<InstructionCost, 2 > CustomCost;
2004
- for (unsigned ISD : ISDs) {
2005
- if (TLI->isOperationLegalOrPromote (ISD, LT.second )) {
2006
- if (IID == Intrinsic::fabs && LT.second .isFloatingPoint () &&
2007
- TLI->isFAbsFree (LT.second )) {
2008
- return 0 ;
2009
- }
2010
-
2011
- // The operation is legal. Assume it costs 1.
2012
- // If the type is split to multiple registers, assume that there is some
2013
- // overhead to this.
2014
- // TODO: Once we have extract/insert subvector cost we need to use them.
2015
- if (LT.first > 1 )
2016
- LegalCost.push_back (LT.first * 2 );
2017
- else
2018
- LegalCost.push_back (LT.first * 1 );
2019
- } else if (!TLI->isOperationExpand (ISD, LT.second )) {
2020
- // If the operation is custom lowered then assume
2021
- // that the code is twice as expensive.
2022
- CustomCost.push_back (LT.first * 2 );
2002
+ if (TLI->isOperationLegalOrPromote (ISD, LT.second )) {
2003
+ if (IID == Intrinsic::fabs && LT.second .isFloatingPoint () &&
2004
+ TLI->isFAbsFree (LT.second )) {
2005
+ return 0 ;
2023
2006
}
2024
- }
2025
2007
2026
- auto *MinLegalCostI = std::min_element (LegalCost.begin (), LegalCost.end ());
2027
- if (MinLegalCostI != LegalCost.end ())
2028
- return *MinLegalCostI;
2029
-
2030
- auto MinCustomCostI =
2031
- std::min_element (CustomCost.begin (), CustomCost.end ());
2032
- if (MinCustomCostI != CustomCost.end ())
2033
- return *MinCustomCostI;
2008
+ // The operation is legal. Assume it costs 1.
2009
+ // If the type is split to multiple registers, assume that there is some
2010
+ // overhead to this.
2011
+ // TODO: Once we have extract/insert subvector cost we need to use them.
2012
+ if (LT.first > 1 )
2013
+ return (LT.first * 2 );
2014
+ else
2015
+ return (LT.first * 1 );
2016
+ } else if (!TLI->isOperationExpand (ISD, LT.second )) {
2017
+ // If the operation is custom lowered then assume
2018
+ // that the code is twice as expensive.
2019
+ return (LT.first * 2 );
2020
+ }
2034
2021
2035
2022
// If we can't lower fmuladd into an FMA estimate the cost as a floating
2036
2023
// point mul followed by an add.
0 commit comments