cfgcleanup: Fold jumps and conditional branches with returns
authorSegher Boessenkool <segher@kernel.crashing.org>
Wed, 4 May 2016 20:54:47 +0000 (22:54 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Wed, 4 May 2016 20:54:47 +0000 (22:54 +0200)
commit45676a7c8a09579a591fb8d20db90df92a1713b3
tree0b0bd030c7648340a035bf394fa67488d6f390a9
parent1a8fb012bda277aa1b4373d2f426986bce76460d
cfgcleanup: Fold jumps and conditional branches with returns

This patch makes cfgcleanup optimize jumps to returns.  There are three
cases this handles:

-- A jump to a return; this is simplified to just that return.
-- A conditional branch to a return; simplified to a conditional return.
-- A conditional branch that falls through to a return.  This is simplified
   to a conditional return (with the condition inverted), falling through
   to a jump to the original destination.  That jump can then be optimized
   further, as usual.

This handles all cases the current function.c does, and a few it misses.

* cfgcleanup.c (bb_is_just_return): New function.
(try_optimize_cfg): Simplify jumps to return, branches to return,
and branches around return.

From-SVN: r235904
gcc/ChangeLog
gcc/cfgcleanup.c