From 2feb9704c27f0d2eb4a1381cb47eaf4b77208979 Mon Sep 17 00:00:00 2001 From: Bernd Schmidt Date: Thu, 16 Sep 1999 09:55:48 +0000 Subject: [PATCH] Bugfix in order_regs_for_reload From-SVN: r29455 --- gcc/ChangeLog | 5 +++++ gcc/reload1.c | 41 ++++++++++++++++------------------------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 40e358e..cb20deb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Thu Sep 16 10:53:36 1999 Bernd Schmidt + + * reload1.c (order_regs_for_reload): Move hard_reg_n_uses + computation out of loop over hard regs. + Wed Sep 15 21:37:06 1999 Mark Mitchell * function.c (identify_blocks): Don't shadow a variable in an diff --git a/gcc/reload1.c b/gcc/reload1.c index 22533ec..57b43d92 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -4109,44 +4109,35 @@ order_regs_for_reload (chain) COPY_HARD_REG_SET (bad_spill_regs, bad_spill_regs_global); - for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) - { - hard_reg_n_uses[i].regno = i; - hard_reg_n_uses[i].uses = 0; - } - /* Count number of uses of each hard reg by pseudo regs allocated to it and then order them by decreasing use. */ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) { - int j; + hard_reg_n_uses[i].regno = i; + hard_reg_n_uses[i].uses = 0; /* Test the various reasons why we can't use a register for spilling in this insn. */ if (fixed_regs[i] || REGNO_REG_SET_P (chain->live_before, i) || REGNO_REG_SET_P (chain->live_after, i)) - { - SET_HARD_REG_BIT (bad_spill_regs, i); - continue; - } + SET_HARD_REG_BIT (bad_spill_regs, i); + } - /* Now find out which pseudos are allocated to it, and update - hard_reg_n_uses. */ - CLEAR_REG_SET (pseudos_counted); + /* Now compute hard_reg_n_uses. */ + CLEAR_REG_SET (pseudos_counted); - EXECUTE_IF_SET_IN_REG_SET - (chain->live_before, FIRST_PSEUDO_REGISTER, j, - { - count_pseudo (hard_reg_n_uses, j); - }); - EXECUTE_IF_SET_IN_REG_SET - (chain->live_after, FIRST_PSEUDO_REGISTER, j, - { - count_pseudo (hard_reg_n_uses, j); - }); - } + EXECUTE_IF_SET_IN_REG_SET + (chain->live_before, FIRST_PSEUDO_REGISTER, i, + { + count_pseudo (hard_reg_n_uses, i); + }); + EXECUTE_IF_SET_IN_REG_SET + (chain->live_after, FIRST_PSEUDO_REGISTER, i, + { + count_pseudo (hard_reg_n_uses, i); + }); FREE_REG_SET (pseudos_counted); -- 2.7.4