From: Herman A.J. ten Brugge Date: Sat, 12 Jan 2002 01:43:51 +0000 (+0100) Subject: global.c (find_reg): Check for HARD_REGNO_CALL_PART_CLOBBERED every where we allocate... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cf11ac5596a2a5f7ebb0f8269e45aac2f85954df;p=gcc.git global.c (find_reg): Check for HARD_REGNO_CALL_PART_CLOBBERED every where we allocate a register. * global.c (find_reg): Check for HARD_REGNO_CALL_PART_CLOBBERED every where we allocate a register. From-SVN: r48791 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b3612e7541c..0046e6ecfd4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-01-12 Herman A.J. ten Brugge + + * global.c (find_reg): Check for HARD_REGNO_CALL_PART_CLOBBERED + every where we allocate a register. + 2002-01-12 Michael Hayes * gcse.c (compute_pre_data, pre_gcse): Use sbitmap_free. diff --git a/gcc/global.c b/gcc/global.c index 99f54caf045..0d9618c27b7 100644 --- a/gcc/global.c +++ b/gcc/global.c @@ -1086,6 +1086,9 @@ find_reg (num, losers, alt_regs_p, accept_call_clobbered, retrying) for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (TEST_HARD_REG_BIT (allocno[num].hard_reg_copy_preferences, i) && HARD_REGNO_MODE_OK (i, mode) + && (allocno[num].calls_crossed == 0 + || accept_call_clobbered + || ! HARD_REGNO_CALL_PART_CLOBBERED (i, mode)) && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg) || reg_class_subset_p (REGNO_REG_CLASS (i), REGNO_REG_CLASS (best_reg)) @@ -1122,6 +1125,9 @@ find_reg (num, losers, alt_regs_p, accept_call_clobbered, retrying) for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) if (TEST_HARD_REG_BIT (allocno[num].hard_reg_preferences, i) && HARD_REGNO_MODE_OK (i, mode) + && (allocno[num].calls_crossed == 0 + || accept_call_clobbered + || ! HARD_REGNO_CALL_PART_CLOBBERED (i, mode)) && (REGNO_REG_CLASS (i) == REGNO_REG_CLASS (best_reg) || reg_class_subset_p (REGNO_REG_CLASS (i), REGNO_REG_CLASS (best_reg)) @@ -1202,6 +1208,9 @@ find_reg (num, losers, alt_regs_p, accept_call_clobbered, retrying) /* Don't use a reg no good for this pseudo. */ && ! TEST_HARD_REG_BIT (used2, regno) && HARD_REGNO_MODE_OK (regno, mode) + && (allocno[num].calls_crossed == 0 + || accept_call_clobbered + || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)) #ifdef CLASS_CANNOT_CHANGE_MODE && ! (REG_CHANGES_MODE (allocno[num].reg) && (TEST_HARD_REG_BIT