summaryrefslogtreecommitdiff
path: root/gcc/ira-lives.c
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2009-10-22 21:43:14 -0600
committerJeff Law <law@gcc.gnu.org>2009-10-22 21:43:14 -0600
commitd5b5b6bca0e7126a75715c2478a62dd4b5ed8808 (patch)
tree4892b18235641740a7dc4b8fb22a1dd5935436b7 /gcc/ira-lives.c
parent5ba0d527e18ab35026c308c1e4ca94b732fb705f (diff)
downloadgcc-d5b5b6bca0e7126a75715c2478a62dd4b5ed8808.tar.gz
ira-lives.c (process_single_reg_class_operands): Update the hard reg costs for all the hard registers desired by the single reg...
* ira-lives.c (process_single_reg_class_operands): Update the hard reg costs for all the hard registers desired by the single reg class operand. From-SVN: r153487
Diffstat (limited to 'gcc/ira-lives.c')
-rw-r--r--gcc/ira-lives.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/gcc/ira-lives.c b/gcc/ira-lives.c
index 822dccb18d5..c67e89cbd79 100644
--- a/gcc/ira-lives.c
+++ b/gcc/ira-lives.c
@@ -841,6 +841,7 @@ process_single_reg_class_operands (bool in_p, int freq)
[ira_class_hard_regs[cl][0]]) >= 0
&& reg_class_size[cl] <= (unsigned) CLASS_MAX_NREGS (cl, mode))
{
+ int i, size;
cost
= (freq
* (in_p
@@ -848,10 +849,12 @@ process_single_reg_class_operands (bool in_p, int freq)
: ira_get_register_move_cost (mode, cl, cover_class)));
ira_allocate_and_set_costs
(&ALLOCNO_CONFLICT_HARD_REG_COSTS (operand_a), cover_class, 0);
- ALLOCNO_CONFLICT_HARD_REG_COSTS (operand_a)
- [ira_class_hard_reg_index
- [cover_class][ira_class_hard_regs[cl][0]]]
- -= cost;
+ size = ira_reg_class_nregs[cover_class][mode];
+ for (i = 0; i < size; i++)
+ ALLOCNO_CONFLICT_HARD_REG_COSTS (operand_a)
+ [ira_class_hard_reg_index
+ [cover_class][ira_class_hard_regs[cl][i]]]
+ -= cost;
}
}