diff options
author | Matthew Wahab <matthew.wahab@arm.com> | 2016-08-19 13:59:18 +0000 |
---|---|---|
committer | Matthew Wahab <mwahab@gcc.gnu.org> | 2016-08-19 13:59:18 +0000 |
commit | f0c90610e3e0646b89ae3e4b20134dc7e1cd7d12 (patch) | |
tree | 8bd9c4af683bc93abd9c654614828d317279231f /gcc | |
parent | fcf830abf7b3fc12d6127ca500d04405ef0efe54 (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 13 |
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); |