re PR debug/60381 (ICE: in vt_expand_var_loc_chain, at var-tracking.c:8245)
[gcc.git] / gcc / cselib.c
index 0fcfe285eb515373f35e4da68d552936e2604dfe..4dfc55778b9236fe62581ef39b76264c30645cf4 100644 (file)
@@ -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