This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: df.c and partial writes/REG_EQUAL notes
- To: <law at redhat dot com>
- Subject: Re: df.c and partial writes/REG_EQUAL notes
- From: Michael Matz <matzmich at cs dot tu-berlin dot de>
- Date: Wed, 24 Oct 2001 22:23:28 +0200 (MET DST)
- cc: <gcc at gcc dot gnu dot org>
Hi,
On Wed, 24 Oct 2001 law@redhat.com wrote:
> Right. Review the movxx section in the Machine Descriptions part of the
> manual. Quoting:
>
> @cindex @code{mov@var{m}} instruction pattern
> @item @samp{mov@var{m}}
> Here @var{m} stands for a two-letter machine mode name, in lower case.
> This instruction pattern moves data with that machine mode from operand
> 1 to operand 0. For example, @samp{movsi} moves full-word data.
>
> If operand 0 is a @code{subreg} with mode @var{m} of a register whose
> own mode is wider than @var{m}, the effect of this instruction is
> to store the specified value in the part of the register that corresponds
> to mode @var{m}. The effect on the rest of the register is undefined.
>
> Based on that I believe there should be no dependency since insn #2
> leaves the rest of the DI register undefined.
No, that's exactly the problem I was asking some months before about this
documentation. Only the _word_ containing the subreg is touched by such a
move, i.e. if the subreg describes a complete word, it leaves no bits
undefined. Depending on the machine a (set (subreg:SI (reg:DI x) 0))
clobbers the complete (reg:DI x) (if it only takes one hardreg), or only
the lower half.
Ciao,
Michael.