OSDN Git Service

* config/alpha/alpha.c (alpha_sa_size): Force procedure type to
[pf3gnuchains/gcc-fork.git] / gcc / ddg.c
index 1f8c140..adecb70 100644 (file)
--- a/gcc/ddg.c
+++ b/gcc/ddg.c
@@ -1,5 +1,5 @@
 /* DDG - Data Dependence Graph implementation.
-   Copyright (C) 2004, 2005, 2006, 2007
+   Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009
    Free Software Foundation, Inc.
    Contributed by Ayal Zaks and Mustafa Hagog <zaks,mustafa@il.ibm.com>
 
@@ -183,13 +183,13 @@ create_ddg_dep_from_intra_loop_link (ddg_ptr g, ddg_node_ptr src_node,
       if (set && REG_P (SET_DEST (set)))
         {
           int regno = REGNO (SET_DEST (set));
-          struct df_ref *first_def;
+          df_ref first_def;
           struct df_rd_bb_info *bb_info = DF_RD_BB_INFO (g->bb);
 
           first_def = df_bb_regno_first_def_find (g->bb, regno);
           gcc_assert (first_def);
 
-          if (bitmap_bit_p (bb_info->gen, first_def->id))
+          if (bitmap_bit_p (bb_info->gen, DF_REF_ID (first_def)))
             return;
         }
     }
@@ -239,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;
@@ -250,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.  */
@@ -293,7 +293,7 @@ add_cross_iteration_register_deps (ddg_ptr g, struct df_ref *last_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);
@@ -311,7 +311,7 @@ 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, DF_REF_INSN (first_def));
@@ -333,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);
   }
@@ -345,6 +345,10 @@ build_inter_loop_deps (ddg_ptr g)
 static void
 add_inter_loop_mem_dep (ddg_ptr g, ddg_node_ptr from, ddg_node_ptr to)
 {
+  if (!insn_alias_sets_conflict_p (from->insn, to->insn))
+    /* Do not create edge if memory references have disjoint alias sets.  */
+    return;
+    
   if (mem_write_insn_p (from->insn))
     {
       if (mem_read_insn_p (to->insn))