This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Your change of September 11, 1998
- To: davem at redhat dot com
- Subject: Your change of September 11, 1998
- From: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner)
- Date: Mon, 15 Jan 01 12:11:12 EST
- Cc: gcc at gcc dot gnu dot org
I am very confused by that change. It appears to allow a PARALLEL as
a SET_DEST. I don't see any documentation of the form of that PARALLEL.
The code in note_stores, as best as I can see, expects each element to be a
SET or CLOBBER, since it does
for (i = XVECLEN (dest, 0) - 1; i >= 0; i--)
(*fun) (SET_DEST (XVECEXP (dest, 0, i)), x, data);
where "dest" is SET_DEST of some SET or CLOBBER.
But as far as I can tell, all the other functions changed at that time
expect the PARALLEL to simply be a list of registers.
However, in the Sparc 64 bit port, it's actually a PARALLEL where each
entry is an EXPR_LIST, whose first expression is a register and whose
second expression is a CONST_INT that appears to be a byte offset.
What *is* the documentation of what's supposed to be there?
rtl.texi says "@var{lval} must be an expression representing a place
that can be stored in: @code{reg} (or @code{subreg} or
@code{strict_low_part}), @code{mem}, @code{pc} or @code{cc0}", so that's
certainly wrong.
This is causing the Sparc 64 bit port to hit an RTL checking failure and
it wouldn't surprise me if it's causing memory corruption problems with
RTL checking off.
Whenever a change is made that allows different forms of RTL, the
change to rtl.texi is perhaps the most important. Right now, I have no
idea how to "fix" this since I don't know how it's supposed to work.