From 2aa42e6e3bc7853d53a8231664a6efb0e87f944e Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Mon, 28 Jan 2008 18:31:19 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/config/rs6000/rs6000.c | 7 +++++++ gcc/testsuite/ChangeLog | 6 ++++++ .../gcc.target/powerpc/spe-small-data-1.c | 14 ++++++++++++++ .../gcc.target/powerpc/spe-small-data-2.c | 12 ++++++++++++ 5 files changed, 45 insertions(+) create mode 100644 gcc/testsuite/gcc.target/powerpc/spe-small-data-1.c create mode 100644 gcc/testsuite/gcc.target/powerpc/spe-small-data-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 46fabaad0161..753539e56633 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-01-28 Nathan Froyd + + 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 * doc/install.texi (mips-*-*): Recommend binutils 2.18. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 586c48146684..4ebea38388bf 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 c13e90689884..465fc8a7e230 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2008-01-28 Nathan Froyd + + 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 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 000000000000..8bdb154e1af1 --- /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 + +__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 000000000000..2a466e344fb0 --- /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); +} +