On Tue, Oct 30, 2012 at 03:51:19PM +0100, Richard Biener wrote:
> + FOR_EACH_IMM_USE_STMT (stmt, imm_iter, def)
> + {
> + if (!gimple_debug_bind_p (stmt))
> + continue;
> +
> + FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
> + SET_USE (use_p, comp);
> +
> + if (!comp)
> + BREAK_FROM_IMM_USE_STMT (imm_iter);
>
> how does comp magically become NULL_TREE here?
Looks like pasto to me, from the first loop.
BTW, I'd also think that the first loop should set count = 2 if
the debug stmt already has a non-trivial expression (i.e. rhs isn't
just the SSA_NAME), to force a debug temp in that case to avoid creating too
large debug stmts.
> Btw, what's all the fuzz with IV candidates, etc? At least for non-PHIs
> I don't see why the regular release_ssa_name way of doing things does
> not work. IVOPTs is slow enough ...
Even if it is non-PHI, release_ssa_name will replace it with the definition,
and then on another release_ssa_name again and again, and finally either
be lucky enough that some SSA_NAME stays (is an IV that has been kept), but
more often you'll just reach the PHI node and end up with a long list of:
DEBUG D#7 => NULL
DEBUG D#6 => D#7
DEBUG D#5 => D#6
DEBUG D#4 => D#5
DEBUG D#3 => D#4
DEBUG D#2 => D#3
DEBUG D#1 => D#2
(the NULL because of PHI). We don't need to find optimal IV replacement,
so the code tries just a couple of them (perhaps the 64 should be a param,
and perhaps could be lower by default), it just helps if the expression is
smaller (smaller debug info), and if it contains as few SSA_NAMEs as
possible (then it is more likely it will actually be useful).
Jakub