From b0d535b8b41f804bb2651c279ce61f6b99ea781e Mon Sep 17 00:00:00 2001 From: hubicka Date: Thu, 27 Jul 2006 16:03:22 +0000 Subject: PR rtl-optimization/28071 * cselib.c (cselib_process_insn): Don't remove useless values too often for very large hashtables. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@115777 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cselib.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'gcc/cselib.c') 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 (); } -- cgit v1.2.1