Commit a9007865 by Jan Hubicka Committed by Jeff Law

re PR rtl-optimization/82849 (ICE on valid code since r254379)

2017-12-16  Jan Hubicka  <hubicka@ucw.cz>

	PR rtl-optimization/82849
	* modulo-sched.c (sms_schedule): Use get_estimated_loop_iterations_int
	and get_max_loop_iterations_int.

From-SVN: r255748
parent b4d43553
2017-12-16 Jan Hubicka <hubicka@ucw.cz>
PR rtl-optimization/82849
* modulo-sched.c (sms_schedule): Use get_estimated_loop_iterations_int
and get_max_loop_iterations_int.
2017-12-16 Richard Sandiford <richard.sandiford@linaro.org> 2017-12-16 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com> Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com> David Sherwood <david.sherwood@arm.com>
...@@ -1346,7 +1346,7 @@ sms_schedule (void) ...@@ -1346,7 +1346,7 @@ sms_schedule (void)
struct loop *loop; struct loop *loop;
basic_block condition_bb = NULL; basic_block condition_bb = NULL;
edge latch_edge; edge latch_edge;
gcov_type trip_count = 0; HOST_WIDE_INT trip_count, max_trip_count;
loop_optimizer_init (LOOPS_HAVE_PREHEADERS loop_optimizer_init (LOOPS_HAVE_PREHEADERS
| LOOPS_HAVE_RECORDED_EXITS); | LOOPS_HAVE_RECORDED_EXITS);
...@@ -1422,9 +1422,8 @@ sms_schedule (void) ...@@ -1422,9 +1422,8 @@ sms_schedule (void)
get_ebb_head_tail (bb, bb, &head, &tail); get_ebb_head_tail (bb, bb, &head, &tail);
latch_edge = loop_latch_edge (loop); latch_edge = loop_latch_edge (loop);
gcc_assert (single_exit (loop)); gcc_assert (single_exit (loop));
if (single_exit (loop)->count () > profile_count::zero ()) trip_count = get_estimated_loop_iterations_int (loop);
trip_count = latch_edge->count ().to_gcov_type () max_trip_count = get_max_loop_iterations_int (loop);
/ single_exit (loop)->count ().to_gcov_type ();
/* Perform SMS only on loops that their average count is above threshold. */ /* Perform SMS only on loops that their average count is above threshold. */
...@@ -1444,8 +1443,8 @@ sms_schedule (void) ...@@ -1444,8 +1443,8 @@ sms_schedule (void)
(int64_t) bb->count.to_gcov_type ()); (int64_t) bb->count.to_gcov_type ());
fprintf (dump_file, "\n"); fprintf (dump_file, "\n");
fprintf (dump_file, "SMS trip-count "); fprintf (dump_file, "SMS trip-count ");
fprintf (dump_file, "%" PRId64, fprintf (dump_file, "%" PRId64 "max %" PRId64,
(int64_t) trip_count); (int64_t) trip_count, (int64_t) max_trip_count);
fprintf (dump_file, "\n"); fprintf (dump_file, "\n");
fprintf (dump_file, "SMS profile-sum-max "); fprintf (dump_file, "SMS profile-sum-max ");
fprintf (dump_file, "%" PRId64, fprintf (dump_file, "%" PRId64,
...@@ -1552,9 +1551,8 @@ sms_schedule (void) ...@@ -1552,9 +1551,8 @@ sms_schedule (void)
latch_edge = loop_latch_edge (loop); latch_edge = loop_latch_edge (loop);
gcc_assert (single_exit (loop)); gcc_assert (single_exit (loop));
if (single_exit (loop)->count ()> profile_count::zero ()) trip_count = get_estimated_loop_iterations_int (loop);
trip_count = latch_edge->count ().to_gcov_type () max_trip_count = get_max_loop_iterations_int (loop);
/ single_exit (loop)->count ().to_gcov_type ();
if (dump_file) if (dump_file)
{ {
...@@ -1648,7 +1646,8 @@ sms_schedule (void) ...@@ -1648,7 +1646,8 @@ sms_schedule (void)
we let the scheduling passes do the job in this case. */ we let the scheduling passes do the job in this case. */
if (stage_count < PARAM_VALUE (PARAM_SMS_MIN_SC) if (stage_count < PARAM_VALUE (PARAM_SMS_MIN_SC)
|| (count_init && (loop_count <= stage_count)) || (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) if (dump_file)
{ {
...@@ -1657,7 +1656,8 @@ sms_schedule (void) ...@@ -1657,7 +1656,8 @@ sms_schedule (void)
" loop-count=", stage_count); " loop-count=", stage_count);
fprintf (dump_file, "%" PRId64, loop_count); fprintf (dump_file, "%" PRId64, loop_count);
fprintf (dump_file, ", trip-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"); fprintf (dump_file, ")\n");
} }
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment