What are you talking about?
Intrinsics don't force the compiler to use a specific instruction. It's not even a 1:1 mapping.
I think all compilers will fuse separate add and mul instrinsics to fmadd.
Both GCC and Clang will convert the _mm256_div_ps to a vmulps. GCC calculates the scaling factor by combining vsqrtps and vrcpps. Clang will emit a vrsqrtps instruction, but as that has only 12 bits of guaranteed accuracy, it fixes the result up before using it to scale x, y and z.
If you take the code `v /= v.length();` and given -ffast-math the compiler can easily compile that as a mul, two fmas, an rsqrt, and three muls.
But if you take the code: (can't format right on mobile) (edit: fixed on desktop)
You've told the compiler exactly which instructions to execute. And it will do so faithfully even though it's like two orders of magnitude slower.I would be very interested to see -Ofast used before SIMD intrinsics start getting thrown around, but it has no value afterwards. The code in the linked article is eventually almost all SIMD intrinsics (v4?) so it won't make a difference.