aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2011-03-30 02:11:04 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2011-03-30 02:11:04 +0000
commitad3b266ba5b48f3ce496a387a751c411a6a40cd6 (patch)
treebce022616c312b2302fa7c0e66973a463fc6923b /gcc
parent99ac3cea6ea8d66936122185c34121c21e3a78b7 (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/ira-color.c13
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);