This removes the code that makes us walk DECL_INITIAL (recursively)
on add_referenced_var - one source of compile-time hogs in the past
and not strictly necessary.  Fallout is fixed by guarding used flag
setting in unused-var-removal as all reads of that flag are already.

This is a first patch in a series to make referenced vars tracking
cheaper and more robust.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Richard.

2012-05-21  Richard Guenther  <rguent...@suse.de>

        * tree-dfa.c (add_referenced_var): Do not walk DECL_INITIAL for
        more referenced vars.
        * tree-ssa-live.c (mark_all_vars_used_1): Only set the used
        flag on variables that have a var-annotation.

Index: gcc/tree-dfa.c
===================================================================
--- gcc/tree-dfa.c      (revision 187708)
+++ gcc/tree-dfa.c      (working copy)
@@ -577,24 +577,16 @@ set_default_def (tree var, tree def)
 bool
 add_referenced_var (tree var)
 {
-  gcc_assert (DECL_P (var));
+  gcc_checking_assert (TREE_CODE (var) == VAR_DECL
+                      || TREE_CODE (var) == PARM_DECL
+                      || TREE_CODE (var) == RESULT_DECL);
+
   if (!*DECL_VAR_ANN_PTR (var))
     create_var_ann (var);
 
   /* Insert VAR into the referenced_vars hash table if it isn't present.  */
   if (referenced_var_check_and_insert (var))
-    {
-      /* Scan DECL_INITIAL for pointer variables as they may contain
-        address arithmetic referencing the address of other
-        variables.  As we are only interested in directly referenced
-        globals or referenced locals restrict this to initializers
-        than can refer to local variables.  */
-      if (DECL_INITIAL (var)
-          && DECL_CONTEXT (var) == current_function_decl)
-       walk_tree (&DECL_INITIAL (var), find_vars_r, NULL, 0);
-
-      return true;
-    }
+    return true;
 
   return false;
 }
Index: gcc/tree-ssa-live.c
===================================================================
--- gcc/tree-ssa-live.c (revision 187708)
+++ gcc/tree-ssa-live.c (working copy)
@@ -377,7 +377,8 @@ mark_all_vars_used_1 (tree *tp, int *wal
       if (data != NULL && bitmap_clear_bit ((bitmap) data, DECL_UID (t))
          && DECL_CONTEXT (t) == current_function_decl)
        mark_all_vars_used (&DECL_INITIAL (t), data);
-      set_is_used (t);
+      if (var_ann (t) != NULL)
+       set_is_used (t);
     }
   /* remove_unused_scope_block_p requires information about labels
      which are not DECL_IGNORED_P to tell if they might be used in the IL.  */

Reply via email to