> OK, I guess I can copy-and-paste reload1.c:spill_failure there.

This generates the same error message than reload1.c:spill_failure (modulo the 
class of the spill register, but it's not mentioned in the asm case either).

Tested on x86_64-suse-linux, OK for the mainline?


2014-10-09  Eric Botcazou  <ebotca...@adacore.com>

        * lra-assigns.c (assign_by_spills): Error out on spill failure.


-- 
Eric Botcazou
Index: lra-assigns.c
===================================================================
--- lra-assigns.c	(revision 215968)
+++ lra-assigns.c	(working copy)
@@ -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

Reply via email to