From ad3b266ba5b48f3ce496a387a751c411a6a40cd6 Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Wed, 30 Mar 2011 02:11:04 +0000 Subject: [PATCH] re PR target/48336 (Error in generation of ARM ldrd instruction) 2011-03-29 Vladimir Makarov 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 --- gcc/ChangeLog | 9 +++++++++ gcc/ira-color.c | 13 ++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d456e441b2b..689f2916faa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2011-03-29 Vladimir Makarov + + 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 PR bootstrap/48327 diff --git a/gcc/ira-color.c b/gcc/ira-color.c index 4e2dd2ca109..c29367010ff 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); -- 2.30.2