aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-07-28 19:54:06 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-07-28 19:54:06 +0000
commit3b0b0013f6dbe34d2e1ddeacd7e7c26752575680 (patch)
tree3dbb6e90be69d5c5eb3e51551fbd506f50407225
parent902628047cb9763809ef2c3155cbf321e08c2656 (diff)
downloadgcc-3b0b0013f6dbe34d2e1ddeacd7e7c26752575680.zip
gcc-3b0b0013f6dbe34d2e1ddeacd7e7c26752575680.tar.gz
gcc-3b0b0013f6dbe34d2e1ddeacd7e7c26752575680.tar.bz2
target-insns.def (eh_return): New targetm instruction pattern.
gcc/ * target-insns.def (eh_return): New targetm instruction pattern. * except.c (expand_eh_return): Use it instead of HAVE_*/gen_* interface. * function.c (thread_prologue_and_epilogue_insns): Remove preprocessor condition. From-SVN: r226322
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/except.c6
-rw-r--r--gcc/function.c2
-rw-r--r--gcc/target-insns.def1
4 files changed, 11 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 90baee0..d94dfce 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,13 @@
2015-07-28 Richard Sandiford <richard.sandiford@arm.com>
+ * target-insns.def (eh_return): New targetm instruction pattern.
+ * except.c (expand_eh_return): Use it instead of HAVE_*/gen_*
+ interface.
+ * function.c (thread_prologue_and_epilogue_insns): Remove
+ preprocessor condition.
+
+2015-07-28 Richard Sandiford <richard.sandiford@arm.com>
+
* target-insns.def (indirect_jump): New targetm instruction pattern.
* optabs.c (emit_indirect_jump): Use it instead of HAVE_*/gen_*
interface.
diff --git a/gcc/except.c b/gcc/except.c
index 8d82c67..d59c539 100644
--- a/gcc/except.c
+++ b/gcc/except.c
@@ -2265,11 +2265,9 @@ expand_eh_return (void)
emit_move_insn (EH_RETURN_STACKADJ_RTX, crtl->eh.ehr_stackadj);
#endif
-#ifdef HAVE_eh_return
- if (HAVE_eh_return)
- emit_insn (gen_eh_return (crtl->eh.ehr_handler));
+ if (targetm.have_eh_return ())
+ emit_insn (targetm.gen_eh_return (crtl->eh.ehr_handler));
else
-#endif
{
#ifdef EH_RETURN_HANDLER_RTX
emit_move_insn (EH_RETURN_HANDLER_RTX, crtl->eh.ehr_handler);
diff --git a/gcc/function.c b/gcc/function.c
index f9d11bf..536de19 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5936,7 +5936,6 @@ thread_prologue_and_epilogue_insns (void)
uses the flag in the meantime. */
epilogue_completed = 1;
-#ifdef HAVE_eh_return
/* Find non-fallthru edges that end with EH_RETURN instructions. On
some targets, these get split to a special version of the epilogue
code. In order to be able to properly annotate these with unwind
@@ -5960,7 +5959,6 @@ thread_prologue_and_epilogue_insns (void)
record_insns (NEXT_INSN (prev), NEXT_INSN (trial), &epilogue_insn_hash);
emit_note_after (NOTE_INSN_EPILOGUE_BEG, prev);
}
-#endif
/* If nothing falls through into the exit block, we don't need an
epilogue. */
diff --git a/gcc/target-insns.def b/gcc/target-insns.def
index c125d68..df76a6e 100644
--- a/gcc/target-insns.def
+++ b/gcc/target-insns.def
@@ -40,6 +40,7 @@ DEF_TARGET_INSN (check_stack, (rtx x0))
DEF_TARGET_INSN (clear_cache, (rtx x0, rtx x1))
DEF_TARGET_INSN (doloop_begin, (rtx x0, rtx x1))
DEF_TARGET_INSN (doloop_end, (rtx x0, rtx x1))
+DEF_TARGET_INSN (eh_return, (rtx x0))
DEF_TARGET_INSN (epilogue, (void))
DEF_TARGET_INSN (exception_receiver, (void))
DEF_TARGET_INSN (extv, (rtx x0, rtx x1, rtx x2, rtx x3))