From: Vladimir Makarov Date: Fri, 29 Aug 2008 16:16:45 +0000 (+0000) Subject: re PR middle-end/37243 (IRA causes wrong code generation) X-Git-Tag: releases/gcc-4.4.0~2795 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=03dd10d874ad98a487319e9bad2bde7235bc2994;p=thirdparty%2Fgcc.git re PR middle-end/37243 (IRA causes wrong code generation) 2008-08-29 Vladimir Makarov PR rtl-opt/37243 * ira-color (ira_fast_allocation): Don't assign hard registers to global allocnos. From-SVN: r139769 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 04a7e4d55abf..b299eb1a3b8e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-08-29 Vladimir Makarov + + PR rtl-opt/37243 + * ira-color (ira_fast_allocation): Don't assign hard registers to + global allocnos. + 2008-08-29 Jan Hubicka PR middle-end/37278 diff --git a/gcc/ira-color.c b/gcc/ira-color.c index f3e4673ad6fd..0cbb4978dba8 100644 --- a/gcc/ira-color.c +++ b/gcc/ira-color.c @@ -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;