This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Useless patterns in alpha.md



  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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]