OSDN Git Service

2011-03-29 Vladimir Makarov <vmakarov@redhat.com>
authorvmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 Mar 2011 02:11:04 +0000 (02:11 +0000)
committervmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 30 Mar 2011 02:11:04 +0000 (02:11 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@171713 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/ira-color.c

index d456e44..689f291 100644 (file)
@@ -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
index 4e2dd2c..c293670 100644 (file)
@@ -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);