Mercurial > hg > CbC > CbC_gcc
diff gcc/modulo-sched.c @ 132:d34655255c78
update gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 10:21:07 +0900 |
parents | 84e7813d76e9 |
children | 1830386684a0 |
line wrap: on
line diff
--- a/gcc/modulo-sched.c Thu Oct 25 08:08:40 2018 +0900 +++ b/gcc/modulo-sched.c Thu Oct 25 10:21:07 2018 +0900 @@ -1,5 +1,5 @@ /* Swing Modulo Scheduling implementation. - Copyright (C) 2004-2017 Free Software Foundation, Inc. + Copyright (C) 2004-2018 Free Software Foundation, Inc. Contributed by Ayal Zaks and Mustafa Hagog <zaks,mustafa@il.ibm.com> This file is part of GCC. @@ -687,9 +687,9 @@ 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 @@ 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); @@ -1346,7 +1349,7 @@ struct loop *loop; basic_block condition_bb = NULL; edge latch_edge; - gcov_type trip_count = 0; + HOST_WIDE_INT trip_count, max_trip_count; loop_optimizer_init (LOOPS_HAVE_PREHEADERS | LOOPS_HAVE_RECORDED_EXITS); @@ -1422,9 +1425,8 @@ get_ebb_head_tail (bb, bb, &head, &tail); latch_edge = loop_latch_edge (loop); gcc_assert (single_exit (loop)); - if (single_exit (loop)->count () > profile_count::zero ()) - trip_count = latch_edge->count ().to_gcov_type () - / single_exit (loop)->count ().to_gcov_type (); + trip_count = get_estimated_loop_iterations_int (loop); + max_trip_count = get_max_loop_iterations_int (loop); /* Perform SMS only on loops that their average count is above threshold. */ @@ -1444,13 +1446,9 @@ (int64_t) bb->count.to_gcov_type ()); fprintf (dump_file, "\n"); fprintf (dump_file, "SMS trip-count "); - fprintf (dump_file, "%" PRId64, - (int64_t) trip_count); + fprintf (dump_file, "%" PRId64 "max %" PRId64, + (int64_t) trip_count, (int64_t) max_trip_count); fprintf (dump_file, "\n"); - fprintf (dump_file, "SMS profile-sum-max "); - fprintf (dump_file, "%" PRId64, - (int64_t) profile_info->sum_max); - fprintf (dump_file, "\n"); } } continue; @@ -1552,9 +1550,8 @@ latch_edge = loop_latch_edge (loop); gcc_assert (single_exit (loop)); - if (single_exit (loop)->count ()> profile_count::zero ()) - trip_count = latch_edge->count ().to_gcov_type () - / single_exit (loop)->count ().to_gcov_type (); + trip_count = get_estimated_loop_iterations_int (loop); + max_trip_count = get_max_loop_iterations_int (loop); if (dump_file) { @@ -1566,10 +1563,6 @@ fprintf (dump_file, "%" PRId64, (int64_t) bb->count.to_gcov_type ()); fprintf (dump_file, "\n"); - fprintf (dump_file, "SMS profile-sum-max "); - fprintf (dump_file, "%" PRId64, - (int64_t) profile_info->sum_max); - fprintf (dump_file, "\n"); } fprintf (dump_file, "SMS doloop\n"); fprintf (dump_file, "SMS built-ddg %d\n", g->num_nodes); @@ -1648,7 +1641,8 @@ we let the scheduling passes do the job in this case. */ if (stage_count < PARAM_VALUE (PARAM_SMS_MIN_SC) || (count_init && (loop_count <= stage_count)) - || (flag_branch_probabilities && (trip_count <= stage_count))) + || (max_trip_count >= 0 && max_trip_count <= stage_count) + || (trip_count >= 0 && trip_count <= stage_count)) { if (dump_file) { @@ -1657,7 +1651,8 @@ " loop-count=", stage_count); fprintf (dump_file, "%" PRId64, loop_count); fprintf (dump_file, ", trip-count="); - fprintf (dump_file, "%" PRId64, trip_count); + fprintf (dump_file, "%" PRId64 "max %" PRId64, + (int64_t) trip_count, (int64_t) max_trip_count); fprintf (dump_file, ")\n"); } break;