target-insns.def (eh_return): New targetm instruction pattern.
authorRichard Sandiford <richard.sandiford@arm.com>
Tue, 28 Jul 2015 19:54:06 +0000 (19:54 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Tue, 28 Jul 2015 19:54:06 +0000 (19:54 +0000)
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

gcc/ChangeLog
gcc/except.c
gcc/function.c
gcc/target-insns.def

index 90baee02446943747366cfa6ad972c8e849c88d8..d94dfce15aa106a6f9dce7e6b8a005261c7366f9 100644 (file)
@@ -1,3 +1,11 @@
+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.
index 8d82c674726a1791ad7ce94024ba0c8983763345..d59c539908749bd0d225fee15150b2e3ce5613f1 100644 (file)
@@ -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);
index f9d11bf4506e6255c0257a12bd666318cf5e7c03..536de195acfd1e01671507f3fe8284b678a1fad5 100644 (file)
@@ -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.  */
index c125d6873eb15fbf9ebf888906da89a01143b9a1..df76a6e411d51a22c9cd878598924e7ae22ffd43 100644 (file)
@@ -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))