aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@gcc.gnu.org>2011-04-21 09:39:03 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2011-04-21 09:39:03 +0000
commit4b18d6830938102b414a736f44203792056b6f69 (patch)
treeb3c65484d8a98025db113ddbed8bb1c52e506fe0 /gcc
parent1a627b35d37649103f629cd15139387d09c4b703 (diff)
downloadgcc-4b18d6830938102b414a736f44203792056b6f69.zip
gcc-4b18d6830938102b414a736f44203792056b6f69.tar.gz
gcc-4b18d6830938102b414a736f44203792056b6f69.tar.bz2
re PR target/46329 (ICE on ARM for __attribute__ ((vector_size (8 * sizeof(int)))) operations)
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. From-SVN: r172815
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 95f931b..ec65ff1 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 97d2d6f..175352e 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 ae5daf2..56cc38a 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 0000000..9dd939c
--- /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;
+}