aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-02-19 17:25:58 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2016-02-19 17:25:58 +0100
commitde4fcb999f51400b52d3b9b81606a57883c3c1ea (patch)
treee98c952fbd29c96afb4bdeec09d0b83795625bd1 /gcc
parent03a616ac3662234f556ff7267d25ba842b7b5bab (diff)
downloadgcc-de4fcb999f51400b52d3b9b81606a57883c3c1ea.zip
gcc-de4fcb999f51400b52d3b9b81606a57883c3c1ea.tar.gz
gcc-de4fcb999f51400b52d3b9b81606a57883c3c1ea.tar.bz2
re PR middle-end/69838 (Lra deletes EH_REGION)
PR middle-end/69838 * lra.c (lra_process_new_insns): If non-call exceptions are enabled, call copy_reg_eh_region_note_forward on before and/or after sequences and remove note from insn if it no longer can throw. From-SVN: r233562
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/lra.c11
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 07b7338..587a534 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2016-02-19 Jakub Jelinek <jakub@redhat.com>
+ PR middle-end/69838
+ * lra.c (lra_process_new_insns): If non-call exceptions are enabled,
+ call copy_reg_eh_region_note_forward on before and/or after sequences
+ and remove note from insn if it no longer can throw.
+
PR target/69820
* config/i386/sse.md (VI_512): Only include V64QImode and V32HImode
if TARGET_AVX512BW.
diff --git a/gcc/lra.c b/gcc/lra.c
index ee92ca5..a6ce365 100644
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -1742,20 +1742,29 @@ lra_process_new_insns (rtx_insn *insn, rtx_insn *before, rtx_insn *after,
}
if (before != NULL_RTX)
{
+ if (cfun->can_throw_non_call_exceptions)
+ copy_reg_eh_region_note_forward (insn, before, NULL);
emit_insn_before (before, insn);
push_insns (PREV_INSN (insn), PREV_INSN (before));
setup_sp_offset (before, PREV_INSN (insn));
}
if (after != NULL_RTX)
{
+ if (cfun->can_throw_non_call_exceptions)
+ copy_reg_eh_region_note_forward (insn, after, NULL);
for (last = after; NEXT_INSN (last) != NULL_RTX; last = NEXT_INSN (last))
;
emit_insn_after (after, insn);
push_insns (last, insn);
setup_sp_offset (after, last);
}
+ if (cfun->can_throw_non_call_exceptions)
+ {
+ rtx note = find_reg_note (insn, REG_EH_REGION, NULL_RTX);
+ if (note && !insn_could_throw_p (insn))
+ remove_note (insn, note);
+ }
}
-
/* Replace all references to register OLD_REGNO in *LOC with pseudo