summaryrefslogtreecommitdiff
path: root/gcc/global.c
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-09-30 18:09:47 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-09-30 18:09:47 +0000
commitfc51ca3b0a90f92662c19e8d4d908f8bc6106006 (patch)
tree4cad448709fc0bd1befbe6fec3245d112509581d /gcc/global.c
parentfbb85fa33447b43ea56f4b4bb9c80d86092ef696 (diff)
downloadgcc-fc51ca3b0a90f92662c19e8d4d908f8bc6106006.tar.gz
* regs.h (HARD_REGNO_CALL_PART_CLOBBERED): New macro.
* local-alloc.c (find_free_reg): Use it. * global.c (find_reg): Likewise. * tm.texi: Document HARD_REGNO_CALL_PART_CLOBBERED. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@22688 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/global.c')
-rw-r--r--gcc/global.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/global.c b/gcc/global.c
index a3d7e023283..3b0c0ec7a4c 100644
--- a/gcc/global.c
+++ b/gcc/global.c
@@ -976,7 +976,10 @@ find_reg (allocno, losers, alt_regs_p, accept_call_clobbered, retrying)
int regno = i;
#endif
if (! TEST_HARD_REG_BIT (used, regno)
- && HARD_REGNO_MODE_OK (regno, mode))
+ && HARD_REGNO_MODE_OK (regno, mode)
+ && (allocno_calls_crossed[allocno] == 0
+ || accept_call_clobbered
+ || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
{
register int j;
register int lim = regno + HARD_REGNO_NREGS (regno, mode);