What to do with new-ra for GCC 4.0
Bernd Schmidt
bernds_cb1@t-online.de
Wed Jan 19 15:56:00 GMT 2005
Ulrich Weigand wrote:
> With two more problems fixed (not counting a couple of trivial warning
> fixes to get by -Werror), I can now bootstrap the C compiler on both
> s390 and s390x. (Full bootstrap/regtest with all languages is still
> in progress.)
Great.
> The first problem is yet another too-eager removal of output reloads
> in the inheritance code; I fixed this by adding in inherit_one_chain:
Yes, I stumbled across this one myself yesterday while trying to debug
the i386 bootstrap failure. I have a vague feeling of deja vu with some
of these bugs; I think the most advanced version of this code was eaten
by a harddisk crash a few years ago :-(
I wonder if it would be sufficient just to check for REG_DEAD notes. If
those are accurate, all the other code could just go away.
> The second problem occurs in the situation where an insn has only an
> optional output reload, and an address reload for that output reload.
> In this case, if the optional reload is disabled, the address reload
> is required in the main insn.
> However, since scan_rtx counts the address reload as feeding only
> into the output reload, the address reload gets assigned an order
> that lies *after* the main insn. Unfortunately this causes
> emit_reload_insns to actually *emit* the address reload *after*
> the main insn, even if the optional reload was disabled ...
>
> I'm not exactly sure what the proper fix is. My current solution
> that appears to work is to change scan_rtx so that such reloads
> count as feeding *both* the main insn and the optional reload,
> like so:
I seem to recall this problem as well, but I'm not entirely sure how
best to fix it. The underlying problem is that enabling or disabling
optional reloads can change register lifetimes. Putting reload insns in
the wrong place is one symptom, making an existing allocation invalid
could be another. Your patch probably fixes the first, but at the
expense of potentially suboptimal code generation (if the optional
reload is enabled, the address reload should be put after the main
insn). I think enable/disable_optional are probably too simpleminded in
their current form.
> B.t.w. I noticed that find_reloads generates a whole lot of optional reloads
> of class NO_REGS. All these must be ignored as no register can satisfy then,
> so I wonder why they should be generated in the first place. The unreloaded_uses
> mechanism should handle these cases even in the absence of a reload, right?
That's probably better, yes.
Thanks for all your help. I've made a new diff; to avoid spamming the
lists with huge patches I've put it up on
http://www.electronghost.co.uk/~bernds
The new version should correct most of the problems you reported, plus
one or two other ones. Let me know how this one works for you.
Bernd
More information about the Gcc
mailing list