From 3a123ed751451a4f2aebbe74226fd92272da4477 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 9 Jan 2018 09:03:45 +0100 Subject: [PATCH] re PR target/83507 (ICE in internal_dfa_insn_code_* for powerpc targets) PR target/83507 * modulo-sched.c (schedule_reg_moves): Punt if we'd need to move hard registers. Formatting fixes. * gcc.dg/sms-13.c: New test. From-SVN: r256368 --- gcc/ChangeLog | 4 ++++ gcc/modulo-sched.c | 9 ++++++--- gcc/testsuite/ChangeLog | 7 ++++++- gcc/testsuite/gcc.dg/sms-13.c | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/sms-13.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7a7736fee19..084b0d7e7c8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2018-01-09 Jakub Jelinek + PR target/83507 + * modulo-sched.c (schedule_reg_moves): Punt if we'd need to move + hard registers. Formatting fixes. + PR preprocessor/83722 * gcc.c (try_generate_repro): Pass &temp_stderr_files[RETRY_ICE_ATTEMPTS - 1] rather than diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c index d5ad23343f2..9a27365bfbc 100644 --- a/gcc/modulo-sched.c +++ b/gcc/modulo-sched.c @@ -687,9 +687,9 @@ schedule_reg_moves (partial_schedule_ptr ps) rtx set = single_set (u->insn); /* Skip instructions that do not set a register. */ - if ((set && !REG_P (SET_DEST (set)))) + if (set && !REG_P (SET_DEST (set))) continue; - + /* Compute the number of reg_moves needed for u, by looking at life ranges started at u (excluding self-loops). */ distances[0] = distances[1] = false; @@ -743,7 +743,10 @@ schedule_reg_moves (partial_schedule_ptr ps) first_move += ps->g->num_nodes; /* Generate each move. */ - old_reg = prev_reg = SET_DEST (single_set (u->insn)); + old_reg = prev_reg = SET_DEST (set); + if (HARD_REGISTER_P (old_reg)) + return false; + for (i_reg_move = 0; i_reg_move < nreg_moves; i_reg_move++) { ps_reg_move_info *move = ps_reg_move (ps, first_move + i_reg_move); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 034c30f26a9..c73af5e087a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ +2018-01-09 Jakub Jelinek + + PR target/83507 + * gcc.dg/sms-13.c: New test. + 2018-01-08 Steven G. Kargl - PR Fortran/83741 + PR fortran/83741 * gfortran.dg/allocate_assumed_charlen_3.f90: New test. 2018-01-08 Chih-Mao Chen diff --git a/gcc/testsuite/gcc.dg/sms-13.c b/gcc/testsuite/gcc.dg/sms-13.c new file mode 100644 index 00000000000..cd7bb62006c --- /dev/null +++ b/gcc/testsuite/gcc.dg/sms-13.c @@ -0,0 +1,32 @@ +/* PR target/83507 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fmodulo-sched -fno-tree-ter -fno-tree-coalesce-vars" } */ + +void +foo (unsigned short int x, unsigned char y) +{ + unsigned char *a = &y; + unsigned short int b; + int c; + + while (y < 3) + { + if (x != 0) + ++y; + ++y; + } + + for (c = 0; c < 5; ++c) + { + int d = 1; + d += b > x; + y &= d; + } + + do + { + c += y; + x = c; + } + while (x != 0); +} -- 2.30.2