inlining or not inlining...

spir denis.spir at gmail.com
Sat Feb 12 23:06:18 PST 2011


On 02/13/2011 04:13 AM, so wrote:
> On Sat, 12 Feb 2011 13:20:36 +0200, spir <denis.spir at gmail.com> wrote:
>
>> On 02/12/2011 12:15 PM, Jim wrote:
>>> Sorry about that, but I think that is a closely related discussion. @inline
>>> is certainly a verb -- even imperative mood, so not just asking for
>>> information.
>>> Why do you need information if you can't affect the outcome?
>>
>> I want to know it. First, because it's valuable information in and by itself.
>> Second, because it teaches me something. Third, because I can then possibly
>> decide to not factor out (may be wrong, but still, I can measure...).
>> Glasnost for compilers! ;-)
>>
>> Denis
>
> This is to all of you. Inlining is not a toy, knowing if a function is inlined
> or not has no practical purposes in the sense you are asking, or any other for
> that matter.
> This is a low level optimization, again it is not a toy to play with, and D
> being a system language (where function call is cheap) makes this even more
> meaningless.

How many times do I need to repeat I do not want to force inlining? Or what 
else are you talking about?

Instead, I want to /know/. Example use: ensure trivial externalisation dist 
below will be properly inlined back by the compiler. I factorise out dist for 
code clarity, but do not want this to cause stupid performance penalty. Cases:
* the compiler shut up --> ok
* the compiler says 'no' -- possibly 'because ...'
     ~ I can decide to unfactor out
     ~ I can measure, and realise cost of func call is nothing compared to 
square root
     ~ I may learn something from additional info
     ~ I may realise the case is not as trivial as it seems
     ~ I may learn about highering chances of inlining

// billions of them
struct Point {
     float x,y;
     float d;
     this (float x, float x) {
         this.x = x;
         this.y = y;
         // inline or not inline?
         this.d = dist(x,y);
pragma (inlineinfo) {
     static float dist (int x, int y) {
         return squareRoot(x*x + y*y);
     }
}
}

Denis
-- 
_________________
vita es estrany
spir.wikidot.com



More information about the Digitalmars-d mailing list