diff options
| -rw-r--r-- | gcc/ChangeLog | 7 | ||||
| -rw-r--r-- | gcc/config/aarch64/aarch64.c | 4 |
2 files changed, 9 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c773d7d..96b86cc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-12-03 Vladimir Makarov <vmakarov@redhat.com> + + * config/aarch64/aarch64.c (aarch64_frame_pointer_required): Check + LR_REGNUM. + (aarch64_can_eliminate): Don't check elimination source when + frame_pointer_required is false. + 2013-12-03 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> * config/avr/avr.c (avr_option_override): Warn if asked to generate diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index b1b4eef..1c881c8 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -1703,7 +1703,7 @@ aarch64_frame_pointer_required (void) if (flag_omit_frame_pointer && !faked_omit_frame_pointer) return false; else if (flag_omit_leaf_frame_pointer) - return !crtl->is_leaf; + return !crtl->is_leaf || df_regs_ever_live_p (LR_REGNUM); return true; } @@ -4126,7 +4126,7 @@ aarch64_can_eliminate (const int from, const int to) of faked_omit_frame_pointer here (which is true when we always wish to keep non-leaf frame pointers but only wish to keep leaf frame pointers when LR is clobbered). */ - if (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM + if (to == STACK_POINTER_REGNUM && df_regs_ever_live_p (LR_REGNUM) && faked_omit_frame_pointer) return false; |
