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]
Other format: [Raw text]

Re: [tree-ssa] Temporary Expression Replacement in SSA->normal.


> On Fri, 2003-11-28 at 15:15, Zack Weinberg wrote:
> > Andrew MacLeod <amacleod@redhat.com> writes:
> 
> > >
> > >   T.624 = search.b_pawn;
> > >   T.717 = FirstOne (T.624);
> > >   T.650 = search.white_king;
> > >   T.651 = (int)T.650;
> > >   T.718 = T.651 & 7;
> > >   T.638 = T.717 & 7;
> > >   T.719 = T.718 - T.638;
> > >   T.720 = T.719 - -1;
> > >   T.721 = (unsigned int)T.720;
> > >   if (T.721 <= 2)
> > >
> > > being turned into
> > >
> > >   T.717 = FirstOne (search.b_pawn);
> > >   T.650 = search.white_king;
> > >   T.638 = T.717 & 7;
> > >   if ((unsigned int)(((int)T.650 & 7) - T.638 - -1) <= 2)
> > 
> > ... which is going to get rewritten back to the original example, but
> > with pseudos instead of temp variables, by the tree->rtl expander.  As
> > such I think this patch is barking up the wrong tree.  Shouldn't we
> > instead make the RTL expander expect and understand GIMPLE form?  This
> > would save work, avoid the temporary-explosion problem, and allow the
> > RTL expression expander to be made dramatically simpler.
> > 
> > Synthesis of complex machine instructions, where available, is
> > combine's job.
> 
> 
> I beleive that is the longer term plan, but this was pretty simple to do
> and gets us a bunch of runtime performance back until we have the time
> to get to it and take care of it properly. -fno-tree-ter turns it off so
> we can compare results when we do that work.
> 
> It'll be removed when its no longer needed.

Do you also have some data on how it compares to the idea of running
webizer early?  It seem to me that there are two unrelated problems -
one is that expanders are sometimes smart about nested expressions, but
this should be more or less dealt with by ccp.  The other problem is
that we are re-using RTL temporary registers and this is fixable by
other ways (like by not re-using temporaries during gimplification or
not re-use variables with nonoverlaping live ranges during de-ssa) and
your change then would just mask majority of problematic cases, but not
all of them.

Honza
> 
> Andrew


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