calculate_global_regs_live
Eric Botcazou
ebotcazou@libertysurf.fr
Fri Dec 19 11:59:00 GMT 2003
> I tried looking at callers of update_life_info. It looks like most of
> them already pass all blocks when extent != UPDATE_LIFE_LOCAL.
> Exceptions:
> cfgrtl.c purge_all_dead_edges
> recog.c split_all_insns
> sched-rgn.c schedule_insns
Yes, I did the same search.
> Since the majority already do this, I suspect the run time performance
> won't be impacted too much if we assume this.
I don't know (but of course I don't have your experience). There is perhaps
a trade-off here, because infinite loops in c_g_r_l appear to be very rare.
And we could make them even rarer by clearing the BBs in 'blocks'.
> There is a particularly interesting bit in flow.c in the function
> update_life_info_in_dirty_blocks. If called with a subset of blocks,
> and extent is not UPDATE_LIFE_LOCAL, then it already adds in all
> blocks. There is a comment that says this was needed to fix a pentium4
> bootstrap failure. So again, it seems someone ran into a related
> problem. And not surprisingly, it was Richard Henderson again. See
> http://gcc.gnu.org/ml/gcc-patches/2002-05/msg02253.html
Oh! yes, the very same problem. Could you lend me your glasses (or your eyes
if you prefer)? :-)
> This message refers to suggestions from Jan to solve the problem you are
> looking into. Maybe you can find them on the mailing list archive? Or
> maybe Jan remembers?
Jan, do you have any recollection about suggestions to guarantee that
calculate_global_regs_live from flow.c will always terminate?
The problem is described here:
http://gcc.gnu.org/ml/gcc/2003-12/msg00698.html
It was also reported here:
http://gcc.gnu.org/ml/gcc/2001-02/msg00476.html
And Richard hinted at your suggestions here:
http://gcc.gnu.org/ml/gcc-patches/2002-05/msg02253.html
--
Eric Botcazou
More information about the Gcc
mailing list