From: Richard Biener Date: Wed, 15 Jan 2014 08:47:30 +0000 (+0000) Subject: re PR rtl-optimization/59802 (excessive compile time in RTL optimizers (loop unswitch... X-Git-Tag: releases/gcc-4.9.0~1664 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=95cb86978721e08640cdad52fa5c54409ad6488c;p=thirdparty%2Fgcc.git re PR rtl-optimization/59802 (excessive compile time in RTL optimizers (loop unswitching, CPROP)) 2014-01-15 Richard Biener PR rtl-optimization/59802 * lcm.c (compute_available): Use inverted postorder to seed the initial worklist. From-SVN: r206624 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 42c1344251cb..aa7109f7c894 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-01-15 Richard Biener + + PR rtl-optimization/59802 + * lcm.c (compute_available): Use inverted postorder to seed + the initial worklist. + 2014-01-15 Andreas Krebbel * config/s390/s390.c (s390_preferred_reload_class): Don't return diff --git a/gcc/lcm.c b/gcc/lcm.c index aab64a6cda78..70d96c14d7c0 100644 --- 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];