OSDN Git Service

2009-11-30 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Nov 2009 10:38:09 +0000 (10:38 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Nov 2009 10:38:09 +0000 (10:38 +0000)
* tree-into-ssa.c (insert_phi_nodes): Add PHI nodes in
variable UID order.

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

gcc/ChangeLog
gcc/tree-into-ssa.c

index defb342..e9b2e73 100644 (file)
@@ -1,5 +1,10 @@
 2009-11-30  Richard Guenther  <rguenther@suse.de>
 
+       * tree-into-ssa.c (insert_phi_nodes): Add PHI nodes in
+       variable UID order.
+
+2009-11-30  Richard Guenther  <rguenther@suse.de>
+
        * tree-dump.c (dump_option_value_in): Add TDF_NOUID.
        * tree-pass.h (TDF_NOUID): Likewise.
        * print-rtl.c: Include tree-pass.h.
index d6f659c..243fe77 100644 (file)
@@ -1151,27 +1151,43 @@ static void
 insert_phi_nodes (bitmap *dfs)
 {
   referenced_var_iterator rvi;
+  bitmap_iterator bi;
   tree var;
+  bitmap vars;
+  unsigned uid;
 
   timevar_push (TV_TREE_INSERT_PHI_NODES);
 
+  /* Do two stages to avoid code generation differences for UID
+     differences but no UID ordering differences.  */
+
+  vars = BITMAP_ALLOC (NULL);
   FOR_EACH_REFERENCED_VAR (var, rvi)
     {
       struct def_blocks_d *def_map;
-      bitmap idf;
 
       def_map = find_def_blocks_for (var);
       if (def_map == NULL)
        continue;
 
       if (get_phi_state (var) != NEED_PHI_STATE_NO)
-       {
-         idf = compute_idf (def_map->def_blocks, dfs);
-         insert_phi_nodes_for (var, idf, false);
-         BITMAP_FREE (idf);
-       }
+       bitmap_set_bit (vars, DECL_UID (var));
     }
 
+  EXECUTE_IF_SET_IN_BITMAP (vars, 0, uid, bi)
+    {
+      tree var = referenced_var (uid);
+      struct def_blocks_d *def_map;
+      bitmap idf;
+
+      def_map = find_def_blocks_for (var);
+      idf = compute_idf (def_map->def_blocks, dfs);
+      insert_phi_nodes_for (var, idf, false);
+      BITMAP_FREE (idf);
+    }
+
+  BITMAP_FREE (vars);
+
   timevar_pop (TV_TREE_INSERT_PHI_NODES);
 }