diff options
author | Jan Hubicka <jh@suse.cz> | 2006-07-27 18:03:22 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2006-07-27 16:03:22 +0000 |
commit | 96d0cc8186a650f653ec0bb47168b3ccb6426ce2 (patch) | |
tree | 77a6d486ea57a6b544ceda3cd1825bfda772ecac /gcc/cselib.c | |
parent | 69bfd3c9ba12e99eabd826d507f1c11419e5606a (diff) | |
download | gcc-96d0cc8186a650f653ec0bb47168b3ccb6426ce2.zip gcc-96d0cc8186a650f653ec0bb47168b3ccb6426ce2.tar.gz gcc-96d0cc8186a650f653ec0bb47168b3ccb6426ce2.tar.bz2 |
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
Diffstat (limited to 'gcc/cselib.c')
-rw-r--r-- | gcc/cselib.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/cselib.c b/gcc/cselib.c index 0fc8aee..edfc328 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 (); } |