re PR target/49865 (Unnecessary reload causes small bloat)
authorVladimir Makarov <vmakarov@redhat.com>
Tue, 20 Dec 2011 21:29:36 +0000 (21:29 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Tue, 20 Dec 2011 21:29:36 +0000 (21:29 +0000)
2011-12-20  Vladimir Makarov  <vmakarov@redhat.com>

PR target/49865
* ira-costs.c (find_costs_and_classes): Prefer registers even
          if the memory cost is the same.

From-SVN: r182553

gcc/ChangeLog
gcc/ira-costs.c

index ad53a035ba96fdb25f32d925d029556dc660a8ec..9bbfbcbaf3058766c49858e309d7d1be280ebfe3 100644 (file)
@@ -1,3 +1,9 @@
+2011-12-20  Vladimir Makarov  <vmakarov@redhat.com>
+
+       PR target/49865
+       * ira-costs.c (find_costs_and_classes): Prefer registers even
+          if the memory cost is the same.
+
 2011-12-20  Joseph Myers  <joseph@codesourcery.com>
 
        * c-decl.c (diagnose_mismatched_decls, grokdeclarator, grokfield)
index 4fa12a2ae19fc86e108ca28e2891bfb79c071043..4f2f8412f7c9104e11d85d4fea48e7070569cfcd 100644 (file)
@@ -1693,7 +1693,14 @@ find_costs_and_classes (FILE *dump_file)
              else if (i_costs[k] == best_cost)
                best = ira_reg_class_subunion[best][rclass];
              if (pass == flag_expensive_optimizations
-                 && i_costs[k] < i_mem_cost
+                 /* We still prefer registers to memory even at this
+                    stage if their costs are the same.  We will make
+                    a final decision during assigning hard registers
+                    when we have all info including more accurate
+                    costs which might be affected by assigning hard
+                    registers to other pseudos because the pseudos
+                    involved in moves can be coalesced.  */
+                 && i_costs[k] <= i_mem_cost
                  && (reg_class_size[reg_class_subunion[alt_class][rclass]]
                      > reg_class_size[alt_class]))
                alt_class = reg_class_subunion[alt_class][rclass];