On 03/04/2016 09:50 PM, John Colvin wrote:
On Friday, 4 March 2016 at 23:33:40 UTC, Andrei Alexandrescu wrote:
On 03/04/2016 04:19 PM, H. S. Teoh via Digitalmars-d wrote:
Why not rather improve dmd optimization, so that such manual
optimizations are no longer necessary?
As I mentioned, optimizing the use of stride in large (non-inlined)
functions is a tall order. -- Andrei
It seems to me that if the stride is available in the calling scope as
usable for a stride template parameter (i.e. as a compile-time value )
then it would also be just as available to the optimiser after the
trivial inlining of stride (note not any arbitrarily complex code that
contains stride, just stride).
Sure, if you nest it away in un-inlineable constructs then it won't be
easily optimised, but you wouldn't be able to use it as a template
parameter then anyway.
Again, this is just speculation, and not very credible. Why push it? Of
course we could sit all day discussing what a sufficiently smart or
sufficiently dumb compiler is and is not liable to do. The matter of
fact is (a) yes, specializing a function for a particular parameter
value is a known optimization; (b) it is mostly used for virtual methods
to avoid vcall overheads, and in particular the compiler won't generate
two separate large-ish functions for two separate parameter values.
Do you have a concrete example where the optimisation(s) you want to
occur cannot be done with `stride` as it is?
Of course. I've been working on such for a month. I cannot make the
samples public for the time being. Point is, there's no need to.
Andrei