https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105490
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
See Also| |https://gcc.gnu.org/bugzill
| |a/show_bug.cgi?id=111149
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
So what is interesting is we do handle:
```
#define N 256
typedef short T;
extern T a[N];
extern T b[N];
extern T c[N];
extern _Bool pb[N];
extern _Bool pb1[N];
void predicate_by_bool_ne()
{
for (int i = 0; i < N; i++)
c[i] = pb[i] != pb1[i] ? a[i] : b[i];
}
```
But not:
```
#define N 256
typedef short T;
extern T a[N];
extern T b[N];
extern T c[N];
extern _Bool pb[N];
extern _Bool pb1[N];
void predicate_by_bool_and()
{
for (int i = 0; i < N; i++)
c[i] = (pb[i] & pb1[i]) ? a[i] : b[i];
}
```
And If I change the canonical form of `bool != bool` into `bool ^ bool` things
break down in a similar way. I tried to look into a reasonible way of handling
this in the vectorizer but I could not figure out how to treat `^` in the same
way as `!=`.