diff options
author | Jeff Law <jeffreyalaw@gmail.com> | 2022-10-11 00:44:26 -0400 |
---|---|---|
committer | Jeff Law <jeffreyalaw@gmail.com> | 2022-10-11 00:44:26 -0400 |
commit | db24bdc743cf23ea12d2dcf8254d86ab366bb46d (patch) | |
tree | 0072665445eb9625ef4438c5d5ddc575ca0ec584 | |
parent | d2efb10a19b3948e48a2d9273b294db4e1d65296 (diff) | |
download | gcc-db24bdc743cf23ea12d2dcf8254d86ab366bb46d.zip gcc-db24bdc743cf23ea12d2dcf8254d86ab366bb46d.tar.gz gcc-db24bdc743cf23ea12d2dcf8254d86ab366bb46d.tar.bz2 |
[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.
-rw-r--r-- | gcc/cfgrtl.cc | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/gcc/cfgrtl.cc b/gcc/cfgrtl.cc index 281a432..f31941a 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. */ |