This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Useless patterns in alpha.md
- To: Bernd Schmidt <bernds at pathia dot cygnus dot co dot uk>
- Subject: Re: Useless patterns in alpha.md
- From: Jeffrey A Law <law at cygnus dot com>
- Date: Sun, 28 Nov 1999 05:48:21 -0700
- cc: gcc-patches at gcc dot gnu dot org
- Reply-To: law at cygnus dot com
In message <Pine.LNX.4.04.9911281114420.7880-100000@pathia.cygnus.co.uk>you w
rite:
> > > That patch tries to ensure that register elimination is only done ins
> ide
> > > operands, not on those parts of the rtl which make up the structure o
> f
> > > an insn.
> > Thanks. Presumably this works because the alpha does not allow an
> > operand that looks like
> >
> > (plus (mult (frame-pointer) (...)) (...)))
> >
> > ie, the PLUS and MULT are explicit in the RTL patterns. Right?
>
> Exactly. If the plus and the mult are part of the pattern, then they won't
> be changed now. It used to be possible that register elimination would
> change a pattern, making it unrecognizable.
> (If the plus and mult are inside an operand, it can only be an
> address_operand, and register elimination can change it safely since
> find_reloads_address can fix it up. But that's not the case here.)
What about the use of addition_operation in alpha.md? Presumably it
is not a problem because it only allows (plus (reg) (const_int)) and
it uses 'p' which triggers the find_reloads_address stuff?
Note that I'm trying to get the bounds of what precisely works and what
doesn't -- other ports (like the PA) suffer from the same problem and if
I know more about why the change works I can determine if we can also
kill the special reload patterns for the other ports.
Jeff