This is the mail archive of the gcc@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]

Re: Oddity with REG_DEP_TRUE and subregs of multiword registers?


Rask Ingemann Lambertsen <rask@sygehus.dk> writes:

> (insn 12 14 13 0 (parallel [
>             (set (subreg:SI (reg:DI 61) 0)
>                 (xor:SI (subreg:SI (reg/v:DI 59 [ a ]) 0)
>                     (subreg:SI (reg/v:DI 60 [ b ]) 0)))
>             (clobber (reg:CC 17 flags))
>         ]) 235 {*xorsi_1} (insn_list:REG_DEP_TRUE 6 (insn_list:REG_DEP_TRUE 7 (insn_list:REG_DEP_TRUE 14 (nil))))
>     (expr_list:REG_UNUSED (reg:CC 17 flags)
>         (expr_list:REG_NO_CONFLICT (reg/v:DI 59 [ a ])
>             (expr_list:REG_NO_CONFLICT (reg/v:DI 60 [ b ])
>                 (nil)))))
> 
> (insn 13 12 15 0 (parallel [
>             (set (subreg:SI (reg:DI 61) 4)
>                 (xor:SI (subreg:SI (reg/v:DI 59 [ a ]) 4)
>                     (subreg:SI (reg/v:DI 60 [ b ]) 4)))
>             (clobber (reg:CC 17 flags))
>         ]) 235 {*xorsi_1} (insn_list:REG_DEP_TRUE 12 (nil))
>     (expr_list:REG_DEAD (reg/v:DI 59 [ a ])
>         (expr_list:REG_DEAD (reg/v:DI 60 [ b ])
>             (expr_list:REG_UNUSED (reg:CC 17 flags)
>                 (expr_list:REG_NO_CONFLICT (reg/v:DI 59 [ a ])
>                     (expr_list:REG_NO_CONFLICT (reg/v:DI 60 [ b ])
>                         (nil)))))))
> [cut]
> 
> I don't understand why insn 13 is supposed to have a dependency on insn 12.
> There is no overlap between the subregs. I would have thought that insn 13
> should have a dependency on insn 6, 7 and possibly 14, like insn 12.

The dependency code does not track subregs independently.  It only
tracks entire registers.  Insn 13 only sets part of register 61;
therefore it reads register 61.  And insn 12 writes register 61.
Therefore insn 13 has a read-after-write dependency on insn 12.

Yes, subregs should be handled better.  I have some work in progress
which may help.

> Am I simply misunderstanding the purpose of (undocumented) REG_DEP_TRUE?

REG_DEP_TRUE is documented, sort of, in reg-notes.def.

Ian


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