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: LTO and the inlining of functions only called once.


On Sat, Oct 10, 2009 at 12:55 PM, Toon Moene <toon@moene.org> wrote:
> Gcc's man page says:
>
> ? ? ? -finline-functions-called-once
> ? ? ? ? ? Consider all "static" functions called once for inlining into
> ? ? ? ? ? their caller even if they are not marked "inline". ?If a call
> ? ? ? ? ? to a given function is integrated, then the function is not
> ? ? ? ? ? output as assembler code in its own right.
>
> ? ? ? ? ? Enabled at levels -O1, -O2, -O3 and -Os.
>
> Now, when using -flto -fwhole-program, *all* functions (that the user
> provided) will be "static inline", no ? - so *all* functions only called
> once in that program will be inlined ?

Well, I think that we should try to not do this across the whole program.
Simply for the reason that a gigantic main function will hit several
non-linear complexity algorithms in GCC.

> I am asking because our most important programs often consist of a chain of
> "routines-that-do-all-the-work" which are all only called once. However, in
> general they are (certainly when viewed from the perspective of a C
> programmer) *huge*.
>
> E.g., our forecast program:
>
> ? ? HLPROG (small "main" program)
> ? ? ? ?|
> ? ? ? ?| calls
> ? ? ? ?V
> ? ? GEMINI (read input files, write output files, and:)
> ? ? ? ?|
> ? ? ? ?V
> ? ? SL2TIM (time stepping, and:)
> ? ? ? ?|
> ? ? ? ?V
> ? ? PHCALL (subgrid scale computations)
> ? ? ? ?|
> ? ? ? ?V
> ? ? PHTASK (split them into tasks over model domain)
> ? ? ? ?|
> ? ? ? ?V
> ? ? PHYS ? (actually hand out the work to:)
> ? ? ? ?|
> ? ? ----------------------
> ? ? | ? ?| ? ?| ? ? | ? ?|
> ? ? LSP ?CVP ?RADIA TURB SOIL
>
> ? ? (large scale precipitation, convective precipitation,
> ? ? ?radiation, turbulence, soil processes)
>
> ? ? The last five are each around 2,000 lines of Fortran, the P routines are
> each several hundreds of lines, as is SL2TIM. ?GEMINI is more than 2,000
> lines.
>
> My question is: How can I be sure that all of them are integrated (note that
> the man page says they are "considered") ? ?Does -Winline help here ?
> ?Perhaps I should scan the assembler output (HAH!).

-Winline doesn't help here.  Scanning the assember output does (obviously!).

Note that I wouldn't expect such aggressive inlining to have any positive
performance impact - were it not for the fact that we still lack a properly
operating IPA points-to analysis pass (yes, it's on my todo list - but
not for 4.5).

Richard.


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