inlining

Lutger Blijdestijn lutger.blijdestijn at gmail.com
Tue Dec 7 07:20:45 PST 2010


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. 


More information about the Digitalmars-d-learn mailing list