https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109301
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Tried -Ofast -mavx512f #include <math.h> void foo (double *a, double *b) { for (int i = 0; i < 1024; i++) a[i] = pow (a[i], b[i]); } void bar (double *a) { for (int i = 0; i < 1024; i++) a[i] = cbrt (sqrt (a[i])); } void baz (double *a) { for (int i = 0; i < 1024; i++) a[i] = cbrt (cbrt (a[i])); } but that doesn't trigger, it uses simd clones rather than internal functions. Strangely, bar isn't vectorized while foo and baz are.