diff mbox series

rtl-optimization/98863 - fix PRE/CPROP memory usage check

Message ID nycvar.YFH.7.76.2101291336270.10659@elmra.sevgm.obk
State New
Headers show
Series rtl-optimization/98863 - fix PRE/CPROP memory usage check | expand

Commit Message

Richard Biener Jan. 29, 2021, 12:37 p.m. UTC
This fixes overflow of the memory usage estimate in turn failing
to disable itself on WRF with LTO, causing a few GBs worth of
memory peak.

Bootstrap and regtest running on x86_64-unknown-linux-gnu, will apply
as obvious if that succeeds.

Thanks,
Richard.

2021-01-29  Richard Biener  <rguenther@suse.de>

	PR rtl-optimization/98863
	* gcse.c (gcse_or_cprop_is_too_expensive): Use unsigned
	HOST_WIDE_INT for the memory estimate.
---
 gcc/gcse.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
diff mbox series

Patch

diff --git a/gcc/gcse.c b/gcc/gcse.c
index c4a6acb8aa1..29c9f900a8c 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -3982,9 +3982,9 @@  update_ld_motion_stores (struct gcse_expr * expr)
 bool
 gcse_or_cprop_is_too_expensive (const char *pass)
 {
-  int memory_request = (n_basic_blocks_for_fn (cfun)
-			* SBITMAP_SET_SIZE (max_reg_num ())
-			* sizeof (SBITMAP_ELT_TYPE));
+  unsigned HOST_WIDE_INT memory_request
+    = ((unsigned HOST_WIDE_INT)n_basic_blocks_for_fn (cfun)
+       * SBITMAP_SET_SIZE (max_reg_num ()) * sizeof (SBITMAP_ELT_TYPE));
   
   /* Trying to perform global optimizations on flow graphs which have
      a high connectivity will take a long time and is unlikely to be
@@ -4007,11 +4007,12 @@  gcse_or_cprop_is_too_expensive (const char *pass)
 
   /* If allocating memory for the dataflow bitmaps would take up too much
      storage it's better just to disable the optimization.  */
-  if (memory_request > param_max_gcse_memory)
+  if (memory_request > (unsigned HOST_WIDE_INT)param_max_gcse_memory)
     {
       warning (OPT_Wdisabled_optimization,
 	       "%s: %d basic blocks and %d registers; "
-	       "increase %<--param max-gcse-memory%> above %d",
+	       "increase %<--param max-gcse-memory%> above "
+	       HOST_WIDE_INT_PRINT_UNSIGNED,
 	       pass, n_basic_blocks_for_fn (cfun), max_reg_num (),
 	       memory_request);