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: patch for 930513-1 on Darwin


> Date: Thu, 31 May 2001 17:32:19 -0700
> From: Dale Johannesen <dalej@apple.com>
> Cc: dalej@apple.com, gcc-patches@gcc.gnu.org
> 
> 
> On Thursday, May 31, 2001, at 05:03  PM, Geoff Keating wrote:
> 
> > dalej@apple.com writes:
> >
> >> Background:
> >> We have a longstanding failure on test execute/930513-1.c with -O3 for
> >> Darwin.  What happens is that a function name is passed to a callee,
> >> which expects a pointer-to-function, which is dereferenced and called.
> >> When the callee is expanded inline, the nested call becomes a direct
> >> call to the function name.  On Darwin, the required syntax for a
> >> function name is different when you call it and when you pass its
> >> address, so the inliner needs to change things to compensate.  I don't
> >> see any hooks for this in integrate.c (perhaps by coincidence, no other
> >> machine I know of has such a requirement) so I added a macro.  There
> >> will be no functional change on any other target.
> >>
> >> 2001-05-31  Dale Johannesen  <dalej@apple.com>
> >>
> >>          * integrate.c, config/rs6000/darwin.h:  for Darwin, change
> >> function name
> >>             syntax when function passed as parameter is called, due to
> >> inlining.  Macro
> >>            ADJUST_CALLEE_SYM_NAME added.  Functional change on Darwin
> >> only.
> >
> > Why can't this transformation be done in the call patterns of the MD 
> > file?
> > I think that's how it's done for AIX.
> 
> Maybe.  Could you be more specific?  I looked at the AIX code, but it 
> looked like the problem didn't occur there.  Presumably you would 
> generate a call_indirect_aix32 (or variant) originally, which matches 
> *call_indirect_nonlocal_aix32 later, but that only accepts a register as 
> op0.  In the problem case this inliner has changed this to a symbol_ref, 
> and I don't see anything that matches that.  Which led me to believe 
> that the inliner doesn't do this substitution in the AIX case, which is 
> plausible as the call_indirect_aix32 code is more complex.  Of course 
> I'd like to look at what actually happens on AIX, but I don't have one.

Thinking about AIX makes my head hurt, but...

I would do this (in general) by having only one internal
representation of function names, and changing its form only when
it actually gets output.

-- 
- Geoffrey Keating <geoffk@geoffk.org>


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