On Thu, 6 Oct 2011, William J. Schmidt wrote: > On Thu, 2011-10-06 at 16:16 +0200, Richard Guenther wrote: > > <snip> > > > > > Doh, I thought you were matching gimple stmts that do the address > > computation. But now I see you are matching the tree returned from > > get_inner_reference. So no need to check anything for that case. > > > > But that keeps me wondering what you'll do if the accesses were > > all pointer arithmetic, not arrays. Thus, > > > > extern void foo (int, int, int); > > > > void > > f (int *p, unsigned int n) > > { > > foo (p[n], p[n+64], p[n+128]); > > } > > > > wouldn't that have the same issue and you wouldn't handle it? > > > > Richard. > > > > Good point. This indeed gets missed here, and that's more fuel for > doing a generalized strength reduction along with the special cases like > p->a[n] that are only exposed with get_inner_reference. > > (The pointer arithmetic cases were picked up in my earlier "big-hammer" > approach using the aff-comb machinery, but that had too many problems in > the end, as you know.)
Yeah, I know. It's a very tricky area ;) > So for the long term I will look into a full strength reducer for > non-loop code. For the short term, what do you think about keeping this > single transformation in reassoc to make sure it gets into 4.7? I would > plan to strip it back out and fold it into the strength reducer > thereafter, which might or might not make 4.7 depending on my other > responsibilities and how the 4.7 schedule goes. I haven't seen anything > official, but I'm guessing we're getting towards the end of 4.7 stage 1? It's a reasonable plan - you'd have to introduce a late reassoc pass though. Can you separate out the RTL fwprop changes? So we can iterate over the tree parts separately. Thanks, Richard.