alpha.c (alpha_cannot_force_const_mem): New.
authorRichard Henderson <rth@redhat.com>
Thu, 26 Aug 2004 02:37:41 +0000 (19:37 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 26 Aug 2004 02:37:41 +0000 (19:37 -0700)
        * config/alpha/alpha.c (alpha_cannot_force_const_mem): New.
        (TARGET_CANNOT_FORCE_CONST_MEM): New.

From-SVN: r86602

gcc/ChangeLog
gcc/config/alpha/alpha.c

index fe284a989689bbd00524dadc8b9f0b2172a9d043..3dcb83381042d5aa74a158da4439feb7939e8a0a 100644 (file)
@@ -1,3 +1,8 @@
+2004-08-25  Richard Henderson  <rth@redhat.com>
+
+        * config/alpha/alpha.c (alpha_cannot_force_const_mem): New.
+        (TARGET_CANNOT_FORCE_CONST_MEM): New.
+
 2004-08-25  Andrew MacLeod  <amacleod@redhat.com>
 
        * doc/tree-ssa.texi: Document new operand iterator.
index c6d93446a840acad106a2bf8c14a502a09b6fe98..1e2b8dad1d1ecdc9eb4227049d94639794fc1d16 100644 (file)
@@ -1180,6 +1180,17 @@ alpha_legitimize_address (rtx x, rtx scratch,
   }
 }
 
+/* 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
+alpha_cannot_force_const_mem (rtx x)
+{
+  enum rtx_code code = GET_CODE (x);
+  return code == SYMBOL_REF || code == LABEL_REF || code == CONST;
+}
+
 /* We do not allow indirect calls to be optimized into sibling calls, nor
    can we allow a call to a function with a different GP to be optimized
    into a sibcall.  */
@@ -9357,6 +9368,8 @@ alpha_init_libfuncs (void)
 #define TARGET_FUNCTION_OK_FOR_SIBCALL alpha_function_ok_for_sibcall
 #undef TARGET_CANNOT_COPY_INSN_P
 #define TARGET_CANNOT_COPY_INSN_P alpha_cannot_copy_insn_p
+#undef TARGET_CANNOT_FORCE_CONST_MEM
+#define TARGET_CANNOT_FORCE_CONST_MEM alpha_cannot_force_const_mem
 
 #if TARGET_ABI_OSF
 #undef TARGET_ASM_OUTPUT_MI_THUNK