IRA performance regressions on PPC

Vladimir Makarov vmakarov@redhat.com
Fri Sep 12 12:34:00 GMT 2008


Luis Machado wrote:
>
> Upon further investigation on facerec's regression, it looks like the
> code generated by the IRA-enabled gcc has many more spills than the one
> with a disabled IRA, twice or sometimes three times more.
>
> I'm trying to reduce the testcase a bit further so it's simpler to
> analyse.
>
>   
I am working on this too, Luis.  After a few day of analysis of applu 
hot functions, I found one several hundred insn loop (fortunately it is 
one basic block) in function jacu which contains 8 more insns that one 
generated by old RA.  The assigning made by IRA looks a bit better than 
assigning made by the old RA.  It seems to me that one problem is in 
choosing best register to spill for reloads.  The first heuristic is 
based on cost of spill and IRA has choosen to spill register which is 
set and used once in practically neighbor insns.  Changing spill 
heuristics based on cost to one based on priority defined as

log(NREFS) * cost / live_range_length_where_high_pressure_is_high

significantly improved SPECFP2000 and SPECINT2000 for power6 making them 
better than for the old RA.  Still there is performance degradation on 
applu and facerec (although facerec improved about 2.5%).  I'd commit 
the patch but I think it is not ready yet because the new heuristic 
worsen SPEC2000 for x86/x86_64.  Probably we need different heuristics 
for RISC and CISC machines (which permit memory as operands).  I'll 
think how to distinguish them.

I am going to look at facerec too.  Only, please, don't expect all this 
problem will be solved soon.

Vlad



More information about the Gcc mailing list