From 187eeb99ec5289538923668de9d61a3138376817 Mon Sep 17 00:00:00 2001 From: Stefan Schulze Frielinghaus Date: Thu, 27 Jun 2024 15:46:24 +0200 Subject: [PATCH] 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. --- 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)