diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2010-03-23 19:18:42 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2010-03-23 19:18:42 +0000 |
commit | 478ab26dedbe5102e90724ea51fde59764949c92 (patch) | |
tree | 1cae00c19a30ed021cbb987352992f061240cc1c /gcc | |
parent | b42f0d7e1f59e06d9ab830a3a62597900fffc099 (diff) | |
download | gcc-478ab26dedbe5102e90724ea51fde59764949c92.zip gcc-478ab26dedbe5102e90724ea51fde59764949c92.tar.gz gcc-478ab26dedbe5102e90724ea51fde59764949c92.tar.bz2 |
re PR rtl-optimization/43413 (Powerpc generates worse code for -mvsx on gromacs even though there are no VSX instructions used)
2010-03-23 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/43413
* ira-color.c (setup_allocno_available_regs_num): Count prohibited
hard regs too.
From-SVN: r157676
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/ira-color.c | 13 |
2 files changed, 16 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 656f9c8..bd91922 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-03-23 Vladimir Makarov <vmakarov@redhat.com> + + PR rtl-optimization/43413 + * ira-color.c (setup_allocno_available_regs_num): Count prohibited + hard regs too. + 2010-03-22 James E. Wilson <wilson@codesourcery.com> PR target/43348 diff --git a/gcc/ira-color.c b/gcc/ira-color.c index 4ba7112..70a1d8f 100644 --- a/gcc/ira-color.c +++ b/gcc/ira-color.c @@ -1354,7 +1354,8 @@ pop_allocnos_from_stack (void) static void setup_allocno_available_regs_num (ira_allocno_t allocno) { - int i, n, hard_regs_num; + int i, n, hard_regs_num, hard_regno; + enum machine_mode mode; enum reg_class cover_class; ira_allocno_t a; HARD_REG_SET temp_set; @@ -1373,9 +1374,15 @@ setup_allocno_available_regs_num (ira_allocno_t allocno) if (a == allocno) break; } + mode = ALLOCNO_MODE (allocno); for (n = 0, i = hard_regs_num - 1; i >= 0; i--) - if (TEST_HARD_REG_BIT (temp_set, ira_class_hard_regs[cover_class][i])) - n++; + { + hard_regno = ira_class_hard_regs[cover_class][i]; + if (TEST_HARD_REG_BIT (temp_set, hard_regno) + || TEST_HARD_REG_BIT (prohibited_class_mode_regs[cover_class][mode], + hard_regno)) + n++; + } if (internal_flag_ira_verbose > 2 && n > 0 && ira_dump_file != NULL) fprintf (ira_dump_file, " Reg %d of %s has %d regs less\n", ALLOCNO_REGNO (allocno), reg_class_names[cover_class], n); |