Commit 08b7ff1e by Trevor Saunders Committed by Trevor Saunders

always define HAVE_simple_return and HAVE_return

gcc/ChangeLog:

2015-04-27  Trevor Saunders  <tbsaunde+gcc@tbsaunde.org>

	* bb-reorder.c (HAVE_return): Don't check if its undefined.
	* defaults.h (gen_simple_return): New function.
	(gen_simple_return): Likewise.
	(HAVE_return): Add default definition to false.
	(HAVE_simple_return): Likewise.
	* cfgrtl.c (force_nonfallthru_and_redirect): Remove checks if
	HAVE_return and HAVE_simple_return are defined.
	* function.c (gen_return_pattern): Likewise.
	(convert_jumps_to_returns): Likewise.
	(thread_prologue_and_epilogue_insns): Likewise.
	* reorg.c (find_end_label): Likewise.
	(dbr_schedule): Likewise.
	* shrink-wrap.c: Likewise.
	* shrink-wrap.h: Likewise.

From-SVN: r222505
parent a3699d66
2015-04-27 Trevor Saunders <tbsaunde+gcc@tbsaunde.org> 2015-04-27 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* bb-reorder.c (HAVE_return): Don't check if its undefined.
* defaults.h (gen_simple_return): New function.
(gen_simple_return): Likewise.
(HAVE_return): Add default definition to false.
(HAVE_simple_return): Likewise.
* cfgrtl.c (force_nonfallthru_and_redirect): Remove checks if
HAVE_return and HAVE_simple_return are defined.
* function.c (gen_return_pattern): Likewise.
(convert_jumps_to_returns): Likewise.
(thread_prologue_and_epilogue_insns): Likewise.
* reorg.c (find_end_label): Likewise.
(dbr_schedule): Likewise.
* shrink-wrap.c: Likewise.
* shrink-wrap.h: Likewise.
2015-04-27 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
* defaults.h (EPILOGUE_USES): Add default definition of false. * defaults.h (EPILOGUE_USES): Add default definition of false.
* df-scan.c (EPILOGUE_USES): Remove check if its undefined. * df-scan.c (EPILOGUE_USES): Remove check if its undefined.
* resource.c (init_resource_info): Likewise. * resource.c (init_resource_info): Likewise.
......
...@@ -142,15 +142,6 @@ ...@@ -142,15 +142,6 @@
the object file there will be an extra round. */ the object file there will be an extra round. */
#define N_ROUNDS 5 #define N_ROUNDS 5
/* Stubs in case we don't have a return insn.
We have to check at run time too, not only compile time. */
#ifndef HAVE_return
#define HAVE_return 0
#define gen_return() NULL_RTX
#endif
struct target_bb_reorder default_target_bb_reorder; struct target_bb_reorder default_target_bb_reorder;
#if SWITCHABLE_TARGET #if SWITCHABLE_TARGET
struct target_bb_reorder *this_target_bb_reorder = &default_target_bb_reorder; struct target_bb_reorder *this_target_bb_reorder = &default_target_bb_reorder;
......
...@@ -1705,21 +1705,19 @@ force_nonfallthru_and_redirect (edge e, basic_block target, rtx jump_label) ...@@ -1705,21 +1705,19 @@ force_nonfallthru_and_redirect (edge e, basic_block target, rtx jump_label)
{ {
if (jump_label == ret_rtx) if (jump_label == ret_rtx)
{ {
#ifdef HAVE_return if (!HAVE_return)
emit_jump_insn_after_setloc (gen_return (), BB_END (jump_block), loc);
#else
gcc_unreachable (); gcc_unreachable ();
#endif
emit_jump_insn_after_setloc (gen_return (), BB_END (jump_block), loc);
} }
else else
{ {
gcc_assert (jump_label == simple_return_rtx); gcc_assert (jump_label == simple_return_rtx);
#ifdef HAVE_simple_return if (!HAVE_simple_return)
gcc_unreachable ();
emit_jump_insn_after_setloc (gen_simple_return (), emit_jump_insn_after_setloc (gen_simple_return (),
BB_END (jump_block), loc); BB_END (jump_block), loc);
#else
gcc_unreachable ();
#endif
} }
set_return_jump_label (BB_END (jump_block)); set_return_jump_label (BB_END (jump_block));
} }
......
...@@ -1398,6 +1398,26 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ...@@ -1398,6 +1398,26 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#define TARGET_SUPPORTS_WIDE_INT 0 #define TARGET_SUPPORTS_WIDE_INT 0
#endif #endif
#ifndef HAVE_simple_return
#define HAVE_simple_return 0
static inline rtx
gen_simple_return ()
{
gcc_unreachable ();
return NULL;
}
#endif
#ifndef HAVE_return
#define HAVE_return 0
static inline rtx
gen_return ()
{
gcc_unreachable ();
return NULL;
}
#endif
#endif /* GCC_INSN_FLAGS_H */ #endif /* GCC_INSN_FLAGS_H */
#endif /* ! GCC_DEFAULTS_H */ #endif /* ! GCC_DEFAULTS_H */
...@@ -5649,7 +5649,6 @@ prologue_epilogue_contains (const_rtx insn) ...@@ -5649,7 +5649,6 @@ prologue_epilogue_contains (const_rtx insn)
return 0; return 0;
} }
#ifdef HAVE_return
/* Insert use of return register before the end of BB. */ /* Insert use of return register before the end of BB. */
static void static void
...@@ -5674,12 +5673,10 @@ emit_use_return_register_into_block (basic_block bb) ...@@ -5674,12 +5673,10 @@ emit_use_return_register_into_block (basic_block bb)
static rtx static rtx
gen_return_pattern (bool simple_p) gen_return_pattern (bool simple_p)
{ {
#ifdef HAVE_simple_return if (!HAVE_simple_return)
return simple_p ? gen_simple_return () : gen_return ();
#else
gcc_assert (!simple_p); gcc_assert (!simple_p);
return gen_return ();
#endif return simple_p ? gen_simple_return () : gen_return ();
} }
/* Insert an appropriate return pattern at the end of block BB. This /* Insert an appropriate return pattern at the end of block BB. This
...@@ -5697,7 +5694,6 @@ emit_return_into_block (bool simple_p, basic_block bb) ...@@ -5697,7 +5694,6 @@ emit_return_into_block (bool simple_p, basic_block bb)
gcc_assert (ANY_RETURN_P (pat)); gcc_assert (ANY_RETURN_P (pat));
JUMP_LABEL (jump) = pat; JUMP_LABEL (jump) = pat;
} }
#endif
/* Set JUMP_LABEL for a return insn. */ /* Set JUMP_LABEL for a return insn. */
...@@ -5713,7 +5709,6 @@ set_return_jump_label (rtx returnjump) ...@@ -5713,7 +5709,6 @@ set_return_jump_label (rtx returnjump)
JUMP_LABEL (returnjump) = ret_rtx; JUMP_LABEL (returnjump) = ret_rtx;
} }
#if defined (HAVE_return) || defined (HAVE_simple_return)
/* Return true if there are any active insns between HEAD and TAIL. */ /* Return true if there are any active insns between HEAD and TAIL. */
bool bool
active_insn_between (rtx_insn *head, rtx_insn *tail) active_insn_between (rtx_insn *head, rtx_insn *tail)
...@@ -5788,15 +5783,13 @@ convert_jumps_to_returns (basic_block last_bb, bool simple_p, ...@@ -5788,15 +5783,13 @@ convert_jumps_to_returns (basic_block last_bb, bool simple_p,
dest = ret_rtx; dest = ret_rtx;
if (!redirect_jump (jump, dest, 0)) if (!redirect_jump (jump, dest, 0))
{ {
#ifdef HAVE_simple_return if (HAVE_simple_return && simple_p)
if (simple_p)
{ {
if (dump_file) if (dump_file)
fprintf (dump_file, fprintf (dump_file,
"Failed to redirect bb %d branch.\n", bb->index); "Failed to redirect bb %d branch.\n", bb->index);
unconverted.safe_push (e); unconverted.safe_push (e);
} }
#endif
continue; continue;
} }
...@@ -5811,15 +5804,13 @@ convert_jumps_to_returns (basic_block last_bb, bool simple_p, ...@@ -5811,15 +5804,13 @@ convert_jumps_to_returns (basic_block last_bb, bool simple_p,
} }
else else
{ {
#ifdef HAVE_simple_return if (HAVE_simple_return && simple_p)
if (simple_p)
{ {
if (dump_file) if (dump_file)
fprintf (dump_file, fprintf (dump_file,
"Failed to redirect bb %d branch.\n", bb->index); "Failed to redirect bb %d branch.\n", bb->index);
unconverted.safe_push (e); unconverted.safe_push (e);
} }
#endif
continue; continue;
} }
...@@ -5847,7 +5838,6 @@ emit_return_for_exit (edge exit_fallthru_edge, bool simple_p) ...@@ -5847,7 +5838,6 @@ emit_return_for_exit (edge exit_fallthru_edge, bool simple_p)
exit_fallthru_edge->flags &= ~EDGE_FALLTHRU; exit_fallthru_edge->flags &= ~EDGE_FALLTHRU;
return last_bb; return last_bb;
} }
#endif
/* Generate the prologue and epilogue RTL if the machine supports it. Thread /* Generate the prologue and epilogue RTL if the machine supports it. Thread
...@@ -5902,10 +5892,8 @@ void ...@@ -5902,10 +5892,8 @@ void
thread_prologue_and_epilogue_insns (void) thread_prologue_and_epilogue_insns (void)
{ {
bool inserted; bool inserted;
#ifdef HAVE_simple_return
vec<edge> unconverted_simple_returns = vNULL; vec<edge> unconverted_simple_returns = vNULL;
bitmap_head bb_flags; bitmap_head bb_flags;
#endif
rtx_insn *returnjump; rtx_insn *returnjump;
rtx_insn *epilogue_end ATTRIBUTE_UNUSED; rtx_insn *epilogue_end ATTRIBUTE_UNUSED;
rtx_insn *prologue_seq ATTRIBUTE_UNUSED, *split_prologue_seq ATTRIBUTE_UNUSED; rtx_insn *prologue_seq ATTRIBUTE_UNUSED, *split_prologue_seq ATTRIBUTE_UNUSED;
...@@ -5976,7 +5964,6 @@ thread_prologue_and_epilogue_insns (void) ...@@ -5976,7 +5964,6 @@ thread_prologue_and_epilogue_insns (void)
} }
#endif #endif
#ifdef HAVE_simple_return
bitmap_initialize (&bb_flags, &bitmap_default_obstack); bitmap_initialize (&bb_flags, &bitmap_default_obstack);
/* Try to perform a kind of shrink-wrapping, making sure the /* Try to perform a kind of shrink-wrapping, making sure the
...@@ -5984,7 +5971,6 @@ thread_prologue_and_epilogue_insns (void) ...@@ -5984,7 +5971,6 @@ thread_prologue_and_epilogue_insns (void)
function that require it. */ function that require it. */
try_shrink_wrapping (&entry_edge, orig_entry_edge, &bb_flags, prologue_seq); try_shrink_wrapping (&entry_edge, orig_entry_edge, &bb_flags, prologue_seq);
#endif
if (split_prologue_seq != NULL_RTX) if (split_prologue_seq != NULL_RTX)
{ {
...@@ -6009,14 +5995,11 @@ thread_prologue_and_epilogue_insns (void) ...@@ -6009,14 +5995,11 @@ thread_prologue_and_epilogue_insns (void)
exit_fallthru_edge = find_fallthru_edge (EXIT_BLOCK_PTR_FOR_FN (cfun)->preds); exit_fallthru_edge = find_fallthru_edge (EXIT_BLOCK_PTR_FOR_FN (cfun)->preds);
#ifdef HAVE_simple_return if (HAVE_simple_return && entry_edge != orig_entry_edge)
if (entry_edge != orig_entry_edge)
exit_fallthru_edge exit_fallthru_edge
= get_unconverted_simple_return (exit_fallthru_edge, bb_flags, = get_unconverted_simple_return (exit_fallthru_edge, bb_flags,
&unconverted_simple_returns, &unconverted_simple_returns,
&returnjump); &returnjump);
#endif
#ifdef HAVE_return
if (HAVE_return) if (HAVE_return)
{ {
if (exit_fallthru_edge == NULL) if (exit_fallthru_edge == NULL)
...@@ -6035,17 +6018,16 @@ thread_prologue_and_epilogue_insns (void) ...@@ -6035,17 +6018,16 @@ thread_prologue_and_epilogue_insns (void)
{ {
last_bb = emit_return_for_exit (exit_fallthru_edge, false); last_bb = emit_return_for_exit (exit_fallthru_edge, false);
epilogue_end = returnjump = BB_END (last_bb); epilogue_end = returnjump = BB_END (last_bb);
#ifdef HAVE_simple_return
/* Emitting the return may add a basic block. /* Emitting the return may add a basic block.
Fix bb_flags for the added block. */ Fix bb_flags for the added block. */
if (last_bb != exit_fallthru_edge->src) if (HAVE_simple_return && last_bb != exit_fallthru_edge->src)
bitmap_set_bit (&bb_flags, last_bb->index); bitmap_set_bit (&bb_flags, last_bb->index);
#endif
goto epilogue_done; goto epilogue_done;
} }
} }
} }
#endif
/* A small fib -- epilogue is not yet completed, but we wish to re-use /* A small fib -- epilogue is not yet completed, but we wish to re-use
this marker for the splits of EH_RETURN patterns, and nothing else this marker for the splits of EH_RETURN patterns, and nothing else
...@@ -6157,10 +6139,9 @@ epilogue_done: ...@@ -6157,10 +6139,9 @@ epilogue_done:
} }
} }
#ifdef HAVE_simple_return if (HAVE_simple_return)
convert_to_simple_return (entry_edge, orig_entry_edge, bb_flags, returnjump, convert_to_simple_return (entry_edge, orig_entry_edge, bb_flags,
unconverted_simple_returns); returnjump, unconverted_simple_returns);
#endif
#ifdef HAVE_sibcall_epilogue #ifdef HAVE_sibcall_epilogue
/* Emit sibling epilogues before any sibling call sites. */ /* Emit sibling epilogues before any sibling call sites. */
...@@ -6174,11 +6155,8 @@ epilogue_done: ...@@ -6174,11 +6155,8 @@ epilogue_done:
if (!CALL_P (insn) if (!CALL_P (insn)
|| ! SIBLING_CALL_P (insn) || ! SIBLING_CALL_P (insn)
#ifdef HAVE_simple_return || (HAVE_simple_return && (entry_edge != orig_entry_edge
|| (entry_edge != orig_entry_edge && !bitmap_bit_p (&bb_flags, bb->index))))
&& !bitmap_bit_p (&bb_flags, bb->index))
#endif
)
{ {
ei_next (&ei); ei_next (&ei);
continue; continue;
...@@ -6225,9 +6203,7 @@ epilogue_done: ...@@ -6225,9 +6203,7 @@ epilogue_done:
} }
#endif #endif
#ifdef HAVE_simple_return
bitmap_clear (&bb_flags); bitmap_clear (&bb_flags);
#endif
/* Threading the prologue and epilogue changes the artificial refs /* Threading the prologue and epilogue changes the artificial refs
in the entry and exit blocks. */ in the entry and exit blocks. */
......
...@@ -485,11 +485,7 @@ find_end_label (rtx kind) ...@@ -485,11 +485,7 @@ find_end_label (rtx kind)
else else
{ {
#ifdef HAVE_epilogue #ifdef HAVE_epilogue
if (HAVE_epilogue if (HAVE_epilogue && ! HAVE_return)
#ifdef HAVE_return
&& ! HAVE_return
#endif
)
/* The RETURN insn has its delay slot filled so we cannot /* The RETURN insn has its delay slot filled so we cannot
emit the label just before it. Since we already have emit the label just before it. Since we already have
an epilogue and cannot emit a new RETURN, we cannot an epilogue and cannot emit a new RETURN, we cannot
...@@ -500,7 +496,6 @@ find_end_label (rtx kind) ...@@ -500,7 +496,6 @@ find_end_label (rtx kind)
/* Otherwise, make a new label and emit a RETURN and BARRIER, /* Otherwise, make a new label and emit a RETURN and BARRIER,
if needed. */ if needed. */
emit_label (label); emit_label (label);
#ifdef HAVE_return
if (HAVE_return) if (HAVE_return)
{ {
/* The return we make may have delay slots too. */ /* The return we make may have delay slots too. */
...@@ -511,7 +506,6 @@ find_end_label (rtx kind) ...@@ -511,7 +506,6 @@ find_end_label (rtx kind)
if (num_delay_slots (insn) > 0) if (num_delay_slots (insn) > 0)
obstack_ptr_grow (&unfilled_slots_obstack, insn); obstack_ptr_grow (&unfilled_slots_obstack, insn);
} }
#endif
} }
*plabel = label; *plabel = label;
} }
...@@ -3825,12 +3819,8 @@ dbr_schedule (rtx_insn *first) ...@@ -3825,12 +3819,8 @@ dbr_schedule (rtx_insn *first)
delete_related_insns (function_simple_return_label); delete_related_insns (function_simple_return_label);
need_return_insns = false; need_return_insns = false;
#ifdef HAVE_return
need_return_insns |= HAVE_return && function_return_label != 0; need_return_insns |= HAVE_return && function_return_label != 0;
#endif
#ifdef HAVE_simple_return
need_return_insns |= HAVE_simple_return && function_simple_return_label != 0; need_return_insns |= HAVE_simple_return && function_simple_return_label != 0;
#endif
if (need_return_insns) if (need_return_insns)
make_return_insns (first); make_return_insns (first);
......
...@@ -80,7 +80,6 @@ along with GCC; see the file COPYING3. If not see ...@@ -80,7 +80,6 @@ along with GCC; see the file COPYING3. If not see
#include "regcprop.h" #include "regcprop.h"
#include "rtl-iter.h" #include "rtl-iter.h"
#ifdef HAVE_simple_return
/* Return true if INSN requires the stack frame to be set up. /* Return true if INSN requires the stack frame to be set up.
PROLOGUE_USED contains the hard registers used in the function PROLOGUE_USED contains the hard registers used in the function
...@@ -1043,5 +1042,3 @@ convert_to_simple_return (edge entry_edge, edge orig_entry_edge, ...@@ -1043,5 +1042,3 @@ convert_to_simple_return (edge entry_edge, edge orig_entry_edge,
} }
} }
} }
#endif
...@@ -23,9 +23,6 @@ along with GCC; see the file COPYING3. If not see ...@@ -23,9 +23,6 @@ along with GCC; see the file COPYING3. If not see
#include "hashtab.h" #include "hashtab.h"
#include "vec.h" #include "vec.h"
#include "machmode.h" #include "machmode.h"
#ifdef HAVE_simple_return
#include "function.h" #include "function.h"
/* In shrink-wrap.c. */ /* In shrink-wrap.c. */
...@@ -43,9 +40,6 @@ extern void convert_to_simple_return (edge entry_edge, edge orig_entry_edge, ...@@ -43,9 +40,6 @@ extern void convert_to_simple_return (edge entry_edge, edge orig_entry_edge,
rtx_insn *returnjump, rtx_insn *returnjump,
vec<edge> unconverted_simple_returns); vec<edge> unconverted_simple_returns);
#define SHRINK_WRAPPING_ENABLED (flag_shrink_wrap && HAVE_simple_return) #define SHRINK_WRAPPING_ENABLED (flag_shrink_wrap && HAVE_simple_return)
#else
#define SHRINK_WRAPPING_ENABLED false
#endif
#endif /* GCC_SHRINK_WRAP_H */ #endif /* GCC_SHRINK_WRAP_H */
......
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