On Mon, Oct 26, 2015 at 1:33 PM, Alan Hayward <alan.hayw...@arm.com> wrote: > There is a potential bug in vectorizable_live_operation. > > Consider the case where the first op for stmt is valid, but the second is > null. > The first time through the for () loop, it will call out to > vect_is_simple_use () which will set dt. > The second time, because op is null, vect_is_simple_use () will not be > called. > However, dt is still set to a valid value, therefore the loop will > continue. > > Note this is different from the case where the first op is null, which > will cause the loop not call vect_is_simple_use () and then return false. > > It is possible that this was intentional, however that is not clear from > the code. > > The fix is to simply ensure dt is initialized to a default value on each > iteration.
I think the patch is a strict improvement, thus OK. Still a NULL operand is not possible in GIMPLE so the op && check is not necessary. The way it iterates over all stmt uses is a bit scary anyway. As it is ok with all invariants it should probably simply do sth like FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_USE) if (!vect_is_simple_use (op, ....)) and be done with that. Unvisited uses can only be constants (ok). Care to rework the funtion like that if you are here? Thanks, Richard. > > 2015-09-07 Alan Hayward alan.hayw...@arm.com > * tree-vect-looop.c (vectorizable_live_operation): localize variable. > > > Cheers, > Alan >