Commit f0c216e1 by Richard Biener Committed by Richard Biener

re PR tree-optimization/69728 (internal compiler error: in…

re PR tree-optimization/69728 (internal compiler error: in outer_projection_mupa, at graphite-sese-to-poly.c:1175)

2017-10-12  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/69728
	Revert
	2017-09-19  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/69728
	* graphite-sese-to-poly.c (schedule_error): New global.
	(add_loop_schedule): Handle empty domain by failing the
	schedule.
	(build_original_schedule): Handle schedule_error.

	* graphite-sese-to-poly.c (add_loop_schedule): Handle empty
	domain by returning an unchanged schedule.

	* gcc.dg/graphite/pr69728.c: Adjust to reflect we can handle
	the loop now.  Remove unrelated undefined behavior.

From-SVN: r253677
parent b989ffb2
2017-10-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/69728
Revert
2017-09-19 Richard Biener <rguenther@suse.de>
PR tree-optimization/69728
* graphite-sese-to-poly.c (schedule_error): New global.
(add_loop_schedule): Handle empty domain by failing the
schedule.
(build_original_schedule): Handle schedule_error.
* graphite-sese-to-poly.c (add_loop_schedule): Handle empty
domain by returning an unchanged schedule.
2017-10-12 Jakub Jelinek <jakub@redhat.com> 2017-10-12 Jakub Jelinek <jakub@redhat.com>
* genrecog.c (validate_pattern): For VEC_SELECT verify that * genrecog.c (validate_pattern): For VEC_SELECT verify that
...@@ -1066,8 +1066,6 @@ outer_projection_mupa (__isl_take isl_union_set *set, int n) ...@@ -1066,8 +1066,6 @@ outer_projection_mupa (__isl_take isl_union_set *set, int n)
return isl_multi_union_pw_aff_from_union_pw_multi_aff (data.res); return isl_multi_union_pw_aff_from_union_pw_multi_aff (data.res);
} }
static bool schedule_error;
/* Embed SCHEDULE in the constraints of the LOOP domain. */ /* Embed SCHEDULE in the constraints of the LOOP domain. */
static isl_schedule * static isl_schedule *
...@@ -1082,11 +1080,9 @@ add_loop_schedule (__isl_take isl_schedule *schedule, loop_p loop, ...@@ -1082,11 +1080,9 @@ add_loop_schedule (__isl_take isl_schedule *schedule, loop_p loop,
return empty < 0 ? isl_schedule_free (schedule) : schedule; return empty < 0 ? isl_schedule_free (schedule) : schedule;
isl_union_set *domain = isl_schedule_get_domain (schedule); isl_union_set *domain = isl_schedule_get_domain (schedule);
/* We cannot apply an empty domain to pbbs in this loop so fail. /* We cannot apply an empty domain to pbbs in this loop so return early. */
??? Somehow drop pbbs in the loop instead. */
if (isl_union_set_is_empty (domain)) if (isl_union_set_is_empty (domain))
{ {
schedule_error = true;
isl_union_set_free (domain); isl_union_set_free (domain);
return schedule; return schedule;
} }
...@@ -1216,8 +1212,6 @@ build_schedule_loop_nest (scop_p scop, int *index, loop_p context_loop) ...@@ -1216,8 +1212,6 @@ build_schedule_loop_nest (scop_p scop, int *index, loop_p context_loop)
static bool static bool
build_original_schedule (scop_p scop) build_original_schedule (scop_p scop)
{ {
schedule_error = false;
int i = 0; int i = 0;
int n = scop->pbbs.length (); int n = scop->pbbs.length ();
while (i < n) while (i < n)
...@@ -1232,14 +1226,6 @@ build_original_schedule (scop_p scop) ...@@ -1232,14 +1226,6 @@ build_original_schedule (scop_p scop)
scop->original_schedule = add_in_sequence (scop->original_schedule, s); scop->original_schedule = add_in_sequence (scop->original_schedule, s);
} }
if (schedule_error)
{
if (dump_file)
fprintf (dump_file, "[sese-to-poly] failed to build "
"original schedule\n");
return false;
}
if (dump_file) if (dump_file)
{ {
fprintf (dump_file, "[sese-to-poly] original schedule:\n"); fprintf (dump_file, "[sese-to-poly] original schedule:\n");
......
2017-10-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/69728
* gcc.dg/graphite/pr69728.c: Adjust to reflect we can handle
the loop now. Remove unrelated undefined behavior.
2017-10-12 Jakub Jelinek <jakub@redhat.com> 2017-10-12 Jakub Jelinek <jakub@redhat.com>
PR c++/82159 PR c++/82159
......
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-O3 -floop-nest-optimize" } */ /* { dg-options "-O3 -floop-nest-optimize -fdump-tree-graphite-details" } */
int a[1]; int a[9];
int b, c, d, e; int b, c, d, e;
void void
fn1 () fn1 ()
...@@ -19,3 +19,9 @@ fn1 () ...@@ -19,3 +19,9 @@ fn1 ()
} }
} }
} }
/* At the moment only ISL figures that if (d) is always true. We've
run into scheduling issues before here, not being able to handle
empty domains. */
/* { dg-final { scan-tree-dump "loop nest optimized" "graphite" } } */
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