summaryrefslogtreecommitdiff
path: root/gcc/global.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1996-01-01 02:32:57 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1996-01-01 02:32:57 +0000
commit2836f00621a6b05ba7f9ed67a531a56cc73b3682 (patch)
tree6954fbd4d8694312315db4ec5b21e6a62873aec7 /gcc/global.c
parent45ca31d6f4658b3f17900c84982602ec3baaeab1 (diff)
downloadgcc-2836f00621a6b05ba7f9ed67a531a56cc73b3682.tar.gz
* hard-reg-set.h (losing_caller_save_reg_set): Declare.
* regclass.c (losing_caller_save_reg_set): Define. (init_reg_sets_1): Initialize losing_caller_save_reg_set. * global.c (find_reg): Avoid caller-saving registers in LOSING_CALLER_SAVE_REGS if it's defined. * local-alloc.c (find_free_reg): Avoid caller-saving registers in losing_caller_save_reg_set. (CLASS_LIKELY_SPILLED_P): Delete definition. Moved into regs.h. * regs.h (CLASS_LIKELY_SPILLED_P): Define if not already defined. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@10926 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/global.c')
-rw-r--r--gcc/global.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/global.c b/gcc/global.c
index e9941e6d30f..78da99b99a8 100644
--- a/gcc/global.c
+++ b/gcc/global.c
@@ -1085,7 +1085,14 @@ find_reg (allocno, losers, alt_regs_p, accept_call_clobbered, retrying)
&& CALLER_SAVE_PROFITABLE (allocno_n_refs[allocno],
allocno_calls_crossed[allocno]))
{
- find_reg (allocno, losers, alt_regs_p, 1, retrying);
+ HARD_REG_SET new_losers;
+ if (! losers)
+ CLEAR_HARD_REG_SET (new_losers);
+ else
+ COPY_HARD_REG_SET (new_losers, losers);
+
+ IOR_HARD_REG_SET(new_losers, losing_caller_save_reg_set);
+ find_reg (allocno, new_losers, alt_regs_p, 1, retrying);
if (reg_renumber[allocno_reg[allocno]] >= 0)
{
caller_save_needed = 1;