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

Reply via email to