This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
RE: own target: combine emits invalid RTL
- From: "Dave Korn" <dave dot korn at artimi dot com>
- To: "'Jim Wilson'" <wilson at specifix dot com>, "'Michael_fogel'" <mikfogel at uni-koblenz dot de>
- Cc: <gcc at gcc dot gnu dot org>
- Date: Fri, 16 Nov 2007 14:20:58 -0000
- Subject: RE: own target: combine emits invalid RTL
- References: <473CD0A2.3040600@uni-koblenz.de> <473CDDC8.3060503@specifix.com>
On 16 November 2007 00:01, Jim Wilson wrote:
> Michael_fogel wrote:
>> (ior:SI (subreg:SI (mem/s:QI (reg/f:SI 1250) [0
>> <variable>.flags+0 S1 A32]) 0)
>
> See register_operand and general_operand in recog.c. (SUBREG (MEM)) is
> accepted by register_operand if INSN_SCHEDULING is not defined, for
> historical reasons. This is something that should be fixed some day.
>
> INSN_SCHEDULING is defined if you have any of the instruction scheduling
> related patterns in your md file. If this is a new port, and you
> haven't tried to add instruction scheduling support, then
> INSN_SCHEDULING won't be defined yet.
>
> Anyways, this means that the RTL is correct, and we expect reload to fix
> it. The error from gen_reg_rtx implies that reload is failing, perhaps
> because of a bug in your port that doesn't handle (SUBREG (MEM)) correctly.
>
> There are other legitimate cases where (SUBREG (MEM)) can occur during
> reload, when you have a subreg of an pseudo that did not get allocated
> to a hard register for instance, so even if register_operand and
> general_operand are changed, you still need to find and fix the bug in
> your port.
First places to look would be GO_IF_LEGITIMATE_ADDRESS and
REG_OK_FOR_BASE_P, wouldn't they? Particularly in conjunction with
REG_OK_STRICT.
cheers,
DaveK
--
Can't think of a witty .sigline today....