diff options
Diffstat (limited to 'gcc/recog.c')
-rw-r--r-- | gcc/recog.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/recog.c b/gcc/recog.c index ed359f67239..75d1113fcfb 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -1065,7 +1065,11 @@ register_operand (rtx op, enum machine_mode mode) && REGNO (sub) < FIRST_PSEUDO_REGISTER && REG_CANNOT_CHANGE_MODE_P (REGNO (sub), GET_MODE (sub), mode) && GET_MODE_CLASS (GET_MODE (sub)) != MODE_COMPLEX_INT - && GET_MODE_CLASS (GET_MODE (sub)) != MODE_COMPLEX_FLOAT) + && GET_MODE_CLASS (GET_MODE (sub)) != MODE_COMPLEX_FLOAT + /* LRA can generate some invalid SUBREGS just for matched + operand reload presentation. LRA needs to treat them as + valid. */ + && ! LRA_SUBREG_P (op)) return 0; #endif |