From b6c38c695832904acacf5cae38f435ef831f00e1 Mon Sep 17 00:00:00 2001 From: Bernd Schmidt Date: Fri, 4 Mar 2016 14:12:36 +0000 Subject: Avoid terminating early in LRA, unless -fchecking (PR57676) gcc/ PR rtl-optimization/57676 * lra-assigns.c (lra_assign): Guard test for maximum iterations with flag_checking. gcc/testsuite/ PR rtl-optimization/57676 * gcc.dg/torture/pr57676.c: New test. From-SVN: r233967 --- gcc/lra-assigns.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'gcc/lra-assigns.c') diff --git a/gcc/lra-assigns.c b/gcc/lra-assigns.c index 1d9693a..fb3de84 100644 --- a/gcc/lra-assigns.c +++ b/gcc/lra-assigns.c @@ -1620,7 +1620,12 @@ lra_assign (void) timevar_pop (TV_LRA_ASSIGN); if (former_reload_pseudo_spill_p) lra_assignment_iter_after_spill++; - if (lra_assignment_iter_after_spill > LRA_MAX_ASSIGNMENT_ITERATION_NUMBER) + /* This is conditional on flag_checking because valid code can take + more than this maximum number of iteration, but at the same time + the test can uncover errors in machine descriptions. */ + if (flag_checking + && (lra_assignment_iter_after_spill + > LRA_MAX_ASSIGNMENT_ITERATION_NUMBER)) internal_error ("Maximum number of LRA assignment passes is achieved (%d)\n", LRA_MAX_ASSIGNMENT_ITERATION_NUMBER); -- cgit v1.1