aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlexander Monakov <amonakov@ispras.ru>2010-01-14 14:15:07 +0300
committerAlexander Monakov <amonakov@gcc.gnu.org>2010-01-14 14:15:07 +0300
commita9ced68beb3b5d81dc6803f04cb33fb5e445c83a (patch)
treec312e16ce6b9a6f91c31c5f01153939357b955af /gcc
parent0c94f956cf3f91faa1ec0364568fa51ad51d1a91 (diff)
downloadgcc-a9ced68beb3b5d81dc6803f04cb33fb5e445c83a.zip
gcc-a9ced68beb3b5d81dc6803f04cb33fb5e445c83a.tar.gz
gcc-a9ced68beb3b5d81dc6803f04cb33fb5e445c83a.tar.bz2
sel-sched.c (choose_best_reg_1): Loop over all regs for mode.
2010-01-14 Alexander Monakov <amonakov@ispras.ru> * sel-sched.c (choose_best_reg_1): Loop over all regs for mode. From-SVN: r155897
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/sel-sched.c11
2 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 56375a9..abfd461 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2010-01-14 Alexander Monakov <amonakov@ispras.ru>
+ * sel-sched.c (choose_best_reg_1): Loop over all regs for mode.
+
+2010-01-14 Alexander Monakov <amonakov@ispras.ru>
+
* sel-sched.c (mark_unavailable_hard_regs): Do not try to search
available registers when failed to discover LHS register class.
Fix indentation. Update comment.
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index 7fb0882..bdc7f9c 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -1429,6 +1429,16 @@ choose_best_reg_1 (HARD_REG_SET hard_regs_used,
0, cur_reg, hrsi)
if (! TEST_HARD_REG_BIT (hard_regs_used, cur_reg))
{
+ /* Check that all hard regs for mode are available. */
+ for (i = 1, n = hard_regno_nregs[cur_reg][mode]; i < n; i++)
+ if (TEST_HARD_REG_BIT (hard_regs_used, cur_reg + i)
+ || !TEST_HARD_REG_BIT (reg_rename_p->available_for_renaming,
+ cur_reg + i))
+ break;
+
+ if (i < n)
+ continue;
+
/* All hard registers are available. */
if (best_new_reg < 0
|| reg_rename_tick[cur_reg] < reg_rename_tick[best_new_reg])
@@ -1460,6 +1470,7 @@ choose_best_reg (HARD_REG_SET hard_regs_used, struct reg_rename *reg_rename_p,
rtx best_reg = choose_best_reg_1 (hard_regs_used, reg_rename_p,
original_insns, is_orig_reg_p_ptr);
+ /* FIXME loop over hard_regno_nregs here. */
gcc_assert (best_reg == NULL_RTX
|| TEST_HARD_REG_BIT (sel_hrd.regs_ever_used, REGNO (best_reg)));