Change permute index type to unsigned short
authorRichard Sandiford <richard.sandiford@linaro.org>
Mon, 25 Sep 2017 13:26:12 +0000 (13:26 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 25 Sep 2017 13:26:12 +0000 (13:26 +0000)
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.)

2017-09-25  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.

From-SVN: r253150

gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/config/arm/arm.c
gcc/target.h

index f4060b1..b53da53 100644 (file)
@@ -1,3 +1,12 @@
+2017-09-25  Richard Sandiford  <richard.sandiford@linaro.org>
+
+       * 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.
+
 2017-09-25  Richard Biener  <rguenther@suse.de>
 
        * cfgloop.h (sort_sibling_loops): Declare.
index f38540b..9b02c6e 100644 (file)
@@ -13820,7 +13820,7 @@ aarch64_vectorize_vec_perm_const_ok (machine_mode vmode, vec_perm_indices sel)
   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 3671616..f9c1ce3 100644 (file)
@@ -29261,7 +29261,7 @@ arm_vectorize_vec_perm_const_ok (machine_mode vmode, vec_perm_indices sel)
   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);
     }
index 64e1d68..ac43b16 100644 (file)
@@ -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;