The current check does not work as expected with mixed register classes and also does not handle NO_REGS correctly.
gcc/ChangeLog: * config/s390/s390.c (s390_secondary_reload): Fix check for GENERAL_REGS register class. --- gcc/config/s390/s390.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 80a2c89..a5aab5d 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -4045,7 +4045,7 @@ s390_secondary_reload (bool in_p, rtx x, reg_class_t rclass_i, if (MEM_P (x) && s390_loadrelative_operand_p (XEXP (x, 0), NULL, NULL) && (mode == QImode - || !reg_classes_intersect_p (GENERAL_REGS, rclass) + || !reg_class_subset_p (rclass, GENERAL_REGS) || GET_MODE_SIZE (mode) > UNITS_PER_WORD || !s390_check_symref_alignment (XEXP (x, 0), GET_MODE_SIZE (mode)))) -- 1.7.9.5