aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/arm/arm.c6
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6000e25..760869e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-01-20 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR target/71270
+ * config/arm/arm.c (neon_valid_immediate): Reject vector constants
+ in big-endian mode when they are not a single duplicated value.
+
2017-01-20 Richard Biener <rguenther@suse.de>
* BASE-VER: Bump to 7.0.1.
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 96777f0..934f5d1 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -11667,6 +11667,12 @@ neon_valid_immediate (rtx op, machine_mode mode, int inverse,
return 18;
}
+ /* The tricks done in the code below apply for little-endian vector layout.
+ For big-endian vectors only allow vectors of the form { a, a, a..., a }.
+ FIXME: Implement logic for big-endian vectors. */
+ if (BYTES_BIG_ENDIAN && vector && !const_vec_duplicate_p (op))
+ return -1;
+
/* Splat vector constant out into a byte vector. */
for (i = 0; i < n_elts; i++)
{