aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <jeffreyalaw@gmail.com>2022-10-11 00:44:26 -0400
committerJeff Law <jeffreyalaw@gmail.com>2022-10-11 00:44:26 -0400
commitdb24bdc743cf23ea12d2dcf8254d86ab366bb46d (patch)
tree0072665445eb9625ef4438c5d5ddc575ca0ec584 /gcc
parentd2efb10a19b3948e48a2d9273b294db4e1d65296 (diff)
downloadgcc-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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cfgrtl.cc1
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. */