diff options
| author | rearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-01-30 15:39:43 +0000 |
|---|---|---|
| committer | rearnsha <rearnsha@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-01-30 15:39:43 +0000 |
| commit | 5be12bb5a0107708222f90ee2bad9d38ed10ffa4 (patch) | |
| tree | 61ef8cef0299e95bee7a24ed0450b1ce1969dde5 | |
| parent | d00580fa2ac42e841fef8fdf2c42416cb9c24a68 (diff) | |
| download | ppe42-gcc-5be12bb5a0107708222f90ee2bad9d38ed10ffa4.tar.gz ppe42-gcc-5be12bb5a0107708222f90ee2bad9d38ed10ffa4.zip | |
* arm.c (arm_compute_initial_elimination_offset): If optimizing for
size, the link register is always saved if any other register is
saved.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62142 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/config/arm/arm.c | 12 |
2 files changed, 14 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8ba5264180c..4e7b7e8e17f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-01-30 Richard Earnshaw <rearnsha@arm.com> + + * arm.c (arm_compute_initial_elimination_offset): If optimizing for + size, the link register is always saved if any other register is + saved. + 2003-01-30 Kazu Hirata <kazu@cs.umass.edu> * config/h8300/h8300-protos.h: Update the prototype for diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 20ae69725a6..3a8d993af46 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -8648,10 +8648,14 @@ arm_compute_initial_elimination_offset (from, to) reg_mask = reg_mask & ~ (reg_mask & - reg_mask); } - if (regs_ever_live[LR_REGNUM] - /* If a stack frame is going to be created, the LR will - be saved as part of that, so we do not need to allow - for it here. */ + if ((regs_ever_live[LR_REGNUM] + /* If optimizing for size, then we save the link register if + any other integer register is saved. This gives a smaller + return sequence. */ + || (optimize_size && call_saved_registers > 0)) + /* But if a stack frame is going to be created, the LR will + be saved as part of that, so we do not need to allow for + it here. */ && ! frame_pointer_needed) call_saved_registers += 4; |

