From 89753b3a903366fb53a324206a176d53d04d419e Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 9 Nov 2001 00:14:26 +0100 Subject: [PATCH] cfgrtl.c (purge_dead_edges): Remove REG_EH_REGION note for insns which cannot throw. * cfgrtl.c (purge_dead_edges): Remove REG_EH_REGION note for insns which cannot throw. From-SVN: r46863 --- gcc/ChangeLog | 5 +++++ gcc/cfgrtl.c | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 06fa1f65f0f..6535209c971 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-11-09 Jakub Jelinek + + * cfgrtl.c (purge_dead_edges): Remove REG_EH_REGION note for insns + which cannot throw. + Thu Nov 8 18:00:55 2001 Richard Kenner * explow.c (convert_memory_address, case SUBREG): Only return diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 2987a506618..5d785cafb50 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -1819,7 +1819,7 @@ purge_dead_edges (bb) basic_block bb; { edge e, next; - rtx insn = bb->end; + rtx insn = bb->end, note; bool purged = false; if (GET_CODE (insn) == JUMP_INSN && !simplejump_p (insn)) @@ -1878,6 +1878,17 @@ purge_dead_edges (bb) return purged; } + /* If this instruction cannot trap, remove REG_EH_REGION notes. */ + if (GET_CODE (insn) == INSN + && (note = find_reg_note (insn, REG_EH_REGION, NULL))) + { + rtx eqnote; + if (! may_trap_p (PATTERN (insn)) + || ((eqnote = find_reg_equal_equiv_note (insn)) + && ! may_trap_p (XEXP (eqnote, 0)))) + remove_note (insn, note); + } + /* Cleanup abnormal edges caused by throwing insns that have been eliminated. */ if (! can_throw_internal (bb->end)) -- 2.30.2