re PR middle-end/64017 (Support ISL 0.14.0 (to fix ICE with gfortran.dg/graphite...
authorTobias Burnus <burnus@net-b.de>
Mon, 1 Dec 2014 19:07:37 +0000 (20:07 +0100)
committerTobias Burnus <burnus@gcc.gnu.org>
Mon, 1 Dec 2014 19:07:37 +0000 (20:07 +0100)
2014-12-01  Tobias Burnus  <burnus@net-b.de>
            Jack Howarth  <howarth@bromo.med.uc.edu>

        PR middle-end/64017
        * configure.ac
        * (ac_has_isl_schedule_constraints_compute_schedule):
        New check.
        * doc/install.texi (ISL): Permit ISL 0.14.
        * graphite-optimize-isl.c (getScheduleForBandList,
        * optimize_isl):
        Conditionally use ISL 0.13+ functions.
        * graphite-interchange.c: Make 'extern "C"' conditional.
        * graphite-isl-ast-to-gimple.c: Ditto.
        * graphite-poly.c: Ditto.
        * graphite-sese-to-poly.c: Ditto.
        * config.in: Regenerate.
        * gcc/configure: Regenerate.

Co-Authored-By: Jack Howarth <howarth@bromo.med.uc.edu>
From-SVN: r218247

gcc/ChangeLog
gcc/config.in
gcc/configure
gcc/configure.ac
gcc/doc/install.texi
gcc/graphite-interchange.c
gcc/graphite-isl-ast-to-gimple.c
gcc/graphite-optimize-isl.c
gcc/graphite-poly.c
gcc/graphite-sese-to-poly.c

index f1e029e9d5d349cb1d07cf4d4a43fba146a9f080..88cfeef98b2e454518c5bd3d366dd6dd1811464a 100644 (file)
@@ -1,3 +1,19 @@
+2014-12-01  Tobias Burnus  <burnus@net-b.de>
+           Jack Howarth  <howarth@bromo.med.uc.edu>
+
+       PR middle-end/64017
+       * configure.ac (ac_has_isl_schedule_constraints_compute_schedule):
+       New check.
+       * doc/install.texi (ISL): Permit ISL 0.14.
+       * graphite-optimize-isl.c (getScheduleForBandList, optimize_isl):
+       Conditionally use ISL 0.13+ functions.
+       * graphite-interchange.c: Make 'extern "C"' conditional.
+       * graphite-isl-ast-to-gimple.c: Ditto.
+       * graphite-poly.c: Ditto.
+       * graphite-sese-to-poly.c: Ditto.
+       * config.in: Regenerate.
+       * gcc/configure: Regenerate.
+
 2014-12-01  Segher Boessenkool  <segher@kernel.crashing.org>
 
        * combine.c (distribute_links): Handle multiple SETs.
index 9cc0198c5c1fa8591121774028a4e5c33a7b1c7f..65d5e421a9038a027eb140208e10060d9ed1dc41 100644 (file)
 #endif
 
 
+/* Define if isl_schedule_constraints_compute_schedule exists. */
+#ifndef USED_FOR_TARGET
+#undef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
+#endif
+
+
 /* Define to 1 if you have the `kill' function. */
 #ifndef USED_FOR_TARGET
 #undef HAVE_KILL
index 4f9d1dfdfcebba46ce70c3bbac0065aa854161e5..6b46bbb9e4e48e756f0198bebe6f0e6751f30b10 100755 (executable)
@@ -28057,6 +28057,47 @@ $as_echo "#define HAVE_isl 1" >>confdefs.h
 
 fi
 
+# Check whether isl_schedule_constraints_compute_schedule is available;
+# it's new in ISL-0.13.
+if test "x${ISLLIBS}" != "x" ; then
+  saved_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $ISLINC"
+  saved_LIBS="$LIBS"
+  LIBS="$LIBS $ISLLIBS $GMPLIBS"
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking Checking for isl_schedule_constraints_compute_schedule" >&5
+$as_echo_n "checking Checking for isl_schedule_constraints_compute_schedule... " >&6; }
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <isl/schedule.h>
+int
+main ()
+{
+isl_schedule_constraints_compute_schedule (NULL);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_has_isl_schedule_constraints_compute_schedule=yes
+else
+  ac_has_isl_schedule_constraints_compute_schedule=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_has_isl_schedule_constraints_compute_schedule" >&5
+$as_echo "$ac_has_isl_schedule_constraints_compute_schedule" >&6; }
+
+  LIBS="$saved_LIBS"
+  CFLAGS="$saved_CFLAGS"
+
+  if test x"$ac_has_isl_schedule_constraints_compute_schedule" = x"yes"; then
+
+$as_echo "#define HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE 1" >>confdefs.h
+
+  fi
+fi
+
 # Check for plugin support
    # Check whether --enable-plugin was given.
 if test "${enable_plugin+set}" = set; then :
index 2293fb8fc79fd49d77395d0aaf1eaa47046baf22..48c8000b24973635bebac852a20390c95058baea 100644 (file)
@@ -5601,6 +5601,30 @@ if test "x${ISLLIBS}" != "x" ; then
    AC_DEFINE(HAVE_isl, 1, [Define if isl is in use.])
 fi
 
+# Check whether isl_schedule_constraints_compute_schedule is available;
+# it's new in ISL-0.13.
+if test "x${ISLLIBS}" != "x" ; then
+  saved_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $ISLINC"
+  saved_LIBS="$LIBS"
+  LIBS="$LIBS $ISLLIBS $GMPLIBS"
+
+  AC_MSG_CHECKING([Checking for isl_schedule_constraints_compute_schedule])
+  AC_TRY_LINK([#include <isl/schedule.h>],
+              [isl_schedule_constraints_compute_schedule (NULL);],
+              [ac_has_isl_schedule_constraints_compute_schedule=yes],
+              [ac_has_isl_schedule_constraints_compute_schedule=no])
+  AC_MSG_RESULT($ac_has_isl_schedule_constraints_compute_schedule)
+
+  LIBS="$saved_LIBS"
+  CFLAGS="$saved_CFLAGS"
+
+  if test x"$ac_has_isl_schedule_constraints_compute_schedule" = x"yes"; then
+     AC_DEFINE(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE, 1,
+               [Define if isl_schedule_constraints_compute_schedule exists.])
+  fi
+fi
+
 GCC_ENABLE_PLUGINS
 AC_SUBST(pluginlibs)
 AC_SUBST(enable_plugin)
index e9ea4a2fbc4a569a13691258707817d1b1734beb..1fbef63d0e3c9960f9f8380af45ac1493a9dfe07 100644 (file)
@@ -383,7 +383,7 @@ installed but it is not in your default library search path, the
 @option{--with-mpc} configure option should be used.  See also
 @option{--with-mpc-lib} and @option{--with-mpc-include}.
 
-@item ISL Library version 0.12.2
+@item ISL Library version 0.14 (or 0.12.2)
 
 Necessary to build GCC with the Graphite loop optimizations.
 It can be downloaded from @uref{ftp://gcc.gnu.org/pub/gcc/infrastructure/}
index 81ba391059576263f4ce10b3c289081136dea5be..9f30d2420c3e0ee878cbbb9b77b48da2fe0f62e1 100644 (file)
@@ -30,11 +30,13 @@ along with GCC; see the file COPYING3.  If not see
 #include <isl/union_map.h>
 #include <isl/ilp.h>
 #include <isl/val.h>
-#if defined(__cplusplus)
+
+/* Since ISL-0.13, the extern is in val_gmp.h.  */
+#if !defined(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE) && defined(__cplusplus)
 extern "C" {
 #endif
 #include <isl/val_gmp.h>
-#if defined(__cplusplus)
+#if !defined(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE) && defined(__cplusplus)
 }
 #endif
 #endif
index bbf30550e94ac1c01a32e3996450a35667a870e3..456b24e76511e8ea9b4ff57ea512a2a49a4e9865 100644 (file)
@@ -25,11 +25,13 @@ along with GCC; see the file COPYING3.  If not see
 #include <isl/map.h>
 #include <isl/union_map.h>
 #include <isl/ast_build.h>
-#if defined(__cplusplus)
+
+/* Since ISL-0.13, the extern is in val_gmp.h.  */
+#if !defined(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE) && defined(__cplusplus)
 extern "C" {
 #endif
 #include <isl/val_gmp.h>
-#if defined(__cplusplus)
+#if !defined(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE) && defined(__cplusplus)
 }
 #endif
 #endif
index 195101a35727adda22f44ccaa0558ea86018633b..4cce70093f10082712083c22a7ca2441581ace93 100644 (file)
@@ -460,7 +460,11 @@ getScheduleForBandList (isl_band_list *BandList, isl_union_map **map_sepcl)
              if (flag_loop_unroll_jam && (i != (ScheduleDimensions - depth)))
                continue;
 
+#ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
+             if (isl_band_member_is_coincident (Band, i))
+#else
              if (isl_band_member_is_zero_distance (Band, i))
+#endif
                {
                  isl_map *TileMap;
                  isl_union_map *TileUMap;
@@ -564,6 +568,9 @@ optimize_isl (scop_p scop)
 {
 
   isl_schedule *schedule;
+#ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
+  isl_schedule_constraints *schedule_constraints;
+#endif
   isl_union_set *domain;
   isl_union_map *validity, *proximity, *dependences;
   isl_union_map *schedule_map;
@@ -579,11 +586,30 @@ optimize_isl (scop_p scop)
 
   proximity = isl_union_map_copy (validity);
 
+#ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
+  schedule_constraints = isl_schedule_constraints_on_domain (domain);
+  schedule_constraints
+       = isl_schedule_constraints_set_proximity (schedule_constraints,
+                                                 proximity);
+  schedule_constraints
+       = isl_schedule_constraints_set_validity (schedule_constraints,
+                                                isl_union_map_copy (validity));
+  schedule_constraints
+       = isl_schedule_constraints_set_coincidence (schedule_constraints,
+                                                   validity);
+#endif
+
   isl_options_set_schedule_max_constant_term (scop->ctx, CONSTANT_BOUND);
   isl_options_set_schedule_maximize_band_depth (scop->ctx, 1);
   isl_options_set_schedule_fuse (scop->ctx, ISL_SCHEDULE_FUSE_MIN);
   isl_options_set_on_error (scop->ctx, ISL_ON_ERROR_CONTINUE);
+
+#ifdef HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE
+  schedule = isl_schedule_constraints_compute_schedule(schedule_constraints);
+#else
   schedule = isl_union_set_compute_schedule (domain, validity, proximity);
+#endif
+
   isl_options_set_on_error (scop->ctx, ISL_ON_ERROR_ABORT);
 
   if (!schedule)
index 77ccc3d605ff47d08e741c93d8eae38bcfd8294e..fa313df42a842cde6e4b697335977b19ea359d7c 100644 (file)
@@ -29,11 +29,13 @@ along with GCC; see the file COPYING3.  If not see
 #include <isl/ilp.h>
 #include <isl/aff.h>
 #include <isl/val.h>
-#if defined(__cplusplus)
+
+/* Since ISL-0.13, the extern is in val_gmp.h.  */
+#if !defined(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE) && defined(__cplusplus)
 extern "C" {
 #endif
 #include <isl/val_gmp.h>
-#if defined(__cplusplus)
+#if !defined(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE) && defined(__cplusplus)
 }
 #endif
 #endif
index 2e140ecb6ef7e14435177c35a23d57e98314b3df..9136d6350f999d1b67f622518c023e208dca00aa 100644 (file)
@@ -27,15 +27,13 @@ along with GCC; see the file COPYING3.  If not see
 #include <isl/constraint.h>
 #include <isl/aff.h>
 #include <isl/val.h>
-/* For C++ linkage of C functions.
-   Missing from  isl/val_gmp.h in isl 0.12 versions.
-   Appearing in isl/val_gmp.h in isl 0.13.
-   To be removed when passing to isl 0.13. */
-#if defined(__cplusplus)
+
+/* Since ISL-0.13, the extern is in val_gmp.h.  */
+#if !defined(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE) && defined(__cplusplus)
 extern "C" {
 #endif
 #include <isl/val_gmp.h>
-#if defined(__cplusplus)
+#if !defined(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE) && defined(__cplusplus)
 }
 #endif
 #endif