Force inline

berni via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Feb 20 04:47:43 PST 2017


On Sunday, 19 February 2017 at 20:00:00 UTC, Daniel Kozak wrote:
> Dne 19.2.2017 v 20:19 berni via Digitalmars-d-learn napsal(a):
>
>> Is it possible to force a function to be inlined?
>>
>> Comparing a C++ and a D program, the main difference in speed 
>> (about 20-30%) is, because I manage to force g++ to inline a 
>> function while I do not find any means to do the same on D.
> yes
> https://wiki.dlang.org/DIP56

pragma(inline, true) doesn't work out well:

>int bar;
>
>void main(string[] args)
>{
>    if (foo()) {}
>}
> 
>bool foo()
>{
>    pragma(inline, true)
>
>    if (bar==1) return false;
>    if (bar==2) return false;
>
>    return true;
>}

with

> dmd -inline test.d

I get

> test.d(8): Error: function test.foo cannot inline function

When I remove -inline, it compiles, but seems not to inline. I 
cannot tell from this small example, but with the large program, 
there is no speed gain.

It also compiles with -inline when I remove the "if (bar==2)...". 
I guess, it's now really inlining, but the function is 
ridiculously short...

I havn't tried the approach with templates yet, due to my lack of 
understanding templates.


More information about the Digitalmars-d-learn mailing list