OSDN Git Service

PR 30562
authordnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Feb 2007 16:55:43 +0000 (16:55 +0000)
committerdnovillo <dnovillo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Feb 2007 16:55:43 +0000 (16:55 +0000)
* tree-flow.h (struct var_ann_d): Remove field 'is_used'.
Update all users.
* tree-ssa-alias.c (compute_is_aliased): Remove.  Update all
users.
(init_alias_info):
* tree-ssa-live.c (remove_unused_locals): Do not remove
TREE_ADDRESSABLE variables.
* tree-ssa-structalias.c (compute_points_to_sets): Tidy.
* tree-ssa-operands.c (add_virtual_operand): Remove argument
FOR_CLOBBER.  Update all users.
If VAR has an associated alias set, add a virtual operand for
it if no alias is found to conflict with the memory reference.

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

gcc/ChangeLog
gcc/tree-dfa.c
gcc/tree-flow.h
gcc/tree-ssa-alias.c
gcc/tree-ssa-live.c
gcc/tree-ssa-operands.c
gcc/tree-ssa-structalias.c
gcc/tree-ssa.c

index 5c7d0c8..f4e45df 100644 (file)
@@ -1,3 +1,19 @@
+2007-02-08  Diego Novillo  <dnovillo@redhat.com>
+
+       PR 30562
+       * tree-flow.h (struct var_ann_d): Remove field 'is_used'.
+       Update all users.
+       * tree-ssa-alias.c (compute_is_aliased): Remove.  Update all
+       users.
+       (init_alias_info):
+       * tree-ssa-live.c (remove_unused_locals): Do not remove
+       TREE_ADDRESSABLE variables.
+       * tree-ssa-structalias.c (compute_points_to_sets): Tidy.
+       * tree-ssa-operands.c (add_virtual_operand): Remove argument
+       FOR_CLOBBER.  Update all users.
+       If VAR has an associated alias set, add a virtual operand for
+       it if no alias is found to conflict with the memory reference.
+
 2007-02-07  Jan Hubicka  <jh@suse.cz>
            Robert Kidd <rkidd@crhc.uiuc.edu>
 
index f49c1ad..a1200eb 100644 (file)
@@ -337,9 +337,6 @@ dump_variable (FILE *file, tree var)
       print_generic_expr (file, ann->symbol_mem_tag, dump_flags);
     }
 
-  if (ann && ann->is_aliased)
-    fprintf (file, ", is aliased");
-
   if (TREE_ADDRESSABLE (var))
     fprintf (file, ", is addressable");
   
index 19efacd..2d661f5 100644 (file)
@@ -228,9 +228,6 @@ struct var_ann_d GTY(())
   /* Used when building base variable structures in a var_map.  */
   unsigned base_var_processed : 1;
 
-  /* Nonzero if this variable is in the alias set of another variable.  */
-  unsigned is_aliased : 1;
-
   /* Nonzero if this variable was used after SSA optimizations were
      applied.  We set this when translating out of SSA form.  */
   unsigned used : 1;
index e3fe52a..5ed2d13 100644 (file)
@@ -776,43 +776,6 @@ done:
   timevar_pop (TV_MEMORY_PARTITIONING);
 }
 
-/* This function computes the value of the is_aliased bit for
-   variables.  is_aliased is true for any variable that is in an
-   alias bitmap.  */
-
-static void
-compute_is_aliased (void)
-{
-  referenced_var_iterator rvi;
-  tree tag;
-  bitmap aliased_vars = BITMAP_ALLOC (NULL);
-  bitmap_iterator bi;
-  unsigned int i;
-  
-  /* Add is_aliased for all vars pointed to by the symbol tags.  */
-  FOR_EACH_REFERENCED_VAR (tag, rvi)
-    {
-      bitmap aliases;
-      if (TREE_CODE (tag) != SYMBOL_MEMORY_TAG
-         && TREE_CODE (tag) != NAME_MEMORY_TAG)
-       continue;
-      aliases = MTAG_ALIASES (tag);
-      if (!aliases)
-       continue;
-      
-      bitmap_ior_into (aliased_vars, aliases);   
-    }
-  
-  EXECUTE_IF_SET_IN_BITMAP (aliased_vars, 0, i, bi)
-    {
-      tree var = referenced_var (i);
-      
-      var_ann (var)->is_aliased = true;
-    }
-  
-  BITMAP_FREE (aliased_vars);
-}
-
 
 /* Compute may-alias information for every variable referenced in function
    FNDECL.
@@ -980,9 +943,6 @@ compute_may_aliases (void)
       dump_points_to_info (dump_file);
       dump_alias_info (dump_file);
     }
-
-  /* Set up is_aliased flags. */
-  compute_is_aliased ();
   
   /* Deallocate memory used by aliasing data structures.  */
   delete_alias_info (ai);
