On 11/3/2017 3:02 AM, Mike Parker wrote:
For clarity, where the changeling says that GDC & LDC use auto-vectorization,
that's actually happening with the array operations and core.simd is not
I think that GDC and LDC do do auto-vectorization, but I haven't verified it
Auto-vectorization is a fundamentally bizarre feature. It takes low level code
and reverse-engineers it back into a higher level construct, and then proceeds
to generate code for that higher level construct.
Everything else a compiler does is start from a high level construct and then
generate low level code.
The trouble with AV is whether it succeeds or not depends on peculiarities (and
I mean peculiarities) of the particular vector instruction set target. It can
decided to not vectorize based on seemingly trivial and innocuous changes to the
loop. The only way to tell is to benchmark it or look at the object file -
methods that are unreliable (benchmarking) or do not scale (manually looking at
the object file).
What's needed is a language feature that is straightforwardly vectorizable. That
would be D's array operations.