OSDN Git Service

* basic-block.h (basic_block_def): Kill rbi.
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Jun 2005 23:06:33 +0000 (23:06 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Jun 2005 23:06:33 +0000 (23:06 +0000)
(reorder_block_def): Kill; Remove next field (replaced by aux);
move other fields to ...
(rtl_bb_info): ... here.
* bb-reorder.c (find_traces, rotate_loop, find_traces_1_round,
copy_bb, connect_traces, add_labels_and_missing_jumps
fix_up_fall_thru_edges, fix_crossing_conditional_branches,
duplicate_computed_gotos, partition_hot_cold_basic-blocks):
Update to new fields.
* cfg.c (initialize_bb_rbi): Kill.
* cfglayout.c (record_effective_endpoints, fixup_reorder_chain,
fixup_fallthru_exit_predecessor, cfg_layout_duplicate_bb): Update.
* cfgrtl.c (cfg_layout_create_basic_block): Do not initialize rbi.
(try_redirect_by_replacing_jump): Update rbi references.
(cfg_layout_split_block): Likewise.
(cfg_layout_delete_block): Likewise.
(cfg_layout_merge_blocks): Likewise.
* function.c (thread_prologue_and_epilogue_insns): Likewise.
* passes.c (rest_of_handle_sms): Likewise.
* tracer.c (seen, tail_duplicate, layout_superblocks): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101359 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/basic-block.h
gcc/bb-reorder.c
gcc/cfg.c
gcc/cfglayout.c
gcc/cfgrtl.c
gcc/function.c
gcc/passes.c
gcc/tracer.c

index 4919e3b..748d3e9 100644 (file)
@@ -1,3 +1,26 @@
+2005-06-28  Jan Hubicka  <jh@suse.cz>
+
+       * basic-block.h (basic_block_def): Kill rbi.
+       (reorder_block_def): Kill; Remove next field (replaced by aux);
+       move other fields to ...
+       (rtl_bb_info): ... here.
+       * bb-reorder.c (find_traces, rotate_loop, find_traces_1_round,
+       copy_bb, connect_traces, add_labels_and_missing_jumps
+       fix_up_fall_thru_edges, fix_crossing_conditional_branches,
+       duplicate_computed_gotos, partition_hot_cold_basic-blocks):
+       Update to new fields.
+       * cfg.c (initialize_bb_rbi): Kill.
+       * cfglayout.c (record_effective_endpoints, fixup_reorder_chain,
+       fixup_fallthru_exit_predecessor, cfg_layout_duplicate_bb): Update.
+       * cfgrtl.c (cfg_layout_create_basic_block): Do not initialize rbi.
+       (try_redirect_by_replacing_jump): Update rbi references.
+       (cfg_layout_split_block): Likewise.
+       (cfg_layout_delete_block): Likewise.
+       (cfg_layout_merge_blocks): Likewise.
+       * function.c (thread_prologue_and_epilogue_insns): Likewise.
+       * passes.c (rest_of_handle_sms): Likewise.
+       * tracer.c (seen, tail_duplicate, layout_superblocks): Likewise.
+
 2005-06-27  David Edelsohn  <edelsohn@gnu.org>
 
        * config/rs6000/rs6000.c (rs6000_file_start): Note PPC405 erratum
index 28a7be6..46bd83d 100644 (file)
@@ -233,9 +233,6 @@ struct basic_block_def GTY((chain_next ("%h.next_bb"), chain_prev ("%h.prev_bb")
   struct basic_block_def *prev_bb;
   struct basic_block_def *next_bb;
 
-  /* The data used by basic block copying and reordering functions.  */
-  struct reorder_block_def * rbi;
-
   union basic_block_il_dependent {
       struct rtl_bb_info * GTY ((tag ("1"))) rtl;
     } GTY ((desc ("((%1.flags & BB_RTL) != 0)"))) il;
@@ -273,25 +270,17 @@ struct rtl_bb_info GTY(())
 
   /* The registers that are live on exit from this block.  */
   bitmap GTY ((skip (""))) global_live_at_end;
-};
-
-typedef struct basic_block_def *basic_block;
-
-/* Structure to hold information about the blocks during reordering and
-   copying.  Needs to be put on a diet.  */
 
-struct reorder_block_def GTY(())
-{
+  /* In CFGlayout mode points to insn notes/jumptables to be placed just before
+     and after the block.   */
   rtx header;
   rtx footer;
 
-  basic_block next;
-
   /* This field is used by the bb-reorder and tracer passes.  */
   int visited;
 };
 
-typedef struct reorder_block_def *reorder_block_def;
+typedef struct basic_block_def *basic_block;
 
 #define BB_FREQ_MAX 10000
 
@@ -940,9 +929,6 @@ extern void reorder_basic_blocks (unsigned int);
 extern void duplicate_computed_gotos (void);
 extern void partition_hot_cold_basic_blocks (void);
 
-/* In cfg.c */
-extern void initialize_bb_rbi (basic_block bb);
-
 /* In dominance.c */
 
 enum cdi_direction
index d4f74df..e0865ac 100644 (file)
@@ -272,7 +272,7 @@ find_traces (int *n_traces, struct trace *traces)
          basic_block bb;
          fprintf (dump_file, "Trace %d (round %d):  ", i + 1,
                   traces[i].round + 1);
-         for (bb = traces[i].first; bb != traces[i].last; bb = bb->rbi->next)
+         for (bb = traces[i].first; bb != traces[i].last; bb = bb->aux)
            fprintf (dump_file, "%d [%d] ", bb->index, bb->frequency);
          fprintf (dump_file, "%d [%d]\n", bb->index, bb->frequency);
        }
@@ -306,14 +306,14 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n)
 
       FOR_EACH_EDGE (e, ei, bb->succs)
        if (e->dest != EXIT_BLOCK_PTR
-           && e->dest->rbi->visited != trace_n
+           && e->dest->il.rtl->visited != trace_n
            && (e->flags & EDGE_CAN_FALLTHRU)
            && !(e->flags & EDGE_COMPLEX))
        {
          if (is_preferred)
            {
              /* The best edge is preferred.  */
-             if (!e->dest->rbi->visited
+             if (!e->dest->il.rtl->visited
                  || bbd[e->dest->index].start_of_trace >= 0)
                {
                  /* The current edge E is also preferred.  */
@@ -329,7 +329,7 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n)
            }
          else
            {
-             if (!e->dest->rbi->visited
+             if (!e->dest->il.rtl->visited
                  || bbd[e->dest->index].start_of_trace >= 0)
                {
                  /* The current edge E is preferred.  */
@@ -352,7 +352,7 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n)
                }
            }
        }
-      bb = bb->rbi->next;
+      bb = bb->aux;
     }
   while (bb != back_edge->dest);
 
