This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[sel-sched] Rescheduling of pipelined code and improved bookkeeping with patches now.


I am sorry, I forgot to attach patches themselves to my letter.  So
they are here with original letter and changelogs.

Hi! These are two patches for sel-sched branch.

First patch makes scheduler create bookkeeping instructions at the end
of existing basic block if it can do so, instead of always creating
new basic block for bookkeeping instructions.  This solves a problem
with label alignment: alignment is stored in association with label
and is computed before scheduler pass; when pipelining, splitting of
basic block moves old block (with its label) for bookkeeping out of
loop, so making label (loop) alignment in wrong place.  This patch
prevents such behaviour.

Also, first patch resolves bug with pipelining, when
find_best_rhs_and_reg_that_fits is going to choose from av set,
containing only one instruction, it will decrement ready.n_ready to
zero, so sched_reorder hook has no choice, but to say that nothing can
be scheduled on this cycle.

Second patch contains some cleanups for first patch.  Also it contains
changes for generation of bookkeeping instructions: allowing of
generation of bookkeeping instructions at scheduling boundary, but
generating new basic block for them when scheduling something at this
boundary.  Also it contains minor bugfixes concerning debug output.

The main purpose of second patch is allowing rescheduling of pipelined
code without pipelinig.  This resolves a performance bug, when
pipelining instructions from the beginning of loop: pipelining of some
instructions from the beginnig of loop removes them from their source
places and leaves all other instructions from beginning of loop at
their old places; this way, "bubbles" from removed instructions could
be created, increasing execution time of loop.

Also, the second patch contains a fix to sched-deps.c, which replaces
generation of true dependencies with generation of anti dependencies
for jumps, followed by barrier.

Both patches committed by Andrey Belevantsev to sel-sched branch.


2007-03-29  Dmitry Zhurikhin <zhur@ispras.ru>

        * sel-sched.c (generate_bookkeeping_insn): Implement creating of 
        bookkeeping insn in existing block if possible instead of always 
        creating a new basic block for bookkeeping insn.
        (find_best_rhs_and_reg_that_fits): Correct bug with always not 
        scheduling issue_rate-th instruction on current cycle when 
        pipelining is on.
        (fill_insns): Move BND_TO some instructions back if bookkeeping
        insn was inserted between last scheduled insn and BND_TO.

2007-03-29  Dmitry Zhurikhin <zhur@ispras.ru>

        * sel-sched.c (generate_bookkeeping_insn): Remove unneeded 
        conditions when checking if bookkeeping insn can be generated in
        existing block and fix coding.
        (init_seqno_1): Remove assert.
        (fill_insns): Remove unneeded moving of boundary. In rare case of
        generating bookkeeping insn at the block above floating bb header
        split this (upper) block after place_to_insert generating new 
        floating bb header that way.
        (sel_sched_region_1): Implement rescheduling of pipelined code.
        * sel-sched-ir.c (sel_split_block): Added second parameter meaning
        instruction, after which basic block should be splitted.
        * sel-sched-ir.h: Correct declaration.
        * sel-sched-dump.c (sel_print_insn): Check if INSN_VI is present
        before referencing VINSN_SCHED_TIMES.
        * common.opt (flag_sel_sched_reschedule_pipelined): New flag to 
        reschedule pipelined code without pipelining after scheduling
        region.
        * sched-deps.c (sched_analyze_insn): Replace TRUE_BARRIER with
        MOVE_BARRIER to generate anti instead of true dependencies for
        JUMP followed with a BARRIER.



Attachment: patch-29-03-07-2.diff
Description: Binary data

Attachment: patch-29-03-07-1.diff
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]