[Bug target/104401] [x86] Failure to recognize min/max pattern using pcmp+pblendv

crazylht at gmail dot com gcc-bugzilla@gcc.gnu.org
Mon Feb 7 06:51:27 GMT 2022


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

--- Comment #2 from Hongtao.liu <crazylht at gmail dot com> ---
(In reply to Andrew Pinski from comment #1)
> (set (reg:V16QI 93)
>     (unspec:V16QI [
>             (subreg:V16QI (reg/v:V2DI 92 [ input ]) 0)
>             (subreg:V16QI (reg/v:V2DI 91 [ value ]) 0)
>             (subreg:V16QI (gt:V4SI (subreg:V4SI (reg/v:V2DI 92 [ input ]) 0)
>                     (subreg:V4SI (reg/v:V2DI 91 [ value ]) 0)) 0)
>         ] UNSPEC_BLENDV))
> 
> blend uses unspec which makes this a little harder

I think it could be done in gimple level.

 18  _10 = VIEW_CONVERT_EXPR<vector(4) int>(value_2(D));
 19  _11 = VIEW_CONVERT_EXPR<vector(4) int>(input_3(D));
 20  _12 = _10 < _11;
 21  _13 = VIEW_CONVERT_EXPR<vector(4) int>(_12);
 22  _5 = VIEW_CONVERT_EXPR<vector(16) char>(_13);
 23  _4 = VIEW_CONVERT_EXPR<vector(16) char>(value_2(D));
 24  _6 = VIEW_CONVERT_EXPR<vector(16) char>(input_3(D));
 25  _8 = .VCOND (_5, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, _4,
_6, 108);
 26  _9 = VIEW_CONVERT_EXPR<__m128i>(_8);


More information about the Gcc-bugs mailing list