@@ -362,17 +362,17 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n)
         the trace.  */
       if (back_edge->dest == trace->first)
        {
-         trace->first = best_bb->rbi->next;
+         trace->first = best_bb->aux;
        }
       else
        {
          basic_block prev_bb;
 
          for (prev_bb = trace->first;
-              prev_bb->rbi->next != back_edge->dest;
-              prev_bb = prev_bb->rbi->next)
+              prev_bb->aux != back_edge->dest;
+              prev_bb = prev_bb->aux)
            ;
-         prev_bb->rbi->next = best_bb->rbi->next;
+         prev_bb->aux = best_bb->aux;
 
          /* Try to get rid of uncond jump to cond jump.  */
          if (single_succ_p (prev_bb))
@@ -393,7 +393,7 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n)
       /* We have not found suitable loop tail so do no rotation.  */
       best_bb = back_edge->src;
     }
-  best_bb->rbi->next = NULL;
+  best_bb->aux = NULL;
   return best_bb;
 }
 
@@ -402,7 +402,7 @@ rotate_loop (edge back_edge, struct trace *trace, int trace_n)
 static void
 mark_bb_visited (basic_block bb, int trace)
 {
-  bb->rbi->visited = trace;
+  bb->il.rtl->visited = trace;
   if (bbd[bb->index].heap)
     {
       fibheap_delete_node (bbd[bb->index].heap, bbd[bb->index].node);
@@ -496,8 +496,8 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th,
              if (e->dest == EXIT_BLOCK_PTR)
                continue;
 
-             if (e->dest->rbi->visited
-                 && e->dest->rbi->visited != *n_traces)
+             if (e->dest->il.rtl->visited
+                 && e->dest->il.rtl->visited != *n_traces)
                continue;
 
              if (BB_PARTITION (e->dest) != BB_PARTITION (bb))
@@ -550,7 +550,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th,
            {
              if (e == best_edge
                  || e->dest == EXIT_BLOCK_PTR
-                 || e->dest->rbi->visited)
+                 || e->dest->il.rtl->visited)
                continue;
 
              key = bb_to_key (e->dest);
@@ -611,7 +611,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th,
 
          if (best_edge) /* Suitable successor was found.  */
            {
-             if (best_edge->dest->rbi->visited == *n_traces)
+             if (best_edge->dest->il.rtl->visited == *n_traces)
                {
                  /* We do nothing with one basic block loops.  */
                  if (best_edge->dest != bb)
@@ -631,7 +631,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th,
                                           "Rotating loop %d - %d\n",
                                           best_edge->dest->index, bb->index);
                                }
-                             bb->rbi->next = best_edge->dest;
+                             bb->aux = best_edge->dest;
                              bbd[best_edge->dest->index].in_trace = 
                                                             (*n_traces) - 1;
                              bb = rotate_loop (best_edge, trace, *n_traces);
@@ -681,7 +681,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th,
                    if (e != best_edge
                        && (e->flags & EDGE_CAN_FALLTHRU)
                        && !(e->flags & EDGE_COMPLEX)
-                       && !e->dest->rbi->visited
+                       && !e->dest->il.rtl->visited
                        && single_pred_p (e->dest)
                        && !(e->flags & EDGE_CROSSING)
                        && single_succ_p (e->dest)
@@ -698,7 +698,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th,
                        break;
                      }
 
-                 bb->rbi->next = best_edge->dest;
+                 bb->aux = best_edge->dest;
                  bbd[best_edge->dest->index].in_trace = (*n_traces) - 1;
                  bb = best_edge->dest;
                }
@@ -715,7 +715,7 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th,
       FOR_EACH_EDGE (e, ei, bb->succs)
        {
          if (e->dest == EXIT_BLOCK_PTR
-             || e->dest->rbi->visited)
+             || e->dest->il.rtl->visited)
            continue;
 
          if (bbd[e->dest->index].heap)
@@ -757,15 +757,15 @@ copy_bb (basic_block old_bb, edge e, basic_block bb, int trace)
   BB_COPY_PARTITION (new_bb, old_bb);
 
   gcc_assert (e->dest == new_bb);
-  gcc_assert (!e->dest->rbi->visited);
+  gcc_assert (!e->dest->il.rtl->visited);
 
   if (dump_file)
     fprintf (dump_file,
             "Duplicated bb %d (created bb %d)\n",
             old_bb->index, new_bb->index);
-  new_bb->rbi->visited = trace;
-  new_bb->rbi->next = bb->rbi->next;
-  bb->rbi->next = new_bb;
+  new_bb->il.rtl->visited = trace;
+  new_bb->aux = bb->aux;
+  bb->aux = new_bb;
 
   if (new_bb->index >= array_size || last_basic_block > array_size)
     {
@@ -973,7 +973,7 @@ connect_traces (int n_traces, struct trace *traces)
            }
          if (best)
            {
-             best->src->rbi->next = best->dest;
+             best->src->aux = best->dest;
              t2 = bbd[best->src->index].end_of_trace;
              connected[t2] = true;
 
@@ -988,7 +988,7 @@ connect_traces (int n_traces, struct trace *traces)
        }
 
       if (last_trace >= 0)
-       traces[last_trace].last->rbi->next = traces[t2].first;
+       traces[last_trace].last->aux = traces[t2].first;
       last_trace = t;
 
       /* Find the successor traces.  */
@@ -1026,7 +1026,7 @@ connect_traces (int n_traces, struct trace *traces)
                           best->src->index, best->dest->index);
                }
              t = bbd[best->dest->index].start_of_trace;
