@@ -97,6 +97,10 @@ static cl::opt<unsigned, false, HotColdHintParser>
97
97
static cl::opt<unsigned , false , HotColdHintParser> HotNewHintValue (
98
98
" hot-new-hint-value" , cl::Hidden, cl::init(254 ),
99
99
cl::desc(" Value to pass to hot/cold operator new for hot allocation" ));
100
+ static cl::opt<unsigned , false , HotColdHintParser> AmbiguousNewHintValue (
101
+ " ambiguous-new-hint-value" , cl::Hidden, cl::init(222 ),
102
+ cl::desc(
103
+ " Value to pass to hot/cold operator new for ambiguous allocation" ));
100
104
101
105
// ===----------------------------------------------------------------------===//
102
106
// Helper Functions
@@ -1767,6 +1771,9 @@ Value *LibCallSimplifier::optimizeNew(CallInst *CI, IRBuilderBase &B,
1767
1771
HotCold = NotColdNewHintValue;
1768
1772
else if (CI->getAttributes ().getFnAttr (" memprof" ).getValueAsString () == " hot" )
1769
1773
HotCold = HotNewHintValue;
1774
+ else if (CI->getAttributes ().getFnAttr (" memprof" ).getValueAsString () ==
1775
+ " ambiguous" )
1776
+ HotCold = AmbiguousNewHintValue;
1770
1777
else
1771
1778
return nullptr ;
1772
1779
@@ -1784,19 +1791,17 @@ Value *LibCallSimplifier::optimizeNew(CallInst *CI, IRBuilderBase &B,
1784
1791
LibFunc_Znwm12__hot_cold_t, HotCold);
1785
1792
break ;
1786
1793
case LibFunc_Znwm:
1787
- if (HotCold != NotColdNewHintValue)
1788
- return emitHotColdNew (CI->getArgOperand (0 ), B, TLI,
1789
- LibFunc_Znwm12__hot_cold_t, HotCold);
1794
+ return emitHotColdNew (CI->getArgOperand (0 ), B, TLI,
1795
+ LibFunc_Znwm12__hot_cold_t, HotCold);
1790
1796
break ;
1791
1797
case LibFunc_Znam12__hot_cold_t:
1792
1798
if (OptimizeExistingHotColdNew)
1793
1799
return emitHotColdNew (CI->getArgOperand (0 ), B, TLI,
1794
1800
LibFunc_Znam12__hot_cold_t, HotCold);
1795
1801
break ;
1796
1802
case LibFunc_Znam:
1797
- if (HotCold != NotColdNewHintValue)
1798
- return emitHotColdNew (CI->getArgOperand (0 ), B, TLI,
1799
- LibFunc_Znam12__hot_cold_t, HotCold);
1803
+ return emitHotColdNew (CI->getArgOperand (0 ), B, TLI,
1804
+ LibFunc_Znam12__hot_cold_t, HotCold);
1800
1805
break ;
1801
1806
case LibFunc_ZnwmRKSt9nothrow_t12__hot_cold_t:
1802
1807
if (OptimizeExistingHotColdNew)
@@ -1805,10 +1810,9 @@ Value *LibCallSimplifier::optimizeNew(CallInst *CI, IRBuilderBase &B,
1805
1810
LibFunc_ZnwmRKSt9nothrow_t12__hot_cold_t, HotCold);
1806
1811
break ;
1807
1812
case LibFunc_ZnwmRKSt9nothrow_t:
1808
- if (HotCold != NotColdNewHintValue)
1809
- return emitHotColdNewNoThrow (
1810
- CI->getArgOperand (0 ), CI->getArgOperand (1 ), B, TLI,
1811
- LibFunc_ZnwmRKSt9nothrow_t12__hot_cold_t, HotCold);
1813
+ return emitHotColdNewNoThrow (CI->getArgOperand (0 ), CI->getArgOperand (1 ), B,
1814
+ TLI, LibFunc_ZnwmRKSt9nothrow_t12__hot_cold_t,
1815
+ HotCold);
1812
1816
break ;
1813
1817
case LibFunc_ZnamRKSt9nothrow_t12__hot_cold_t:
1814
1818
if (OptimizeExistingHotColdNew)
@@ -1817,10 +1821,9 @@ Value *LibCallSimplifier::optimizeNew(CallInst *CI, IRBuilderBase &B,
1817
1821
LibFunc_ZnamRKSt9nothrow_t12__hot_cold_t, HotCold);
1818
1822
break ;
1819
1823
case LibFunc_ZnamRKSt9nothrow_t:
1820
- if (HotCold != NotColdNewHintValue)
1821
- return emitHotColdNewNoThrow (
1822
- CI->getArgOperand (0 ), CI->getArgOperand (1 ), B, TLI,
1823
- LibFunc_ZnamRKSt9nothrow_t12__hot_cold_t, HotCold);
1824
+ return emitHotColdNewNoThrow (CI->getArgOperand (0 ), CI->getArgOperand (1 ), B,
1825
+ TLI, LibFunc_ZnamRKSt9nothrow_t12__hot_cold_t,
1826
+ HotCold);
1824
1827
break ;
1825
1828
case LibFunc_ZnwmSt11align_val_t12__hot_cold_t:
1826
1829
if (OptimizeExistingHotColdNew)
@@ -1829,10 +1832,9 @@ Value *LibCallSimplifier::optimizeNew(CallInst *CI, IRBuilderBase &B,
1829
1832
LibFunc_ZnwmSt11align_val_t12__hot_cold_t, HotCold);
1830
1833
break ;
1831
1834
case LibFunc_ZnwmSt11align_val_t:
1832
- if (HotCold != NotColdNewHintValue)
1833
- return emitHotColdNewAligned (
1834
- CI->getArgOperand (0 ), CI->getArgOperand (1 ), B, TLI,
1835
- LibFunc_ZnwmSt11align_val_t12__hot_cold_t, HotCold);
1835
+ return emitHotColdNewAligned (CI->getArgOperand (0 ), CI->getArgOperand (1 ), B,
1836
+ TLI, LibFunc_ZnwmSt11align_val_t12__hot_cold_t,
1837
+ HotCold);
1836
1838
break ;
1837
1839
case LibFunc_ZnamSt11align_val_t12__hot_cold_t:
1838
1840
if (OptimizeExistingHotColdNew)
@@ -1841,10 +1843,9 @@ Value *LibCallSimplifier::optimizeNew(CallInst *CI, IRBuilderBase &B,
1841
1843
LibFunc_ZnamSt11align_val_t12__hot_cold_t, HotCold);
1842
1844
break ;
1843
1845
case LibFunc_ZnamSt11align_val_t:
1844
- if (HotCold != NotColdNewHintValue)
1845
- return emitHotColdNewAligned (
1846
- CI->getArgOperand (0 ), CI->getArgOperand (1 ), B, TLI,
1847
- LibFunc_ZnamSt11align_val_t12__hot_cold_t, HotCold);
1846
+ return emitHotColdNewAligned (CI->getArgOperand (0 ), CI->getArgOperand (1 ), B,
1847
+ TLI, LibFunc_ZnamSt11align_val_t12__hot_cold_t,
1848
+ HotCold);
1848
1849
break ;
1849
1850
case LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t:
1850
1851
if (OptimizeExistingHotColdNew)
@@ -1854,11 +1855,9 @@ Value *LibCallSimplifier::optimizeNew(CallInst *CI, IRBuilderBase &B,
1854
1855
HotCold);
1855
1856
break ;
1856
1857
case LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t:
1857
- if (HotCold != NotColdNewHintValue)
1858
- return emitHotColdNewAlignedNoThrow (
1859
- CI->getArgOperand (0 ), CI->getArgOperand (1 ), CI->getArgOperand (2 ), B,
1860
- TLI, LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t,
1861
- HotCold);
1858
+ return emitHotColdNewAlignedNoThrow (
1859
+ CI->getArgOperand (0 ), CI->getArgOperand (1 ), CI->getArgOperand (2 ), B,
1860
+ TLI, LibFunc_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t, HotCold);
1862
1861
break ;
1863
1862
case LibFunc_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t:
1864
1863
if (OptimizeExistingHotColdNew)
@@ -1868,17 +1867,14 @@ Value *LibCallSimplifier::optimizeNew(CallInst *CI, IRBuilderBase &B,
1868
1867
HotCold);
1869
1868
break ;
1870
1869
case LibFunc_ZnamSt11align_val_tRKSt9nothrow_t:
1871
- if (HotCold != NotColdNewHintValue)
1872
- return emitHotColdNewAlignedNoThrow (
1873
- CI->getArgOperand (0 ), CI->getArgOperand (1 ), CI->getArgOperand (2 ), B,
1874
- TLI, LibFunc_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t,
1875
- HotCold);
1870
+ return emitHotColdNewAlignedNoThrow (
1871
+ CI->getArgOperand (0 ), CI->getArgOperand (1 ), CI->getArgOperand (2 ), B,
1872
+ TLI, LibFunc_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t, HotCold);
1876
1873
break ;
1877
1874
case LibFunc_size_returning_new:
1878
- if (HotCold != NotColdNewHintValue)
1879
- return emitHotColdSizeReturningNew (CI->getArgOperand (0 ), B, TLI,
1880
- LibFunc_size_returning_new_hot_cold,
1881
- HotCold);
1875
+ return emitHotColdSizeReturningNew (CI->getArgOperand (0 ), B, TLI,
1876
+ LibFunc_size_returning_new_hot_cold,
1877
+ HotCold);
1882
1878
break ;
1883
1879
case LibFunc_size_returning_new_hot_cold:
1884
1880
if (OptimizeExistingHotColdNew)
@@ -1887,10 +1883,9 @@ Value *LibCallSimplifier::optimizeNew(CallInst *CI, IRBuilderBase &B,
1887
1883
HotCold);
1888
1884
break ;
1889
1885
case LibFunc_size_returning_new_aligned:
1890
- if (HotCold != NotColdNewHintValue)
1891
- return emitHotColdSizeReturningNewAligned (
1892
- CI->getArgOperand (0 ), CI->getArgOperand (1 ), B, TLI,
1893
- LibFunc_size_returning_new_aligned_hot_cold, HotCold);
1886
+ return emitHotColdSizeReturningNewAligned (
1887
+ CI->getArgOperand (0 ), CI->getArgOperand (1 ), B, TLI,
1888
+ LibFunc_size_returning_new_aligned_hot_cold, HotCold);
1894
1889
break ;
1895
1890
case LibFunc_size_returning_new_aligned_hot_cold:
1896
1891
if (OptimizeExistingHotColdNew)
0 commit comments