https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104371

--- Comment #5 from Hongtao.liu <crazylht at gmail dot com> ---
(In reply to Richard Biener from comment #1)
>   <bb 2> [local count: 1073741824]:
>   _2 = VIEW_CONVERT_EXPR<__v16qi>(x_3(D));
>   _6 = _2 == { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
>   _7 = VIEW_CONVERT_EXPR<vector(16) signed char>(_6);
>   _4 = __builtin_ia32_pmovmskb128 (_7);
>   _5 = _4 == 65535;
>   return _5;
> 
> so likely one reason is the builtin and later UNSPEC for the movemask
> operation.
> 

Under AVX512BW & AVX512VL we can fold __builtin_ia32_pmovmskb128 to 

vector(16) <signed-boolean:1> temp_1 = _7 < { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0 }
temp_2 = VIEW_CONVERT_EXPR<unsigned short> temp_1; ----- ????
_4 = zero_extend temp_2;

but I'm not sure if VIEW_CONVERT_EXPR can be used between vector and integer
type.

Reply via email to