-             traces[last_trace].last->rbi->next = traces[t].first;
+             traces[last_trace].last->aux = traces[t].first;
              connected[t] = true;
              last_trace = t;
            }
@@ -1119,7 +1119,7 @@ connect_traces (int n_traces, struct trace *traces)
                  if (next_bb && next_bb != EXIT_BLOCK_PTR)
                    {
                      t = bbd[next_bb->index].start_of_trace;
-                     traces[last_trace].last->rbi->next = traces[t].first;
+                     traces[last_trace].last->aux = traces[t].first;
                      connected[t] = true;
                      last_trace = t;
                    }
@@ -1137,7 +1137,7 @@ connect_traces (int n_traces, struct trace *traces)
       basic_block bb;
 
       fprintf (dump_file, "Final order:\n");
-      for (bb = traces[0].first; bb; bb = bb->rbi->next)
+      for (bb = traces[0].first; bb; bb = bb->aux)
        fprintf (dump_file, "%d ", bb->index);
       fprintf (dump_file, "\n");
       fflush (dump_file);
@@ -1305,7 +1305,7 @@ add_labels_and_missing_jumps (edge *crossing_edges, int n_crossing_edges)
                      barrier = emit_barrier_after (new_jump);
                      JUMP_LABEL (new_jump) = label;
                      LABEL_NUSES (label) += 1;
-                     src->rbi->footer = unlink_insn_chain (barrier, barrier);
+                     src->il.rtl->footer = unlink_insn_chain (barrier, barrier);
                      /* Mark edge as non-fallthru.  */
                      crossing_edges[i]->flags &= ~EDGE_FALLTHRU;
                    } /* end: 'if (GET_CODE ... '  */
