[PATCH, SMS 2/2] Support instructions with REG_INC_NOTE (second try)
Ayal Zaks
ayal.zaks@gmail.com
Tue Sep 27 03:32:00 GMT 2011
On Mon, Sep 26, 2011 at 7:31 AM, Revital Eres <revital.eres@linaro.org> wrote:
> Hello,
>
> This patch extends the implementation to support instructions with
> REG_INC notes.
> It addresses the comments from the previous submission:
> http://gcc.gnu.org/ml/gcc-patches/2011-08/msg01299.html.
>
ok, so if we have an auto-inc'ing insn which defines (auto-inc's) an
addr register and another (say, result) register, we want to allow the
result register to have life ranges in excess of ii (by eliminating
anti-dep edges of distance 1 from uses to def, and generating
reg_moves if/where needed), but avoid having such life ranges of addr
(by retaining such anti-dep edges). Right?
> btw, regarding your previous question about the usage of the address
> register been auto inc, apparently it can be used as follows:
>
> insn 1) def1 = MEM [ pre_dec (addr) ]
> out edges: [1 -(T,2,1)-> 1] [1 -(T,2,0)-> 2]
> in edges: [1 -(T,2,1)-> 1] [2 -(T,2,1)-> 1] [2 -(A,0,1)->1]
>
> insn 2) MEM [ addr + 3 ] = def1
> out edges: [2 -(T,2,1)-> 1] [2 -(A,0,1)->1]
> in edges: [1 -(T,2,0)-> 2]
>
Are these all the edges? We have only one True dependence edge from
insn 1 to insn 2, but insn 1 is setting two registers both used by
insn 2 (regardless of what we decide to do with Anti-deps). As for
Anti-deps of distance 1, we have only one going back from insn 2 to
insn 1, perhaps corresponding to addr, allowing reg_moves for def1(?).
But, it won't help def1, because this other Anti-dep will force them
to be scheduled w/o reg_moves.
> Reg-moves were not created for the address when testing on ppc.
ok; note that the example above shows one could potentially have an
insn 2 scheduled in a later stage than insn 1, wanting to feed off an
earlier version of the pre_dec'd addr. (In this case, it would
probably be better to update the offset (3) than use a reg_move for
the addr. (Such folding might work for other cases as well(?))).
>
> Tested and bootstrap with patch 1 on ppc64-redhat-linux
> enabling SMS on loops with SC 1. On arm-linux-gnueabi bootstrap
> c on top of the set of patches that support do-loop pattern
> (http://gcc.gnu.org/ml/gcc-patches/2011-07/msg01807.html) which solves
> the bootstrap failure on ARM with SMS flags.
>
> OK for mainline?
>
OK, with the following comments:
Make sure reg_moves are generated for the correct (result, not addr)
register, in generate_reg_moves().
"been">>"being" (multiple appearances).
Add a note that autoinc_var_is_used_p (rtx def_insn, rtx use_insn)
doesn't need to consider the specific address register; no reg_moves
will be allowed for any life range defined by def_insn and used by
use_insn, if use_insn uses an address register auto-inc'ed by
def_insn.
In other words, one would expect to see two Anti-dep edges from insn 2
to insn 1, right?
Ayal.
> Thanks,
> Revital
>
>
> * ddg.c (autoinc_var_is_used_p): New function.
> (create_ddg_dep_from_intra_loop_link,
> add_cross_iteration_register_deps): Call it.
> * modulo-sched.c (sms_schedule): Handle instructions with REG_INC.
>
More information about the Gcc-patches
mailing list