aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/s390
diff options
context:
space:
mode:
authorStefan Schulze Frielinghaus <stefansf@gcc.gnu.org>2024-06-27 15:46:24 +0200
committerStefan Schulze Frielinghaus <stefansf@gcc.gnu.org>2024-06-27 15:46:24 +0200
commit187eeb99ec5289538923668de9d61a3138376817 (patch)
tree2ef398c76013c895d2585ab1a34c174c430d05da /gcc/config/s390
parent7886830bb45c4f5dca0496d4deae9a45204d78f5 (diff)
downloadgcc-187eeb99ec5289538923668de9d61a3138376817.zip
gcc-187eeb99ec5289538923668de9d61a3138376817.tar.gz
gcc-187eeb99ec5289538923668de9d61a3138376817.tar.bz2
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.
Diffstat (limited to 'gcc/config/s390')
-rw-r--r--gcc/config/s390/s390.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
index c65421d..05a0fde 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)