* lra-assigns.c (assign_by_spills): Error out on spill failure.
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Oct 2014 08:09:39 +0000 (08:09 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Oct 2014 08:09:39 +0000 (08:09 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216059 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/lra-assigns.c

index 280101c..90fd7b5 100644 (file)
@@ -1,3 +1,7 @@
+2014-10-10  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * lra-assigns.c (assign_by_spills): Error out on spill failure.
+
 2014-10-09  Markus Trippelsdorf  <markus@trippelsdorf.de>
 
        * pa-polymorphic-call.c (check_stmt_for_type_change): Move
index c7164cd..a6745fc 100644 (file)
@@ -1286,10 +1286,9 @@ assign_by_spills (void)
        break;
       if (iter > 0)
        {
-         /* We did not assign hard regs to reload pseudos after two
-            iteration.  It means something is wrong with asm insn
-            constraints.  Report it.  */
-         bool asm_p = false;
+         /* We did not assign hard regs to reload pseudos after two iterations.
+            Either it's an asm and something is wrong with the constraints, or
+            we have run out of spill registers; error out in either case.  */
          bitmap_head failed_reload_insns;
 
          bitmap_initialize (&failed_reload_insns, &reg_obstack);
@@ -1299,7 +1298,7 @@ assign_by_spills (void)
              bitmap_ior_into (&failed_reload_insns,
                               &lra_reg_info[regno].insn_bitmap);
              /* Assign an arbitrary hard register of regno class to
-                avoid further trouble with the asm insns.  */
+                avoid further trouble with this insn.  */
              bitmap_clear_bit (&all_spilled_pseudos, regno);
              assign_hard_regno
                (ira_class_hard_regs[regno_allocno_class_array[regno]][0],
@@ -1310,7 +1309,6 @@ assign_by_spills (void)
              insn = lra_insn_recog_data[u]->insn;
              if (asm_noperands (PATTERN (insn)) >= 0)
                {
-                 asm_p = true;
                  error_for_asm (insn,
                                 "%<asm%> operand has impossible constraints");
                  /* Avoid further trouble with this insn.
@@ -1331,8 +1329,12 @@ assign_by_spills (void)
                      lra_set_insn_deleted (insn);
                    }
                }
+             else
+               {
+                 error ("unable to find a register to spill");
+                 fatal_insn ("this is the insn:", insn);
+               }
            }
-         lra_assert (asm_p);
          break;
        }
       /* This is a very rare event.  We can not assign a hard register