From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1666) id 6CC213858C50; Wed, 19 Apr 2023 08:30:00 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6CC213858C50 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1681893000; bh=Ju2KdqfeFzRZoVK9ytISXCprBWyxoeoNMnuOumRn93U=; h=From:To:Subject:Date:From; b=q9tQ+d8z9YSiGZgE89nPJBW4yZ0hX9+0TL8B2q1GkZuBVymGIoyCMzcoDpC+I4E2s 1E7XdbvS8qbXKHY+vfGDuKqAcjZoQ5QhGDJ4ahhtepX3dmarM+F8iT7WldifrASwYb QkwSFEfNHpqfV5S/CZMIGmP+y5jDa8hX1tpET8Bs= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Richard Biener To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-60] rtl-optimization/109237 - speedup bb_is_just_return X-Act-Checkin: gcc X-Git-Author: Richard Biener X-Git-Refname: refs/heads/master X-Git-Oldrev: 794ffdb0fb6312ce07af0bfc797bef9f4cff4c61 X-Git-Newrev: 8f81100115f68b37fb2723e987c14a3185d1f47d Message-Id: <20230419083000.6CC213858C50@sourceware.org> Date: Wed, 19 Apr 2023 08:30:00 +0000 (GMT) List-Id: https://gcc.gnu.org/g:8f81100115f68b37fb2723e987c14a3185d1f47d commit r14-60-g8f81100115f68b37fb2723e987c14a3185d1f47d Author: Richard Biener Date: Wed Mar 22 10:05:19 2023 +0100 rtl-optimization/109237 - speedup bb_is_just_return For the testcase bb_is_just_return is on top of the profile, changing it to walk BB insns backwards puts it off the profile. That's because in the forward walk you have to process possibly many debug insns but in a backward walk you very likely run into control insns first. PR rtl-optimization/109237 * cfgcleanup.cc (bb_is_just_return): Walk insns backwards. Diff: --- gcc/cfgcleanup.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/cfgcleanup.cc b/gcc/cfgcleanup.cc index 194e0e5de12..78f59e99653 100644 --- a/gcc/cfgcleanup.cc +++ b/gcc/cfgcleanup.cc @@ -2608,14 +2608,14 @@ bb_is_just_return (basic_block bb, rtx_insn **ret, rtx_insn **use) if (bb == EXIT_BLOCK_PTR_FOR_FN (cfun)) return false; - FOR_BB_INSNS (bb, insn) + FOR_BB_INSNS_REVERSE (bb, insn) if (NONDEBUG_INSN_P (insn)) { rtx pat = PATTERN (insn); if (!*ret && ANY_RETURN_P (pat)) *ret = insn; - else if (!*ret && !*use && GET_CODE (pat) == USE + else if (*ret && !*use && GET_CODE (pat) == USE && REG_P (XEXP (pat, 0)) && REG_FUNCTION_VALUE_P (XEXP (pat, 0))) *use = insn;