This code
void foo(float * restrict a, float * restrict b, float * restrict c, unsigned n) { for (unsigned i = 0; i < n; ++i) c[i] = a[i] * b[i]; }
was compiled with "-march=knl" but used only %ymm registers.
With my fix applied the generated code will use %zmm registers as it should be.
You can remove the '#0' from the signature of @foo since it is not used.