constraints.md: Change "Q" and "T" constraints to memory constraints.
authorJohn David Anglin <danglin@gcc.gnu.org>
Fri, 13 Feb 2015 13:06:54 +0000 (13:06 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Fri, 13 Feb 2015 13:06:54 +0000 (13:06 +0000)
* 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.

From-SVN: r220680

gcc/ChangeLog
gcc/config/pa/constraints.md
gcc/config/pa/pa.c

index 19e729bba97d5a71a5ec4698d34c522c5fa20489..fa363dc8bb984f974c7eabddb4f258f5edbf44f2 100644 (file)
@@ -1,3 +1,11 @@
+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
index 296337c29d7d18638c9f6f7a6e888b8e2da61839..fed0b58af81cd648c2d893c32e62c943693354e2 100644 (file)
   (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)"))
 
index a568b2ff3de8bcc86517932490ff0e6ea9e38252..13bd5291390f9090b474b51e369d0b03b57becb2 100644 (file)
@@ -1569,6 +1569,14 @@ force_mode (machine_mode mode, rtx orig)
 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);
 }