diff mbox series

[GRAPHITE] More -fopt-info, do not abort from ISL

Message ID alpine.LSU.2.20.1709251146030.26836@zhemvz.fhfr.qr
State New
Headers show
Series [GRAPHITE] More -fopt-info, do not abort from ISL | expand

Commit Message

Richard Biener Sept. 25, 2017, 9:47 a.m. UTC
The following also dumps if the optimized schedule is equal to the
original one.  It also makes all ISL operations (well, nearly) not
abort on errors but instead propagate errors upward.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.

Richard.

2017-09-25  Richard Biener  <rguenther@suse.de>

	* graphite-optimize-isl.c (optimize_isl): Fail and dump if
	ISL errors other than isl_error_quota happen.  Dump if the
	schedule is the same.
	* graphite-sese-to-poly.c (build_poly_scop): Fail on ISL
	errors instead of aborting inside ISL.

Comments

Sebastian Pop Sept. 26, 2017, 2 p.m. UTC | #1
On Mon, Sep 25, 2017 at 4:47 AM, Richard Biener <rguenther@suse.de> wrote:

>
> The following also dumps if the optimized schedule is equal to the
> original one.  It also makes all ISL operations (well, nearly) not
> abort on errors but instead propagate errors upward.
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
>
> Richard.
>
> 2017-09-25  Richard Biener  <rguenther@suse.de>
>
>         * graphite-optimize-isl.c (optimize_isl): Fail and dump if
>         ISL errors other than isl_error_quota happen.  Dump if the
>         schedule is the same.
>         * graphite-sese-to-poly.c (build_poly_scop): Fail on ISL
>         errors instead of aborting inside ISL.
>
>
Looks good.
diff mbox series

Patch

Index: gcc/graphite-optimize-isl.c
===================================================================
--- gcc/graphite-optimize-isl.c	(revision 253134)
+++ gcc/graphite-optimize-isl.c	(working copy)
@@ -111,6 +111,7 @@  scop_get_domains (scop_p scop)
 static bool
 optimize_isl (scop_p scop)
 {
+  int old_err = isl_options_get_on_error (scop->isl_context);
   int old_max_operations = isl_ctx_get_max_operations (scop->isl_context);
   int max_operations = PARAM_VALUE (PARAM_MAX_ISL_OPERATIONS);
   if (max_operations)
@@ -150,19 +151,23 @@  optimize_isl (scop_p scop)
   scop->transformed_schedule =
     isl_schedule_map_schedule_node_bottom_up (scop->transformed_schedule,
 					      get_schedule_for_node_st, NULL);
-  isl_options_set_on_error (scop->isl_context, ISL_ON_ERROR_ABORT);
 
+  isl_options_set_on_error (scop->isl_context, old_err);
   isl_ctx_reset_operations (scop->isl_context);
   isl_ctx_set_max_operations (scop->isl_context, old_max_operations);
   if (!scop->transformed_schedule
-      || isl_ctx_last_error (scop->isl_context) == isl_error_quota)
+      || isl_ctx_last_error (scop->isl_context) != isl_error_none)
     {
       location_t loc = find_loop_location
 	(scop->scop_info->region.entry->dest->loop_father);
-      dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc,
-		       "loop nest not optimized, optimization timed out "
-		       "after %d operations [--param max-isl-operations]\n",
-		       max_operations);
+      if (isl_ctx_last_error (scop->isl_context) == isl_error_quota)
+	dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc,
+			 "loop nest not optimized, optimization timed out "
+			 "after %d operations [--param max-isl-operations]\n",
+			 max_operations);
+      else
+	dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc,
+			 "loop nest not optimized, ISL signalled an error\n");
       return false;
     }
 
@@ -175,12 +180,13 @@  optimize_isl (scop_p scop)
 
   if (same_schedule)
     {
+      location_t loc = find_loop_location
+	(scop->scop_info->region.entry->dest->loop_father);
+      dump_printf_loc (MSG_NOTE, loc,
+		       "loop nest not optimized, optimized schedule is "
+		       "identical to original schedule\n");
       if (dump_file)
-	{
-	  fprintf (dump_file, "[scheduler] isl optimized schedule is "
-		   "identical to the original schedule.\n");
-	  print_schedule_ast (dump_file, scop->original_schedule, scop);
-	}
+	print_schedule_ast (dump_file, scop->original_schedule, scop);
       isl_schedule_free (scop->transformed_schedule);
       scop->transformed_schedule = isl_schedule_copy (scop->original_schedule);
       return false;
Index: gcc/graphite-sese-to-poly.c
===================================================================
--- gcc/graphite-sese-to-poly.c	(revision 253134)
+++ gcc/graphite-sese-to-poly.c	(working copy)
@@ -1244,6 +1244,9 @@  build_original_schedule (scop_p scop)
 bool
 build_poly_scop (scop_p scop)
 {
+  int old_err = isl_options_get_on_error (scop->isl_context);
+  isl_options_set_on_error (scop->isl_context, ISL_ON_ERROR_CONTINUE);
+
   build_scop_context (scop);
 
   unsigned i = 0;
@@ -1253,6 +1256,14 @@  build_poly_scop (scop_p scop)
 
   build_scop_drs (scop);
   build_original_schedule (scop);
-  return true;
+
+  enum isl_error err = isl_ctx_last_error (scop->isl_context);
+  isl_ctx_reset_error (scop->isl_context);
+  isl_options_set_on_error (scop->isl_context, old_err);
+  if (err != isl_error_none)
+    dump_printf (MSG_MISSED_OPTIMIZATION,
+		 "ISL error while building poly scop\n");
+
+  return err == isl_error_none;
 }
 #endif  /* HAVE_isl */