[backport r171713 to fix PR48336/PR48343/PR48345 regression from r171649 ] gcc/ 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. --- gcc-4.7-r171649/gcc/ira-color.c.~1~ 2011-04-28 16:28:08.000000000 +0200 +++ gcc-4.7-r171649/gcc/ira-color.c 2011-04-28 16:32:48.000000000 +0200 @@ -1447,7 +1447,9 @@ update_conflict_hard_regno_costs (int *c } /* 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_allo 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);