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