aboutsummaryrefslogtreecommitdiff
path: root/gcc/global.c
diff options
context:
space:
mode:
authorAndreas Krebbel <krebbel1@de.ibm.com>2008-01-17 16:18:59 +0000
committerAndreas Krebbel <krebbel@gcc.gnu.org>2008-01-17 16:18:59 +0000
commit599824d24ab2e824ba8af60c123debc03023a94d (patch)
tree5121992dd80b8b1bb8673bf19c1c5051d0828766 /gcc/global.c
parent9328dd5725be9ddbca3350bf0586b30c3b920a6d (diff)
downloadgcc-599824d24ab2e824ba8af60c123debc03023a94d.zip
gcc-599824d24ab2e824ba8af60c123debc03023a94d.tar.gz
gcc-599824d24ab2e824ba8af60c123debc03023a94d.tar.bz2
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
Diffstat (limited to 'gcc/global.c')
-rw-r--r--gcc/global.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/global.c b/gcc/global.c
index 8be113d..c805f57 100644
--- a/gcc/global.c
+++ b/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);