graphite-optimize-isl.c (optimize_isl): Fail and dump if ISL errors other than isl_er...
authorRichard Biener <rguenther@suse.de>
Mon, 25 Sep 2017 09:48:31 +0000 (09:48 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 25 Sep 2017 09:48:31 +0000 (09:48 +0000)
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.

From-SVN: r253142

gcc/ChangeLog
gcc/graphite-optimize-isl.c
gcc/graphite-sese-to-poly.c

index aae06a1e87c00143996a0817fcf252eb83192b4a..4967e988a63a00f762f95e3d8a397538da0c020e 100644 (file)
@@ -1,3 +1,11 @@
+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.
+
 2017-09-25  Iain Sandoe  <iain@codesourcery.com>
 
        PR target/80556
index ef41e55e173082bb76340998ac0771f360a59b3a..dbf10ead1ca9573ca6b7884a7902e95dd7996d57 100644 (file)
@@ -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 5d6ba67bbce41be8bb992d4f02a0a51f8844f05d..fc8cd89239c665446bcf8b2a77f4a5ad6bafaec1 100644 (file)
@@ -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 */