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

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Apparently split* passes aren't the only passes that split insns though, so the
patch I've attached is incomplete anyway.
>From quick skimming, it seems split*, dbr, final, combine and pro_and_epilogue
passes split insns right now, and some backends (but not i386/s390 that are
problematic here).  split* passes don't run df_analyze at all, so I think it is
safe to call df_note_add_problem (); df_analyze (); there, final/dbr don't have
cfg around, so it is unsafe, combine already has note problem computed, and
pro_and_epilogue only splits eh_return pattern.
So supposedly
bool
split_dead_or_set_p (rtx insn, const_rtx x)
{
  if (BLOCK_FOR_INSN (insn) == NULL)
    return false; /* If cfg is gone, be conservative.  */
  if (df_note == NULL)
    {
      df_note_add_problem ();
      df_analyze ();
    }
  return dead_or_set_p (insn, x);
}

could work.  Steven, comments?

Reply via email to