]> gcc.gnu.org Git - gcc.git/commitdiff
tree-ssa-structalias.c (do_sd_constraint): Add edges only from vars that can have...
authorRichard Guenther <rguenther@suse.de>
Tue, 20 Apr 2010 13:57:44 +0000 (13:57 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 20 Apr 2010 13:57:44 +0000 (13:57 +0000)
2010-04-20  Richard Guenther  <rguenther@suse.de>

* tree-ssa-structalias.c (do_sd_constraint): Add edges only
from vars that can have pointers.
(process_constraint): Dump useless constraints.

From-SVN: r158558

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

index c52ca2be3b8ef79ae6723e9c7f50ff0e83417814..a5b70375bba4db2b667e4ef8c81ced19569bd9fc 100644 (file)
@@ -1,3 +1,9 @@
+2010-04-20  Richard Guenther  <rguenther@suse.de>
+
+       * tree-ssa-structalias.c (do_sd_constraint): Add edges only
+       from vars that can have pointers.
+       (process_constraint): Dump useless constraints.
+
 2010-04-20  Richard Guenther  <rguenther@suse.de>
 
        * tree-ssa-structalias.c (do_structure_copy): Properly handle
index 781eff30872cb3dfdda97e1988a1c820544f841f..492907e580521a1c89542ed44632ffd629975847 100644 (file)
@@ -1706,7 +1706,8 @@ do_sd_constraint (constraint_graph_t graph, constraint_t c,
             the set.  Use ESCAPED as representative instead.  */
          else if (v->id == escaped_id)
            flag |= bitmap_set_bit (sol, escaped_id);
-         else if (add_graph_edge (graph, lhs, t))
+         else if (v->may_have_pointers
+                  && add_graph_edge (graph, lhs, t))
            flag |= bitmap_ior_into (sol, get_varinfo (t)->solution);
 
          /* If the variable is not exactly at the requested offset
@@ -2885,6 +2886,16 @@ process_constraint (constraint_t t)
   /* ADDRESSOF on the lhs is invalid.  */
   gcc_assert (lhs.type != ADDRESSOF);
 
+  /* We shouldn't add constraints from things that cannot have pointers.
+     It's not completely trivial to avoid in the callers, so do it here.  */
+  if (rhs.type != ADDRESSOF
+      && !get_varinfo (rhs.var)->may_have_pointers)
+    return;
+
+  /* Likewise adding to the solution of a non-pointer var isn't useful.  */
+  if (!get_varinfo (lhs.var)->may_have_pointers)
+    return;
+
   /* This can happen in our IR with things like n->a = *p */
   if (rhs.type == DEREF && lhs.type == DEREF && rhs.var != anything_id)
     {
This page took 0.085027 seconds and 5 git commands to generate.