]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rtl-optimization/80960 - avoid creating garbage RTL in DSE
authorRichard Biener <rguenther@suse.de>
Wed, 27 Jan 2021 14:35:52 +0000 (15:35 +0100)
committerRichard Biener <rguenther@suse.de>
Thu, 28 Jan 2021 08:14:46 +0000 (09:14 +0100)
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.

gcc/dse.c

index c88587e7d941e3bf26c351a67d8641fd54485852..da0df54a2dde089ad0c48ee63de956f1473dc4fb 100644 (file)
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -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)
     {