https://gcc.gnu.org/g:187eeb99ec5289538923668de9d61a3138376817

commit r15-1695-g187eeb99ec5289538923668de9d61a3138376817
Author: Stefan Schulze Frielinghaus <stefa...@gcc.gnu.org>
Date:   Thu Jun 27 15:46:24 2024 +0200

    s390: Check for ADDR_REGS in s390_decompose_addrstyle_without_index
    
    An explicit check for address registers was not required so far since
    during register allocation the processing of address constraints was
    sufficient.  However, address constraints themself do not check for
    REGNO_OK_FOR_{BASE,INDEX}_P.  Thus, with the newly introduced
    late-combine pass in r15-1579-g792f97b44ffc5e we generate new insns with
    invalid address registers which aren't fixed up afterwards.
    
    Fixed by explicitly checking for address registers in
    s390_decompose_addrstyle_without_index such that those new insns are
    rejected.
    
    gcc/ChangeLog:
    
            PR target/115634
            * config/s390/s390.cc (s390_decompose_addrstyle_without_index):
            Check for ADDR_REGS in s390_decompose_addrstyle_without_index.

Diff:
---
 gcc/config/s390/s390.cc | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
index c65421de831..05a0fde7fb0 100644
--- a/gcc/config/s390/s390.cc
+++ b/gcc/config/s390/s390.cc
@@ -3347,7 +3347,9 @@ s390_decompose_addrstyle_without_index (rtx op, rtx *base,
   while (op && GET_CODE (op) == SUBREG)
     op = SUBREG_REG (op);
 
-  if (op && GET_CODE (op) != REG)
+  if (op && (!REG_P (op)
+            || (reload_completed
+                && !REGNO_OK_FOR_BASE_P (REGNO (op)))))
     return false;
 
   if (offset)

Reply via email to