aboutsummaryrefslogtreecommitdiff
path: root/gcc/cselib.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2006-07-27 18:03:22 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2006-07-27 16:03:22 +0000
commit96d0cc8186a650f653ec0bb47168b3ccb6426ce2 (patch)
tree77a6d486ea57a6b544ceda3cd1825bfda772ecac /gcc/cselib.c
parent69bfd3c9ba12e99eabd826d507f1c11419e5606a (diff)
downloadgcc-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.c6
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 ();
}