global.c (find_reg): Mark the eh regs as used if necessary.
2008-01-17 Andreas Krebbel <krebbel1@de.ibm.com> * global.c (find_reg): Mark the eh regs as used if necessary. * ra-conflict.c (global_conflicts): Set no_eh_reg flag. * ra.h (struct allocno): no_eh_reg field added. Changed no_stack_reg type to bitfield. From-SVN: r131601
This commit is contained in:
parent
9328dd5725
commit
599824d24a
4 changed files with 28 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
|||
2008-01-17 Andreas Krebbel <krebbel1@de.ibm.com>
|
||||
|
||||
* global.c (find_reg): Mark the eh regs as used if necessary.
|
||||
* ra-conflict.c (global_conflicts): Set no_eh_reg flag.
|
||||
* ra.h (struct allocno): no_eh_reg field added. Changed
|
||||
no_stack_reg type to bitfield.
|
||||
|
||||
2008-01-17 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* tree.c (substitute_in_expr): Add missing 'break'.
|
||||
|
|
10
gcc/global.c
10
gcc/global.c
|
@ -1011,6 +1011,16 @@ find_reg (int num, HARD_REG_SET losers, int alt_regs_p, int accept_call_clobbere
|
|||
IOR_HARD_REG_SET (used1, losers);
|
||||
|
||||
IOR_COMPL_HARD_REG_SET (used1, reg_class_contents[(int) class]);
|
||||
|
||||
#ifdef EH_RETURN_DATA_REGNO
|
||||
if (allocno[num].no_eh_reg)
|
||||
{
|
||||
unsigned int j;
|
||||
for (j = 0; EH_RETURN_DATA_REGNO (j) != INVALID_REGNUM; j++)
|
||||
SET_HARD_REG_BIT (used1, EH_RETURN_DATA_REGNO (j));
|
||||
}
|
||||
#endif
|
||||
|
||||
COPY_HARD_REG_SET (used2, used1);
|
||||
|
||||
IOR_HARD_REG_SET (used1, allocno[num].hard_reg_conflicts);
|
||||
|
|
|
@ -1184,6 +1184,11 @@ global_conflicts (void)
|
|||
break;
|
||||
record_one_conflict (allocnos_live, &hard_regs_live, regno);
|
||||
}
|
||||
|
||||
EXECUTE_IF_SET_IN_SPARSESET (allocnos_live, i)
|
||||
{
|
||||
allocno[i].no_eh_reg = 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
7
gcc/ra.h
7
gcc/ra.h
|
@ -75,9 +75,14 @@ struct allocno
|
|||
|
||||
HARD_REG_SET regs_someone_prefers;
|
||||
|
||||
#ifdef EH_RETURN_DATA_REGNO
|
||||
/* Set to true if allocno can't be allocated in an eh register. */
|
||||
unsigned int no_eh_reg:1;
|
||||
#endif
|
||||
|
||||
#ifdef STACK_REGS
|
||||
/* Set to true if allocno can't be allocated in the stack register. */
|
||||
bool no_stack_reg;
|
||||
unsigned int no_stack_reg:1;
|
||||
#endif
|
||||
};
|
||||
extern struct allocno *allocno;
|
||||
|
|
Loading…
Add table
Reference in a new issue