public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Paul Koning <paulkoning@comcast.net>
To: Segher Boessenkool <segher@kernel.crashing.org>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH] wwwdocs: Note that old reload is deprecated
Date: Thu, 12 Jan 2023 10:07:20 -0500	[thread overview]
Message-ID: <B92296D1-0A0F-41B0-BB04-A8AB7E932A89@comcast.net> (raw)
In-Reply-To: <20230112144030.GA25951@gate.crashing.org>



> On Jan 12, 2023, at 9:40 AM, Segher Boessenkool <segher@kernel.crashing.org> wrote:
> 
> On Thu, Jan 12, 2023 at 09:17:31AM -0500, Paul Koning wrote:
>>> On Jan 12, 2023, at 4:50 AM, Segher Boessenkool <segher@kernel.crashing.org> wrote:
>>> I mean general_operand accepts that sp thing you saw.  But your
>>> constraints do not?  (I don't know your target well, maybe this isn't
>>> true).  Things like this should be sorted out by reload, but you get
>>> better code (and fewer problems ;-) ) if you make code that fits
>>> earlier.  The L in LRA means "local": it "just" makes things fit, it
>>> does not emphasise optimising your code.
>> 
>> The destination is "nonimmediate_operand" which matches what the machine actually does.  It's like VAX and M68k, instruction operands in general can be registers, memory references, register indirect or memory indirect, memory at register with offset, or autoinc/autodec off any register.
>> 
>> As far as operand type is concerned, SP is certainly a valid operand for an add operation, that isn't the problem.  The problem is that it's a two operand machine: the first operand of the add instruction is both source and destination.  And LRA assigned the source register to be the destination register as required, but then after doing so it replaced the destination (an FP reference) by a different register (SP reference), violating the constraint after having satisfied it earlier.
> 
> Ah okay.  Yes, something does not verify if the instructions are valid
> before doing some replacement.  Something around ELIMINABLE_REGS it
> looks like?  Maybe the dump file says more, or maybe the dump file can
> be improved.

The Reload dump file mentions in a couple of places that it sees r5 (FP) as eliminable, replaced by r6 (SP).  The IRA dump file says nothing.

Yes, the ELIMINABLE_REGS macro says FP can be eliminated, which is correct.  In fact, if it weren't for that, it would be wrong for the register allocator to pick it (R5) as a general register to hold the result of that addhi3.  So the trouble is that the replacement is made after that register allocation, and given the constraint the allocator actually needs to generate an additional instruction, a move from SP to R5 so it can then do the two-operand add the constraint requires.

This feels like a bug; should I file a bug report?  Or is there something the target code can do to make this work?  I looked through the internals manual a bit, it doesn't show anything helpful.  The register elimination hooks are rather generic and don't give me any handle to recognize cases like this one.

	paul


      reply	other threads:[~2023-01-12 15:07 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-05 19:27 Segher Boessenkool
2023-01-05 19:54 ` Paul Koning
2023-01-05 20:23   ` Segher Boessenkool
2023-01-11 14:21 ` Gerald Pfeifer
2023-01-11 14:34   ` Richard Biener
2023-01-11 15:15     ` Segher Boessenkool
2023-01-11 16:27       ` Richard Biener
2023-01-11 18:32         ` Segher Boessenkool
2023-01-11 18:39           ` Richard Biener
2023-01-11 19:07             ` Segher Boessenkool
2023-01-12  7:44               ` Richard Biener
2023-01-12  7:48                 ` Richard Biener
2023-01-11 18:42           ` Paul Koning
2023-01-11 19:28             ` Segher Boessenkool
2023-01-11 22:07               ` Paul Koning
2023-01-12  9:50                 ` Segher Boessenkool
2023-01-12 14:17                   ` Paul Koning
2023-01-12 14:40                     ` Segher Boessenkool
2023-01-12 15:07                       ` Paul Koning [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=B92296D1-0A0F-41B0-BB04-A8AB7E932A89@comcast.net \
    --to=paulkoning@comcast.net \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=segher@kernel.crashing.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).