]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
s390: Check for ADDR_REGS in s390_decompose_addrstyle_without_index
authorStefan Schulze Frielinghaus <stefansf@gcc.gnu.org>
Thu, 27 Jun 2024 13:46:24 +0000 (15:46 +0200)
committerStefan Schulze Frielinghaus <stefansf@gcc.gnu.org>
Thu, 27 Jun 2024 13:46:24 +0000 (15:46 +0200)
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.

gcc/config/s390/s390.cc

index c65421de831e5af2e28efe6e2cca40040d5da3d2..05a0fde7fb06026f1fab57380f4d452b96feceb3 100644 (file)
@@ -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)