From bdf13188c06c3109d64368a865954816fafae567 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Fri, 10 Oct 2014 08:09:39 +0000 Subject: * lra-assigns.c (assign_by_spills): Error out on spill failure. From-SVN: r216059 --- gcc/ChangeLog | 4 ++++ gcc/lra-assigns.c | 16 +++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 280101c..90fd7b5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2014-10-10 Eric Botcazou + + * lra-assigns.c (assign_by_spills): Error out on spill failure. + 2014-10-09 Markus Trippelsdorf * pa-polymorphic-call.c (check_stmt_for_type_change): Move diff --git a/gcc/lra-assigns.c b/gcc/lra-assigns.c index c7164cd..a6745fc 100644 --- a/gcc/lra-assigns.c +++ b/gcc/lra-assigns.c @@ -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, ®_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, "% 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 -- cgit v1.1