diff options
author | Bernd Schmidt <bernds@redhat.com> | 2016-03-04 14:12:36 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2016-03-04 14:12:36 +0000 |
commit | b6c38c695832904acacf5cae38f435ef831f00e1 (patch) | |
tree | f56de8a9fbedf226e0e591a92daabe830f3e6550 /gcc/lra-assigns.c | |
parent | af3cdd3433e0bc60f4e6ebee1ee699bb19485cce (diff) | |
download | gcc-b6c38c695832904acacf5cae38f435ef831f00e1.zip gcc-b6c38c695832904acacf5cae38f435ef831f00e1.tar.gz gcc-b6c38c695832904acacf5cae38f435ef831f00e1.tar.bz2 |
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
Diffstat (limited to 'gcc/lra-assigns.c')
-rw-r--r-- | gcc/lra-assigns.c | 7 |
1 files changed, 6 insertions, 1 deletions
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); |