This is the mail archive of the
mailing list for the GCC project.
Re: birthpoints in rtl.
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: Kenneth Zadeck <zadeck at naturalbridge dot com>
- Cc: Jan Hubicka <jh at suse dot cz>, Steven Bosscher <stevenb dot gcc at gmail dot com>, Diego Novillo <dnovillo at google dot com>, Paolo Bonzini <bonzini at gnu dot org>, Jan Hubicka <hubicka at ucw dot cz>, gcc <gcc at gcc dot gnu dot org>, "Park, Seongbae" <seongbae dot park at gmail dot com>, Ian Lance Taylor <iant at google dot com>, Richard Sandiford <rsandifo at nildram dot co dot uk>
- Date: Tue, 4 Mar 2008 22:06:54 +0100
- Subject: Re: birthpoints in rtl.
- References: <47C8B3BB.firstname.lastname@example.org> <20080301100306.GA24550@atrey.karlin.mff.cuni.cz> <email@example.com> <47C95E4F.firstname.lastname@example.org> <email@example.com> <47CD9BCF.firstname.lastname@example.org> <email@example.com> <47CDA549.firstname.lastname@example.org> <20080304200329.GO8311@kam.mff.cuni.cz> <47CDACCC.email@example.com>
> I think that at this point, i have been convinced to:
> 1) use fud's rather than birthpoints because these do keep a slot for
> the value along each in edge.
> 2) keep the info on the side (see rsandifors diverging thread).
> I am not there on keeping extra names on the side. The advantage of
> the extra names is that it gives you extra freedom. the disadvantage
> is that either the transformations are more expensive or getting out of
> the renamed form is expensive.
The names are equivalent to UD pointers: Either you can have version
names or just coinsider the destination of UD pointer to be the
destination. Or am I still missing a point?
> Again, if we have a suite of contiguous converted passes in a row, i
> could be swayed in the renaming on the side direction, especially if
> they butted up against the rtl generation step and avoided the out of
> ssa for the tree ssa. But that is a long time in the future, and i do
Generating RTL and building FUD based on existing tree-SSA is doable. I
am not sure how practical however. The value can be to have a means of
transfering fine grained info to RTL level. Definitly not step we want
to make tomorrow ;)
I guess we can just stay rebuilding FUDs as we rebuild DU/UD on RTL now.
It should not be any more expensive, I hope (definitly it should not
have the extreme side cases as DU/UD has, I am not sure how average
construction time for FUDs/SSA compare to DU/UD construction.
Algorithms seems comparably complex to my eyes.
Gradually we update passes to maintain the info. It is all bit slippery
on RTL level since most transformation go through RTL emit machinery
that is allowed to introduce fancy things, clobber registers, add
temporaries and do all that stuff.
I believe that FUD on hard regs is doable and practical: I don't see how
the rewriting SSA problems hit by RTL-SSA project map here and overall I
believe the basic disapointment lesson from RTL-SSA project was not
SUBREGs/STRICT_LOW_PARTs and other isues, but the fact that RTL is that
hard to modify: everything you do go through target validation machinery
or expansion and can behave irregularly that does not play well with
standard optimization algorithms plus there are ugly things like libcall
or other notes that was a lot more important in GCC of RTL-SSA project
So at the end adding sane analysis framework didn't let you to write
easy high level transformations RTL-SSA was originally intended for.
With Gimple optimizer in place, we are however not targetting this kind
of stuff on RTL anymore. We want sane dataflow info for guiding basic
stuff (DCE/CCP/register allocation/GCSE).
> not see the short term benefits.