https://gcc.gnu.org/g:53fd0f5b1fd737a208c12909fa1188281cb370a3

commit r14-9482-g53fd0f5b1fd737a208c12909fa1188281cb370a3
Author: John David Anglin <dang...@gcc.gnu.org>
Date:   Thu Mar 14 18:32:56 2024 +0000

    hppa: Fix REG+D address support before reload
    
    When generating PA 1.x code or code for GNU ld, floating-point
    accesses only support 5-bit displacements but integer accesses
    support 14-bit displacements.  I mistakenly assumed reload
    could fix an invalid 14-bit displacement in a floating-point
    access but this is not the case.
    
    2024-03-14  John David Anglin  <dang...@gcc.gnu.org>
    
    gcc/ChangeLog:
    
            PR target/114288
            * config/pa/pa.cc (pa_legitimate_address_p): Don't allow
            14-bit displacements before reload for modes that may use
            a floating-point load or store.

Diff:
---
 gcc/config/pa/pa.cc | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/gcc/config/pa/pa.cc b/gcc/config/pa/pa.cc
index 694123e37c9..129289f8e62 100644
--- a/gcc/config/pa/pa.cc
+++ b/gcc/config/pa/pa.cc
@@ -10968,20 +10968,15 @@ pa_legitimate_address_p (machine_mode mode, rtx x, 
bool strict, code_helper)
 
          /* Long 14-bit displacements always okay for these cases.  */
          if (INT14_OK_STRICT
+             || reload_completed
              || mode == QImode
              || mode == HImode)
            return true;
 
-         /* A secondary reload may be needed to adjust the displacement
-            of floating-point accesses when STRICT is nonzero.  */
-         if (strict)
-           return false;
-
-         /* We get significantly better code if we allow long displacements
-            before reload for all accesses.  Instructions must satisfy their
-            constraints after reload, so we must have an integer access.
-            Return true for both cases.  */
-         return true;
+         /* We have to limit displacements to those supported by
+            both floating-point and integer accesses as reload can't
+            fix invalid displacements.  See PR114288.  */
+         return false;
        }
 
       if (!TARGET_DISABLE_INDEXING

Reply via email to