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;
}