From patchwork Sun Dec 5 21:56:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 48517 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id EAE6D3858409 for ; Sun, 5 Dec 2021 21:58:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EAE6D3858409 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1638741486; bh=AyKm4tE54XgYoDtEYbJRi8lLaTZcbP+97/ge9cAucIE=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=eJG7Jf49F1aZnFgWHnnVDxHhZaAiTwA44Ir0uy1ygLWHCC+flDLfz427/PJ3UGzah PUNBjmIKX/skGCuo+rIHYDSzg1feFvZhyq/pLyS/AqYIKYUQpXTWEvqRevZ0qZN4B1 4NdL4kstzWpaQUJ6DfmvDYBPgW7U+vcBVa+vV33g= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 325583858C39 for ; Sun, 5 Dec 2021 21:56:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 325583858C39 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D5900113E for ; Sun, 5 Dec 2021 13:56:19 -0800 (PST) Received: from localhost (e121540-lin.manchester.arm.com [10.32.98.88]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 7C39F3F5A1 for ; Sun, 5 Dec 2021 13:56:19 -0800 (PST) To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Subject: [PATCH] ranger: Add shortcuts for single-successor blocks Date: Sun, 05 Dec 2021 21:56:18 +0000 Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Richard Sandiford via Gcc-patches From: Richard Sandiford Reply-To: Richard Sandiford Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" When compiling an optabs.ii at -O2 with a release-checking build, there were 6,643,575 calls to gimple_outgoing_range_stmt_p. 96.8% of them were for blocks with a single successor, which never have a control statement that generates new range info. This patch therefore adds a shortcut for that case. This gives a ~1% compile-time improvement for the test. I tried making the function inline (in the header) so that the single_succ_p didn't need to be repeated, but it seemed to make things slightly worse. Tested on aarch64-linux-gnu and x86_64-linux-gnu. OK to install? Richard gcc/ * gimple-range-edge.cc (gimple_outgoing_range::edge_range_p): Add a shortcut for blocks with single successors. * gimple-range-gori.cc (gori_map::calculate_gori): Likewise. --- gcc/gimple-range-edge.cc | 3 +++ gcc/gimple-range-gori.cc | 3 +++ 2 files changed, 6 insertions(+) diff --git a/gcc/gimple-range-edge.cc b/gcc/gimple-range-edge.cc index afffc8dbcae..9e805230004 100644 --- a/gcc/gimple-range-edge.cc +++ b/gcc/gimple-range-edge.cc @@ -182,6 +182,9 @@ gimple_outgoing_range::calc_switch_ranges (gswitch *sw) gimple * gimple_outgoing_range::edge_range_p (irange &r, edge e) { + if (single_succ_p (e->src)) + return NULL; + // Determine if there is an outgoing edge. gimple *s = gimple_outgoing_range_stmt_p (e->src); if (!s) diff --git a/gcc/gimple-range-gori.cc b/gcc/gimple-range-gori.cc index 0dba34b58c5..b256e4afd15 100644 --- a/gcc/gimple-range-gori.cc +++ b/gcc/gimple-range-gori.cc @@ -555,6 +555,9 @@ gori_map::calculate_gori (basic_block bb) m_outgoing[bb->index] = BITMAP_ALLOC (&m_bitmaps); m_incoming[bb->index] = BITMAP_ALLOC (&m_bitmaps); + if (single_succ_p (bb)) + return; + // If this block's last statement may generate range informaiton, go // calculate it. gimple *stmt = gimple_outgoing_range_stmt_p (bb);