https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98782
--- Comment #8 from Tamar Christina <tnfchris at gcc dot gnu.org> --- > > I wonder how the situation looks on AArch64? The situation didn't improve, up until the end of stage-1 we were seeing a 6% perf uplift from somewhere which seems to have gone away now (in a commit range with a non IPA related patch). The major problems is still the spills. Talking to Vlad I took at look at improving the Chaitin-Briggs heuristics for spilling during the presence of calls and how it tries to improve the allocation by moving spills along the call gaph. By improving on these heuristics I was able to reduce the number of spills and saw improvements on both x86 and AArch64 which brought us back to the old numbers. However this same information is used by other areas such as register preferences and so I had a regression in shrink wrapping. There's also an issue where x86 seems to assign negative values to register costs to indicate they REALLY want this register. This seems to work because the penalty applied usually is large and it cancels out the negative cost. But now the value stays negative causing the register to not be used instead. To fix these I need to keep track of the penalties and the costs separately but did not get time to finish that work before the end of stage-1.