diff --git a/gcc/local-alloc.c b/gcc/local-alloc.c index 00c06e804ad..d626fd7d004 100644 --- a/gcc/local-alloc.c +++ b/gcc/local-alloc.c @@ -1945,6 +1945,11 @@ find_free_reg (class, mode, qty, accept_call_clobbered, just_try_suggested, #ifdef ELIMINABLE_REGS for (i = 0; i < sizeof eliminables / sizeof eliminables[0]; i++) SET_HARD_REG_BIT (used, eliminables[i].from); +#if FRAME_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM + /* If FRAME_POINTER_REGNUM is not a real register, then protect the one + that it might be eliminated into. */ + SET_HARD_REG_BIT (used, HARD_FRAME_POINTER_REGNUM); +#endif #else SET_HARD_REG_BIT (used, FRAME_POINTER_REGNUM); #endif