From 27add2e89a6265c0d25162cc6fdd964b9fa6239e Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 6 Oct 2005 15:48:48 -0700 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/config/rs6000/rs6000.c | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c7ad196dc77..41f4aaf2443 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2005-10-06 Richard Henderson + + * config/rs6000/rs6000.c (rs6000_cannot_force_const_mem): New. + (TARGET_CANNOT_FORCE_CONST_MEM): Use it. + 2005-10-06 Andrew Pinski PR middle-end/22216 diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 7077b661003..51567e0c6b5 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