aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/arm
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2017-01-20 14:36:57 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2017-01-20 14:36:57 +0000
commit8b0fb476f24b0cec64502a2c2bed16a0c429f8d2 (patch)
treeae824565d2d7a60900ea91c4f3667c5decc41e4d /gcc/config/arm
parentebed71751b2c030de7f1ad9d284b54b34cfe0a20 (diff)
downloadgcc-8b0fb476f24b0cec64502a2c2bed16a0c429f8d2.zip
gcc-8b0fb476f24b0cec64502a2c2bed16a0c429f8d2.tar.gz
gcc-8b0fb476f24b0cec64502a2c2bed16a0c429f8d2.tar.bz2
[ARM] PR target/71270 fix neon_valid_immediate for big-endian
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. From-SVN: r244716
Diffstat (limited to 'gcc/config/arm')
-rw-r--r--gcc/config/arm/arm.c6
1 files changed, 6 insertions, 0 deletions
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++)
{