aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoern Rennecke <joern.rennecke@embecosm.com>2014-02-22 20:24:08 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2014-02-22 20:24:08 +0000
commit8aa7d1fc653d4671aac118a625e402955bc1cd76 (patch)
tree737403dd1709d7db77462b9d6f96915fcfc36a6a
parent0294729c100b91fcb69964d037e9dd55915ef670 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/config/avr/avr.c7
-rw-r--r--gcc/config/avr/avr.h1
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}}