re PR middle-end/37243 (IRA causes wrong code generation)

2008-08-29  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-opt/37243
	* ira-color (ira_fast_allocation): Don't assign hard registers to
	global allocnos.

From-SVN: r139769
This commit is contained in:
Vladimir Makarov 2008-08-29 16:16:45 +00:00 committed by Vladimir Makarov
parent c16eb95fb6
commit 03dd10d874
2 changed files with 12 additions and 2 deletions

View file

@ -1,3 +1,9 @@
2008-08-29 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-opt/37243
* ira-color (ira_fast_allocation): Don't assign hard registers to
global allocnos.
2008-08-29 Jan Hubicka <jh@suse.cz>
PR middle-end/37278

View file

@ -2912,13 +2912,17 @@ ira_fast_allocation (void)
for (i = 0; i < num; i++)
{
a = sorted_allocnos[i];
ALLOCNO_ASSIGNED_P (a) = true;
ALLOCNO_HARD_REGNO (a) = -1;
/* Live info about hard registers are absent when OPTIMIZE==0.
So try to assign hard-registers only to local allocnos. */
if (!optimize && REG_BASIC_BLOCK (ALLOCNO_REGNO (a)) == REG_BLOCK_GLOBAL)
continue;
COPY_HARD_REG_SET (conflict_hard_regs, ALLOCNO_CONFLICT_HARD_REGS (a));
for (r = ALLOCNO_LIVE_RANGES (a); r != NULL; r = r->next)
for (j = r->start; j <= r->finish; j++)
IOR_HARD_REG_SET (conflict_hard_regs, used_hard_regs[j]);
cover_class = ALLOCNO_COVER_CLASS (a);
ALLOCNO_ASSIGNED_P (a) = true;
ALLOCNO_HARD_REGNO (a) = -1;
if (hard_reg_set_subset_p (reg_class_contents[cover_class],
conflict_hard_regs))
continue;