rs6000: Use subreg for QI/HI vector init
authorKewen Lin <linkw@linux.ibm.com>
Wed, 16 Dec 2020 06:28:44 +0000 (00:28 -0600)
committerKewen Lin <linkw@linux.ibm.com>
Wed, 16 Dec 2020 08:12:08 +0000 (02:12 -0600)
commit31008a8bb30d8979bba5240be6b504140c5665ff
treebfe0ba276beb88f025a38c239bc54a981c05734e
parenta3bac40469b7052bfadc21cad0e53f40b147e937
rs6000: Use subreg for QI/HI vector init

This patch is to use paradoxical subreg instead of
zero_extend for promoting QI/HI to SI/DI when we
want to construct one vector with these modes.
Since we do the gpr->vsx movement and vector merge
or pack later, the high part is useless and safe to
use paradoxical subreg.  It can avoid useless rlwinms
generated for signed cases.

Bootstrapped/regtested on powerpc64le-linux-gnu P9.

gcc/ChangeLog:

* config/rs6000/rs6000.c (rs6000_expand_vector_init): Use
paradoxical subreg instead of zero_extend for QI/HI promotion.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/pr96933-1.c: Adjusted to check no rlwinm.
* gcc.target/powerpc/pr96933-2.c: Likewise.
gcc/config/rs6000/rs6000.c
gcc/testsuite/gcc.target/powerpc/pr96933-1.c
gcc/testsuite/gcc.target/powerpc/pr96933-2.c