inlining
spir
denis.spir at gmail.com
Tue Dec 7 11:52:46 PST 2010
On Tue, 07 Dec 2010 16:20:45 +0100
Lutger Blijdestijn <lutger.blijdestijn at gmail.com> wrote:
> Lutger Blijdestijn wrote:
>
> > spir wrote:
> >
> >> On Tue, 07 Dec 2010 13:44:18 +0100
> >> Lutger Blijdestijn <lutger.blijdestijn at gmail.com> wrote:
> >>
> >>> There are some other conditions that prevent inlining, it's best to
> >>> check for it. iirc also functions with loops, delegate and ref
> >>> parameters cannot be inlined for example. I'm not so sure about ref,
> >>> that may have been improved since the last time I checked. Perhaps also
> >>> for some class of delegates, at least ldc supposedly can inline some
> >>> functions with delegate parameters.
> >>
> >> What do you mean with ref, ref parameters? If yes, why ar they
> >> problematic?
> >>
> >> Denis
> >> -- -- -- -- -- -- --
> >> vit esse estrany ☣
> >>
> >> spir.wikidot.com
> >
> > this:
> >
> > void foo(ref int a) { a++; }
> >
> > At the time I checked, this function could not be inlined by dmd, which
> > can cost performance in some cases.
>
> ok I checked it, it seems the dmd has improved in the meantime and is able
> to inline this case now.
>
> For reference:
>
> void foo(ref int a ) { a++; }
> void bar(int* a ) { a++; }
>
> void main()
> {
> int a;
> foo(a);
> bar(&a);
> }
>
> compile with -profile -inline -O and run it, it will produce a trace.log and
> trace.def file. The trace.def contain the optimal order in which to link the
> functions, the trace.log file contains a call graph and a table of timings.
> (you won't see anything interesting here, because everything is inlined).
> It's a great way to check for performance bottlenecks.
Right. Tried & worked as you say. Thenk for the tip.
denis
-- -- -- -- -- -- --
vit esse estrany ☣
spir.wikidot.com
More information about the Digitalmars-d-learn
mailing list