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 | |
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')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cselib.c | 6 |
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4ebe39f..c5c0d6f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2006-07-27 Jan Hubicka <jh@suse.cz> 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 <jh@suse.cz> + + PR rtl-optimization/28071 * global.c (greg_obstack): New obstack. (allocate_bb_info): Use it. (free_bb_info): Likewise. 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 (); } |