reload and asms
Jim Wilson
wilson@specifixinc.com
Mon Jun 7 05:08:00 GMT 2004
Nathan Sidwell wrote:
> It is generating false positives, because at this point the source operands
> of the P insns are still pseudos, hence constrain_operands (1), fails,
If you look at recog.c, you will see that there is special code to
accept psuedos during reload. That is so that this piece of code will
work. If your target has special constraint letters, it is possible
that these letters aren't accepting pseudos during reload as they should.
See also EXTRA_MEMORY_CONSTRAINT and EXTRA_ADDRESS_CONSTRAINT.
This code incidentally was added by Kenner on May 27, 1992.
> even though things will all work out ok. A second problem is that
> extract_insn makes the insn memoized, so merely removing the
> constrain_operands call makes us fall over later, should the move's source
> operand be a stack slot for instance, because we'd have remembered it
> as a reg-reg move.
mov insns are special. You can't have two different patterns that match
a movsi pattern for instance. You must have only one that handles all
cases. Reload will not work otherwise. It relies on this principle in
order to work.
> Removing this block of code has not caused any problems, but I'm
> at a loss to understand what legitimate cases it would detect. Anybody
> want to clue me in?
The purpose of the code is to emit better error messages when the user
has an invalid asm. Without this code, some users will get an ICE
instead of an error telling them that they have a buggy asm statement.
You won't notice this unless you try compiling some buggy asm statements.
--
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com
More information about the Gcc
mailing list