The recent change to use the "Q" constraint instead of the "m" constraint in 
several patterns caused
a regression that broke the build of the Debian webkitgtk package.  Memory 
addresses (spills) with out
of range offsets were not being reloaded in functions with large frames.  This 
change fixes that problem.

A side effect of the change was reload now sometimes tries to push a constant 
symbolic reference
to data into readonly memory.  The 32-bit HP linker doesn't like these 
references.  Thus, the change
to pa_cannot_force_const_mem.

Tested on hppa2.0w-hp-hpux11.11, hppa64-hp-hpux11.11 and hppa-unknown-linu-gnu. 
 Committed
to trunk and 4.9 branch.

Dave
--
John David Anglin       dave.ang...@bell.net


2015-02-13  John David Anglin  <dang...@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.

Index: config/pa/constraints.md
===================================================================
--- config/pa/constraints.md    (revision 220598)
+++ config/pa/constraints.md    (working copy)
@@ -106,7 +106,7 @@
   (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
@@ -122,7 +122,7 @@
   (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: config/pa/pa.c
===================================================================
--- config/pa/pa.c      (revision 220598)
+++ config/pa/pa.c      (working copy)
@@ -1569,6 +1569,14 @@
 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);
 }
 

Reply via email to