summaryrefslogtreecommitdiffstats
path: root/gcc
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-04-21 09:39:03 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2011-04-21 09:39:03 +0000
commitdddb35a90c41be1afce83042ae68634f0cd23981 (patch)
treeb3c65484d8a98025db113ddbed8bb1c52e506fe0 /gcc
parentca3163600e6f061e70fd1bf05ce1529e1b831dac (diff)
downloadppe42-gcc-dddb35a90c41be1afce83042ae68634f0cd23981.tar.gz
ppe42-gcc-dddb35a90c41be1afce83042ae68634f0cd23981.zip
gcc/
PR target/46329 * config/arm/arm.c (arm_legitimate_constant_p_1): Return false for all Neon struct constants. gcc/testsuite/ 2011-04-04 Richard Earnshaw <rearnsha@arm.com> Richard Sandiford <richard.sandiford@linaro.org> PR target/46329 * gcc.target/arm/pr46329.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@172815 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/arm/arm.c8
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/arm/pr46329.c9
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 95f931b7570..ec65ff12d95 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2011-04-21 Richard Sandiford <richard.sandiford@linaro.org>
+ PR target/46329
+ * config/arm/arm.c (arm_legitimate_constant_p_1): Return false
+ for all Neon struct constants.
+
+2011-04-21 Richard Sandiford <richard.sandiford@linaro.org>
+
* target.def (legitimate_constant_p): New hook.
* doc/tm.texi.in (LEGITIMATE_CONSTANT_P): Replace with...
(TARGET_LEGITIMATE_CONSTANT_P): ...this.
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 97d2d6f47e5..175352e372c 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -6511,8 +6511,14 @@ arm_tls_referenced_p (rtx x)
When generating pic allow anything. */
static bool
-arm_legitimate_constant_p_1 (enum machine_mode mode ATTRIBUTE_UNUSED, rtx x)
+arm_legitimate_constant_p_1 (enum machine_mode mode, rtx x)
{
+ /* At present, we have no support for Neon structure constants, so forbid
+ them here. It might be possible to handle simple cases like 0 and -1
+ in future. */
+ if (TARGET_NEON && VALID_NEON_STRUCT_MODE (mode))
+ return false;
+
return flag_pic || !label_mentioned_p (x);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ae5daf2af53..56cc38a04da 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2011-04-21 Richard Earnshaw <rearnsha@arm.com>
+ Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR target/46329
+ * gcc.target/arm/pr46329.c: New test.
+
2011-04-21 Tobias Burnus <burnus@net-b.de>
PR fortran/18918
diff --git a/gcc/testsuite/gcc.target/arm/pr46329.c b/gcc/testsuite/gcc.target/arm/pr46329.c
new file mode 100644
index 00000000000..9dd939c7f93
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr46329.c
@@ -0,0 +1,9 @@
+/* { dg-options "-O2" } */
+/* { dg-add-options arm_neon } */
+
+int __attribute__ ((vector_size (32))) x;
+void
+foo (void)
+{
+ x <<= x;
+}
OpenPOWER on IntegriCloud