This is the mail archive of the gcc-bugs@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]

Re: unrecognizable insn


	Both of these cases are the same form:

(mem (plus (reg) (const_int 65536)))

The testcase that Dan and Konstantinos sent no longer fails with the
development snapshots.  And the internal representation that GCC generates
is significantly different.

	The unrecognizable insn failure is that 65536 is too large a
displacement for an offset memory reference.  The PowerPC port test that
an address is "legitimate" is very simple for this case and correct:

#define LEGITIMATE_ADDRESS_INTEGER_P(X,OFFSET)                          \
 (GET_CODE (X) == CONST_INT                                             \
  && (unsigned HOST_WIDE_INT) (INTVAL (X) + (OFFSET) + 0x8000) < 0x10000)

The above case is a const_int but 65536 is not less than 0x10000 (65536)
and LEGITIMIZE address is suppose to fix this up.  I suspect that
somewhere else in GCC is generating an offset which is too large and not
testing it.

	I cannot see how the port itself could be generating this.  This
either could be a bug in the common backend which has been fixed or a bug
somewhere in the backend (common or PowerPC-specific) which comes and goes
depending on whether some particular code is transformed by the backend to
tickle it.  I do not know.

	I would be happy if someone were to figure out what transformation
is causing this in egcs-1.1 but I probably do not have time as the bug
currently does not occur.

David



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