Change permute index type to unsigned short
Richard Sandiford
richard.sandiford@linaro.org
Fri Sep 22 16:36:00 GMT 2017
This patch changes the element type of (auto_)vec_perm_indices from
unsigned char to unsigned short. This is needed for fixed-length
2048-bit SVE. (SVE is variable-length by default, but it's possible
to ask for specific vector lengths if you want to.)
Tested on aarch64-linux-gnu, x86_64-linux-gnu and powerpc64le-linux-gnu.
Also tested by comparing the testsuite assembly output on at least one
target per CPU directory. OK to install?
Richard
2017-09-22 Richard Sandiford <richard.sandiford@linaro.org>
gcc/
* target.h (vec_perm_indices): Use unsigned short rather than
unsigned char.
(auto_vec_perm_indices): Likewise.
* config/aarch64/aarch64.c (aarch64_vectorize_vec_perm_const_ok):
Use unsigned int rather than unsigned char.
* config/arm/arm.c (arm_vectorize_vec_perm_const_ok): Likewise.
Index: gcc/target.h
===================================================================
--- gcc/target.h 2017-09-14 17:04:19.080694343 +0100
+++ gcc/target.h 2017-09-22 17:35:22.486794044 +0100
@@ -193,11 +193,11 @@ enum vect_cost_model_location {
/* The type to use for vector permutes with a constant permute vector.
Each entry is an index into the concatenated input vectors. */
-typedef vec<unsigned char> vec_perm_indices;
+typedef vec<unsigned short> vec_perm_indices;
/* Same, but can be used to construct local permute vectors that are
automatically freed. */
-typedef auto_vec<unsigned char, 32> auto_vec_perm_indices;
+typedef auto_vec<unsigned short, 32> auto_vec_perm_indices;
/* The target structure. This holds all the backend hooks. */
#define DEFHOOKPOD(NAME, DOC, TYPE, INIT) TYPE NAME;
Index: gcc/config/aarch64/aarch64.c
===================================================================
--- gcc/config/aarch64/aarch64.c 2017-09-22 17:31:56.412840135 +0100
+++ gcc/config/aarch64/aarch64.c 2017-09-22 17:35:22.483794044 +0100
@@ -13820,7 +13820,7 @@ aarch64_vectorize_vec_perm_const_ok (mac
nelt = sel.length ();
for (i = which = 0; i < nelt; ++i)
{
- unsigned char e = d.perm[i];
+ unsigned int e = d.perm[i];
gcc_assert (e < 2 * nelt);
which |= (e < nelt ? 1 : 2);
}
Index: gcc/config/arm/arm.c
===================================================================
--- gcc/config/arm/arm.c 2017-09-22 17:31:56.414735941 +0100
+++ gcc/config/arm/arm.c 2017-09-22 17:35:22.486794044 +0100
@@ -29261,7 +29261,7 @@ arm_vectorize_vec_perm_const_ok (machine
nelt = GET_MODE_NUNITS (d.vmode);
for (i = which = 0; i < nelt; ++i)
{
- unsigned char e = d.perm[i];
+ unsigned int e = d.perm[i];
gcc_assert (e < 2 * nelt);
which |= (e < nelt ? 1 : 2);
}
More information about the Gcc-patches
mailing list