diff options
author | Andrew Haley <aph@cambridge.redhat.com> | 2001-05-08 14:14:11 +0000 |
---|---|---|
committer | Andrew Haley <aph@gcc.gnu.org> | 2001-05-08 14:14:11 +0000 |
commit | 94bd63e512d48ff89580191b55a95cc39f370bdb (patch) | |
tree | a3b6d81f05e3be694e8761ce32c76aef86864348 | |
parent | 352b3f3f2a32c75d2a615d4867ec0dcacced4ce6 (diff) | |
download | gcc-94bd63e512d48ff89580191b55a95cc39f370bdb.zip gcc-94bd63e512d48ff89580191b55a95cc39f370bdb.tar.gz gcc-94bd63e512d48ff89580191b55a95cc39f370bdb.tar.bz2 |
reload1.c (copy_eh_notes): New function.
2001-05-03 Andrew Haley <aph@cambridge.redhat.com>
* reload1.c (copy_eh_notes): New function.
(emit_input_reload_insns): Call it.
(emit_output_reload_insns): Call it.
From-SVN: r41918
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/reload1.c | 29 |
2 files changed, 34 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9986959..a5e6fd2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2001-05-03 Andrew Haley <aph@cambridge.redhat.com> + + * reload1.c (copy_eh_notes): New function. + (emit_input_reload_insns): Call it. + (emit_output_reload_insns): Call it. + 2001-05-07 Zack Weinberg <zackw@stanford.edu> * config.gcc (i[34567]86-*-sco3.2v4*, i[34567]86-*-sco*): diff --git a/gcc/reload1.c b/gcc/reload1.c index f12e8f4..dbf99d6 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)); + } + } +} + |