DIP56 Provide pragma to control function inlining
Walter Bright
newshound2 at digitalmars.com
Sun Feb 23 16:33:09 PST 2014
On 2/23/2014 3:55 PM, Mike wrote:
> The difference is it was explicitly told do do something and didn't. That's
> insubordination.
I view this as more in the manner of providing the equivalent of runtime
profiling information to the optimizer, in indirectly saying how often a
function is executed.
Optimizing is a rather complicated process, and particular optimizations very
often have weird and unpredictable interactions with other optimizations.
For example, in the olden days, C compilers had a 'register' storage class.
Optimizers' register allocation strategy was so primitive it needed help. Over
time, however, it became apparent that uses of 'register' became bit-rotted due
to maintenance, resulting in all the wrong variables being enregistered.
Compiler register allocation got a lot better, almost always being better than
the users'. Not only that, but with generic code, and optimization rewrites of
code, many variables would disappear and new ones would take their place.
Different CPUs needed different register allocation strategies. What to do with
'register' then?
The result was compilers began to take the 'register' as a hint, and eventually
moved to totally ignoring 'register', as it turned out to be a pessimization.
I suspect that elevating one particular optimization hint to being an absolute
command may not turn out well. Inlining already has performance issues, as it
may increase the size of an inner loop beyond what will fit in the cache, for
just one unexpected result. For another it may mess up the register allocation
of the caller. "Inlining makes it faster" is not always true. Do you really want
to weld this in as an absolute requirement in the language?
More information about the Digitalmars-d
mailing list