From: Richard Biener Date: Tue, 25 Jun 2019 10:59:48 +0000 (+0000) Subject: re PR tree-optimization/90930 (Excessive memory consumption) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=332d6c4189218b06a22260beae02fa40d1ec3286;p=gcc.git re PR tree-optimization/90930 (Excessive memory consumption) 2019-06-25 Richard Biener PR tree-optimization/90930 * tree-ssa-reassoc.c (reassociate_bb): Only rewrite expression into parallel form in the last pass instance. * gcc.dg/tree-ssa/reassoc-24.c: Adjust. * gcc.dg/tree-ssa/reassoc-25.c: Likewise. From-SVN: r272644 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d9f3c219121..9814b5b85f8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-06-25 Richard Biener + + PR tree-optimization/90930 + * tree-ssa-reassoc.c (reassociate_bb): Only rewrite expression + into parallel form in the last pass instance. + 2019-06-25 Claudiu Zissulescu * config/arc/arc.c (arc_symbol_binds_local_p): New function. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b29a9c2f2cd..b147b6766ee 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-06-25 Richard Biener + + PR tree-optimization/90930 + * gcc.dg/tree-ssa/reassoc-24.c: Adjust. + * gcc.dg/tree-ssa/reassoc-25.c: Likewise. + 2019-06-25 Claudiu Zissulescu * gcc.target/arc/pr89838.c: New file. diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-24.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-24.c index 4503cd74009..c320d1cb71b 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-24.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-24.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 --param tree-reassoc-width=2 -fdump-tree-reassoc1" } */ +/* { dg-options "-O2 --param tree-reassoc-width=2 -fdump-tree-reassoc2" } */ unsigned int foo (void) @@ -21,4 +21,4 @@ foo (void) /* Verify there are two pairs of __asm__ statements with no intervening stmts. */ -/* { dg-final { scan-tree-dump-times "__asm__\[^;\n]*;\n *__asm__" 2 "reassoc1"} } */ +/* { dg-final { scan-tree-dump-times "__asm__\[^;\n]*;\n *__asm__" 2 "reassoc2"} } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-25.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-25.c index 553736bc391..dbb02683778 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-25.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-25.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 --param tree-reassoc-width=3 -fdump-tree-reassoc1-details" } */ +/* { dg-options "-O2 --param tree-reassoc-width=3 -fdump-tree-reassoc2-details" } */ unsigned int foo (int a, int b, int c, int d) @@ -15,4 +15,4 @@ foo (int a, int b, int c, int d) } /* Verify reassociation width was chosen to be 2. */ -/* { dg-final { scan-tree-dump-times "Width = 2" 1 "reassoc1"} } */ +/* { dg-final { scan-tree-dump-times "Width = 2" 1 "reassoc2"} } */ diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index 7161c4c36c3..6794fbde29e 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -6013,12 +6013,7 @@ reassociate_bb (basic_block bb) { machine_mode mode = TYPE_MODE (TREE_TYPE (lhs)); int ops_num = ops.length (); - int width = get_reassociation_width (ops_num, rhs_code, mode); - - if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, - "Width = %d was chosen for reassociation\n", width); - + int width; /* For binary bit operations, if there are at least 3 operands and the last last operand in OPS is a constant, @@ -6032,10 +6027,21 @@ reassociate_bb (basic_block bb) && TREE_CODE (ops.last ()->op) == INTEGER_CST) std::swap (*ops[0], *ops[ops_num - 1]); - if (width > 1 - && ops.length () > 3) - rewrite_expr_tree_parallel (as_a (stmt), - width, ops); + /* Only rewrite the expression tree to parallel in the + last reassoc pass to avoid useless work back-and-forth + with initial linearization. */ + if (!reassoc_insert_powi_p + && ops.length () > 3 + && (width = get_reassociation_width (ops_num, rhs_code, + mode)) > 1) + { + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, + "Width = %d was chosen for reassociation\n", + width); + rewrite_expr_tree_parallel (as_a (stmt), + width, ops); + } else { /* When there are three operands left, we want