https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97706
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
I guess we're missing what usually is done by bool patterns here, namely
adding a conversion from the mask vector type produced by the comparison
to the value vector type.
A simple workaround would be to reject such PHIs but I wonder how many
other uses prevail. I don't remember why we chose to assign a mask
vector type to the LHS of the comparisons.
For the SSE case adding compensation via a VIEW_CONVERT_EXPR is possible
but for the AVX512 mask case that's more involved:
> ./cc1 -quiet t.i -O3 -fdump-tree-slp-details -mavx512f -mavx512vl -mavx512bw
t.i: In function 'foo':
t.i:3:6: error: incompatible types in 'PHI' argument 0
3 | void foo(int n, char *p)
| ^~~
vector(16) unsigned char
vector(16) <signed-boolean:1>
vect_b0_104.7_123 = PHI <mask_b0_37.6_106(3)>
need to think about this.