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