Improvement when reassigning pseudos after spilling

Vladimir Makarov vmakarov@redhat.com
Wed Nov 11 05:15:00 GMT 2009


Jeff Law wrote:
>
> While working on reload-v2, I noticed that we consistently got better 
> code by attempting to reassign all unallocated pseudos in reload's 
> callback to ira_reassign_pseudos.
>
> After a discussion with Vlad, we both agreed that the existing code in 
> ira_reassign_pseudos should already be handling any cases where 
> spilling a pseudo allows other pseudos to be assigned a hard 
> register.  So clearly further analysis was needed.
>
> What I found was that the two phase nature of ira_reassign_pseudos 
> often results in poor allocation choices.
>
> ira_reassign_pseudos first attempts to reassign any pseudo which was 
> spilled to a new hard register.  Then ira_reassign_pseudos will try to 
> assign a hard reg to any pseudo without a hard reg which conflicts 
> with the spilled pseudos.
>
> The problem with that two phase approach is the reassignment of 
> spilled pseudos always has priority over assigning conflicting 
> pseudos, even if the conflicting unallocated pseudos have a higher 
> priority than the spilled pseudos.
>
> The fix is relatively simple.  We merely collect all the spilled 
> pseudos and unallocated conflicting pseudos and allocate them based on 
> their priority.  The net result is consistently better allocations.
>
> This was bootstrapped and regression tested on i686-pc-linux-gnu.  I'm 
> assuming this is not suitable for stage3 development so I'll attach it 
> to our meta-bug for gcc-4.6 pending patches.
>
>
It is ok to me for stage1.  Jeff, thanks for finding the opportunity to 
improve the code.  I overlooked the opportunity.



More information about the Gcc-patches mailing list