This is the mail archive of the
gcc-cvs@gcc.gnu.org
mailing list for the GCC project.
r242948 - in /trunk/gcc: ChangeLog shrink-wrap.c
- From: segher at gcc dot gnu dot org
- To: gcc-cvs at gcc dot gnu dot org
- Date: Tue, 29 Nov 2016 02:19:05 -0000
- Subject: r242948 - in /trunk/gcc: ChangeLog shrink-wrap.c
Author: segher
Date: Tue Nov 29 02:19:04 2016
New Revision: 242948
URL: https://gcc.gnu.org/viewcvs?rev=242948&root=gcc&view=rev
Log:
shrink-wrap: New spread_components
This patch changes spread_components to use a simpler algorithm that
puts prologue components as early as possible, and epilogue components
as late as possible. This allows better scheduling, and also saves a
bit of code size. The blocks that run with some specific component
enabled after this patch is a strict superset of those that had it
before the patch.
It does this by finding for every component the basic blocks where that
component is not needed on some path from the entry block (it reuses
head_components to store this), and similarly the blocks where the
component is not needed on some path to the exit block (or the exit can
not be reached from that block) (stored in tail_components). Blocks
that then are not in both of those two sets get the component active.
* shrink-wrap.c (init_separate_shrink_wrap): Do not clear
head_components and tail_components.
(spread_components): New algorithm.
(emit_common_tails_for_components): Clear head_components and
tail_components.
(insert_prologue_epilogue_for_components): Write extra output to the
dump file for sibcalls and abnormal exits.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/shrink-wrap.c