@@ -1170,10 +1130,6 @@ init_alias_info (void)
       /* Clear flow-insensitive alias information from each symbol.  */
       FOR_EACH_REFERENCED_VAR (var, rvi)
        {
-         var_ann_t ann = var_ann (var);
-         
-         ann->is_aliased = 0;
-
          if (MTAG_P (var))
            MTAG_ALIASES (var) = NULL;
 
index 0113b1b..7e98e2c 100644 (file)
@@ -502,18 +502,20 @@ remove_unused_locals (void)
       cell = &TREE_CHAIN (*cell);
     }
 
-  /* Remove unused variables from REFERENCED_VARs.  As an special exception
-     keep the variables that are believed to be aliased.  Those can't be
-     easily removed from the alias sets and and operand caches.
-     They will be removed shortly after next may_alias pass is performed.  */
+  /* Remove unused variables from REFERENCED_VARs.  As a special
+     exception keep the variables that are believed to be aliased.
+     Those can't be easily removed from the alias sets and operand
+     caches.  They will be removed shortly after the next may_alias
+     pass is performed.  */
   FOR_EACH_REFERENCED_VAR (t, rvi)
     if (!is_global_var (t)
        && !MTAG_P (t)
        && TREE_CODE (t) != PARM_DECL
        && TREE_CODE (t) != RESULT_DECL
        && !(ann = var_ann (t))->used
-       && !ann->is_aliased && !is_call_clobbered (t) && !ann->symbol_mem_tag)
-        remove_referenced_var (t);
+       && !ann->symbol_mem_tag
+       && !TREE_ADDRESSABLE (t))
+      remove_referenced_var (t);
 }
 
 
index aa56c19..c702ed4 100644 (file)
@@ -1433,13 +1433,12 @@ access_can_touch_variable (tree ref, tree alias, HOST_WIDE_INT offset,
    get_expr_operands.  FULL_REF is a tree that contains the entire
    pointer dereference expression, if available, or NULL otherwise.
    OFFSET and SIZE come from the memory access expression that
-   generated this virtual operand.  FOR_CLOBBER is true is this is
-   adding a virtual operand for a call clobber.  */
+   generated this virtual operand.  */
 
 static void 
 add_virtual_operand (tree var, stmt_ann_t s_ann, int flags,
                     tree full_ref, HOST_WIDE_INT offset,
-                    HOST_WIDE_INT size, bool for_clobber)
+                    HOST_WIDE_INT size)
 {
   bitmap aliases = NULL;
   tree sym;
@@ -1514,24 +1513,13 @@ add_virtual_operand (tree var, stmt_ann_t s_ann, int flags,
              append_vdef (al);
            }
 
-         /* If the variable is also an alias tag, add a virtual
-            operand for it, otherwise we will miss representing
-            references to the members of the variable's alias set.          
-            This fixes the bug in gcc.c-torture/execute/20020503-1.c.
-            
-            It is also necessary to add bare defs on clobbers for
-            SMT's, so that bare SMT uses caused by pruning all the
-            aliases will link up properly with calls.   In order to
-            keep the number of these bare defs we add down to the
-            minimum necessary, we keep track of which SMT's were used
-            alone in statement vdefs or VUSEs.  */
-         if (v_ann->is_aliased
-             || none_added
-             || (TREE_CODE (var) == SYMBOL_MEMORY_TAG
-                 && for_clobber))
-           {
-             append_vdef (var);
-           }
+         /* Even if no aliases have been added, we still need to
+            establish def-use and use-def chains, lest
+            transformations think that this is not a memory
+            reference.  For an example of this scenario, see
+            testsuite/g++.dg/opt/cleanup1.C.  */
+         if (none_added)
+           append_vdef (var);
        }
       else
        {
@@ -1545,9 +1533,12 @@ add_virtual_operand (tree var, stmt_ann_t s_ann, int flags,
              append_vuse (al);
            }
          
-         /* Similarly, append a virtual uses for VAR itself, when
-            it is an alias tag.  */
-         if (v_ann->is_aliased || none_added)
+         /* Even if no aliases have been added, we still need to
+            establish def-use and use-def chains, lest
+            transformations think that this is not a memory
+            reference.  For an example of this scenario, see
+            testsuite/g++.dg/opt/cleanup1.C.  */
+         if (none_added)
            append_vuse (var);
        }
     }
