https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92275

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
We run into

      tree guard_arg = find_guard_arg (loop, epilog, update_phi);
      /* If the var is live after loop but not a reduction, we simply
         use the old arg.  */
      if (!guard_arg)
        guard_arg = old_arg;

which means we failed to generate a LC PHI for the LIVE stmt during
peeling.  Then epilogue creation simply does

      /* Find the loop-closed-use at the loop exit of the original scalar
         result.  (The reduction result is expected to have two immediate uses,
         one at the latch block, and one at the loop exit).  For double
         reductions we are looking for exit phis of the outer loop.  */
      FOR_EACH_IMM_USE_FAST (use_p, imm_iter, scalar_dest)
        {

but doesn't do any dominance sanity checks that it found a valid PHI
(it simply assumes LC SSA is correct).

Reply via email to