On 11/09/2016 02:46 PM, Segher Boessenkool wrote:
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 in neither of those two sets get the component active.

Tested on powerpc64-linux {-m32,-m64}.  Is this okay for trunk?


Segher


2016-11-09  Segher Boessenkool  <seg...@kernel.crashing.org>

        * 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.
OK.  Sorry for the delays.

jeff

Reply via email to