This patch makes some pieces of code operate directly on the new
CONST_VECTOR encoding.  Sorry for the late posting, I'd forgotten
to include the patch when sending the original series.

Tested as before.

Thanks,
Richard


2018-01-02  Richard Sandiford  <richard.sandif...@linaro.org>

gcc/
        * cse.c (hash_rtx_cb): Hash only the encoded elements.
        * cselib.c (cselib_hash_rtx): Likewise.
        * expmed.c (make_tree): Build VECTOR_CSTs directly from the
        CONST_VECTOR encoding.

Index: gcc/cse.c
===================================================================
--- gcc/cse.c   2017-12-22 16:54:09.325037396 +0000
+++ gcc/cse.c   2018-01-02 15:23:39.278076397 +0000
@@ -2353,11 +2353,11 @@ hash_rtx_cb (const_rtx x, machine_mode m
        int units;
        rtx elt;
 
-       units = CONST_VECTOR_NUNITS (x);
+       units = const_vector_encoded_nelts (x);
 
        for (i = 0; i < units; ++i)
          {
-           elt = CONST_VECTOR_ELT (x, i);
+           elt = CONST_VECTOR_ENCODED_ELT (x, i);
            hash += hash_rtx_cb (elt, GET_MODE (elt),
                                  do_not_record_p, hash_arg_in_memory_p,
                                  have_reg_qty, cb);
Index: gcc/cselib.c
===================================================================
--- gcc/cselib.c        2017-12-28 17:10:07.075025248 +0000
+++ gcc/cselib.c        2018-01-02 15:23:39.279076354 +0000
@@ -1163,11 +1163,11 @@ cselib_hash_rtx (rtx x, int create, mach
        int units;
        rtx elt;
 
-       units = CONST_VECTOR_NUNITS (x);
+       units = const_vector_encoded_nelts (x);
 
        for (i = 0; i < units; ++i)
          {
-           elt = CONST_VECTOR_ELT (x, i);
+           elt = CONST_VECTOR_ENCODED_ELT (x, i);
            hash += cselib_hash_rtx (elt, 0, memmode);
          }
 
Index: gcc/expmed.c
===================================================================
--- gcc/expmed.c        2018-01-02 15:12:14.964299450 +0000
+++ gcc/expmed.c        2018-01-02 15:23:39.279076354 +0000
@@ -5273,13 +5273,14 @@ make_tree (tree type, rtx x)
 
     case CONST_VECTOR:
       {
-       int units = CONST_VECTOR_NUNITS (x);
+       unsigned int npatterns = CONST_VECTOR_NPATTERNS (x);
+       unsigned int nelts_per_pattern = CONST_VECTOR_NELTS_PER_PATTERN (x);
        tree itype = TREE_TYPE (type);
-       int i;
 
        /* Build a tree with vector elements.  */
-       tree_vector_builder elts (type, units, 1);
-       for (i = 0; i < units; ++i)
+       tree_vector_builder elts (type, npatterns, nelts_per_pattern);
+       unsigned int count = elts.encoded_nelts ();
+       for (unsigned int i = 0; i < count; ++i)
          {
            rtx elt = CONST_VECTOR_ELT (x, i);
            elts.quick_push (make_tree (itype, elt));

Reply via email to