summaryrefslogtreecommitdiff
path: root/gcc/cselib.c
diff options
context:
space:
mode:
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2014-03-06 07:04:47 +0000
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>2014-03-06 07:04:47 +0000
commitc6fbbd72dfc07e6a47a789f99ae8b8427193164f (patch)
tree7c88872eda98772084be1027c3fdf66d0b9e5e39 /gcc/cselib.c
parenteae93649799cba968bf93b587eafdc50bda818dd (diff)
downloadgcc-c6fbbd72dfc07e6a47a789f99ae8b8427193164f.tar.gz
PR debug/60381
Revert: 2014-02-28 Alexandre Oliva <aoliva@redhat.com> PR debug/59992 * cselib.c (remove_useless_values): Skip to avoid quadratic behavior if the condition moved from... (cselib_process_insn): ... here holds. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@208361 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cselib.c')
-rw-r--r--gcc/cselib.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/gcc/cselib.c b/gcc/cselib.c
index 0fcfe285eb5..4dfc55778b9 100644
--- a/gcc/cselib.c
+++ b/gcc/cselib.c
@@ -681,14 +681,6 @@ remove_useless_values (void)
{
cselib_val **p, *v;
- if (n_useless_values <= MAX_USELESS_VALUES
- /* remove_useless_values is linear in the hash table size. Avoid
- quadratic behavior for very large hashtables with very few
- useless elements. */
- || ((unsigned int)n_useless_values
- <= (cselib_hash_table.elements () - n_debug_values) / 4))
- return;
-
/* First pass: eliminate locations that reference the value. That in
turn can make more values useless. */
do
@@ -2720,7 +2712,13 @@ cselib_process_insn (rtx insn)
cselib_current_insn = NULL_RTX;
- remove_useless_values ();
+ if (n_useless_values > MAX_USELESS_VALUES
+ /* remove_useless_values is linear in the hash table size. Avoid
+ quadratic behavior for very large hashtables with very few
+ useless elements. */
+ && ((unsigned int)n_useless_values
+ > (cselib_hash_table.elements () - n_debug_values) / 4))
+ remove_useless_values ();
}
/* Initialize cselib for one pass. The caller must also call