diff options
author | Joern Rennecke <joern.rennecke@embecosm.com> | 2014-02-22 20:24:08 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2014-02-22 20:24:08 +0000 |
commit | 8aa7d1fc653d4671aac118a625e402955bc1cd76 (patch) | |
tree | 737403dd1709d7db77462b9d6f96915fcfc36a6a | |
parent | 0294729c100b91fcb69964d037e9dd55915ef670 (diff) | |
download | gcc-8aa7d1fc653d4671aac118a625e402955bc1cd76.zip gcc-8aa7d1fc653d4671aac118a625e402955bc1cd76.tar.gz gcc-8aa7d1fc653d4671aac118a625e402955bc1cd76.tar.bz2 |
avr.c (avr_can_eliminate): Allow elimination from ARG_POINTER_REGNUM to STACK_POINTER_REGNUM if...
* config/avr/avr.c (avr_can_eliminate): Allow elimination from
ARG_POINTER_REGNUM
to STACK_POINTER_REGNUM if !frame_pointer_needed.
* config/avr/avr.c (ELIMINABLE_REGS): Add elimination from
ARG_POINTER_REGNUM to STACK_POINTER_REGNUM.
From-SVN: r208045
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/avr/avr.c | 7 | ||||
-rw-r--r-- | gcc/config/avr/avr.h | 1 |
3 files changed, 11 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2461e46..8ee5a2b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2014-02-22 Joern Rennecke <joern.rennecke@embecosm.com> + + * config/avr/avr.c (avr_can_eliminate): Allow elimination from + ARG_POINTER_REGNUM + to STACK_POINTER_REGNUM if !frame_pointer_needed. + * config/avr/avr.c (ELIMINABLE_REGS): Add elimination from + ARG_POINTER_REGNUM to STACK_POINTER_REGNUM. + 2014-02-21 Vladimir Makarov <vmakarov@redhat.com> PR target/60298 diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c index 76d2358..cbfa4b7 100644 --- a/gcc/config/avr/avr.c +++ b/gcc/config/avr/avr.c @@ -734,11 +734,8 @@ avr_allocate_stack_slots_for_args (void) static bool avr_can_eliminate (const int from, const int to) { - return ((from == ARG_POINTER_REGNUM && to == FRAME_POINTER_REGNUM) - || (frame_pointer_needed && to == FRAME_POINTER_REGNUM) - || ((from == FRAME_POINTER_REGNUM - || from == FRAME_POINTER_REGNUM + 1) - && !frame_pointer_needed)); + return ((frame_pointer_needed && to == FRAME_POINTER_REGNUM) + || !frame_pointer_needed); } diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h index 75c42ee..74be83c 100644 --- a/gcc/config/avr/avr.h +++ b/gcc/config/avr/avr.h @@ -306,6 +306,7 @@ enum reg_class { #define STATIC_CHAIN_REGNUM 2 #define ELIMINABLE_REGS { \ + {ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM} \ ,{FRAME_POINTER_REGNUM+1,STACK_POINTER_REGNUM+1}} |