+2015-02-13 John David Anglin <danglin@gcc.gnu.org>
+
+ * config/pa/constraints.md: Change "Q" and "T" constraints to memory
+ constraints.
+ * config/pa/pa.c (pa_cannot_force_const_mem): Don't allow constant
+ symbolic references to data to be forced to constant memory on the
+ SOM target.
+
2015-02-13 Ilya Enkovich <ilya.enkovich@intel.com>
PR tree-optimization/65002
(and (match_code "mem")
(match_test "IS_LO_SUM_DLT_ADDR_P (XEXP (op, 0))")))
-(define_constraint "Q"
+(define_memory_constraint "Q"
"A memory operand that can be used as the destination operand of an
integer store, or the source operand of an integer load. That is
any memory operand that isn't a symbolic, indexed or lo_sum memory
(and (match_code "mem")
(match_test "IS_INDEX_ADDR_P (XEXP (op, 0))")))
-(define_constraint "T"
+(define_memory_constraint "T"
"A memory operand for floating-point loads and stores."
(match_test "floating_point_store_memory_operand (op, mode)"))
static bool
pa_cannot_force_const_mem (machine_mode mode ATTRIBUTE_UNUSED, rtx x)
{
+ /* Reload sometimes tries to put const data symbolic operands in
+ readonly memory. The HP SOM linker doesn't allow symbolic data
+ in readonly memory. */
+ if (TARGET_SOM
+ && !function_label_operand (x, VOIDmode)
+ && symbolic_operand (x, VOIDmode))
+ return true;
+
return tls_referenced_p (x);
}