]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/38474 (compile time explosion in dataflow_set_preserve_mem_locs...
authorRichard Biener <rguenther@suse.de>
Mon, 9 Dec 2013 15:13:07 +0000 (15:13 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 9 Dec 2013 15:13:07 +0000 (15:13 +0000)
2013-12-09  Richard Biener  <rguenther@suse.de>

PR middle-end/38474
* tree-ssa-structalias.c (set_union_with_increment): Remove
unreachable code.
(do_complex_constraint): Call set_union_with_increment with
the solution delta, not the full solution.
(make_transitive_closure_constraints): Merge the two
constraints.

From-SVN: r205808

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

index ba39e4b0d3634baa87e526f367b532f893b9d15d..715b3a279e9c5578fa5a3d238bc7fe19928a886d 100644 (file)
@@ -1,3 +1,13 @@
+2013-12-09  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/38474
+       * tree-ssa-structalias.c (set_union_with_increment): Remove
+       unreachable code.
+       (do_complex_constraint): Call set_union_with_increment with
+       the solution delta, not the full solution.
+       (make_transitive_closure_constraints): Merge the two
+       constraints.
+
 2013-12-09  Richard Earnshaw  <rearnsha@arm.com>
 
        * arm.c (mem_ok_for_ldrd_strd): Rename first argument as MEM.  Do
index f2199092026e7dc6337578be772c873e4b6fc1a3..26ee85a385e6fce12c7bf434d1e7a08310ce3aef 100644 (file)
@@ -962,10 +962,6 @@ set_union_with_increment  (bitmap to, bitmap from, HOST_WIDE_INT inc)
   if (bitmap_bit_p (from, anything_id))
     return bitmap_set_bit (to, anything_id);
 
-  /* For zero offset simply union the solution into the destination.  */
-  if (inc == 0)
-    return bitmap_ior_into (to, from);
-
   /* If the offset is unknown we have to expand the solution to
      all subfields.  */
   if (inc == UNKNOWN_OFFSET)
@@ -1788,14 +1784,13 @@ do_complex_constraint (constraint_graph_t graph, constraint_t c, bitmap delta)
   else
     {
       bitmap tmp;
-      bitmap solution;
       bool flag = false;
 
-      gcc_checking_assert (c->rhs.type == SCALAR && c->lhs.type == SCALAR);
-      solution = get_varinfo (c->rhs.var)->solution;
+      gcc_checking_assert (c->rhs.type == SCALAR && c->lhs.type == SCALAR
+                          && c->rhs.offset != 0 && c->lhs.offset == 0);
       tmp = get_varinfo (c->lhs.var)->solution;
 
-      flag = set_union_with_increment (tmp, solution, c->rhs.offset);
+      flag = set_union_with_increment (tmp, delta, c->rhs.offset);
 
       if (flag)
        bitmap_set_bit (changed, c->lhs.var);
@@ -3712,15 +3707,6 @@ make_transitive_closure_constraints (varinfo_t vi)
   lhs.offset = 0;
   rhs.type = DEREF;
   rhs.var = vi->id;
-  rhs.offset = 0;
-  process_constraint (new_constraint (lhs, rhs));
-
-  /* VAR = VAR + UNKNOWN;  */
-  lhs.type = SCALAR;
-  lhs.var = vi->id;
-  lhs.offset = 0;
-  rhs.type = SCALAR;
-  rhs.var = vi->id;
   rhs.offset = UNKNOWN_OFFSET;
   process_constraint (new_constraint (lhs, rhs));
 }