aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2005-10-06 15:48:48 -0700
committerRichard Henderson <rth@gcc.gnu.org>2005-10-06 15:48:48 -0700
commit27add2e89a6265c0d25162cc6fdd964b9fa6239e (patch)
tree13ddf65ce8b14580acf95e48c92c06f558511b79
parent4bb1e03799cec1328ad9e84907ff55cbc4168e58 (diff)
downloadgcc-27add2e89a6265c0d25162cc6fdd964b9fa6239e.zip
gcc-27add2e89a6265c0d25162cc6fdd964b9fa6239e.tar.gz
gcc-27add2e89a6265c0d25162cc6fdd964b9fa6239e.tar.bz2
rs6000.c (rs6000_cannot_force_const_mem): New.
* config/rs6000/rs6000.c (rs6000_cannot_force_const_mem): New. (TARGET_CANNOT_FORCE_CONST_MEM): Use it. From-SVN: r105069
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000.c14
2 files changed, 18 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c7ad196..41f4aaf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2005-10-06 Richard Henderson <rth@redhat.com>
+
+ * config/rs6000/rs6000.c (rs6000_cannot_force_const_mem): New.
+ (TARGET_CANNOT_FORCE_CONST_MEM): Use it.
+
2005-10-06 Andrew Pinski <pinskia@physics.uc.edu>
PR middle-end/22216
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 7077b66..51567e0 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -748,6 +748,7 @@ static rtx rs6000_emit_vector_compare (enum rtx_code, rtx, rtx,
static int get_vsel_insn (enum machine_mode);
static void rs6000_emit_vector_select (rtx, rtx, rtx, rtx);
static tree rs6000_stack_protect_fail (void);
+static bool rs6000_cannot_force_const_mem (rtx x);
const int INSN_NOT_AVAILABLE = -1;
static enum machine_mode rs6000_eh_return_filter_mode (void);
@@ -876,7 +877,7 @@ static const char alt_reg_names[][8] =
#define TARGET_HAVE_TLS HAVE_AS_TLS
#undef TARGET_CANNOT_FORCE_CONST_MEM
-#define TARGET_CANNOT_FORCE_CONST_MEM rs6000_tls_referenced_p
+#define TARGET_CANNOT_FORCE_CONST_MEM rs6000_cannot_force_const_mem
#undef TARGET_ASM_FUNCTION_PROLOGUE
#define TARGET_ASM_FUNCTION_PROLOGUE rs6000_output_function_prologue
@@ -3107,6 +3108,17 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model)
return dest;
}
+/* Primarily this is required for TLS symbols, but given that our move
+ patterns *ought* to be able to handle any symbol at any time, we
+ should never be spilling symbolic operands to the constant pool, ever. */
+
+static bool
+rs6000_cannot_force_const_mem (rtx x)
+{
+ enum rtx_code code = GET_CODE (x);
+ return code == SYMBOL_REF || code == LABEL_REF || code == CONST;
+}
+
/* Return 1 if X contains a thread-local symbol. */
bool