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: [PATCH 4/6]: Ping: Merge from Stack Branch - i386 backend changes


On Tue, May 6, 2008 at 6:01 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Tue, May 6, 2008 at 6:24 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
>  >
>  > On Mon, May 05, 2008 at 09:40:06PM -0700, H.J. Lu wrote:
>  >  > On Mon, May 5, 2008 at 9:25 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>  >  > >
>  >  > > On Mon, May 5, 2008 at 8:12 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>  >  > >  >
>  >  > >  > On Mon, May 5, 2008 at 5:57 PM, Ye, Joey <joey.ye@intel.com> wrote:
>  >  > >  >  > Jan,
>  >  > >  >  >
>  >  > >  >  > > You can certainly track this with callgraph.  I.e. use case 0 by
>  >  > >  >  >  > default, but case 2 if you know bar is being called only from foos
>  >  > >  >  >  that
>  >  > >  >  >  > will align anyway.
>  >  > >  >  >  > Since we compile in topological order, it all depends on how well you
>  >  > >  >  >  > are able to decide on alignments at tree level or if you want to go
>  >  > >  >  >  down
>  >  > >  >  >  > the road of alternate entry point (so foo can skip alignment prologue
>  >  > >  >  >  if
>  >  > >  >  >  > called from function with proper alignment guaranteed).
>  >  > >  >  >  How about bar is called from other compilation units? Call callgraph
>  >  > >  >  >  track that?
>  >  > >  >  >
>  >  > >  >
>  >  > >  >  As far as I can tell, preferred_incoming_stack_boundary tracked by callgraph
>  >  > >  >  is a best effort approach. There is no guarantee that all callers will satisfy
>  >  > >  >  preferred_incoming_stack_boundary needed by callee. If callee needs strict
>  >  > >  >  alignment, it has to align the stack itself.
>  >  > >  >
>  >  > >  >  With automatic stack alignment, we don't need to collect
>  >  > >  >  preferred_incoming_stack_boundary
>  >  > >  >  in callgraph.  Without automatic stack alignment, we align outgoing stack
>  >  > >  >  to PREFERRED_STACK_BOUNDARY, no more and no less. If
>  >  > >  >  preferred_incoming_stack_boundary > PREFERRED_STACK_BOUNDARY,
>  >  > >  >  we still can't align outgoing stack to preferred_incoming_stack_boundary.
>  >  > >  >
>  >  > >
>  >  > >  Hi Joey,
>  >  > >
>  >  > >  If we know all incoming stack alignments of functions we call, can we optimize
>  >  > >  stack for caller? That is for
>  >  > >
>  >  > >  foo ()
>  >  > >  {
>  >  > >   bar1 ();
>  >  > >  ...
>  >  > >   bar2 ();
>  >  > >  }
>  >  > >
>  >  > >  the required stack boundary of foo will be
>  >  > >
>  >  > >  MAX (LOCAL, MIN (PREFERRED, MAX (INCOMING (bar1), INCOMING (bar2))))
>  >  > >
>  >  > >  We may be able to use less stack in foo if the required stack boundary
>  >  > >  is smaller.
>  >  > >  But it won't affect stack alignment in foo since we won't align
>  >  > >  outgoing stack beyond
>  >  > >  PREFERRED unless we need to put something on stack.
>  >  > >
>  >  >
>  >  > Hi Joey,
>  >  >
>  >  > We don't care about if the caller is a leaf function or not. As long
>  >  > as we know stack alignments of all callees, we can optimize
>  >  > stack usage.
>  >  >
>  >  >
>  >
>  >  I am checking in this patch into stack branch.
>  >
>  >  Thanks.
>  >
>  >  H.J.
>  >  ----
>  >  Index: ChangeLog.stackalign
>  >  ===================================================================
>  >  --- ChangeLog.stackalign        (revision 134915)
>  >  +++ ChangeLog.stackalign        (working copy)
>  >  @@ -1,3 +1,11 @@
>  >  +2008-05-06  Joey Ye  <joey.ye@intel.com>
>  >  +
>  >  +       * calls.c (expand_call): Do calculate preferred stack
>  >  +       boundary according to incoming stack boundary.
>  >  +
>  >  +       * config/i386/i386.c (ix86_internal_arg_pointer): Check
>  >  +       crtl->preferred_stack_boundary instead of PREFERRED_STACK_BOUNDARY.
>  >  +
>  >   2008-04-26  H.J. Lu  <hongjiu.lu@intel.com>
>  >
>
>  Unfortunately, this doesn't work with C++ EH. Jan, does callgraph
>  collect incoming
>  stack alignment for exception? If not, we have to use PREFERRED_STACK_BOUNDARY
>  if there is exception.
>

I am checking in this patch to stack branch to fix the problem.

Thanks.


H.J.
---
2008-05-07  H.J. Lu  <hongjiu.lu@intel.com>
            Joey Ye  <joey.ye@intel.com>

        * config/i386/i386.c (ix86_internal_arg_pointer): Check
        PREFERRED_STACK_BOUNDARY if there may be exceptions.

Attachment: e.txt
Description: Text document


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