http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50955
--- Comment #16 from rguenther at suse dot de <rguenther at suse dot de> --- On Fri, 16 Aug 2013, pinskia at gcc dot gnu.org wrote: > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50955 > > --- Comment #15 from Andrew Pinski <pinskia at gcc dot gnu.org> --- > (In reply to Andrew Pinski from comment #14) > > I am running into a similar situation with a modified 4.7 on > > mips64-linux-gnu (configured to use the Octeon2 instructions which has a > > load instruction which does base+index [or rather reg+reg]). > > Before IV-OPTS I have this use: > i.17_13 = (sizetype) i_52; > D.13668_14 = i.17_13 + -1; > D.13669_15 = D.13668_14 * 4; > D.13670_16 = D.13666_12 + D.13669_15; > att_17 = *D.13670_16; > > But we decided that it was not used as an address here though. We have: > (gdb) p *use->iv > $15 = {base = 0x7ffff77e1c60, base_object = 0x0, step = 0x7ffff77e1c60, > ssa_name = 0x0, biv_p = 0 '\000', > have_use_for = 1 '\001', use_id = 0} > (gdb) p *use > $16 = {id = 3, type = USE_NONLINEAR_EXPR, iv = 0x1376bb0, stmt = > 0x7ffff727c780, op_p = 0x0, related_cands = 0x0, > n_map_members = 10, cost_map = 0x13de580, selected = 0x0} The original fix was supposed to be as small as possible (late in the release cycle). So it intentionally wasn't trying to be complete. If you can provide a reproducer on trunk I'll gladly have a look again (please open a new bugreport)