always define HAVE_simple_return and HAVE_return
authorTrevor Saunders <tbsaunde+gcc@tbsaunde.org>
Tue, 28 Apr 2015 04:44:09 +0000 (04:44 +0000)
committerTrevor Saunders <tbsaunde@gcc.gnu.org>
Tue, 28 Apr 2015 04:44:09 +0000 (04:44 +0000)
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

gcc/ChangeLog
gcc/bb-reorder.c
gcc/cfgrtl.c
gcc/defaults.h
gcc/function.c
gcc/reorg.c
gcc/shrink-wrap.c
gcc/shrink-wrap.h

index 3846ebc02304f4eeb2039b3e8d4fc93a06ded803..578b95ad10fce139e0839f1954f70477a759ea51 100644 (file)
@@ -1,3 +1,20 @@
+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.
index c2a3be3255a9252a71e0aa7f6574bfbfbf1ae7d7..c1347121f512c7b43b482b51fb9b338de1664770 100644 (file)
    the object file there will be an extra round.  */
 #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;
 #if SWITCHABLE_TARGET
 struct target_bb_reorder *this_target_bb_reorder = &default_target_bb_reorder;
index 322d1a9431b644ec7b161d1cc7ff9331744beba4..702750252fad906ec23e07d978115543b2701ef5 100644 (file)
@@ -1705,21 +1705,19 @@ force_nonfallthru_and_redirect (edge e, basic_block target, rtx jump_label)
     {
       if (jump_label == ret_rtx)
        {
-#ifdef HAVE_return
+         if (!HAVE_return)
+           gcc_unreachable ();
+
          emit_jump_insn_after_setloc (gen_return (), BB_END (jump_block), loc);
-#else
-         gcc_unreachable ();
-#endif
        }
       else
        {
          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 (),
                                       BB_END (jump_block), loc);
-#else
-         gcc_unreachable ();
-#endif
        }
       set_return_jump_label (BB_END (jump_block));
     }
index 6f915bd29c226e33d4beaf7ce342bd036af8464b..d3da328ee47ab5ac380d88327e6ccd62ed0acc3e 100644 (file)
@@ -1398,6 +1398,26 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define TARGET_SUPPORTS_WIDE_INT 0
 #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_DEFAULTS_H */
index 9077c912f854626a74c50156f2cda0f061eedf3a..561a1c5087fa4a27cd042d15775ac4242b76bfcc 100644 (file)
@@ -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.  */
index 4922a774667225e0e993476dee9aa0c1b9726182..a44d4a394b06fd0df1f1b02c08f4147bbd27c45c 100644 (file)
@@ -485,11 +485,7 @@ find_end_label (rtx kind)
       else
        {
 #ifdef HAVE_epilogue
-         if (HAVE_epilogue
-#ifdef HAVE_return
-             && ! HAVE_return
-#endif
-             )
+         if (HAVE_epilogue && ! HAVE_return)
            /* The RETURN insn has its delay slot filled so we cannot
               emit the label just before it.  Since we already have
               an epilogue and cannot emit a new RETURN, we cannot
@@ -500,7 +496,6 @@ find_end_label (rtx kind)
          /* Otherwise, make a new label and emit a RETURN and BARRIER,
             if needed.  */
          emit_label (label);
-#ifdef HAVE_return
          if (HAVE_return)
            {
              /* The return we make may have delay slots too.  */
@@ -511,7 +506,6 @@ find_end_label (rtx kind)
              if (num_delay_slots (insn) > 0)
                obstack_ptr_grow (&unfilled_slots_obstack, insn);
            }
-#endif
        }
       *plabel = label;
     }
@@ -3825,12 +3819,8 @@ dbr_schedule (rtx_insn *first)
     delete_related_insns (function_simple_return_label);
 
   need_return_insns = false;
-#ifdef HAVE_return
   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;
-#endif
   if (need_return_insns)
     make_return_insns (first);
 
index 3928f3d8fa29876f3f8d97e2741a8d60df53e53d..6c59da95133c66553d983a612251d75590f4eeb3 100644 (file)
@@ -80,7 +80,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "regcprop.h"
 #include "rtl-iter.h"
 
-#ifdef HAVE_simple_return
 
 /* Return true if INSN requires the stack frame to be set up.
    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,
          }
     }
 }
-
-#endif
index 2a91e32681e76bfb58e470e02f05cfe8b86f66b4..8c9582d597b193527431c8583291d1fedb4aad4a 100644 (file)
@@ -23,9 +23,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "hashtab.h"
 #include "vec.h"
 #include "machmode.h"
-
-#ifdef HAVE_simple_return
-
 #include "function.h"
 
 /* In shrink-wrap.c.  */
@@ -43,9 +40,6 @@ extern void convert_to_simple_return (edge entry_edge, edge orig_entry_edge,
                                      rtx_insn *returnjump,
                                      vec<edge> unconverted_simple_returns);
 #define SHRINK_WRAPPING_ENABLED (flag_shrink_wrap && HAVE_simple_return)
-#else
-#define SHRINK_WRAPPING_ENABLED false
-#endif
 
 #endif  /* GCC_SHRINK_WRAP_H  */