re PR rtl-optimization/49936 (IRA handles CANNOT_CHANGE_MODE_CLASS poorly, + spills...
authorVladimir Makarov <vmakarov@redhat.com>
Fri, 19 Aug 2011 22:17:26 +0000 (22:17 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Fri, 19 Aug 2011 22:17:26 +0000 (22:17 +0000)
2011-08-19  Vladimir Makarov  <vmakarov@redhat.com>

PR rtl-optimization/49936
* ira.c (ira_init_register_move_cost): Ignore too small subclasses
for calculation of max register move costs.

From-SVN: r177916

gcc/ChangeLog
gcc/ira.c

index 6457234b57390a95c39fb00a43af72ebe4f72a46..c4740586d22bee3b883b5b636ac885233f94581f 100644 (file)
@@ -1,3 +1,9 @@
+2011-08-19  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR rtl-optimization/49936
+       * ira.c (ira_init_register_move_cost): Ignore too small subclasses
+       for calculation of max register move costs.
+
 2011-08-19  Joseph Myers  <joseph@codesourcery.com>
 
        * c-parser.c (c_parser_postfix_expression): Convert operands of
index e4be8b52f714d9d7dc9b177a0a9296114933dae6..785478f7457ce5be6082eaabbbf6017ffea7877b 100644 (file)
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -1501,6 +1501,10 @@ ira_init_register_move_cost (enum machine_mode mode)
          sizeof (move_table) * N_REG_CLASSES);
   for (cl1 = 0; cl1 < N_REG_CLASSES; cl1++)
     {
+      /* Some subclasses are to small to have enough registers to hold
+        a value of MODE.  Just ignore them.  */
+      if (! contains_reg_of_mode[cl1][mode])
+       continue;
       COPY_HARD_REG_SET (temp_hard_regset, reg_class_contents[cl1]);
       AND_COMPL_HARD_REG_SET (temp_hard_regset, no_unit_alloc_regs);
       if (hard_reg_set_empty_p (temp_hard_regset))