From 96d0cc8186a650f653ec0bb47168b3ccb6426ce2 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Thu, 27 Jul 2006 18:03:22 +0200 Subject: [PATCH] re PR middle-end/28071 (A file that can not be compiled in reasonable time/space) PR rtl-optimization/28071 * cselib.c (cselib_process_insn): Don't remove useless values too often for very large hashtables. From-SVN: r115777 --- gcc/ChangeLog | 6 ++++++ gcc/cselib.c | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4ebe39ffb02..c5c0d6ff5a5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2006-07-27 Jan Hubicka + + PR rtl-optimization/28071 + * cselib.c (cselib_process_insn): Don't remove useless values too + often for very large hashtables. + 2006-07-27 Jan Hubicka PR rtl-optimization/28071 diff --git a/gcc/cselib.c b/gcc/cselib.c index 0fc8aeef2cf..edfc328c0d8 100644 --- a/gcc/cselib.c +++ b/gcc/cselib.c @@ -1437,7 +1437,11 @@ cselib_process_insn (rtx insn) cselib_current_insn_in_libcall = false; cselib_current_insn = 0; - if (n_useless_values > MAX_USELESS_VALUES) + if (n_useless_values > MAX_USELESS_VALUES + /* remove_useless_values is linear in the hash table size. Avoid + quadratic behaviour for very large hashtables with very few + useless elements. */ + && (unsigned int)n_useless_values > cselib_hash_table->n_elements / 4) remove_useless_values (); }