diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2008-08-29 16:16:45 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2008-08-29 16:16:45 +0000 |
commit | 03dd10d874ad98a487319e9bad2bde7235bc2994 (patch) | |
tree | 2e1284dac8880ebce36dbfb914c4d3cabb24cea3 /gcc | |
parent | c16eb95fb6301af05ccdcba9a955d34ab7769686 (diff) | |
download | gcc-03dd10d874ad98a487319e9bad2bde7235bc2994.zip gcc-03dd10d874ad98a487319e9bad2bde7235bc2994.tar.gz gcc-03dd10d874ad98a487319e9bad2bde7235bc2994.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ira-color.c | 8 |
2 files changed, 12 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 04a7e4d..b299eb1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/ira-color.c b/gcc/ira-color.c index f3e4673..0cbb497 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; |