rtl-optimization/80960 - avoid creating garbage RTL in DSE

The following avoids repeatedly turning VALUE RTXen into
sth useful and re-applying a constant offset through get_addr
via DSE check_mem_read_rtx.  Instead perform this once for
all stores to be visited in check_mem_read_rtx.  This avoids
allocating 1.6GB of garbage PLUS RTXen on the PR80960
testcase, fixing the memory usage regression from old GCC.

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

	PR rtl-optimization/80960
	* dse.c (check_mem_read_rtx): Call get_addr on the
	offsetted address.
This commit is contained in:
Richard Biener 2021-01-27 15:35:52 +01:00
parent fbe37371cf
commit a523add327
1 changed files with 5 additions and 0 deletions

View File

@ -2219,6 +2219,11 @@ check_mem_read_rtx (rtx *loc, bb_info_t bb_info)
}
if (maybe_ne (offset, 0))
mem_addr = plus_constant (get_address_mode (mem), mem_addr, offset);
/* Avoid passing VALUE RTXen as mem_addr to canon_true_dependence
which will over and over re-create proper RTL and re-apply the
offset above. See PR80960 where we almost allocate 1.6GB of PLUS
RTXen that way. */
mem_addr = get_addr (mem_addr);
if (group_id >= 0)
{