On Tue, Sep 10, 2013 at 3:30 AM, Steven Bosscher <stevenb....@gmail.com> wrote:
> On Mon, Sep 9, 2013 at 10:01 AM, Richard Biener wrote:
>>> >> First, the loop passes that at the moment preceede IVOPTs leave
>>> >> around IL that is in desparate need of basic re-optimization
>>> >> like CSE, constant propagation and DCE.  That puts extra load
>>> >> on IVOPTs and its cost model, increasing compile-time and
>>> >> possibly confusing it.
>
> So why not just run DCE and DOM just before IVOPTs?
>
>
>>> >> Second, IVOPTs introduces lowered memory accesses that it
>>> >> expects to stay as is, likewise it produces auto-inc/dec
>>> >> sequences that it expects to stay as is until RTL expansion.
>>> >> Passes such as DOM can break this expectation and make the
>>> >> work done by IVOPTs a waste.
>
> But IVOPTs leaves its own messy code behind (see below).
>
>
>>> >> I remember doing this excercise in the GCC 4.3 timeframe where
>>> >> benchmarking on x86_64 showed no gains or losses (but x86_64
>>> >> isn't very sensitive to IV choices).
>>> >>
>>> >> Any help with benchmarking this on targets other than x86_64
>>> >> is appreciated (I'll re-do x86_64).
>
> Targets like POWER and ARM would be interesting to test on.
Yes, I will benchmark on ARM 32bit.
>
>
>> We already run LIM twice, moving the one that is currently after
>> IVOPTs as well should be easy.  But of course as you note IVOPTs
>> may introduce loop invariant code it also may introduce full
>> redundancies in the way it re-writes IVs.  And for both people may
>> claim that we have both CSE and LIM on the RTL level, too.
>
> I would claim that relying on RTL (G)CSE and RTL LIM is a step in the
> wrong direction. You end up creating a lot of garbage RTL, and many
> transformations that are easy on GIMPLE cannot be performed anymore on
> RTL.
>
> Is it possible to make IVOPTs clean up after itself? It should be easy
> for IVOPTs to notice that it creates loop-invariant code, and position
It would be even better to have some loop-invariant sensitive
re-association, because IVOPT (by using general tree association)
splits loop-invariant expression into different gimple, making lim's
life hard.

> it on the loop pre-header edge. I suppose full redundancies are
> harder, but I would expect that to happen less frequently (the only
> situation I can think of right now is where a loop is rewritten with
> two IVs where the two IVs share a common sub-expression).
>
> Ciao!
> Steven



-- 
Best Regards.

Reply via email to