From patchwork Sun Oct 3 11:34:10 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: ifcvt/crossjump patch: Fix PR 42496, 21803 X-Patchwork-Submitter: Bernd Schmidt X-Patchwork-Id: 66597 Message-Id: <4CA86A32.9010603@codesourcery.com> To: "H.J. Lu" Cc: Jeff Law , Eric Botcazou , gcc-patches@gcc.gnu.org, Steven Bosscher , Jim Wilson Date: Sun, 03 Oct 2010 13:34:10 +0200 From: Bernd Schmidt List-Id: On 10/02/2010 03:07 PM, H.J. Lu wrote: > On Wed, Aug 4, 2010 at 6:35 AM, Bernd Schmidt wrote: >> On 08/03/2010 07:12 PM, Jeff Law wrote: >>> OK. WRT the comment, we might want to just say that BB_MODIFIED is set >>> at the same time as a block is marked dirty, but is not cleared during a >>> df_analyze allowing a pass to update the DF information and still know >>> what blocks were modified. >> >> New patch below. >> > > This caused: > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45865 This should fix it, refusing to move NOTE_EPILOGUE_BEGIN and anything beyond it. Bootstrapped and tested on i686-linux, ok? Bernd * df-problems.c (can_move_insns_across): Stop at NOTE_INSN_EPILOGUE_BEG. Index: df-problems.c =================================================================== --- df-problems.c (revision 164552) +++ df-problems.c (working copy) @@ -3915,6 +3915,8 @@ can_move_insns_across (rtx from, rtx to, { if (CALL_P (insn)) break; + if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_EPILOGUE_BEG) + break; if (NONDEBUG_INSN_P (insn)) { if (may_trap_p (PATTERN (insn))