From 8495c94f4981e8018b6da421e1e25b82ebdde91e Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Sun, 2 Nov 2008 13:34:58 +0000 Subject: [PATCH] re PR tree-optimization/37991 (excessive memory consumption - possible hang) 2008-11-02 Richard Guenther PR tree-optimization/37991 * tree-ssa-sccvn.h (copy_vuses_from_stmt): Remove. * tree-ssa-sccvn.c (copy_vuses_from_stmt): Make static. (set_ssa_val_to): Print if the value changed. (simplify_binary_expression): Strip useless conversions. * gcc.c-torture/compile/pr37991.c: New testcase. From-SVN: r141532 --- gcc/ChangeLog | 8 ++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/compile/pr37991.c | 14 ++++++++++++++ gcc/tree-ssa-sccvn.c | 9 +++++++-- gcc/tree-ssa-sccvn.h | 1 - 5 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr37991.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9e558d35b9c0..90f6c9b214d6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2008-11-02 Richard Guenther + + PR tree-optimization/37991 + * tree-ssa-sccvn.h (copy_vuses_from_stmt): Remove. + * tree-ssa-sccvn.c (copy_vuses_from_stmt): Make static. + (set_ssa_val_to): Print if the value changed. + (simplify_binary_expression): Strip useless conversions. + 2008-11-01 Hans-Peter Nilsson PR target/37939 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d152f85a33a9..90e0db5fb721 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-11-02 Richard Guenther + + PR tree-optimization/37991 + * gcc.c-torture/compile/pr37991.c: New testcase. + 2008-11-01 Hans-Peter Nilsson PR target/37939 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr37991.c b/gcc/testsuite/gcc.c-torture/compile/pr37991.c new file mode 100644 index 000000000000..f374ea985406 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr37991.c @@ -0,0 +1,14 @@ +typedef int Int32; +void use_it(int); +void FindAndReadSignature(int processedSize) +{ + int numPrevBytes = 1; + for (;;) + { + int numBytesInBuffer = numPrevBytes + processedSize; + Int32 numTests = numBytesInBuffer - 1; + use_it (numTests); + numPrevBytes = numBytesInBuffer - numTests; + } +} + diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 082a2785ff7a..e255411fe6a8 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -498,7 +498,7 @@ vuses_to_vec (gimple stmt, VEC (tree, gc) **result) /* Copy the VUSE names in STMT into a vector, and return the vector. */ -VEC (tree, gc) * +static VEC (tree, gc) * copy_vuses_from_stmt (gimple stmt) { VEC (tree, gc) *vuses = NULL; @@ -1579,7 +1579,6 @@ set_ssa_val_to (tree from, tree to) print_generic_expr (dump_file, from, 0); fprintf (dump_file, " to "); print_generic_expr (dump_file, to, 0); - fprintf (dump_file, "\n"); } currval = SSA_VAL (from); @@ -1587,8 +1586,12 @@ set_ssa_val_to (tree from, tree to) if (currval != to && !operand_equal_p (currval, to, OEP_PURE_SAME)) { SSA_VAL (from) = to; + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, " (changed)\n"); return true; } + if (dump_file && (dump_flags & TDF_DETAILS)) + fprintf (dump_file, "\n"); return false; } @@ -2113,6 +2116,8 @@ simplify_binary_expression (gimple stmt) result = fold_binary (gimple_assign_rhs_code (stmt), TREE_TYPE (gimple_get_lhs (stmt)), op0, op1); + if (result) + STRIP_USELESS_TYPE_CONVERSION (result); fold_undefer_overflow_warnings (result && valid_gimple_rhs_p (result), stmt, 0); diff --git a/gcc/tree-ssa-sccvn.h b/gcc/tree-ssa-sccvn.h index 84f096ef2245..cc74acce10da 100644 --- a/gcc/tree-ssa-sccvn.h +++ b/gcc/tree-ssa-sccvn.h @@ -196,5 +196,4 @@ unsigned int get_constant_value_id (tree); unsigned int get_or_alloc_constant_value_id (tree); bool value_id_constant_p (unsigned int); VEC (tree, gc) *shared_vuses_from_stmt (gimple); -VEC (tree, gc) *copy_vuses_from_stmt (gimple); #endif /* TREE_SSA_SCCVN_H */ -- 2.43.5