https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105490
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Here is an even odder case:
```
#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];
extern _Bool pb2[N];
void predicate_by_booland()
{
for (int i = 0; i < N; i++)
c[i] = ((pb1[i] != pb[i]) != pb2[i]) ? a[i] : b[i];
}
```
This vectorizes currently with `-O3` but not with `-O3 -fno-tree-vrp`.
IR with -fno-tree-vrp:
```
_1 = pb1[i_15];
_2 = pb[i_15];
_3 = _1 != _2;
_4 = pb2[i_15];
iftmp.0_10 = a[i_15];
_5 = _3 != _4;
iftmp.0_9 = b[i_15];
```
IR without (VRP turned on):
```
_1 = pb1[i_15];
_2 = pb[i_15];
_3 = _1 ^ _2;
_4 = pb2[i_15];
iftmp.0_10 = a[i_15];
_5 = _3 != _4;
iftmp.0_9 = b[i_15];
```
So it is even more confusing ...