diff options
author | Richard Biener <rguenther@suse.de> | 2021-01-29 13:25:49 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2021-01-29 14:01:21 +0100 |
commit | cb52e59e33845152cef6f9042a142a246e9447f6 (patch) | |
tree | a68198405c71a823e31a75ab595d0f21d1166776 | |
parent | f4e426f7bd7df279cb7aaecd91d273d9b7db338d (diff) | |
download | gcc-cb52e59e33845152cef6f9042a142a246e9447f6.zip gcc-cb52e59e33845152cef6f9042a142a246e9447f6.tar.gz gcc-cb52e59e33845152cef6f9042a142a246e9447f6.tar.bz2 |
rtl-optimization/98863 - fix PRE/CPROP memory usage check
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.
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.
-rw-r--r-- | gcc/gcse.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -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); |