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

Reply via email to