From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1011) id 57D3E3858D1E; Mon, 11 Jul 2022 18:44:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 57D3E3858D1E MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Andrew Macleod To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-1608] Avoid calling range_from_dom when dominator is already resolved. X-Act-Checkin: gcc X-Git-Author: Andrew MacLeod X-Git-Refname: refs/heads/master X-Git-Oldrev: c3ed9e0d6e96d8697e4bab994f8acbc5506240ee X-Git-Newrev: 12a9b98ac574bc8092a75849b5c462135d35c31d Message-Id: <20220711184400.57D3E3858D1E@sourceware.org> Date: Mon, 11 Jul 2022 18:44:00 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Jul 2022 18:44:00 -0000 https://gcc.gnu.org/g:12a9b98ac574bc8092a75849b5c462135d35c31d commit r13-1608-g12a9b98ac574bc8092a75849b5c462135d35c31d Author: Andrew MacLeod Date: Fri Jul 8 13:30:49 2022 -0400 Avoid calling range_from_dom when dominator is already resolved. range_from_dom makes a recursive call to resolve the immediate dominator when there are multiple incoming edges to a block. This is not necessary when the dominator already has an on-entry cache value. PR tree-optimization/106234 * gimple-range-cache.cc (ranger_cache::range_from_dom): Check dominator cache value before recursively resolving it. Diff: --- gcc/gimple-range-cache.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc index 9be8bc6123b..da7b8055d42 100644 --- a/gcc/gimple-range-cache.cc +++ b/gcc/gimple-range-cache.cc @@ -1359,10 +1359,11 @@ ranger_cache::range_from_dom (vrange &r, tree name, basic_block start_bb, m_workback.quick_push (prev_bb); else if (mode == RFD_FILL) { - // Multiple incoming edges, so recursively satisfy this block, - // store the range, then calculate the incoming range for PREV_BB. - if (def_bb != bb) + // Multiple incoming edges, so recursively satisfy this block + // if it doesn't already have a value, and store the range. + if (!m_on_entry.bb_range_p (name, bb) && def_bb != bb) { + // If the dominator has not been set, look it up. range_from_dom (r, name, bb, RFD_FILL); // If the range can't be store, don't try to accumulate // the range in PREV_BB due to excessive recalculations.