https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109088
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2023-03-10 Severity|normal |enhancement Status|UNCONFIRMED |NEW Ever confirmed|0 |1 Summary|GCC fail auto-vectorization |GCC does not always | |vectorize conditional | |reduction --- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- GCC does vectorize: if (a[i] > b[i]) { result += a[i]; } Even for variable-length vectors. Just we don't vectorize when there is an extra conditional operation. GCC will even vectorize with variable-length vectors: #include <stdint.h> uint64_t single_loop_with_if_condition( uint64_t * restrict a, uint64_t * restrict b, uint64_t * restrict c, int loop_size) { uint64_t result = 0; for (int i = 0; i < loop_size; i++) { c[i] = a[i] + 1; if (a[i] > b[i]) { result += c[i]; } } return result; }