https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119920
Bug ID: 119920 Summary: Missed vectorization for conditioned adds Product: gcc Version: 16.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: alfierichards at gcc dot gnu.org Target Milestone: --- The following case misses optimization (for Aarch64 SVE) ```c int func(int a, int b, int c, int *m, int n) { int i=0; for (i=0; i<n; i++) if ( m[i]==0 ) { a += b; } else { a += c; } return a; } ``` Whereas this case does get optimized: ```c int func(int a, int b, int c, int *m, int n) { int i=0; for (i=0; i<n; i++) a += m[i] == 0 ? b : c; return a; } ``` ifcvt successfully if-converts but we end up with: ``` a1 = a + b; a2 = a + c; a = C ? a1 : a2; ``` vs ``` a3 = C ? b : c; a = a + a3; ```