From ac1dac0722170f86c0c9cd651e61e9ace3545822 Mon Sep 17 00:00:00 2001
From: David Malcolm <dmalcolm@redhat.com>
Date: Tue, 24 Jun 2014 15:04:38 -0400
Subject: [PATCH 126/133] Remove BB_FOOTER scaffolding

gcc/
	* basic-block.h (struct rtl_bb_info): Strengthen field "footer_"
	from rtx to rtx_insn *.
	(BB_FOOTER): Replace function with access macro.
	(SET_BB_FOOTER): Delete.

	* cfgcleanup.c (try_optimize_cfg): Replace uses of SET_BB_FOOTER
	with BB_FOOTER.
	* cfgrtl.c (try_redirect_by_replacing_jump): Likewise.
	(emit_barrier_after_bb): Likewise.
	(record_effective_endpoints): Likewise.
	(relink_block_chain): Likewise.
	(fixup_fallthru_exit_predecessor): Likewise.
	(cfg_layout_duplicate_bb): Likewise.
	(cfg_layout_split_block): Likewise.
	(cfg_layout_delete_block): Likewise.
	(cfg_layout_merge_blocks): Likewise.
	(BB_FOOTER): Delete function.
	(SET_BB_FOOTER): Delete function.
	* combine.c (update_cfg_for_uncondjump): Replace uses of
	SET_BB_FOOTER with BB_FOOTER.
---
 gcc/basic-block.h |  5 ++---
 gcc/cfgcleanup.c  |  6 +++---
 gcc/cfgrtl.c      | 43 ++++++++++++++-----------------------------
 gcc/combine.c     |  2 +-
 4 files changed, 20 insertions(+), 36 deletions(-)

diff --git a/gcc/basic-block.h b/gcc/basic-block.h
index 18d3871..0f55a8b 100644
--- a/gcc/basic-block.h
+++ b/gcc/basic-block.h
@@ -127,7 +127,7 @@ struct GTY(()) rtl_bb_info {
   /* In CFGlayout mode points to insn notes/jumptables to be placed just before
      and after the block.   */
   rtx header_;
-  rtx footer_;
+  rtx_insn *footer_;
 };
 
 struct GTY(()) gimple_bb_info {
@@ -381,8 +381,7 @@ extern rtx& SET_BB_END (basic_block bb);
 extern rtx_insn *BB_HEADER (const_basic_block bb);
 extern rtx& SET_BB_HEADER (basic_block bb);
 
-extern rtx_insn *BB_FOOTER (const_basic_block bb);
-extern rtx& SET_BB_FOOTER (basic_block bb);
+#define BB_FOOTER(B)    (B)->il.x.rtl->footer_
 
 /* Special block numbers [markers] for entry and exit.
    Neither of them is supposed to hold actual statements.  */
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c
index ad83373..e011a6c 100644
--- a/gcc/cfgcleanup.c
+++ b/gcc/cfgcleanup.c
@@ -2676,13 +2676,13 @@ try_optimize_cfg (int mode)
 				{
 				  if (BB_FOOTER (b))
 				    {
-				      SET_BB_FOOTER (e->src) = BB_FOOTER (b);
-				      SET_BB_FOOTER (b) = NULL;
+				      BB_FOOTER (e->src) = BB_FOOTER (b);
+				      BB_FOOTER (b) = NULL;
 				    }
 				  else
 				    {
 				      start_sequence ();
-				      SET_BB_FOOTER (e->src) = emit_barrier ();
+				      BB_FOOTER (e->src) = emit_barrier ();
 				      end_sequence ();
 				    }
 				}
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 74e6b39..4906856 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -1064,7 +1064,7 @@ try_redirect_by_replacing_jump (edge e, basic_block target, bool in_cfglayout)
 		  if (PREV_INSN (insn))
 		    SET_NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn);
 		  else
-		    SET_BB_FOOTER (src) = NEXT_INSN (insn);
+		    BB_FOOTER (src) = NEXT_INSN (insn);
 		  if (NEXT_INSN (insn))
 		    SET_PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn);
 		}
@@ -1452,7 +1452,7 @@ emit_barrier_after_bb (basic_block bb)
   gcc_assert (current_ir_type () == IR_RTL_CFGRTL
               || current_ir_type () == IR_RTL_CFGLAYOUT);
   if (current_ir_type () == IR_RTL_CFGLAYOUT)
