From: Jeff Law Date: Tue, 11 Oct 2022 04:44:26 +0000 (-0400) Subject: [PR rtl-optimization/107182] Clear EDGE_CROSSING for jump->ret optimization X-Git-Tag: basepoints/gcc-14~3996 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=db24bdc743cf23ea12d2dcf8254d86ab366bb46d;p=thirdparty%2Fgcc.git [PR rtl-optimization/107182] Clear EDGE_CROSSING for jump->ret optimization When turning a jump to a return into a return, we need to clear EDGE_CROSSING of the fallthru edge to prevent a checking failure. I considered not applying the transformation when the edge has EDGE_CROSSING set, but it still seems like we ought to eliminate the unnecessary jump in that case. gcc/ PR rtl-optimization/107182 * cfgrtl.cc (fixup_reorder_chain): When optimizing a jump to a return, clear EDGE_CROSSING on the appropriate edge. --- diff --git a/gcc/cfgrtl.cc b/gcc/cfgrtl.cc index 281a432f6a6c..f31941a61f97 100644 --- a/gcc/cfgrtl.cc +++ b/gcc/cfgrtl.cc @@ -4055,6 +4055,7 @@ fixup_reorder_chain (void) ret_label = PATTERN (ret); dest = EXIT_BLOCK_PTR_FOR_FN (cfun); + e_fall->flags &= ~EDGE_CROSSING; /* E_FALL->dest might become unreachable as a result of replacing the jump with a return. So arrange to remove unreachable blocks. */