Fold blendv builtins into gimple.
commit28560c6d4043d8f6ac570f35fb84e952e9c719fe
authorliuhongt <hongtao.liu@intel.com>
Fri, 21 May 2021 01:48:18 +0000 (21 09:48 +0800)
committerliuhongt <hongtao.liu@intel.com>
Mon, 28 Jun 2021 01:15:40 +0000 (28 09:15 +0800)
tree197e95607f3aab986ded459debbe1b36ab644932
parenta766c79fc64bba66f16adfe1c8639b5857219f4d
Fold blendv builtins into gimple.

Fold __builtin_ia32_pblendvb128 (a, b, c) as VEC_COND_EXPR (c < 0, b,
a), similar for float version but with mask operand VIEW_CONVERT_EXPR
to same sized integer vectype.

gcc/ChangeLog:

* config/i386/i386-builtin.def (IX86_BUILTIN_BLENDVPD256,
IX86_BUILTIN_BLENDVPS256, IX86_BUILTIN_PBLENDVB256,
IX86_BUILTIN_BLENDVPD, IX86_BUILTIN_BLENDVPS,
IX86_BUILTIN_PBLENDVB128): Replace icode with
CODE_FOR_nothing.
* config/i386/i386.c (ix86_gimple_fold_builtin): Fold blendv
builtins.
* config/i386/sse.md (*<sse4_1_avx2>_pblendvb_lt_subreg_not):
New pre_reload splitter.

gcc/testsuite/ChangeLog:

* gcc.target/i386/funcspec-8.c: Replace
__builtin_ia32_blendvpd with  __builtin_ia32_roundps_az.
* gcc.target/i386/blendv-1.c: New test.
* gcc.target/i386/blendv-2.c: New test.
gcc/config/i386/i386-builtin.def
gcc/config/i386/i386.c
gcc/config/i386/sse.md
gcc/testsuite/gcc.target/i386/blendv-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/blendv-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/funcspec-8.c