From: Richard Biener Date: Wed, 22 Mar 2023 09:05:19 +0000 (+0100) Subject: rtl-optimization/109237 - speedup bb_is_just_return X-Git-Tag: basepoints/gcc-15~10079 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8f81100115f68b37fb2723e987c14a3185d1f47d;p=thirdparty%2Fgcc.git 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 --git a/gcc/cfgcleanup.cc b/gcc/cfgcleanup.cc index 194e0e5de123..78f59e996536 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;