OSDN Git Service

* config/arm/arm.h (REGISTER_MOVE_COST, MEMORY_MOVE_COST): Remove.
[pf3gnuchains/gcc-fork.git] / gcc / ira.c
index e4be8b5..e3d3fe3 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 (ira_reg_class_max_nregs[cl1][mode] > ira_available_class_regs[cl1])
+       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))
@@ -3617,9 +3621,8 @@ ira (FILE *f)
 
   if (internal_flag_ira_verbose > 0 && ira_dump_file != NULL)
     fprintf (ira_dump_file, "Building IRA IR\n");
-  loops_p = ira_build (optimize
-                      && (flag_ira_region == IRA_REGION_ALL
-                          || flag_ira_region == IRA_REGION_MIXED));
+  loops_p = ira_build (flag_ira_region == IRA_REGION_ALL
+                      || flag_ira_region == IRA_REGION_MIXED);
 
   ira_assert (ira_conflicts_p || !loops_p);