This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Your change of September 11, 1998


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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]