* 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
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.
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 ();
}