]> gcc.gnu.org Git - gcc.git/commitdiff
tree-ssa-structalias.c (set_uids_in_ptset): Add is_deref'd parameter, use it.
authorDaniel Berlin <dberlin@dberlin.org>
Sun, 10 Jun 2007 20:21:48 +0000 (20:21 +0000)
committerDaniel Berlin <dberlin@gcc.gnu.org>
Sun, 10 Jun 2007 20:21:48 +0000 (20:21 +0000)
2007-06-09  Daniel Berlin  <dberlin@dberlin.org>

* tree-ssa-structalias.c (set_uids_in_ptset): Add is_deref'd
parameter, use it.
(find_what_p_points_to): Pass new parameter to set_uids_in_ptset.

From-SVN: r125603

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

index 1cba951f45e4061f7204d6c6dcc347d6decd7a2a..e4b3495100628c24f7e372525e5e16f675b5eb95 100644 (file)
@@ -1,3 +1,9 @@
+2007-06-09  Daniel Berlin  <dberlin@dberlin.org>
+
+       * tree-ssa-structalias.c (set_uids_in_ptset): Add is_deref'd
+       parameter, use it.
+       (find_what_p_points_to): Pass new parameter to set_uids_in_ptset.
+
 2007-06-09  Daniel Berlin  <dberlin@dberlin.org>
 
        * tree-data-ref.c (dr_may_alias_p): Check that decl_a != decl_b,
index 48f85b77b5a15b3d4d6a06853a4053bc59eced9e..6b470b3143f294ccf25a0ee1d7f6da49b2b0ef85 100644 (file)
@@ -4290,10 +4290,12 @@ shared_bitmap_add (bitmap pt_vars)
 /* Set bits in INTO corresponding to the variable uids in solution set
    FROM, which came from variable PTR.
    For variables that are actually dereferenced, we also use type
-   based alias analysis to prune the points-to sets.  */
+   based alias analysis to prune the points-to sets.
+   IS_DEREFED is true if PTR was directly dereferenced, which we use to
+   help determine whether we are we are allowed to prune using TBAA.  */
 
 static void
-set_uids_in_ptset (tree ptr, bitmap into, bitmap from)
+set_uids_in_ptset (tree ptr, bitmap into, bitmap from, bool is_derefed)
 {
   unsigned int i;
   bitmap_iterator bi;
@@ -4329,7 +4331,7 @@ set_uids_in_ptset (tree ptr, bitmap into, bitmap from)
              if (sft)
                {
                  var_alias_set = get_alias_set (sft);
-                 if (!vi->directly_dereferenced
+                 if ((!is_derefed && !vi->directly_dereferenced)
                      || alias_sets_conflict_p (ptr_alias_set, var_alias_set))
                    bitmap_set_bit (into, DECL_UID (sft));
                }
@@ -4343,7 +4345,7 @@ set_uids_in_ptset (tree ptr, bitmap into, bitmap from)
              else
                {
                  var_alias_set = get_alias_set (vi->decl);
-                 if (!vi->directly_dereferenced
+                 if ((!is_derefed && !vi->directly_dereferenced)
                      || alias_sets_conflict_p (ptr_alias_set, var_alias_set))
                    bitmap_set_bit (into, DECL_UID (vi->decl));
                }
@@ -4539,14 +4541,17 @@ find_what_p_points_to (tree p)
          stats.points_to_sets_created++;
          
          /* Instead of using pt_anything, we instead merge in the SMT
-            aliases for the underlying SMT.  */
+            aliases for the underlying SMT.  In addition, if they
+            could have pointed to anything, they could point to
+            global memory.  */
          if (was_pt_anything)
            {
              merge_smts_into (p, finished_solution);
              pi->pt_global_mem = 1;
            }
          
-         set_uids_in_ptset (vi->decl, finished_solution, vi->solution);
+         set_uids_in_ptset (vi->decl, finished_solution, vi->solution,
+                            vi->directly_dereferenced);
          result = shared_bitmap_lookup (finished_solution);
 
          if (!result)
This page took 0.113965 seconds and 5 git commands to generate.