Sorry, hit wrong button.

The attached patch fixes gcc bootstrap on hppa-hpux.  Revision r254585 changed 
the handling of
scaled-index addresses.  We weren't checking the base operand to ensure that 
the REG_POINTER
flag was set prior to load.  As a result, we accepted invalid base register 
operands.

The attached change fixes this problem.

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


2017-12-03  John David Anglin  <dang...@gcc.gnu.org>

        * config/pa/pa.c (pa_legitimate_address_p): For scaled indexing,
        require base operand is a REG_POINTER prior to reload on targets
        with non-equivalent space registers.

Index: config/pa/pa.c
===================================================================
--- config/pa/pa.c      (revision 254585)
+++ config/pa/pa.c      (working copy)
@@ -10544,9 +10544,16 @@
 
       if (!TARGET_DISABLE_INDEXING
          && GET_CODE (index) == MULT
-         && MODE_OK_FOR_SCALED_INDEXING_P (mode)
+         /* Only accept base operands with the REG_POINTER flag prior to
+            reload on targets with non-equivalent space registers.  */
+         && (TARGET_NO_SPACE_REGS
+             || (base == XEXP (x, 1)
+                 && (reload_completed
+                     || (reload_in_progress && HARD_REGISTER_P (base))
+                     || REG_POINTER (base))))
          && REG_P (XEXP (index, 0))
          && GET_MODE (XEXP (index, 0)) == Pmode
+         && MODE_OK_FOR_SCALED_INDEXING_P (mode)
          && (strict ? STRICT_REG_OK_FOR_INDEX_P (XEXP (index, 0))
                     : REG_OK_FOR_INDEX_P (XEXP (index, 0)))
          && GET_CODE (XEXP (index, 1)) == CONST_INT

Reply via email to