rs6000: Add vec_unpacku_{hi,lo}_v4si
authorKewen Lin <linkw@linux.ibm.com>
Wed, 25 Aug 2021 02:58:14 +0000 (21:58 -0500)
committerKewen Lin <linkw@linux.ibm.com>
Wed, 25 Aug 2021 02:58:14 +0000 (21:58 -0500)
commita20be0cdc068d9ffab7bf0c9d2a8702162746bd8
treeb8aa5dd0159c14f6924996710f91d40ca926cb33
parent4f5391dde1a83086b451f7534c815ab1267bb6bc
rs6000: Add vec_unpacku_{hi,lo}_v4si

The existing vec_unpacku_{hi,lo} supports emulated unsigned
unpacking for short and char but misses the support for int.
This patch adds the support of vec_unpacku_{hi,lo}_v4si.

Meanwhile, the current implementation uses vector permutation
way, which requires one extra customized constant vector as
the permutation control vector.  It's better to use vector
merge high/low with zero constant vector, to save the space
in constant area as well as the cost to initialize pcv in
prologue.  This patch updates it with vector merging and
simplify it with iterators.

gcc/ChangeLog:

* config/rs6000/altivec.md (vec_unpacku_hi_v16qi): Remove.
(vec_unpacku_hi_v8hi): Likewise.
(vec_unpacku_lo_v16qi): Likewise.
(vec_unpacku_lo_v8hi): Likewise.
(vec_unpacku_hi_<VP_small_lc>): New define_expand.
(vec_unpacku_lo_<VP_small_lc>): Likewise.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/unpack-vectorize-1.c: New test.
* gcc.target/powerpc/unpack-vectorize-1.h: New test.
* gcc.target/powerpc/unpack-vectorize-2.c: New test.
* gcc.target/powerpc/unpack-vectorize-2.h: New test.
* gcc.target/powerpc/unpack-vectorize-3.c: New test.
* gcc.target/powerpc/unpack-vectorize-3.h: New test.
* gcc.target/powerpc/unpack-vectorize-run-1.c: New test.
* gcc.target/powerpc/unpack-vectorize-run-2.c: New test.
* gcc.target/powerpc/unpack-vectorize-run-3.c: New test.
* gcc.target/powerpc/unpack-vectorize.h: New test.
gcc/config/rs6000/altivec.md
gcc/testsuite/gcc.target/powerpc/unpack-vectorize-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/unpack-vectorize-1.h [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/unpack-vectorize-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/unpack-vectorize-2.h [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/unpack-vectorize-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/unpack-vectorize-3.h [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/unpack-vectorize-run-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/unpack-vectorize-run-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/unpack-vectorize-run-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/powerpc/unpack-vectorize.h [new file with mode: 0644]