aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/cse.c4
-rw-r--r--gcc/cselib.c4
-rw-r--r--gcc/expmed.c9
4 files changed, 16 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7aa0920..0ce136f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2018-01-03 Richard Sandiford <richard.sandiford@linaro.org>
+
+ * 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.
+
2017-01-03 Jakub Jelinek <jakub@redhat.com>
Jeff Law <law@redhat.com>
diff --git a/gcc/cse.c b/gcc/cse.c
index 81a4015..fcfbba0 100644
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -2353,11 +2353,11 @@ hash_rtx_cb (const_rtx x, machine_mode mode,
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);
diff --git a/gcc/cselib.c b/gcc/cselib.c
index 41e4317..ca4a53a 100644
--- a/gcc/cselib.c
+++ b/gcc/cselib.c
@@ -1163,11 +1163,11 @@ cselib_hash_rtx (rtx x, int create, machine_mode memmode)
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);
}
diff --git a/gcc/expmed.c b/gcc/expmed.c
index 60848fa..be6a138 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -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));