diff options
author | aph <aph@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-05-08 14:14:11 +0000 |
---|---|---|
committer | aph <aph@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-05-08 14:14:11 +0000 |
commit | d8c23d3f61e660c90d233892708c097922e15558 (patch) | |
tree | a3b6d81f05e3be694e8761ce32c76aef86864348 /gcc/reload1.c | |
parent | b2b8161f2d3753d82e994177c31e8e6c6ff16ca2 (diff) | |
download | gcc-d8c23d3f61e660c90d233892708c097922e15558.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@41918 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r-- | gcc/reload1.c | 29 |
1 files changed, 28 insertions, 1 deletions
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)); + } + } +} + |