Enhance vec_pack_trunc for integral mode mask.
authorliuhongt <hongtao.liu@intel.com>
Mon, 17 Jan 2022 02:47:46 +0000 (10:47 +0800)
committerliuhongt <hongtao.liu@intel.com>
Thu, 20 Jan 2022 08:51:10 +0000 (16:51 +0800)
commit8bc700f4c3fbe405413db02281ef2918bfa831fc
tree02d82c92a7bc07f91bbf78f037849a625a26be80
parentad4188f8385f86cc04806fb0e26c7da1f5f655b8
Enhance vec_pack_trunc for integral mode mask.

For testcase in PR, the patch supports QI:4 -> HI:16 pack with
multi steps(first pack QI:4 -> QI:8 through vec_pack_sbool_trunc_qi,
then pack QI:8 -> HI:16 through vec_pack_trunc_hi).
Similar for QI:2 -> HI:16 which is test4 in mask-pack-prefer-128.c.

gcc/ChangeLog:

PR target/103771
* tree-vect-stmts.cc (supportable_narrowing_operation): Enhance
integral mode mask pack by multi steps which takes
vec_pack_sbool_trunc_optab as start when elements number is
less than BITS_PER_UNITS.

gcc/testsuite/ChangeLog:

* gcc.target/i386/mask-pack-prefer128.c: New test.
* gcc.target/i386/mask-pack-prefer256.c: New test.
* gcc.target/i386/pr103771.c: New test.
gcc/testsuite/gcc.target/i386/mask-pack-prefer128.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/mask-pack-prefer256.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr103771.c [new file with mode: 0644]
gcc/tree-vect-stmts.cc