From: Andrew Haley Date: Tue, 8 May 2001 14:14:11 +0000 (+0000) Subject: reload1.c (copy_eh_notes): New function. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=94bd63e512d48ff89580191b55a95cc39f370bdb;p=gcc.git reload1.c (copy_eh_notes): New function. 2001-05-03 Andrew Haley * reload1.c (copy_eh_notes): New function. (emit_input_reload_insns): Call it. (emit_output_reload_insns): Call it. From-SVN: r41918 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9986959adc4..a5e6fd2a132 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2001-05-03 Andrew Haley + + * reload1.c (copy_eh_notes): New function. + (emit_input_reload_insns): Call it. + (emit_output_reload_insns): Call it. + 2001-05-07 Zack Weinberg * config.gcc (i[34567]86-*-sco3.2v4*, i[34567]86-*-sco*): diff --git a/gcc/reload1.c b/gcc/reload1.c index f12e8f45617..dbf99d62dac 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -454,6 +454,7 @@ static void move2add_note_store PARAMS ((rtx, rtx, void *)); #ifdef AUTO_INC_DEC static void add_auto_inc_notes PARAMS ((rtx, rtx)); #endif +static void copy_eh_notes PARAMS ((rtx, rtx)); static HOST_WIDE_INT sext_for_mode PARAMS ((enum machine_mode, HOST_WIDE_INT)); static void failed_reload PARAMS ((rtx, int)); @@ -6571,10 +6572,13 @@ emit_input_reload_insns (chain, rl, old, j) rl->when_needed); } + if (flag_non_call_exceptions) + copy_eh_notes (insn, get_insns ()); + /* End this sequence. */ *where = get_insns (); end_sequence (); - + /* Update reload_override_in so that delete_address_reloads_1 can see the actual register usage. */ if (oldequiv_reg) @@ -6789,6 +6793,9 @@ emit_output_reload_insns (chain, rl, j) else output_reload_insns[rl->opnum] = get_insns (); + if (flag_non_call_exceptions) + copy_eh_notes (insn, get_insns ()); + end_sequence (); } @@ -9437,3 +9444,23 @@ add_auto_inc_notes (insn, x) } } #endif + +/* Copy EH notes from an insn to its reloads. */ +static void +copy_eh_notes (insn, x) + rtx insn; + rtx x; +{ + rtx eh_note = find_reg_note (insn, REG_EH_REGION, NULL_RTX); + if (eh_note) + { + for (; x != 0; x = NEXT_INSN (x)) + { + if (may_trap_p (PATTERN (x))) + REG_NOTES (x) + = gen_rtx_EXPR_LIST (REG_EH_REGION, XEXP (eh_note, 0), + REG_NOTES (x)); + } + } +} +