https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64164

--- Comment #9 from Alexandre Oliva <aoliva at gcc dot gnu.org> ---
(In reply to Jeffrey A. Law from comment #7)
> OK, but why does this make such a difference in the final result.  Ie, what 
> happens as we get into RTL.

Err, I covered that bit in my description: we emit a number of copies, each
with a new BB of its own.  The additional pseudo survives all the way to the
end, and so do the copies, which is enough to explain the additional stack
slot.  Further rearrangement of code also follows from the additional blocks.

(In reply to Andrew Macleod from comment #8)
> most of these kinds of restrictions were rooted in some kind of rationale... 
> usually from examining an issue of some sort and introducing the restriction 
> to avoid it.

This one was added by https://gcc.gnu.org/ml/gcc-patches/2012-08/msg00517.html
The description mentions out-of-SSA coalescing, but not copyrename coalescing,
which is what this is about.  Since there were not anonymous SSA names before,
the introduced condition would necessarily not be met, so it effectively
reduced the amount of copyrename coalescing without any rationale AFAICT.

Richi, do you happen to have any insight as to why you changed copyrename to
avoid coalescing rootless ssa names?  Reverting it doesn't seem to have any ill
effects on code correctness (unlike allowing coalescing between rooted and
rootless vars during out-of-ssa, in gimple_can_coalesce_p, which breaks codegen
badly, though I haven't dug into why).  I'll attach a patch I'm testing to that
effect momentarily.

Reply via email to