[5/4] Directly operate on CONST_VECTOR encoding

Message ID 87wp10nux7.fsf@linaro.org
State New
Headers show
Series
  • Use new vector constant encoding for CONST_VECTOR
Related show

Commit Message

Richard Sandiford Jan. 2, 2018, 3:26 p.m.
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.sandiford@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.

Comments

Jeff Law Jan. 2, 2018, 11:32 p.m. | #1
On 01/02/2018 08:26 AM, Richard Sandiford wrote:
> 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.sandiford@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.

OK.
jeff

Patch

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));