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