This is the mail archive of the gcc@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 memory and compile-time regressions


On Thu, 8 Jan 2004, Jan Hubicka wrote:

> > Hi!
> >
> > I just tried todays tree-ssa branch (wanting to look at tree-sra and
> > tree-points-to=andersen) with POOMA and experience problems
> > getting my application to finish compiling at all...
> >
> > Looking at the testcase (stripped down application)
> > http://www.tat.physik.uni-tuebingen.de/~rguenth/gcc/apressure.ii.gz
> >
> > timings are (1GHz Athlon, 1G ram), all with -fno-exceptions:
> >
> > -O0 220MB, 0m17s
> > -O1 260MB, 0m24s
> > -O2 800MB, 7m35s  (-ftime-report on a faster machine attached below)
> > -O2 -fno-unit-at-a-time 260MB, 0m28s
>
> It seems to me that inlining just drives ssa-pre pass crazy.
> You can take a look into -dU dump, it contains information about what
> functions get inlinined where and the overall growth.
> In general the growth shall never exceed 100% so this seems to be either
> very nonlinear behaviour of something in the size of function or bug in
> code size estimation.

F.i.

Deciding on smaller functions:

Considering Interval<Dim>::~Interval() [with int Dim = 3] with 0 insns
 Estimated growth is -1390 insns.
 Inlined into EvaluateLocLoop<Forgas::APressure<3>, 3>::~EvaluateLocLoop()
which now has -10 insns.
 Inlined into INode<Dim>::~INode() [with int Dim = 3] which now has -10
insns.
...

negative code sizes don't look right? So out of zero instruction inline
we generate -1390 instructions? Here's something wrong. Like (unchecked):

Index: cgraphunit.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cgraphunit.c,v
retrieving revision 1.1.4.29
diff -u -c -3 -r1.1.4.29 cgraphunit.c
*** cgraphunit.c	4 Jan 2004 15:48:30 -0000	1.1.4.29
--- cgraphunit.c	8 Jan 2004 15:34:09 -0000
***************
*** 796,802 ****
  cgraph_estimate_size_after_inlining (int times, struct cgraph_node *to,
  				     struct cgraph_node *what)
  {
!   return (what->global.insns - INSNS_PER_CALL) * times + to->global.insns;
  }

  /* Estimate the growth caused by inlining NODE into all callees.  */
--- 796,803 ----
  cgraph_estimate_size_after_inlining (int times, struct cgraph_node *to,
  				     struct cgraph_node *what)
  {
!   int newsize = (what->global.insns - INSNS_PER_CALL) * times + to->global.insns;
!   return newsize > 0 ? newsize : 0;
  }

  /* Estimate the growth caused by inlining NODE into all callees.  */


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