Rask Ingemann Lambertsen <[EMAIL PROTECTED]> 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