This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Local update flow info assumes valid situations are illegal
- To: Richard Henderson <rth at redhat dot com>, hiller at redhat dot com
- Subject: Re: Local update flow info assumes valid situations are illegal
- From: Alexandre Oliva <aoliva at redhat dot com>
- Date: 04 Jan 2001 18:19:35 -0200
- Cc: gcc-patches at gcc dot gnu dot org
- Organization: GCC Team, Red Hat
- References: <orae98w1kw.fsf@guarana.lsd.ic.unicamp.br><20010103174045.A18408@redhat.com>
On Jan 3, 2001, Richard Henderson <rth@redhat.com> wrote:
>> * flow.c (verify_local_live_at_start): Don't die if a register
>> dead at the end of a BB becomes dead at the head.
> Absolutely not! All attempts to weaken the test this
> function performs will be met with fierce resistance.
Ok. That's good to know. I was under the impression optimizations
weren't required to keep local flow information accurate, since it
would be fixed later anyway.
> As you stated yourself, the problems are elsewhere.
> Get elsewhere to fix up flow information itself by
> invoking update_life_info with UPDATE_LIFE_GLOBAL,
> or whatever is necessary to keep things straight.
Ok.
> So why doesn't this existing code in combine [snip] trigger?
It does trigger for the insn with the add, but not for the insn that
originally set the register, that was also optimized away. We had
something like:
[ live registers: ... B ... ]
(set (reg A) (reg B))
(set (reg C) (minus (reg A) (reg A))) REG_DEAD A
Note that there wasn't any REG_DEAD note for B in the first set, even
though B was indeed dead. Does it make any difference the fact that B
is not a pseudo (even though it's not a real hardware register
either), but an must-be-eliminated fixed call-clobbered register?
>> In other cases, a fixed hardware register was not used at all before
>> some split introduced uses thereof; in this case, the register ended
>> up live in the beginning of the block, even though it was dead at the end.
> Hmm. Trickier. During what pass is the split invoked?
I don't recall for sure. Matt Hiller had the testcase. Matt, would
you please send it to me (again?) in private? Thanks in advance!
--
Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer aoliva@{cygnus.com, redhat.com}
CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist *Please* write to mailing lists, not to me