Hello,

> 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?

Yes.
>
> 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.

Please ignore the edges in the previous example. It indeed was a mistake,
sorry about the confusion.  Here are two examples taken from bootstrap
on PPC of how the address is used; with the current patch applied and
running with -fmodulo-sched-allow-regmoves:

Node num: 2
(insn 3681 3678 3682 500 (set (reg:QI 2914 [ MEM[base: D.9586_4130,
offset: 0B] ])
        (mem:QI (pre_dec:DI (reg:DI 1644 [ ivtmp.687 ])) [0 MEM[base:
D.9586_4130, offset: 0B]+0 S1 A8])) ../../gcc/libiberty/regex.c:4259
358 {*movqi_internal}
     (expr_list:REG_INC (reg:DI 1644 [ ivtmp.687 ])
        (nil)))
OUT ARCS:  [3681 -(T,2,1)-> 3681]  [3681 -(T,2,0)-> 3682]
IN ARCS:  [3682 -(A,0,1)-> 3681]  [3681 -(T,2,1)-> 3681]  [3682
-(A,0,1)-> 3681]  [3682 -(T,2,1)-> 3681]
Node num: 3
(insn 3682 3681 3683 500 (set (mem:QI (plus:DI (reg:DI 1644 [ ivtmp.687 ])
                (const_int 3 [0x3])) [0 MEM[base: D.9586_4130, offset:
3B]+0 S1 A8])
        (reg:QI 2914 [ MEM[base: D.9586_4130, offset: 0B] ]))
../../gcc/libiberty/regex.c:4259 358 {*movqi_internal}
     (expr_list:REG_DEAD (reg:QI 2914 [ MEM[base: D.9586_4130, offset: 0B] ])
        (nil)))
OUT ARCS:  [3682 -(A,0,1)-> 3681]  [3682 -(A,0,1)-> 3681]  [3682
-(O,0,0)-> 7263]  [3682 -(A,0,0)-> 3683]  [3682 -(T,2,1)-> 3681]
IN ARCS:  [3681 -(T,2,0)-> 3682]

Another example of usage is as follows (the address register is not
used in MEM):

Node num: 0
(insn 1419 1415 1423 9 (set (mem/f:DI (pre_inc:DI (reg:DI 1882 [
ivtmp.1636 ])) [3 MEM[base: D.10911_2945, offset: 0B]+0 S8 A64])
        (reg/f:DI 3923)) ../../gcc/libiberty/regex.c:5788 378
{*movdi_internal64}
     (expr_list:REG_INC (reg:DI 1882 [ ivtmp.1636 ])
        (nil)))
OUT ARCS:  [1419 -(T,2,1)-> 1419]  [1419 -(O,0,0)-> 5932]  [1419
-(O,0,0)-> 1449]  [1419 -(T,2,1)-> 1434]  [1419 -(T,2,0)-> 1434]
[1419 -(T,2,0)-> 1432]  [1419 -(O,0,0)-> 1431]  [1419 -(O,0,0)-> 1427]
 [1419 -(O,0,0)-> 1423]
IN ARCS:  [1419 -(T,2,1)-> 1419]  [1432 -(A,0,1)-> 1419]  [1449
-(O,0,1)-> 1419]  [1434 -(A,0,1)-> 1419]  [1431 -(O,0,1)-> 1419]
[1427 -(O,0,1)-> 1419]  [1423 -(O,0,1)-> 1419]
Node num: 4
(insn 1432 1431 1433 9 (set (reg:DI 2632)
        (plus:DI (reg/v/f:DI 1058 [ reg_info ])
            (reg:DI 1882 [ ivtmp.1636 ])))
../../gcc/libiberty/regex.c:5543 79 {*adddi3_internal1}
     (nil))
OUT ARCS:  [1432 -(A,0,1)-> 1419]  [1432 -(T,1,0)-> 1433]
IN ARCS:  [1419 -(T,2,0)-> 1432]

>> OK for mainline?
>>
>
> OK, with the following comments:

Thanks, will address the comments and re-submit.

> In other words, one would expect to see two Anti-dep edges from insn 2
> to insn 1, right?

Yes, that's indeed the case in the first example above.

Thanks,
Revital

Reply via email to