diff options
author | kan <kan@FreeBSD.org> | 2003-02-10 05:41:50 +0000 |
---|---|---|
committer | kan <kan@FreeBSD.org> | 2003-02-10 05:41:50 +0000 |
commit | 793833d7a78bb624965885760593495e7079d705 (patch) | |
tree | f843ff90d71b900271088361ed96ff82eb2a365d /contrib/gcc/global.c | |
parent | 1b04fed26051ebc88f26a7bb93c63c270970e773 (diff) | |
download | FreeBSD-src-793833d7a78bb624965885760593495e7079d705.zip FreeBSD-src-793833d7a78bb624965885760593495e7079d705.tar.gz |
Gcc 3.2.2-release.
Diffstat (limited to 'contrib/gcc/global.c')
-rw-r--r-- | contrib/gcc/global.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/contrib/gcc/global.c b/contrib/gcc/global.c index 0d9618c..383f6c4 100644 --- a/contrib/gcc/global.c +++ b/contrib/gcc/global.c @@ -130,6 +130,11 @@ struct allocno /* Set of hard registers that some later allocno has a preference for. */ HARD_REG_SET regs_someone_prefers; + +#ifdef STACK_REGS + /* Set to true if allocno can't be allocated in the stack register. */ + bool no_stack_reg; +#endif }; static struct allocno *allocno; @@ -717,8 +722,14 @@ global_conflicts () if (e->flags & EDGE_ABNORMAL) break; if (e != NULL) - for (ax = FIRST_STACK_REG; ax <= LAST_STACK_REG; ax++) - record_one_conflict (ax); + { + EXECUTE_IF_SET_IN_ALLOCNO_SET (allocnos_live, ax, + { + allocno[ax].no_stack_reg = 1; + }); + for (ax = FIRST_STACK_REG; ax <= LAST_STACK_REG; ax++) + record_one_conflict (ax); + } } #endif } @@ -1217,6 +1228,10 @@ find_reg (num, losers, alt_regs_p, accept_call_clobbered, retrying) (reg_class_contents[(int) CLASS_CANNOT_CHANGE_MODE], regno))) #endif +#ifdef STACK_REGS + && (!allocno[num].no_stack_reg + || regno < FIRST_STACK_REG || regno > LAST_STACK_REG) +#endif ) { /* We explicitly evaluate the divide results into temporary |