From 16f40b30f53a8bbd2b405c24a7830f9b8be8387e Mon Sep 17 00:00:00 2001 From: krebbel Date: Wed, 7 Sep 2005 07:52:48 +0000 Subject: [PATCH] 2005-09-07 Andreas Krebbel * reload1.c (fixup_eh_region_note): Remove assertion. (fixup_abnormal_edges): Reverted removal of call to find_many_sub_basic_blocks made on 2005-08-31. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103984 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/reload1.c | 27 +++++++++------------------ 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cac2e62..f97e855 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-09-07 Andreas Krebbel + + * reload1.c (fixup_eh_region_note): Remove assertion. + (fixup_abnormal_edges): Reverted removal of call to + find_many_sub_basic_blocks made on 2005-08-31. + 2005-09-07 Richard Henderson * function.c (ARG_POINTER_CFA_OFFSET): Move ... diff --git a/gcc/reload1.c b/gcc/reload1.c index 236afce..33840b5 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -3788,24 +3788,6 @@ fixup_eh_region_note (rtx insn, rtx prev, rtx next) REG_NOTES (i) = gen_rtx_EXPR_LIST (REG_EH_REGION, XEXP (note, 0), REG_NOTES (i)); } - - /* ??? Since we entered with one eh insn, we should exit with one eh insn; - otherwise we're unsure that we're not losing an exception. Except that - the instruction stream incoming to reload doesn't pass the "if - reg_eh_region is present, may_trap_p is true" smoke test. - - Worse, even if it did, rtx_addr_can_trap_p returns false for some forms - of address that include constants regardless of the actual value of the - constant. If we decide that "int a[3]; a[100000]" should be considered - non-trapping, we should get that story straight across more of the - compiler. If we decide that it should trap, then we cannot decide - may_trap_p on the basis of rtx_addr_can_trap_p at all. Which may not - be such a big thing -- it doesn't seem hard to get MEM_NOTRAP_P set - correctly in the first place. - - Fixing all that is not in the cards for gcc 4.2, so for the nonce we - allow all eh insns to evaporate. */ - gcc_assert (trap_count <= 1); } /* Reload pseudo-registers into hard regs around each insn as needed. @@ -8191,6 +8173,15 @@ fixup_abnormal_edges (void) } } + /* We've possibly turned single trapping insn into multiple ones. */ + if (flag_non_call_exceptions) + { + sbitmap blocks; + blocks = sbitmap_alloc (last_basic_block); + sbitmap_ones (blocks); + find_many_sub_basic_blocks (blocks); + } + if (inserted) commit_edge_insertions (); -- 2.7.4