OSDN Git Service

* g++.dg/eh/weak1.C: Don't xfail hppa*64*-*-*.
[pf3gnuchains/gcc-fork.git] / gcc / ddg.c
index 295811d..6ae2ae2 100644 (file)
--- a/gcc/ddg.c
+++ b/gcc/ddg.c
@@ -44,6 +44,8 @@ along with GCC; see the file COPYING3.  If not see
 #include "bitmap.h"
 #include "ddg.h"
 
+#ifdef INSN_SCHEDULING
+
 /* A flag indicating that a ddg edge belongs to an SCC or not.  */
 enum edge_flag {NOT_IN_SCC = 0, IN_SCC};
 
@@ -176,14 +178,18 @@ create_ddg_dep_from_intra_loop_link (ddg_ptr g, ddg_node_ptr src_node,
       rtx set;
 
       set = single_set (dest_node->insn);
-      if (set)
+      /* TODO: Handle registers that REG_P is not true for them, i.e.
+         subregs and special registers.  */
+      if (set && REG_P (SET_DEST (set)))
         {
           int regno = REGNO (SET_DEST (set));
-          struct df_ref *first_def =
-            df_bb_regno_first_def_find (g->bb, regno);
+          df_ref first_def;
           struct df_rd_bb_info *bb_info = DF_RD_BB_INFO (g->bb);
 
-          if (bitmap_bit_p (bb_info->gen, first_def->id))
+          first_def = df_bb_regno_first_def_find (g->bb, regno);
+          gcc_assert (first_def);
+
+          if (bitmap_bit_p (bb_info->gen, DF_REF_ID (first_def)))
             return;
         }
     }
@@ -233,7 +239,7 @@ create_ddg_dep_no_link (ddg_ptr g, ddg_node_ptr from, ddg_node_ptr to,
    and anti-dependences from its uses in the current iteration to the
    first definition in the next iteration.  */
 static void
-add_cross_iteration_register_deps (ddg_ptr g, struct df_ref *last_def)
+add_cross_iteration_register_deps (ddg_ptr g, df_ref last_def)
 {
   int regno = DF_REF_REGNO (last_def);
   struct df_link *r_use;
@@ -244,14 +250,14 @@ add_cross_iteration_register_deps (ddg_ptr g, struct df_ref *last_def)
 #ifdef ENABLE_CHECKING
   struct df_rd_bb_info *bb_info = DF_RD_BB_INFO (g->bb);
 #endif
-  struct df_ref *first_def = df_bb_regno_first_def_find (g->bb, regno);
+  df_ref first_def = df_bb_regno_first_def_find (g->bb, regno);
 
   gcc_assert (last_def_node);
   gcc_assert (first_def);
 
 #ifdef ENABLE_CHECKING
-  if (last_def->id != first_def->id)
-    gcc_assert (!bitmap_bit_p (bb_info->gen, first_def->id));
+  if (DF_REF_ID (last_def) != DF_REF_ID (first_def))
+    gcc_assert (!bitmap_bit_p (bb_info->gen, DF_REF_ID (first_def)));
 #endif
 
   /* Create inter-loop true dependences and anti dependences.  */
@@ -283,11 +289,11 @@ add_cross_iteration_register_deps (ddg_ptr g, struct df_ref *last_def)
             deps when broken.  If the first_def reaches the USE then
             there is such a dep.  */
          ddg_node_ptr first_def_node = get_node_of_insn (g,
-                                                         first_def->insn);
+                                                         DF_REF_INSN (first_def));
 
          gcc_assert (first_def_node);
 
-          if (last_def->id != first_def->id
+          if (DF_REF_ID (last_def) != DF_REF_ID (first_def)
               || !flag_modulo_sched_allow_regmoves)
             create_ddg_dep_no_link (g, use_node, first_def_node, ANTI_DEP,
                                     REG_DEP, 1);
@@ -305,10 +311,10 @@ add_cross_iteration_register_deps (ddg_ptr g, struct df_ref *last_def)
     {
       ddg_node_ptr dest_node;
 
-      if (last_def->id == first_def->id)
+      if (DF_REF_ID (last_def) == DF_REF_ID (first_def))
        return;
 
-      dest_node = get_node_of_insn (g, first_def->insn);
+      dest_node = get_node_of_insn (g, DF_REF_INSN (first_def));
       gcc_assert (dest_node);
       create_ddg_dep_no_link (g, last_def_node, dest_node,
                              OUTPUT_DEP, REG_DEP, 1);
@@ -327,7 +333,7 @@ build_inter_loop_deps (ddg_ptr g)
   /* Find inter-loop register output, true and anti deps.  */
   EXECUTE_IF_SET_IN_BITMAP (rd_bb_info->gen, 0, rd_num, bi)
   {
-    struct df_ref *rd = DF_DEFS_GET (rd_num);
+    df_ref rd = DF_DEFS_GET (rd_num);
 
     add_cross_iteration_register_deps (g, rd);
   }
@@ -1100,3 +1106,5 @@ longest_simple_path (struct ddg * g, int src, int dest, sbitmap nodes)
   sbitmap_free (tmp);
   return result;
 }
+
+#endif /* INSN_SCHEDULING */