diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2011-03-30 02:11:04 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2011-03-30 02:11:04 +0000 |
commit | ad3b266ba5b48f3ce496a387a751c411a6a40cd6 (patch) | |
tree | bce022616c312b2302fa7c0e66973a463fc6923b /gcc | |
parent | 99ac3cea6ea8d66936122185c34121c21e3a78b7 (diff) | |
download | gcc-ad3b266ba5b48f3ce496a387a751c411a6a40cd6.zip gcc-ad3b266ba5b48f3ce496a387a751c411a6a40cd6.tar.gz gcc-ad3b266ba5b48f3ce496a387a751c411a6a40cd6.tar.bz2 |
re PR target/48336 (Error in generation of ARM ldrd instruction)
2011-03-29 Vladimir Makarov <vmakarov@redhat.com>
PR target/48336
PR middle-end/48342
PR rtl-optimization/48345
* ira-color.c (setup_conflict_profitable_regs): Exclude prohibited
hard regs for given mode from profitable regs when doing secondary
allocation.
From-SVN: r171713
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/ira-color.c | 13 |
2 files changed, 19 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d456e44..689f291 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2011-03-29 Vladimir Makarov <vmakarov@redhat.com> + + PR target/48336 + PR middle-end/48342 + PR rtl-optimization/48345 + * ira-color.c (setup_conflict_profitable_regs): Exclude prohibited + hard regs for given mode from profitable regs when doing secondary + allocation. + 2011-03-29 Jeff Law <law@redhat.com> PR bootstrap/48327 diff --git a/gcc/ira-color.c b/gcc/ira-color.c index 4e2dd2c..c293670 100644 --- a/gcc/ira-color.c +++ b/gcc/ira-color.c @@ -1447,7 +1447,9 @@ update_conflict_hard_regno_costs (int *costs, enum reg_class aclass, } /* Set up conflicting and profitable regs (through CONFLICT_REGS and - PROFITABLE_REGS) for each object of allocno A. */ + PROFITABLE_REGS) for each object of allocno A. Remember that the + profitable regs exclude hard regs which can not hold value of mode + of allocno A. */ static inline void setup_conflict_profitable_regs (ira_allocno_t a, bool retry_p, HARD_REG_SET *conflict_regs, @@ -1463,8 +1465,13 @@ setup_conflict_profitable_regs (ira_allocno_t a, bool retry_p, COPY_HARD_REG_SET (conflict_regs[i], OBJECT_TOTAL_CONFLICT_HARD_REGS (obj)); if (retry_p) - COPY_HARD_REG_SET (profitable_regs[i], - reg_class_contents[ALLOCNO_CLASS (a)]); + { + COPY_HARD_REG_SET (profitable_regs[i], + reg_class_contents[ALLOCNO_CLASS (a)]); + AND_COMPL_HARD_REG_SET (profitable_regs[i], + ira_prohibited_class_mode_regs + [ALLOCNO_CLASS (a)][ALLOCNO_MODE (a)]); + } else COPY_HARD_REG_SET (profitable_regs[i], OBJECT_COLOR_DATA (obj)->profitable_hard_regs); |