tree-ssa.c (uid_ssaname_map_eq): New function.
authorRichard Guenther <rguenther@suse.de>
Thu, 18 Oct 2007 14:59:48 +0000 (14:59 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 18 Oct 2007 14:59:48 +0000 (14:59 +0000)
2007-10-18  Richard Guenther  <rguenther@suse.de>

* tree-ssa.c (uid_ssaname_map_eq): New function.
(uid_ssaname_map_has): Likewise.
(init_tree_ssa): Allocate default_defs as uid_ssaname map.
* tree-flow.h (struct gimple_df): Make default_defs a
uid_ssaname map.
* tree-dfa.c (gimple_default_def): Deal with it.
(set_default_def): Likewise.

From-SVN: r129441

gcc/ChangeLog
gcc/tree-dfa.c
gcc/tree-flow.h
gcc/tree-ssa.c

index 976022755d87f4d89e536eea135827c89b1bc47a..e93e4cb9150c1ae34b06c32facf1b2a8bb1feaad 100644 (file)
@@ -1,3 +1,13 @@
+2007-10-18  Richard Guenther  <rguenther@suse.de>
+
+       * tree-ssa.c (uid_ssaname_map_eq): New function.
+       (uid_ssaname_map_has): Likewise.
+       (init_tree_ssa): Allocate default_defs as uid_ssaname map.
+       * tree-flow.h (struct gimple_df): Make default_defs a
+       uid_ssaname map.
+       * tree-dfa.c (gimple_default_def): Deal with it.
+       (set_default_def): Likewise.
+
 2007-10-18  Richard Guenther  <rguenther@suse.de>
 
        * tree-flow.h (struct gimple_df): Make referenced_vars
index 26e87c173b4cd834367d7da09b266dd4848889ab..f7f4243948cc18dc85f4e384c3a91be1fa64df90 100644 (file)
@@ -675,15 +675,12 @@ referenced_var_check_and_insert (tree to)
 tree 
 gimple_default_def (struct function *fn, tree var)
 {
-  struct int_tree_map *h, in;
+  struct tree_decl_minimal ind;
+  struct tree_ssa_name in;
   gcc_assert (SSA_VAR_P (var));
-  in.uid = DECL_UID (var);
-  h = (struct int_tree_map *) htab_find_with_hash (DEFAULT_DEFS (fn),
-                                                  &in,
-                                                   DECL_UID (var));
-  if (h)
-    return h->to;
-  return NULL_TREE;
+  in.var = (tree)&ind;
+  ind.uid = DECL_UID (var);
+  return (tree) htab_find_with_hash (DEFAULT_DEFS (fn), &in, DECL_UID (var));
 }
 
 /* Insert the pair VAR's UID, DEF into the default_defs hashtable.  */
@@ -691,37 +688,29 @@ gimple_default_def (struct function *fn, tree var)
 void
 set_default_def (tree var, tree def)
 { 
-  struct int_tree_map in;
-  struct int_tree_map *h;
+  struct tree_decl_minimal ind;
+  struct tree_ssa_name in;
   void **loc;
 
   gcc_assert (SSA_VAR_P (var));
-  in.uid = DECL_UID (var);
-  if (!def && gimple_default_def (cfun, var))
+  in.var = (tree)&ind;
+  ind.uid = DECL_UID (var);
+  if (!def)
     {
       loc = htab_find_slot_with_hash (DEFAULT_DEFS (cfun), &in,
             DECL_UID (var), INSERT);
+      gcc_assert (*loc);
       htab_remove_elt (DEFAULT_DEFS (cfun), *loc);
       return;
     }
-  gcc_assert (!def || TREE_CODE (def) == SSA_NAME);
+  gcc_assert (TREE_CODE (def) == SSA_NAME && SSA_NAME_VAR (def) == var);
   loc = htab_find_slot_with_hash (DEFAULT_DEFS (cfun), &in,
                                   DECL_UID (var), INSERT);
 
   /* Default definition might be changed by tail call optimization.  */
-  if (!*loc)
-    {
-      h = GGC_NEW (struct int_tree_map);
-      h->uid = DECL_UID (var);
-      h->to = def;
-      *(struct int_tree_map **)  loc = h;
-    }
-   else
-    {
-      h = (struct int_tree_map *) *loc;
-      SSA_NAME_IS_DEFAULT_DEF (h->to) = false;
-      h->to = def;
-    }
+  if (*loc)
+    SSA_NAME_IS_DEFAULT_DEF (*(tree *) loc) = false;
+  *(tree *) loc = def;
 
    /* Mark DEF as the default definition for VAR.  */
    SSA_NAME_IS_DEFAULT_DEF (def) = true;
index b004ad9b3b6253b6c316b659c7c77d1e218b79e5..e07e2b2c00625c37f04715252db2e731711794d1 100644 (file)
@@ -159,7 +159,7 @@ struct gimple_df GTY(())
      means that the first reference to this variable in the function is a
      USE or a VUSE.  In those cases, the SSA renamer creates an SSA name
      for this variable with an empty defining statement.  */
-  htab_t GTY((param_is (struct int_tree_map))) default_defs;
+  htab_t GTY((param_is (union tree_node))) default_defs;
 
   /* 'true' after aliases have been computed (see compute_may_aliases).  */
   unsigned int aliases_computed_p : 1;
index e325953884cb09e089bc3db18f3b61cfc92a8927..c6386beb8162a00be3324063a33548e54711b3a7 100644 (file)
@@ -810,6 +810,24 @@ var_ann_hash (const void *item)
   return ((const struct static_var_ann_d *)item)->uid;
 }
 
+/* Return true if the DECL_UID in both trees are equal.  */
+
+static int
+uid_ssaname_map_eq (const void *va, const void *vb)
+{
+  const_tree a = (const_tree) va;
+  const_tree b = (const_tree) vb;
+  return (a->ssa_name.var->decl_minimal.uid == b->ssa_name.var->decl_minimal.uid);
+}
+
+/* Hash a tree in a uid_decl_map.  */
+
+static unsigned int
+uid_ssaname_map_hash (const void *item)
+{
+  return ((const_tree)item)->ssa_name.var->decl_minimal.uid;
+}
+
 
 /* Initialize global DFA and SSA structures.  */
 
@@ -819,8 +837,8 @@ init_tree_ssa (void)
   cfun->gimple_df = GGC_CNEW (struct gimple_df);
   cfun->gimple_df->referenced_vars = htab_create_ggc (20, uid_decl_map_hash, 
                                                      uid_decl_map_eq, NULL);
-  cfun->gimple_df->default_defs = htab_create_ggc (20, int_tree_map_hash, 
-                                                  int_tree_map_eq, NULL);
+  cfun->gimple_df->default_defs = htab_create_ggc (20, uid_ssaname_map_hash, 
+                                                  uid_ssaname_map_eq, NULL);
   cfun->gimple_df->var_anns = htab_create_ggc (20, var_ann_hash, 
                                               var_ann_eq, NULL);
   cfun->gimple_df->call_clobbered_vars = BITMAP_GGC_ALLOC ();