re PR target/48336 (Error in generation of ARM ldrd instruction)
authorVladimir Makarov <vmakarov@redhat.com>
Wed, 30 Mar 2011 02:11:04 +0000 (02:11 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Wed, 30 Mar 2011 02:11:04 +0000 (02:11 +0000)
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

gcc/ChangeLog
gcc/ira-color.c

index d456e441b2b60c769eb0a7935b55970f48657575..689f2916faab00682570dc392c3591b0cca19973 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 4e2dd2ca10997a261d8bc62392ae6131cc1a4f4c..c29367010ff5a3cea2e6d11b97c2040734e29e9d 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);