Debugging info on # spills?
Vladimir Makarov
vmakarov@redhat.com
Wed Apr 7 16:10:00 GMT 2004
Daniel Berlin wrote:
>
> On Apr 7, 2004, at 9:37 AM, Michael Matz wrote:
>
>> Hi,
>>
>> On Tue, 6 Apr 2004, Timothy J. Wood wrote:
>>
>>> Is there some gcc option I can use that would allow me to determine
>>> how many 'extra' registers would be necessary to allow my function to
>>> run with zero spilling?
>>
>>
>> Not really, no. Solving it optimally is NP complete.
>
>
> This actually doesn't appear to be true for all register interference
> graphs generated by GCC (and other compilers for that matter).
> See "Register Allocation by Optimal Graph Coloring" for some statistics.
> As I emailed Tim in private mail, I also tested this theory on all
> register interference graphs generated by GCC during bootstrap, make
> check, and compiling some random large programs i had.
> They were all 1-perfect as well.
>
Even if you can solve optimaly graph colouring problem, it is probably
not what Tim asked.
The optimal graph colouring is just one of the register allocation
problems (probably not the most complex). Accoring to the solution a
register is supposed to be allocated in one hard register or in memory.
Most register allocators can place register in different hard-registers
(or in memory partially) making live range splitting and or web spliting
. Also optimal graph coloring problem is simplified in sense of
register classes. Gcc has more powerfull register model. According to
this model the same pseudo-register sometimes has to be placed in
different non-intersected classes, it will require register moving
sometimes through memory (secondary reloads) if there is no direct
moving one class register to another one.
Moreover gcc sometimes will always place pseudo-register in memory
even if there are enough hard-regiseters because it will be more
profitable (e.g. an x86 argument pseudo-register passed through stack
and used only once).
Also with my point of view the problem is formulated inaccurately.
What dose `extra' registers mean? What classes?
So even if spills mean spills generated by reload and the problem will
be formulated more accurately, in general writing code finding minimal
number of hard registers enough for compiling programs by gcc without
"spilling" will be a difficult task. And moreover the algorithm will
be slow too.
Vlad
More information about the Gcc
mailing list