diff options
author | Trevor Saunders <tbsaunde+gcc@tbsaunde.org> | 2015-04-28 04:44:09 +0000 |
---|---|---|
committer | Trevor Saunders <tbsaunde@gcc.gnu.org> | 2015-04-28 04:44:09 +0000 |
commit | 08b7ff1e1dda0bb35741ad8156bf31ba5151ddea (patch) | |
tree | 996ea71baffdec033124a780519ec47ed3bb21cf /gcc/function.c | |
parent | a3699d669abd4543fdc3c4607e2d0550e67e52ba (diff) | |
download | gcc-08b7ff1e1dda0bb35741ad8156bf31ba5151ddea.zip gcc-08b7ff1e1dda0bb35741ad8156bf31ba5151ddea.tar.gz gcc-08b7ff1e1dda0bb35741ad8156bf31ba5151ddea.tar.bz2 |
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
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 52 |
1 files changed, 14 insertions, 38 deletions
diff --git a/gcc/function.c b/gcc/function.c index 9077c91..561a1c5 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -5649,7 +5649,6 @@ prologue_epilogue_contains (const_rtx insn) return 0; } -#ifdef HAVE_return /* Insert use of return register before the end of BB. */ static void @@ -5674,12 +5673,10 @@ emit_use_return_register_into_block (basic_block bb) static rtx gen_return_pattern (bool simple_p) { -#ifdef HAVE_simple_return + if (!HAVE_simple_return) + gcc_assert (!simple_p); + return simple_p ? gen_simple_return () : gen_return (); -#else - gcc_assert (!simple_p); - return gen_return (); -#endif } /* 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) gcc_assert (ANY_RETURN_P (pat)); JUMP_LABEL (jump) = pat; } -#endif /* Set JUMP_LABEL for a return insn. */ @@ -5713,7 +5709,6 @@ set_return_jump_label (rtx returnjump) 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. */ bool active_insn_between (rtx_insn *head, rtx_insn *tail) @@ -5788,15 +5783,13 @@ convert_jumps_to_returns (basic_block last_bb, bool simple_p, dest = ret_rtx; if (!redirect_jump (jump, dest, 0)) { -#ifdef HAVE_simple_return - if (simple_p) + if (HAVE_simple_return && simple_p) { if (dump_file) fprintf (dump_file, "Failed to redirect bb %d branch.\n", bb->index); unconverted.safe_push (e); } -#endif continue; } @@ -5811,15 +5804,13 @@ convert_jumps_to_returns (basic_block last_bb, bool simple_p, } else { -#ifdef HAVE_simple_return - if (simple_p) + if (HAVE_simple_return && simple_p) { if (dump_file) fprintf (dump_file, "Failed to redirect bb %d branch.\n", bb->index); unconverted.safe_push (e); } -#endif continue; } @@ -5847,7 +5838,6 @@ emit_return_for_exit (edge exit_fallthru_edge, bool simple_p) exit_fallthru_edge->flags &= ~EDGE_FALLTHRU; return last_bb; } -#endif /* Generate the prologue and epilogue RTL if the machine supports it. Thread @@ -5902,10 +5892,8 @@ void thread_prologue_and_epilogue_insns (void) { bool inserted; -#ifdef HAVE_simple_return vec<edge> unconverted_simple_returns = vNULL; bitmap_head bb_flags; -#endif rtx_insn *returnjump; rtx_insn *epilogue_end ATTRIBUTE_UNUSED; rtx_insn *prologue_seq ATTRIBUTE_UNUSED, *split_prologue_seq ATTRIBUTE_UNUSED; @@ -5976,7 +5964,6 @@ thread_prologue_and_epilogue_insns (void) } #endif -#ifdef HAVE_simple_return bitmap_initialize (&bb_flags, &bitmap_default_obstack); /* Try to perform a kind of shrink-wrapping, making sure the @@ -5984,7 +5971,6 @@ thread_prologue_and_epilogue_insns (void) function that require it. */ try_shrink_wrapping (&entry_edge, orig_entry_edge, &bb_flags, prologue_seq); -#endif if (split_prologue_seq != NULL_RTX) { @@ -6009,14 +5995,11 @@ thread_prologue_and_epilogue_insns (void) exit_fallthru_edge = find_fallthru_edge (EXIT_BLOCK_PTR_FOR_FN (cfun)->preds); -#ifdef HAVE_simple_return - if (entry_edge != orig_entry_edge) + if (HAVE_simple_return && entry_edge != orig_entry_edge) exit_fallthru_edge = get_unconverted_simple_return (exit_fallthru_edge, bb_flags, &unconverted_simple_returns, &returnjump); -#endif -#ifdef HAVE_return if (HAVE_return) { if (exit_fallthru_edge == NULL) @@ -6035,17 +6018,16 @@ thread_prologue_and_epilogue_insns (void) { last_bb = emit_return_for_exit (exit_fallthru_edge, false); epilogue_end = returnjump = BB_END (last_bb); -#ifdef HAVE_simple_return + /* Emitting the return may add a basic 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); -#endif + goto epilogue_done; } } } -#endif /* 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 @@ -6157,10 +6139,9 @@ epilogue_done: } } -#ifdef HAVE_simple_return - convert_to_simple_return (entry_edge, orig_entry_edge, bb_flags, returnjump, - unconverted_simple_returns); -#endif + if (HAVE_simple_return) + convert_to_simple_return (entry_edge, orig_entry_edge, bb_flags, + returnjump, unconverted_simple_returns); #ifdef HAVE_sibcall_epilogue /* Emit sibling epilogues before any sibling call sites. */ @@ -6174,11 +6155,8 @@ epilogue_done: if (!CALL_P (insn) || ! SIBLING_CALL_P (insn) -#ifdef HAVE_simple_return - || (entry_edge != orig_entry_edge - && !bitmap_bit_p (&bb_flags, bb->index)) -#endif - ) + || (HAVE_simple_return && (entry_edge != orig_entry_edge + && !bitmap_bit_p (&bb_flags, bb->index)))) { ei_next (&ei); continue; @@ -6225,9 +6203,7 @@ epilogue_done: } #endif -#ifdef HAVE_simple_return bitmap_clear (&bb_flags); -#endif /* Threading the prologue and epilogue changes the artificial refs in the entry and exit blocks. */ |