From: Richard Biener Date: Wed, 27 Jan 2021 14:35:52 +0000 (+0100) Subject: rtl-optimization/80960 - avoid creating garbage RTL in DSE X-Git-Tag: basepoints/gcc-12~1309 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a523add327c6cfdd68cf9b788ea808068d0f508c;p=thirdparty%2Fgcc.git 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 PR rtl-optimization/80960 * dse.c (check_mem_read_rtx): Call get_addr on the offsetted address. --- diff --git a/gcc/dse.c b/gcc/dse.c index c88587e7d941..da0df54a2dde 100644 --- 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) {