OSDN Git Service

* g++.dg/rtti/tinfo1.C: Remove xfails.
[pf3gnuchains/gcc-fork.git] / gcc / bt-load.c
index ae8c2e0..b0ced41 100644 (file)
@@ -225,7 +225,7 @@ insn_sets_btr_p (rtx insn, int check_const, int *regno)
 {
   rtx set;
 
-  if (GET_CODE (insn) == INSN
+  if (NONJUMP_INSN_P (insn)
       && (set = single_set (insn)))
     {
       rtx dest = SET_DEST (set);
@@ -237,8 +237,8 @@ insn_sets_btr_p (rtx insn, int check_const, int *regno)
       if (REG_P (dest)
          && TEST_HARD_REG_BIT (all_btrs, REGNO (dest)))
        {
-         if (btr_referenced_p (src, NULL))
-           abort();
+         gcc_assert (!btr_referenced_p (src, NULL));
+         
          if (!check_const || CONSTANT_P (src))
            {
              if (regno)
@@ -533,7 +533,7 @@ compute_defs_uses_and_gen (fibheap_t all_btr_defs, btr_def *def_array,
                      user->next = info.users_this_bb;
                      info.users_this_bb = user;
                    }
-                 if (GET_CODE (insn) == CALL_INSN)
+                 if (CALL_P (insn))
                    {
                      HARD_REG_SET *clobbered = &call_used_reg_set;
                      HARD_REG_SET call_saved;
@@ -580,7 +580,7 @@ compute_defs_uses_and_gen (fibheap_t all_btr_defs, btr_def *def_array,
          IOR_HARD_REG_SET (btrs_live_at_end[i], tmp);
          can_throw = 1;
        }
-      if (can_throw || GET_CODE (insn) == JUMP_INSN)
+      if (can_throw || JUMP_P (insn))
        {
          int regno;
 
@@ -740,7 +740,7 @@ link_btr_uses (btr_def *def_array, btr_user *use_array, sbitmap *bb_out,
                  sbitmap_free (reaching_defs_of_reg);
                }
 
-             if (GET_CODE (insn) == CALL_INSN)
+             if (CALL_P (insn))
                {
                  int regno;
 
@@ -822,20 +822,20 @@ static void
 clear_btr_from_live_range (btr_def def)
 {
   int bb;
+  bitmap_iterator bi;
 
-  EXECUTE_IF_SET_IN_BITMAP
-    (def->live_range, 0, bb,
-     {
-       if ((!def->other_btr_uses_before_def
-            && !def->other_btr_uses_after_use)
-          || !block_at_edge_of_live_range_p (bb, def))
-        {
-          CLEAR_HARD_REG_BIT (btrs_live[bb], def->btr);
-          CLEAR_HARD_REG_BIT (btrs_live_at_end[bb], def->btr);
-          if (dump_file)
-            dump_btrs_live (bb);
-        }
-     });
+  EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi)
+    {
+      if ((!def->other_btr_uses_before_def
+          && !def->other_btr_uses_after_use)
+         || !block_at_edge_of_live_range_p (bb, def))
+       {
+         CLEAR_HARD_REG_BIT (btrs_live[bb], def->btr);
+         CLEAR_HARD_REG_BIT (btrs_live_at_end[bb], def->btr);
+         if (dump_file)
+           dump_btrs_live (bb);
+       }
+    }
 }
 
 
@@ -846,14 +846,15 @@ static void
 add_btr_to_live_range (btr_def def)
 {
   int bb;
-  EXECUTE_IF_SET_IN_BITMAP
-    (def->live_range, 0, bb,
-     {
-       SET_HARD_REG_BIT (btrs_live[bb], def->btr);
-       SET_HARD_REG_BIT (btrs_live_at_end[bb], def->btr);
-       if (dump_file)
-        dump_btrs_live (bb);
-     });
+  bitmap_iterator bi;
+
+  EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi)
+    {
+      SET_HARD_REG_BIT (btrs_live[bb], def->btr);
+      SET_HARD_REG_BIT (btrs_live_at_end[bb], def->btr);
+      if (dump_file)
+       dump_btrs_live (bb);
+    }
 }
 
 /* Update a live range to contain the basic block NEW_BLOCK, and all
@@ -875,11 +876,14 @@ augment_live_range (bitmap live_range, HARD_REG_SET *btrs_live_in_range,
 
   if (dominated_by_p (CDI_DOMINATORS, new_bb, head_bb))
     *tos++ = new_bb;
-  else if (dominated_by_p (CDI_DOMINATORS, head_bb, new_bb))
+  else
     {
       edge e;
+      edge_iterator ei;
       int new_block = new_bb->index;
 
+      gcc_assert (dominated_by_p (CDI_DOMINATORS, head_bb, new_bb));
+  
       bitmap_set_bit (live_range, new_block);
       if (flag_btr_bb_exclusive)
        IOR_HARD_REG_SET (*btrs_live_in_range, btrs_live[new_block]);
@@ -897,11 +901,9 @@ augment_live_range (bitmap live_range, HARD_REG_SET *btrs_live_in_range,
          dump_hard_reg_set (*btrs_live_in_range);
          fprintf (dump_file, "\n");
        }
-      for (e = head_bb->pred; e; e = e->pred_next)
+      FOR_EACH_EDGE (e, ei, head_bb->preds)
        *tos++ = e->src;
     }
-  else
-    abort();
 
   while (tos != worklist)
     {
@@ -909,6 +911,7 @@ augment_live_range (bitmap live_range, HARD_REG_SET *btrs_live_in_range,
       if (!bitmap_bit_p (live_range, bb->index))
        {
          edge e;
+         edge_iterator ei;
 
          bitmap_set_bit (live_range, bb->index);
          IOR_HARD_REG_SET (*btrs_live_in_range,
@@ -922,7 +925,7 @@ augment_live_range (bitmap live_range, HARD_REG_SET *btrs_live_in_range,
              fprintf (dump_file, "\n");
            }
 
-         for (e = bb->pred; e != NULL; e = e->pred_next)
+         FOR_EACH_EDGE (e, ei, bb->preds)
            {
              basic_block pred = e->src;
              if (!bitmap_bit_p (live_range, pred->index))
@@ -990,22 +993,25 @@ btr_def_live_range (btr_def def, HARD_REG_SET *btrs_live_in_range)
       */
       int bb;
       int def_bb = def->bb->index;
+      bitmap_iterator bi;
 
       CLEAR_HARD_REG_SET (*btrs_live_in_range);
       if (flag_btr_bb_exclusive)
-       EXECUTE_IF_SET_IN_BITMAP
-         (def->live_range, 0, bb,
-          {
-            IOR_HARD_REG_SET (*btrs_live_in_range, btrs_live[bb]);
-          });
+       {
+         EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi)
+           {
+             IOR_HARD_REG_SET (*btrs_live_in_range, btrs_live[bb]);
+           }
+       }
       else
-       EXECUTE_IF_SET_IN_BITMAP
-         (def->live_range, 0, bb,
-          {
-            IOR_HARD_REG_SET (*btrs_live_in_range,
-                              (def_bb == bb
-                               ? btrs_live_at_end : btrs_live) [bb]);
-          });
+       {
+         EXECUTE_IF_SET_IN_BITMAP (def->live_range, 0, bb, bi)
+           {
+             IOR_HARD_REG_SET (*btrs_live_in_range,
+                               (def_bb == bb
+                                ? btrs_live_at_end : btrs_live) [bb]);
+           }
+       }
     }
   if (!def->other_btr_uses_before_def &&
       !def->other_btr_uses_after_use)
@@ -1135,7 +1141,7 @@ move_btr_def (basic_block new_def_bb, int btr, btr_def def, bitmap live_range,
   combine_btr_defs (def, btrs_live_in_range);
   btr = def->btr;
   add_btr_to_live_range (def);
-  if (GET_CODE (insp) == CODE_LABEL)
+  if (LABEL_P (insp))
     insp = NEXT_INSN (insp);
   /* N.B.: insp is expected to be NOTE_INSN_BASIC_BLOCK now.  Some
      optimizations can result in insp being both first and last insn of
@@ -1146,9 +1152,9 @@ move_btr_def (basic_block new_def_bb, int btr, btr_def def, bitmap live_range,
     {
       insp = BB_END (b);
       for (insp = BB_END (b); ! INSN_P (insp); insp = PREV_INSN (insp))
-       if (insp == BB_HEAD (b))
-         abort ();
-      if (GET_CODE (insp) == JUMP_INSN || can_throw_internal (insp))
+       gcc_assert (insp != BB_HEAD (b));
+      
+      if (JUMP_P (insp) || can_throw_internal (insp))
        insp = PREV_INSN (insp);
     }
 
@@ -1237,7 +1243,7 @@ migrate_btr_def (btr_def def, int min_cost)
   int give_up = 0;
   int def_moved = 0;
   btr_user user;
-  int def_latency = 1;
+  int def_latency;
 
   if (dump_file)
     fprintf (dump_file,
@@ -1267,14 +1273,11 @@ migrate_btr_def (btr_def def, int min_cost)
   bitmap_copy (live_range, def->live_range);
 
 #ifdef INSN_SCHEDULING
-  if (targetm.sched.use_dfa_pipeline_interface ())
-    def_latency = insn_default_latency (def->insn);
-  else
-    def_latency = result_ready_cost (def->insn);
+  def_latency = insn_default_latency (def->insn) * issue_rate;
+#else
+  def_latency = issue_rate;
 #endif
 
-  def_latency *= issue_rate;
-
   for (user = def->uses; user != NULL; user = user->next)
     {
       if (user->bb == def->bb