http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58246

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
We decide to stop because we think that we reached a killing definition when
looking for possible defs of

  _8 = t[a.0_6];

and reach, over the loop backedge

  t[a.0_6] = 0;

here:

          /* Or they need to be exactly the same.  */
          else if (ref->ref
                   /* Make sure there is no induction variable involved
                      in the references (gcc.c-torture/execute/pr42142.c).
                      The simplest way is to check if the kill dominates
                      the use.  */
                   && dominated_by_p (CDI_DOMINATORS, (basic_block) data,
                                      gimple_bb (def_stmt))
                   && operand_equal_p (ref->ref, lhs, 0))
            return true;

where the dominance check was supposed to prevent this bug from happening...

I have a fix.

Reply via email to