This is the mail archive of the gcc-regression@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]
Other format: [Raw text]

Re: 6 GCC regressions, 2 new, with your patch on 2002-07-20T23:26:42Z.


> On Wed, Jul 24, 2002 at 04:48:32PM -0700, Geoff Keating wrote:
> > > Your reasoning is incorrect.  REG_EQUIV is a _local_ equivalence,
> > > free to be killed at any moment.  REG_EQUAL is the global equivalence.
> > 
> > It's the other way around.
> 
> I realized this while driving home.   :-/
> 
> > Thus, it looks like the right thing for this problem is to generate a
> > REG_EQUAL note instead of a REG_EQUIV.
> 
> That may be correct.  If the register isn't modified, local-alloc
> will promote the note to REG_EQUIV, which will cause reload to use
> the mem as the spill backing store.

Yes.  I think that was the effect of patch I sent to Andreas for
benchmarking. That one removed the notes entirely, but at least on i386,
the load instruction is unambiguous, so register allocator should
understand it without trouble.

It causes small performance degradation and code size growth.  Perhaps
it is the register allocator not being able to produce the REG_EQUIV
note as alias analysis is too weak?  Or do we have some other uses for
REG_EQUIV notes around the code that may make the difference? (I know
that CSE, alias analysis and friends.  It probably can and should be
made to work generically on non_REG_EQUIVed insns.

Honza
> 
> Of course, if spill backing store is really what we're after, we
> should probably have a different sort of annotation for it.
> 
> 
> r~


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