@@ -1395,7 +1395,7 @@ fix_up_fall_thru_edges (void)
                     the cond jump does).  */
                  
                  if (!cond_jump_crosses
-                     && cur_bb->rbi->next == cond_jump->dest)
+                     && cur_bb->aux == cond_jump->dest)
                    {
                      /* Find label in fall_thru block. We've already added
                         any missing labels, so there must be one.  */
@@ -1430,8 +1430,8 @@ fix_up_fall_thru_edges (void)
                  
                  if (new_bb)
                    {
-                     new_bb->rbi->next = cur_bb->rbi->next;
-                     cur_bb->rbi->next = new_bb;
+                     new_bb->aux = cur_bb->aux;
+                     cur_bb->aux = new_bb;
                      
                      /* Make sure new fall-through bb is in same 
                         partition as bb it's falling through from.  */
@@ -1445,13 +1445,13 @@ fix_up_fall_thru_edges (void)
                  if (new_bb)
                    {
                      barrier = emit_barrier_after (BB_END (new_bb));
-                     new_bb->rbi->footer = unlink_insn_chain (barrier, 
+                     new_bb->il.rtl->footer = unlink_insn_chain (barrier, 
                                                               barrier);
                    }
                  else
                    {
                      barrier = emit_barrier_after (BB_END (cur_bb));
-                     cur_bb->rbi->footer = unlink_insn_chain (barrier,
+                     cur_bb->il.rtl->footer = unlink_insn_chain (barrier,
                                                               barrier);
                    }
                }
@@ -1597,8 +1597,8 @@ fix_crossing_conditional_branches (void)
                     conditional jump.  */
                  
                  new_bb = create_basic_block (NULL, NULL, last_bb);
-                 new_bb->rbi->next = last_bb->rbi->next;
-                 last_bb->rbi->next = new_bb;
+                 new_bb->aux = last_bb->aux;
+                 last_bb->aux = new_bb;
                  prev_bb = last_bb;
                  last_bb = new_bb;
                  
@@ -1634,7 +1634,7 @@ fix_crossing_conditional_branches (void)
                  
                  barrier = emit_barrier_after (new_jump);
                  JUMP_LABEL (new_jump) = old_label;
-                 new_bb->rbi->footer = unlink_insn_chain (barrier, 
+                 new_bb->il.rtl->footer = unlink_insn_chain (barrier, 
                                                           barrier);
                  
                  /* Make sure new bb is in same partition as source
@@ -2008,7 +2008,7 @@ duplicate_computed_gotos (void)
 
       /* Build the reorder chain for the original order of blocks.  */
       if (bb->next_bb != EXIT_BLOCK_PTR)
-       bb->rbi->next = bb->next_bb;
+       bb->aux = bb->next_bb;
 
       /* Obviously the block has to end in a computed jump.  */
       if (!computed_jump_p (BB_END (bb)))
@@ -2048,10 +2048,10 @@ duplicate_computed_gotos (void)
   /* Duplicate computed gotos.  */
   FOR_EACH_BB (bb)
     {
-      if (bb->rbi->visited)
+      if (bb->il.rtl->visited)
        continue;
 
-      bb->rbi->visited = 1;
+      bb->il.rtl->visited = 1;
 
       /* BB must have one outgoing edge.  That edge must not lead to
          the exit block or the next block.
@@ -2067,9 +2067,9 @@ duplicate_computed_gotos (void)
        continue;
 
       new_bb = duplicate_block (single_succ (bb), single_succ_edge (bb));
-      new_bb->rbi->next = bb->rbi->next;
-      bb->rbi->next = new_bb;
-      new_bb->rbi->visited = 1;
+      new_bb->aux = bb->aux;
+      bb->aux = new_bb;
+      new_bb->il.rtl->visited = 1;
     }
 
 done:
@@ -2156,7 +2156,7 @@ partition_hot_cold_basic_blocks (void)
   FOR_EACH_BB (cur_bb)
     if (cur_bb->index >= 0
        && cur_bb->next_bb->index >= 0)
-      cur_bb->rbi->next = cur_bb->next_bb;
+      cur_bb->aux = cur_bb->next_bb;
   
   find_rarely_executed_basic_blocks_and_crossing_edges (crossing_edges, 
                                                        &n_crossing_edges, 
index af8a377..2d6a3ca 100644 (file)
--- a/gcc/cfg.c
+++ b/gcc/cfg.c
@@ -136,16 +136,6 @@ alloc_block (void)
   return bb;
 }
 
-/* Initialize rbi (the structure containing data used by basic block
-   duplication and reordering) for the given basic block.  */
-
-void
-initialize_bb_rbi (basic_block bb)
-{
-  gcc_assert (!bb->rbi);
-  bb->rbi = ggc_alloc_cleared (sizeof (struct reorder_block_def));
-}
-
 /* Link block B to chain after AFTER.  */
 void
 link_block (basic_block b, basic_block after)
index 44f6291..16438cc 100644 (file)
@@ -209,11 +209,11 @@ record_effective_endpoints (void)
       rtx end;
 
       if (PREV_INSN (BB_HEAD (bb)) && next_insn != BB_HEAD (bb))
-       bb->rbi->header = unlink_insn_chain (next_insn,
+       bb->il.rtl->header = unlink_insn_chain (next_insn,
                                              PREV_INSN (BB_HEAD (bb)));
       end = skip_insns_after_block (bb);
       if (NEXT_INSN (BB_END (bb)) && BB_END (bb) != end)
-       bb->rbi->footer = unlink_insn_chain (NEXT_INSN (BB_END (bb)), end);
+       bb->il.rtl->footer = unlink_insn_chain (NEXT_INSN (BB_END (bb)), end);
       next_insn = NEXT_INSN (BB_END (bb));
     }
 
@@ -584,16 +584,16 @@ fixup_reorder_chain (void)
 
   for (bb = ENTRY_BLOCK_PTR->next_bb, index = 0;
        bb != 0;
-       bb = bb->rbi->next, index++)
+       bb = bb->aux, index++)
     {
-      if (bb->rbi->header)
+      if (bb->il.rtl->header)
        {
          if (insn)
-           NEXT_INSN (insn) = bb->rbi->header;
+           NEXT_INSN (insn) = bb->il.rtl->header;
          else
-           set_first_insn (bb->rbi->header);
-         PREV_INSN (bb->rbi->header) = insn;
-         insn = bb->rbi->header;
+           set_first_insn (bb->il.rtl->header);
+         PREV_INSN (bb->il.rtl->header) = insn;
+         insn = bb->il.rtl->header;
          while (NEXT_INSN (insn))
            insn = NEXT_INSN (insn);
        }
@@ -603,10 +603,10 @@ fixup_reorder_chain (void)
        set_first_insn (BB_HEAD (bb));
       PREV_INSN (BB_HEAD (bb)) = insn;
       insn = BB_END (bb);
-      if (bb->rbi->footer)
+      if (bb->il.rtl->footer)
        {
-         NEXT_INSN (insn) = bb->rbi->footer;
-         PREV_INSN (bb->rbi->footer) = insn;
+         NEXT_INSN (insn) = bb->il.rtl->footer;
+         PREV_INSN (bb->il.rtl->footer) = insn;
          while (NEXT_INSN (insn))
            insn = NEXT_INSN (insn);
        }
@@ -630,7 +630,7 @@ fixup_reorder_chain (void)
   /* Now add jumps and labels as needed to match the blocks new
      outgoing edges.  */
 
-  for (bb = ENTRY_BLOCK_PTR->next_bb; bb ; bb = bb->rbi->next)
+  for (bb = ENTRY_BLOCK_PTR->next_bb; bb ; bb = bb->aux)
     {
       edge e_fall, e_taken, e;
       rtx bb_end_insn;
@@ -656,7 +656,7 @@ fixup_reorder_chain (void)
          if (any_condjump_p (bb_end_insn))
            {
              /* If the old fallthru is still next, nothing to do.  */
-             if (bb->rbi->next == e_fall->dest
+             if (bb->aux == e_fall->dest
                  || e_fall->dest == EXIT_BLOCK_PTR)
                continue;
 
@@ -699,7 +699,7 @@ fixup_reorder_chain (void)
                 such as happens at the very end of a function, then we'll
                 need to add a new unconditional jump.  Choose the taken
                 edge based on known or assumed probability.  */
-             else if (bb->rbi->next != e_taken->dest)
+             else if (bb->aux != e_taken->dest)
                {
                  rtx note = find_reg_note (bb_end_insn, REG_BR_PROB, 0);
 
@@ -762,7 +762,7 @@ fixup_reorder_chain (void)
            continue;
 
          /* If the fallthru block is still next, nothing to do.  */
-         if (bb->rbi->next == e_fall->dest)
+         if (bb->aux == e_fall->dest)
            continue;
 
          /* A fallthru to exit block.  */
@@ -774,10 +774,9 @@ fixup_reorder_chain (void)
       nb = force_nonfallthru (e_fall);
       if (nb)
        {
-         initialize_bb_rbi (nb);
-         nb->rbi->visited = 1;
-         nb->rbi->next = bb->rbi->next;
-         bb->rbi->next = nb;
+         nb->il.rtl->visited = 1;
+         nb->aux = bb->aux;
+         bb->aux = nb;
          /* Don't process this new block.  */
          bb = nb;
          
@@ -802,7 +801,7 @@ fixup_reorder_chain (void)
       fprintf (dump_file, "Reordered sequence:\n");
       for (bb = ENTRY_BLOCK_PTR->next_bb, index = 0;
           bb;
-          bb = bb->rbi->next, index++)
+          bb = bb->aux, index++)
        {
          fprintf (dump_file, " %i ", index);
          if (get_bb_original (bb))
@@ -821,7 +820,7 @@ fixup_reorder_chain (void)
   bb = ENTRY_BLOCK_PTR->next_bb;
   index = 0;
 
-  for (; bb; prev_bb = bb, bb = bb->rbi->next, index ++)
+  for (; bb; prev_bb = bb, bb = bb->aux, index ++)
     {
       bb->index = index;
       BASIC_BLOCK (index) = bb;
@@ -893,7 +892,7 @@ fixup_fallthru_exit_predecessor (void)
     if (e->flags & EDGE_FALLTHRU)
       bb = e->src;
 
-  if (bb && bb->rbi->next)
+  if (bb && bb->aux)
     {
       basic_block c = ENTRY_BLOCK_PTR->next_bb;
 
@@ -902,22 +901,21 @@ fixup_fallthru_exit_predecessor (void)
       if (c == bb)
        {
          bb = split_block (bb, NULL)->dest;
-         initialize_bb_rbi (bb);
-         bb->rbi->next = c->rbi->next;
-         c->rbi->next = bb;
-         bb->rbi->footer = c->rbi->footer;
-         c->rbi->footer = NULL;
+         bb->aux = c->aux;
+         c->aux = bb;
+         bb->il.rtl->footer = c->il.rtl->footer;
+         c->il.rtl->footer = NULL;
        }
 
-      while (c->rbi->next != bb)
-       c = c->rbi->next;
+      while (c->aux != bb)
+       c = c->aux;
 
-      c->rbi->next = bb->rbi->next;
-      while (c->rbi->next)
-       c = c->rbi->next;
+      c->aux = bb->aux;
+      while (c->aux)
+       c = c->aux;
 
-      c->rbi->next = bb;
-      bb->rbi->next = NULL;
+      c->aux = bb;
+      bb->aux = NULL;
     }
 }
 \f
@@ -1057,24 +1055,24 @@ cfg_layout_duplicate_bb (basic_block bb)
                               EXIT_BLOCK_PTR->prev_bb);
 
   BB_COPY_PARTITION (new_bb, bb);
-  if (bb->rbi->header)
+  if (bb->il.rtl->header)
     {
-      insn = bb->rbi->header;
+      insn = bb->il.rtl->header;
       while (NEXT_INSN (insn))
        insn = NEXT_INSN (insn);
-      insn = duplicate_insn_chain (bb->rbi->header, insn);
+      insn = duplicate_insn_chain (bb->il.rtl->header, insn);
       if (insn)
-       new_bb->rbi->header = unlink_insn_chain (insn, get_last_insn ());
+       new_bb->il.rtl->header = unlink_insn_chain (insn, get_last_insn ());
     }
 
-  if (bb->rbi->footer)
+  if (bb->il.rtl->footer)
     {
-      insn = bb->rbi->footer;
+      insn = bb->il.rtl->footer;
       while (NEXT_INSN (insn))
        insn = NEXT_INSN (insn);
-      insn = duplicate_insn_chain (bb->rbi->footer, insn);
+      insn = duplicate_insn_chain (bb->il.rtl->footer, insn);
       if (insn)
-       new_bb->rbi->footer = unlink_insn_chain (insn, get_last_insn ());
+       new_bb->il.rtl->footer = unlink_insn_chain (insn, get_last_insn ());
     }
 
   if (bb->il.rtl->global_live_at_start)
@@ -1100,11 +1098,6 @@ cfg_layout_duplicate_bb (basic_block bb)
 void
 cfg_layout_initialize (unsigned int flags)
 {
-  basic_block bb;
-
-  FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
-    initialize_bb_rbi (bb);
-
   initialize_original_copy_tables ();
 
   cfg_layout_rtl_register_cfg_hooks ();
@@ -1142,8 +1135,8 @@ break_superblocks (void)
   free (superblocks);
 }
 
-/* Finalize the changes: reorder insn list according to the sequence, enter
-   compensation code, rebuild scope forest.  */
+/* Finalize the changes: reorder insn list according to the sequence specified
+   by aux pointers, enter compensation code, rebuild scope forest.  */
 
 void
 cfg_layout_finalize (void)
@@ -1166,7 +1159,11 @@ cfg_layout_finalize (void)
   verify_insn_chain ();
 #endif
   FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
-    bb->rbi = NULL;
+  {
+    bb->il.rtl->header = bb->il.rtl->footer = NULL;
+    bb->aux = NULL;
+    bb->il.rtl->visited = 0;
+  }
 
   break_superblocks ();
 
index 432efa5..b269ba4 100644 (file)
@@ -345,7 +345,6 @@ cfg_layout_create_basic_block (void *head, void *end, basic_block after)
 {
   basic_block newbb = rtl_create_basic_block (head, end, after);
 
-  initialize_bb_rbi (newbb);
   return newbb;
 }
 \f
@@ -713,7 +712,7 @@ try_redirect_by_replacing_jump (edge e, basic_block target, bool in_cfglayout)
       /* Selectively unlink whole insn chain.  */
       if (in_cfglayout)
        {
-         rtx insn = src->rbi->footer;
+         rtx insn = src->il.rtl->footer;
 
           delete_insn_chain (kill_from, BB_END (src));
 
@@ -725,7 +724,7 @@ try_redirect_by_replacing_jump (edge e, basic_block target, bool in_cfglayout)
                  if (PREV_INSN (insn))
                    NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn);
                  else
-                   src->rbi->footer = NEXT_INSN (insn);
+                   src->il.rtl->footer = NEXT_INSN (insn);
                  if (NEXT_INSN (insn))
                    PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn);
                }
@@ -2490,8 +2489,8 @@ cfg_layout_split_block (basic_block bb, void *insnp)
   rtx insn = insnp;
   basic_block new_bb = rtl_split_block (bb, insn);
 
-  new_bb->rbi->footer = bb->rbi->footer;
-  bb->rbi->footer = NULL;
+  new_bb->il.rtl->footer = bb->il.rtl->footer;
+  bb->il.rtl->footer = NULL;
 
   return new_bb;
 }
@@ -2597,24 +2596,24 @@ cfg_layout_delete_block (basic_block bb)
 {
   rtx insn, next, prev = PREV_INSN (BB_HEAD (bb)), *to, remaints;
 
-  if (bb->rbi->header)
+  if (bb->il.rtl->header)
     {
       next = BB_HEAD (bb);
       if (prev)
-       NEXT_INSN (prev) = bb->rbi->header;
+       NEXT_INSN (prev) = bb->il.rtl->header;
       else
-       set_first_insn (bb->rbi->header);
-      PREV_INSN (bb->rbi->header) = prev;
-      insn = bb->rbi->header;
+       set_first_insn (bb->il.rtl->header);
+      PREV_INSN (bb->il.rtl->header) = prev;
+      insn = bb->il.rtl->header;
       while (NEXT_INSN (insn))
        insn = NEXT_INSN (insn);
       NEXT_INSN (insn) = next;
       PREV_INSN (next) = insn;
     }
   next = NEXT_INSN (BB_END (bb));
-  if (bb->rbi->footer)
+  if (bb->il.rtl->footer)
     {
-      insn = bb->rbi->footer;
+      insn = bb->il.rtl->footer;
       while (insn)
        {
          if (BARRIER_P (insn))
@@ -2622,7 +2621,7 @@ cfg_layout_delete_block (basic_block bb)
              if (PREV_INSN (insn))
                NEXT_INSN (PREV_INSN (insn)) = NEXT_INSN (insn);
              else
-               bb->rbi->footer = NEXT_INSN (insn);
+               bb->il.rtl->footer = NEXT_INSN (insn);
              if (NEXT_INSN (insn))
                PREV_INSN (NEXT_INSN (insn)) = PREV_INSN (insn);
            }
@@ -2630,11 +2629,11 @@ cfg_layout_delete_block (basic_block bb)
            break;
          insn = NEXT_INSN (insn);
        }
-      if (bb->rbi->footer)
+      if (bb->il.rtl->footer)
        {
          insn = BB_END (bb);
-         NEXT_INSN (insn) = bb->rbi->footer;
-         PREV_INSN (bb->rbi->footer) = insn;
+         NEXT_INSN (insn) = bb->il.rtl->footer;
+         PREV_INSN (bb->il.rtl->footer) = insn;
          while (NEXT_INSN (insn))
            insn = NEXT_INSN (insn);
          NEXT_INSN (insn) = next;
@@ -2645,12 +2644,10 @@ cfg_layout_delete_block (basic_block bb)
        }
     }
   if (bb->next_bb != EXIT_BLOCK_PTR)
-    to = &bb->next_bb->rbi->header;
+    to = &bb->next_bb->il.rtl->header;
   else
     to = &cfg_layout_function_footer;
 
-  bb->rbi = NULL;
-
   rtl_delete_block (bb);
 
   if (prev)
@@ -2727,13 +2724,13 @@ cfg_layout_merge_blocks (basic_block a, basic_block b)
   gcc_assert (!JUMP_P (BB_END (a)));
 
   /* Possible line number notes should appear in between.  */
-  if (b->rbi->header)
+  if (b->il.rtl->header)
     {
       rtx first = BB_END (a), last;
 
-      last = emit_insn_after_noloc (b->rbi->header, BB_END (a));
+      last = emit_insn_after_noloc (b->il.rtl->header, BB_END (a));
       delete_insn_chain (NEXT_INSN (first), last);
-      b->rbi->header = NULL;
+      b->il.rtl->header = NULL;
     }
 
   /* In the case basic blocks are not adjacent, move them around.  */
@@ -2769,20 +2766,20 @@ cfg_layout_merge_blocks (basic_block a, basic_block b)
     }
 
   /* Possible tablejumps and barriers should appear after the block.  */
-  if (b->rbi->footer)
+  if (b->il.rtl->footer)
     {
-      if (!a->rbi->footer)
-       a->rbi->footer = b->rbi->footer;
+      if (!a->il.rtl->footer)
+       a->il.rtl->footer = b->il.rtl->footer;
       else
        {
-         rtx last = a->rbi->footer;
+         rtx last = a->il.rtl->footer;
 
          while (NEXT_INSN (last))
            last = NEXT_INSN (last);
-         NEXT_INSN (last) = b->rbi->footer;
-         PREV_INSN (b->rbi->footer) = last;
+         NEXT_INSN (last) = b->il.rtl->footer;
+         PREV_INSN (b->il.rtl->footer) = last;
        }
-      b->rbi->footer = NULL;
+      b->il.rtl->footer = NULL;
     }
   a->il.rtl->global_live_at_end = b->il.rtl->global_live_at_end;
 
index 7ab698b..d514560 100644 (file)
@@ -5233,7 +5233,7 @@ thread_prologue_and_epilogue_insns (rtx f ATTRIBUTE_UNUSED)
       cfg_layout_initialize (0);
       FOR_EACH_BB (cur_bb)
        if (cur_bb->index >= 0 && cur_bb->next_bb->index >= 0)
-         cur_bb->rbi->next = cur_bb->next_bb;
+         cur_bb->aux = cur_bb->next_bb;
       cfg_layout_finalize ();
     }
 epilogue_done:
index 126427f..6910f33 100644 (file)
@@ -600,7 +600,7 @@ rest_of_handle_sms (void)
   /* Finalize layout changes.  */
   FOR_EACH_BB (bb)
     if (bb->next_bb != EXIT_BLOCK_PTR)
-      bb->rbi->next = bb->next_bb;
+      bb->aux = bb->next_bb;
   cfg_layout_finalize ();
   free_dominance_info (CDI_DOMINATORS);
   ggc_collect ();
@@ -1187,7 +1187,7 @@ rest_of_handle_loop2 (void)
   /* Finalize layout changes.  */
   FOR_EACH_BB (bb)
     if (bb->next_bb != EXIT_BLOCK_PTR)
-      bb->rbi->next = bb->next_bb;
+      bb->aux = bb->next_bb;
   cfg_layout_finalize ();
 
   cleanup_cfg (CLEANUP_EXPENSIVE);
index cddc5b9..5d3aaf4 100644 (file)
@@ -65,7 +65,7 @@ static int branch_ratio_cutoff;
 /* Return true if BB has been seen - it is connected to some trace
    already.  */
 
-#define seen(bb) (bb->rbi->visited || bb->rbi->next)
+#define seen(bb) (bb->il.rtl->visited || bb->aux)
 
 /* Return true if we should ignore the basic block for purposes of tracing.  */
 static bool
@@ -292,8 +292,8 @@ tail_duplicate (void)
                fprintf (dump_file, "Duplicated %i as %i [%i]\n",
                         old->index, bb2->index, bb2->frequency);
            }
-         bb->rbi->next = bb2;
-         bb2->rbi->visited = 1;
+         bb->aux = bb2;
+         bb2->il.rtl->visited = 1;
          bb = bb2;
          /* In case the trace became infrequent, stop duplicating.  */
          if (ignore_bb_p (bb))
@@ -328,28 +328,28 @@ layout_superblocks (void)
     {
       edge_iterator ei;
       edge e, best = NULL;
-      while (end->rbi->next)
-       end = end->rbi->next;
+      while (end->aux)
+       end = end->aux;
 
       FOR_EACH_EDGE (e, ei, end->succs)
        if (e->dest != EXIT_BLOCK_PTR
            && e->dest != single_succ (ENTRY_BLOCK_PTR)
-           && !e->dest->rbi->visited
+           && !e->dest->il.rtl->visited
            && (!best || EDGE_FREQUENCY (e) > EDGE_FREQUENCY (best)))
          best = e;
 
       if (best)
        {
-         end->rbi->next = best->dest;
-         best->dest->rbi->visited = 1;
+         end->aux = best->dest;
+         best->dest->il.rtl->visited = 1;
        }
       else
        for (; bb != EXIT_BLOCK_PTR; bb = bb->next_bb)
          {
-           if (!bb->rbi->visited)
+           if (!bb->il.rtl->visited)
              {
-               end->rbi->next = bb;
-               bb->rbi->visited = 1;
+               end->aux = bb;
+               bb->il.rtl->visited = 1;
                break;
              }
          }