aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Froyd <froydnj@codesourcery.com>2008-01-28 18:31:19 +0000
committerNathan Froyd <froydnj@gcc.gnu.org>2008-01-28 18:31:19 +0000
commit2aa42e6e3bc7853d53a8231664a6efb0e87f944e (patch)
treead010312b214348b4d4787268c8ad227aa97e8f4
parent64a96f5bc3736c2d423823d1ca135eef3760cf6b (diff)
downloadgcc-2aa42e6e3bc7853d53a8231664a6efb0e87f944e.zip
gcc-2aa42e6e3bc7853d53a8231664a6efb0e87f944e.tar.gz
gcc-2aa42e6e3bc7853d53a8231664a6efb0e87f944e.tar.bz2
re PR target/31535 (ICE on attempt to put SPE vector variables in SDA)
gcc/ PR 31535 * config/rs6000/rs6000.c (small_data_operand): Vectors and floats are not legitimate small data references on SPE targets. gcc/testsuite/ PR 31535 * gcc.target/powerpc/spe-small-data-1.c: New test. * gcc.target/powerpc/spe-small-data-2.c: New test. From-SVN: r131914
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/powerpc/spe-small-data-1.c14
-rw-r--r--gcc/testsuite/gcc.target/powerpc/spe-small-data-2.c12
5 files changed, 45 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 46fabaa..753539e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-28 Nathan Froyd <froydnj@codesourcery.com>
+
+ PR 31535
+ * config/rs6000/rs6000.c (small_data_operand): Vectors and floats
+ are not legitimate small data references on SPE targets.
+
2008-01-28 David Daney <ddaney@avtrex.com>
* doc/install.texi (mips-*-*): Recommend binutils 2.18.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 586c481..4ebea38 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -3238,6 +3238,13 @@ small_data_operand (rtx op ATTRIBUTE_UNUSED,
if (DEFAULT_ABI != ABI_V4)
return 0;
+ /* Vector and float memory instructions have a limited offset on the
+ SPE, so using a vector or float variable directly as an operand is
+ not useful. */
+ if (TARGET_SPE
+ && (SPE_VECTOR_MODE (mode) || FLOAT_MODE_P (mode)))
+ return 0;
+
if (GET_CODE (op) == SYMBOL_REF)
sym_ref = op;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index c13e906..465fc8a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-28 Nathan Froyd <froydnj@codesourcery.com>
+
+ PR 31535
+ * gcc.target/powerpc/spe-small-data-1.c: New test.
+ * gcc.target/powerpc/spe-small-data-2.c: New test.
+
2008-01-28 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/34980
diff --git a/gcc/testsuite/gcc.target/powerpc/spe-small-data-1.c b/gcc/testsuite/gcc.target/powerpc/spe-small-data-1.c
new file mode 100644
index 0000000..8bdb154
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/spe-small-data-1.c
@@ -0,0 +1,14 @@
+/* Verify that we don't ICE trying to put SPE data in .sdata2. */
+/* { dg-do run { target { powerpc*-*-linux* && powerpc_spe } } } */
+/* { dg-options "-msdata=eabi -mcall-eabi -G 8" } */
+
+#include <spe.h>
+
+__ev64_fs__ x;
+
+int main(void)
+{
+ x = __ev_fsabs (x);
+ return(0);
+}
+
diff --git a/gcc/testsuite/gcc.target/powerpc/spe-small-data-2.c b/gcc/testsuite/gcc.target/powerpc/spe-small-data-2.c
new file mode 100644
index 0000000..2a466e3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/spe-small-data-2.c
@@ -0,0 +1,12 @@
+/* Verify that we don't ICE trying to put float data in .sdata2. */
+/* { dg-do run { target { powerpc*-*-linux* && powerpc_spe } } } */
+/* { dg-options "-msdata=eabi -mcall-eabi -G 8" } */
+
+double x;
+
+int main(void)
+{
+ x = x * 2;
+ return(0);
+}
+