Commit 3b0b0013 by Richard Sandiford Committed by Richard Sandiford

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
parent 90262804
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.
......
......@@ -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);
......
......@@ -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. */
......
......@@ -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))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment