]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/59802 (excessive compile time in RTL optimizers (loop unswitch...
authorRichard Biener <rguenther@suse.de>
Wed, 15 Jan 2014 08:47:30 +0000 (08:47 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 15 Jan 2014 08:47:30 +0000 (08:47 +0000)
2014-01-15  Richard Biener  <rguenther@suse.de>

PR rtl-optimization/59802
* lcm.c (compute_available): Use inverted postorder to seed
the initial worklist.

From-SVN: r206624

gcc/ChangeLog
gcc/lcm.c

index 42c1344251cbf5f240b5dea581f9d50fac6b4e1e..aa7109f7c894b1dafb73045d3a7e265a09056ce9 100644 (file)
@@ -1,3 +1,9 @@
+2014-01-15  Richard Biener  <rguenther@suse.de>
+
+       PR rtl-optimization/59802
+       * lcm.c (compute_available): Use inverted postorder to seed
+       the initial worklist.
+
 2014-01-15  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
        * config/s390/s390.c (s390_preferred_reload_class): Don't return
index aab64a6cda78d4c2eb72ce36f29fae8b4ec739c5..70d96c14d7c0690e2c325f9c0ba980a73cce5d7f 100644 (file)
--- a/gcc/lcm.c
+++ b/gcc/lcm.c
@@ -496,12 +496,20 @@ compute_available (sbitmap *avloc, sbitmap *kill, sbitmap *avout,
   bitmap_vector_ones (avout, last_basic_block_for_fn (cfun));
 
   /* Put every block on the worklist; this is necessary because of the
-     optimistic initialization of AVOUT above.  */
-  FOR_EACH_BB_FN (bb, cfun)
+     optimistic initialization of AVOUT above.  Use inverted postorder
+     to make the dataflow problem require less iterations.  */
+  int *postorder = XNEWVEC (int, n_basic_blocks_for_fn (cfun));
+  int postorder_num = inverted_post_order_compute (postorder);
+  for (int i = 0; i < postorder_num; ++i)
     {
+      bb = BASIC_BLOCK_FOR_FN (cfun, postorder[i]);
+      if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun)
+         || bb == ENTRY_BLOCK_PTR_FOR_FN (cfun))
+       continue;
       *qin++ = bb;
       bb->aux = bb;
     }
+  free (postorder);
 
   qin = worklist;
   qend = &worklist[n_basic_blocks_for_fn (cfun) - NUM_FIXED_BLOCKS];