@@ -1584,7 +1575,7 @@ add_stmt_operand (tree *var_p, stmt_ann_t s_ann, int flags)
        append_use (var_p);
     }
   else
-    add_virtual_operand (var, s_ann, flags, NULL_TREE, 0, -1, false);
+    add_virtual_operand (var, s_ann, flags, NULL_TREE, 0, -1);
 }
 
 
@@ -1631,7 +1622,7 @@ get_indirect_ref_operands (tree stmt, tree expr, int flags,
        {
          /* PTR has its own memory tag.  Use it.  */
          add_virtual_operand (pi->name_mem_tag, s_ann, flags,
-                              full_ref, offset, size, false);
+                              full_ref, offset, size);
        }
       else
        {
@@ -1660,7 +1651,7 @@ get_indirect_ref_operands (tree stmt, tree expr, int flags,
 
          if (v_ann->symbol_mem_tag)
            add_virtual_operand (v_ann->symbol_mem_tag, s_ann, flags,
-                                full_ref, offset, size, false);
+                                full_ref, offset, size);
           /* Aliasing information is missing; mark statement as volatile so we
              won't optimize it out too actively.  */
           else if (s_ann && !gimple_aliases_computed_p (cfun)
@@ -1818,7 +1809,7 @@ add_call_clobber_ops (tree stmt, tree callee)
            clobber_stats.static_read_clobbers_avoided++;
        }
       else
-       add_virtual_operand (var, s_ann, opf_def, NULL, 0, -1, true);
+       add_virtual_operand (var, s_ann, opf_def, NULL, 0, -1);
     }
 }
 
index 238e7f4..e884a65 100644 (file)
@@ -4663,6 +4663,7 @@ compute_points_to_sets (struct alias_info *ai)
          if (is_gimple_reg (PHI_RESULT (phi)))
            {
              find_func_aliases (phi);
+
              /* Update various related attributes like escaped
                 addresses, pointer dereferences for loads and stores.
                 This is used when creating name tags and alias
index 6c35fee..060f57d 100644 (file)
@@ -375,7 +375,6 @@ static void
 verify_flow_insensitive_alias_info (void)
 {
   tree var;
-  bitmap visited = BITMAP_ALLOC (NULL);
   referenced_var_iterator rvi;
 
   FOR_EACH_REFERENCED_VAR (var, rvi)
@@ -393,7 +392,6 @@ verify_flow_insensitive_alias_info (void)
       EXECUTE_IF_SET_IN_BITMAP (aliases, 0, j, bi)
        {
          alias = referenced_var (j);
-         bitmap_set_bit (visited, j);
 
          if (TREE_CODE (alias) != MEMORY_PARTITION_TAG
              && !may_be_aliased (alias))
@@ -405,23 +403,6 @@ verify_flow_insensitive_alias_info (void)
        }
     }
 
-  FOR_EACH_REFERENCED_VAR (var, rvi)
-    {
-      var_ann_t ann;
-      ann = var_ann (var);
-
-      if (!MTAG_P (var)
-         && ann->is_aliased
-         && memory_partition (var) == NULL_TREE
-         && !bitmap_bit_p (visited, DECL_UID (var)))
-       {
-         error ("addressable variable that is aliased but is not in any "
-                "alias set");
-         goto err;
-       }
-    }
-
-  BITMAP_FREE (visited);
   return;
 
 err: