https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105927
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|unassigned at gcc dot gnu.org |ubizjak at gmail dot com Status|NEW |ASSIGNED --- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> --- diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 848a79a8d16..128144f1050 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -672,6 +672,12 @@ (define_predicate "register_no_elim_operand" { if (SUBREG_P (op)) op = SUBREG_REG (op); + + /* Before reload, we can allow (SUBREG (MEM...)) as a register operand + because it is guaranteed to be reloaded into one. */ + if (MEM_P (op)) + return true; + return !(op == arg_pointer_rtx || op == frame_pointer_rtx || IN_RANGE (REGNO (op),