From: Maxim Kuvyrkov Date: Tue, 27 Jul 2010 19:34:55 +0000 (+0000) Subject: re PR rtl-optimization/40956 (Constants are never candidates for hoisting) X-Git-Tag: releases/gcc-4.6.0~5386 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ce4c0015a16e1126844f5feaa57bcdf0aebdcb30;p=thirdparty%2Fgcc.git re PR rtl-optimization/40956 (Constants are never candidates for hoisting) PR rtl-optimization/40956 PR target/42495 PR middle-end/42574 * gcse.c (compute_code_hoist_vbeinout): Consider more expressions for hoisting. (hoist_code): Count occurences in current block too. From-SVN: r162590 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0861109ab2d2..d39fbfca76f1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2010-07-27 Maxim Kuvyrkov + + PR rtl-optimization/40956 + PR target/42495 + PR middle-end/42574 + * gcse.c (compute_code_hoist_vbeinout): Consider more expressions + for hoisting. + (hoist_code): Count occurences in current block too. + 2010-07-27 Maxim Kuvyrkov * gcse.c (struct expr:max_distance): New field. diff --git a/gcc/gcse.c b/gcc/gcse.c index 9b44083fccd5..4b2547c33670 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -4247,8 +4247,15 @@ compute_code_hoist_vbeinout (void) FOR_EACH_BB_REVERSE (bb) { if (bb->next_bb != EXIT_BLOCK_PTR) - sbitmap_intersection_of_succs (hoist_vbeout[bb->index], - hoist_vbein, bb->index); + { + sbitmap_intersection_of_succs (hoist_vbeout[bb->index], + hoist_vbein, bb->index); + + /* Include expressions in VBEout that are calculated + in BB and available at its end. */ + sbitmap_a_or_b (hoist_vbeout[bb->index], + hoist_vbeout[bb->index], comp[bb->index]); + } changed |= sbitmap_a_or_b_and_c_cg (hoist_vbein[bb->index], antloc[bb->index], @@ -4430,6 +4437,11 @@ hoist_code (void) if (TEST_BIT (hoist_vbeout[bb->index], i)) { + /* If an expression is computed in BB and is available at end of + BB, hoist all occurences dominated by BB to BB. */ + if (TEST_BIT (comp[bb->index], i)) + hoistable++; + /* We've found a potentially hoistable expression, now we look at every block BB dominates to see if it computes the expression. */