-    SET_BB_FOOTER (bb) = unlink_insn_chain (barrier, barrier);
+    BB_FOOTER (bb) = unlink_insn_chain (barrier, barrier);
 }
 
 /* Like force_nonfallthru below, but additionally performs redirection
@@ -3463,7 +3463,7 @@ record_effective_endpoints (void)
 						PREV_INSN (BB_HEAD (bb)));
       end = skip_insns_after_block (bb);
       if (NEXT_INSN (BB_END (bb)) && BB_END (bb) != end)
-	SET_BB_FOOTER (bb) = unlink_insn_chain (NEXT_INSN (BB_END (bb)), end);
+	BB_FOOTER (bb) = unlink_insn_chain (NEXT_INSN (BB_END (bb)), end);
       next_insn = NEXT_INSN (BB_END (bb));
     }
 
@@ -3623,7 +3623,7 @@ relink_block_chain (bool stay_in_cfglayout_mode)
     {
       bb->aux = NULL;
       if (!stay_in_cfglayout_mode)
-	SET_BB_HEADER (bb) = SET_BB_FOOTER (bb) = NULL;
+	SET_BB_HEADER (bb) = BB_FOOTER (bb) = NULL;
     }
 
   /* Maybe reset the original copy tables, they are not valid anymore
@@ -3991,8 +3991,8 @@ fixup_fallthru_exit_predecessor (void)
 	  bb = split_block (bb, NULL)->dest;
 	  bb->aux = c->aux;
 	  c->aux = bb;
-	  SET_BB_FOOTER (bb) = BB_FOOTER (c);
-	  SET_BB_FOOTER (c) = NULL;
+	  BB_FOOTER (bb) = BB_FOOTER (c);
+	  BB_FOOTER (c) = NULL;
 	}
 
       while (c->aux != bb)
@@ -4206,7 +4206,7 @@ cfg_layout_duplicate_bb (basic_block bb)
 	insn = NEXT_INSN (insn);
       insn = duplicate_insn_chain (BB_FOOTER (bb), insn);
       if (insn)
-	SET_BB_FOOTER (new_bb) = unlink_insn_chain (insn, get_last_insn ());
+	BB_FOOTER (new_bb) = unlink_insn_chain (insn, get_last_insn ());
     }
 
   return new_bb;
@@ -4314,8 +4314,8 @@ cfg_layout_split_block (basic_block bb, void *insnp)
   rtx insn = (rtx) insnp;
   basic_block new_bb = rtl_split_block (bb, insn);
 
-  SET_BB_FOOTER (new_bb) = BB_FOOTER (bb);
-  SET_BB_FOOTER (bb) = NULL;
+  BB_FOOTER (new_bb) = BB_FOOTER (bb);
+  BB_FOOTER (bb) = NULL;
 
   return new_bb;
 }
@@ -4446,7 +4446,7 @@ cfg_layout_delete_block (basic_block bb)
 	      if (PREV_INSN (insn))
 		SET_NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn);
 	      else
-		SET_BB_FOOTER (bb) = NEXT_INSN (insn);
+		BB_FOOTER (bb) = NEXT_INSN (insn);
 	      if (NEXT_INSN (insn))
 		SET_PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn);
 	    }
@@ -4581,7 +4581,7 @@ cfg_layout_merge_blocks (basic_block a, basic_block b)
   if (BB_FOOTER (b))
     {
       if (!BB_FOOTER (a))
-	SET_BB_FOOTER (a) = SET_BB_FOOTER (b);
+	BB_FOOTER (a) = BB_FOOTER (b);
       else
 	{
 	  rtx_insn *last = BB_FOOTER (a);
@@ -4591,7 +4591,7 @@ cfg_layout_merge_blocks (basic_block a, basic_block b)
 	  SET_NEXT_INSN (last) = BB_FOOTER (b);
 	  SET_PREV_INSN (BB_FOOTER (b)) = last;
 	}
-      SET_BB_FOOTER (b) = NULL;
+      BB_FOOTER (b) = NULL;
     }
 
   /* Move things from b->header before a->footer.
@@ -4600,7 +4600,7 @@ cfg_layout_merge_blocks (basic_block a, basic_block b)
    if (BB_HEADER (b))
      {
       if (! BB_FOOTER (a))
-	SET_BB_FOOTER (a) = BB_HEADER (b);
+	BB_FOOTER (a) = BB_HEADER (b);
       else
 	{
 	  rtx_insn *last = BB_HEADER (b);
@@ -4609,7 +4609,7 @@ cfg_layout_merge_blocks (basic_block a, basic_block b)
 	    last = NEXT_INSN (last);
 	  SET_NEXT_INSN (last) = BB_FOOTER (a);
 	  SET_PREV_INSN (BB_FOOTER (a)) = last;
-	  SET_BB_FOOTER (a) = BB_HEADER (b);
+	  BB_FOOTER (a) = BB_HEADER (b);
 	}
       SET_BB_HEADER (b) = NULL;
     }
@@ -5153,19 +5153,4 @@ rtx& SET_BB_HEADER (basic_block bb)
   return bb->il.x.rtl->header_;
 }
 
-/* BB_FOOTER as an rvalue. */
-
-rtx_insn *BB_FOOTER (const_basic_block bb)
-{
-  rtx insn = bb->il.x.rtl->footer_;
-  return insn ? as_a <rtx_insn *> (insn) : NULL;
-}
-
-/* BB_FOOTER as an lvalue. */
-
-rtx& SET_BB_FOOTER (basic_block bb)
-{
-  return bb->il.x.rtl->footer_;
-}
-
 #include "gt-cfgrtl.h"
diff --git a/gcc/combine.c b/gcc/combine.c
index 969c368..8049831 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -2393,7 +2393,7 @@ update_cfg_for_uncondjump (rtx insn)
 	    if (PREV_INSN (insn))
 	      SET_NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn);
 	    else
-	      SET_BB_FOOTER (bb) = NEXT_INSN (insn);
+	      BB_FOOTER (bb) = NEXT_INSN (insn);
 	    if (NEXT_INSN (insn))
 	      SET_PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn);
 	  }
-- 
1.8.5.3

