This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Oddity with REG_DEP_TRUE and subregs of multiword registers?
- From: Ian Lance Taylor <ian at airs dot com>
- To: Rask Ingemann Lambertsen <rask at sygehus dot dk>
- Cc: GCC development mailing list <gcc at gcc dot gnu dot org>
- Date: 13 Apr 2006 13:32:26 -0700
- Subject: Re: Oddity with REG_DEP_TRUE and subregs of multiword registers?
- References: <20060413175213.GA18768@sygehus.dk>
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