re PR middle-end/28071 (A file that can not be compiled in reasonable time/space)
authorJan Hubicka <jh@suse.cz>
Thu, 27 Jul 2006 16:03:22 +0000 (18:03 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 27 Jul 2006 16:03:22 +0000 (16:03 +0000)
PR rtl-optimization/28071
* cselib.c (cselib_process_insn): Don't remove useless values too
often for very large hashtables.

From-SVN: r115777

gcc/ChangeLog
gcc/cselib.c

index 4ebe39ffb02eedaa0e40053852c9818378f521be..c5c0d6ff5a5562054456af16b0e5c2cab7bcaa04 100644 (file)
@@ -1,3 +1,9 @@
+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
index 0fc8aeef2cfa7f38e0226f5beafb0acdbe925f85..edfc328c0d84cd65d77719c9ae4cbfa21205ba09 100644 (file)
@@ -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 ();
 }