ira.c (check_allocation): Correctly handle the case where an allocno with two objects was allocated to a...
* ira.c (check_allocation): Correctly handle the case where an allocno with two objects was allocated to a single reg. From-SVN: r162432
This commit is contained in:
parent
1a39adaec8
commit
8cfd82bf11
@ -1,3 +1,8 @@
|
||||
2010-07-22 Bernd Schmidt <bernds@codesourcery.com>
|
||||
|
||||
* ira.c (check_allocation): Correctly handle the case where an allocno
|
||||
with two objects was allocated to a single reg.
|
||||
|
||||
2010-07-22 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
* tree-ssa-math-opts.c (is_widening_mult_rhs_p): New function.
|
||||
|
25
gcc/ira.c
25
gcc/ira.c
@ -1624,11 +1624,14 @@ check_allocation (void)
|
||||
|| (hard_regno = ALLOCNO_HARD_REGNO (a)) < 0)
|
||||
continue;
|
||||
nregs = hard_regno_nregs[hard_regno][ALLOCNO_MODE (a)];
|
||||
if (n > 1)
|
||||
{
|
||||
gcc_assert (n == nregs);
|
||||
nregs = 1;
|
||||
}
|
||||
if (nregs == 1)
|
||||
/* We allocated a single hard register. */
|
||||
n = 1;
|
||||
else if (n > 1)
|
||||
/* We allocated multiple hard registers, and we will test
|
||||
conflicts in a granularity of single hard regs. */
|
||||
nregs = 1;
|
||||
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
ira_object_t obj = ALLOCNO_OBJECT (a, i);
|
||||
@ -1648,7 +1651,13 @@ check_allocation (void)
|
||||
int conflict_hard_regno = ALLOCNO_HARD_REGNO (conflict_a);
|
||||
if (conflict_hard_regno < 0)
|
||||
continue;
|
||||
if (ALLOCNO_NUM_OBJECTS (conflict_a) > 1)
|
||||
|
||||
conflict_nregs
|
||||
= (hard_regno_nregs
|
||||
[conflict_hard_regno][ALLOCNO_MODE (conflict_a)]);
|
||||
|
||||
if (ALLOCNO_NUM_OBJECTS (conflict_a) > 1
|
||||
&& conflict_nregs == ALLOCNO_NUM_OBJECTS (conflict_a))
|
||||
{
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
conflict_hard_regno += (ALLOCNO_NUM_OBJECTS (conflict_a)
|
||||
@ -1657,10 +1666,6 @@ check_allocation (void)
|
||||
conflict_hard_regno += OBJECT_SUBWORD (conflict_obj);
|
||||
conflict_nregs = 1;
|
||||
}
|
||||
else
|
||||
conflict_nregs
|
||||
= (hard_regno_nregs
|
||||
[conflict_hard_regno][ALLOCNO_MODE (conflict_a)]);
|
||||
|
||||
if ((conflict_hard_regno <= this_regno
|
||||
&& this_regno < conflict_hard_regno + conflict_nregs)
|
||||
|
Loading…
x
Reference in New Issue
Block a user