aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMatthew Wahab <matthew.wahab@arm.com>2016-08-19 13:59:18 +0000
committerMatthew Wahab <mwahab@gcc.gnu.org>2016-08-19 13:59:18 +0000
commitf0c90610e3e0646b89ae3e4b20134dc7e1cd7d12 (patch)
tree8bd9c4af683bc93abd9c654614828d317279231f /gcc
parentfcf830abf7b3fc12d6127ca500d04405ef0efe54 (diff)
downloadgcc-f0c90610e3e0646b89ae3e4b20134dc7e1cd7d12.zip
gcc-f0c90610e3e0646b89ae3e4b20134dc7e1cd7d12.tar.gz
gcc-f0c90610e3e0646b89ae3e4b20134dc7e1cd7d12.tar.bz2
[ARM] Fix an invalid check for vectors of the same floating-point constants.
2016-08-19 Matthew Wahab <matthew.wahab@arm.com> PR target/77281 * config/arm/arm.c (neon_valid_immediate): Delete declaration. Use const_vec_duplicate to check for duplicated elements. From-SVN: r239610
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/arm/arm.c13
2 files changed, 10 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c8e8f65..a6519b3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2016-08-19 Matthew Wahab <matthew.wahab@arm.com>
+
+ PR target/77281
+ * config/arm/arm.c (neon_valid_immediate): Delete declaration.
+ Use const_vec_duplicate to check for duplicated elements.
+
2016-08-19 Richard Biener <rguenther@suse.de>
PR tree-optimization/77290
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index a6afdcc..c1d010c 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -12471,7 +12471,6 @@ neon_valid_immediate (rtx op, machine_mode mode, int inverse,
if (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
{
rtx el0 = CONST_VECTOR_ELT (op, 0);
- const REAL_VALUE_TYPE *r0;
if (!vfp3_const_double_rtx (el0) && el0 != CONST0_RTX (GET_MODE (el0)))
return -1;
@@ -12480,14 +12479,10 @@ neon_valid_immediate (rtx op, machine_mode mode, int inverse,
if (GET_MODE_INNER (mode) == HFmode)
return -1;
- r0 = CONST_DOUBLE_REAL_VALUE (el0);
-
- for (i = 1; i < n_elts; i++)
- {
- rtx elt = CONST_VECTOR_ELT (op, i);
- if (!real_equal (r0, CONST_DOUBLE_REAL_VALUE (elt)))
- return -1;
- }
+ /* All elements in the vector must be the same. Note that 0.0 and -0.0
+ are distinct in this context. */
+ if (!const_vec_duplicate_p (op))
+ return -1;
if (modconst)
*modconst = CONST_VECTOR_ELT (op, 0);