This patch adds a configure check for isl_schedule_constraints_compute_schedule, which is new in ISL 0.13 - and uses it for conditional compilation.
The graphite*c patch is based on the one of Jack Howarth, https://gcc.gnu.org/ml/gcc-patches/2014-11/msg00906.html - without checking whether the ISL replacements make sense. With the patch, I have successfully bootstrapped GCC with ISL 0.12.2 and ISL 0.14 (both using an in-tree build). [I still have to regtest the two variants and I also want to do a system-ISL built with ISL 0.12.2] Is the patch OK for the trunk? Tobias PS: I'd be happy if some others could run additional tests. PPS: If the patch is in, can someone put ISL 0.14 to infrastructure? Then one can update contrib/download_prerequisites - such that the graphite failure is at least fixed for in-tree builds (cf. PR64017, PR62289).
2014-11-26 Tobias Burnus <bur...@net-b.de> Jack Howarth <howa...@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. diff --git a/gcc/configure.ac b/gcc/configure.ac index 2293fb8..48c8000 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -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) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index e9ea4a2..1fbef63 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -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/} diff --git a/gcc/graphite-interchange.c b/gcc/graphite-interchange.c index 81ba391..9f30d24 100644 --- a/gcc/graphite-interchange.c +++ b/gcc/graphite-interchange.c @@ -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 diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c index bbf3055..456b24e 100644 --- a/gcc/graphite-isl-ast-to-gimple.c +++ b/gcc/graphite-isl-ast-to-gimple.c @@ -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 diff --git a/gcc/graphite-optimize-isl.c b/gcc/graphite-optimize-isl.c index 195101a..4cce700 100644 --- a/gcc/graphite-optimize-isl.c +++ b/gcc/graphite-optimize-isl.c @@ -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) diff --git a/gcc/graphite-poly.c b/gcc/graphite-poly.c index 77ccc3d..fa313df 100644 --- a/gcc/graphite-poly.c +++ b/gcc/graphite-poly.c @@ -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 diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index bdeba16..aaad924 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -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
diff --git a/gcc/config.in b/gcc/config.in index 9cc0198..65d5e42 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -1295,6 +1295,12 @@ #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 diff --git a/gcc/configure b/gcc/configure index 4f9d1df..6b46bbb 100755 --- a/gcc/configure +++ b/gcc/configure @@ -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 :