diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2015-07-28 19:54:06 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2015-07-28 19:54:06 +0000 |
commit | 3b0b0013f6dbe34d2e1ddeacd7e7c26752575680 (patch) | |
tree | 3dbb6e90be69d5c5eb3e51551fbd506f50407225 | |
parent | 902628047cb9763809ef2c3155cbf321e08c2656 (diff) | |
download | gcc-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/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/except.c | 6 | ||||
-rw-r--r-- | gcc/function.c | 2 | ||||
-rw-r--r-- | gcc/target-insns.def | 1 |
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)) |