From: Tobias Burnus Date: Mon, 1 Dec 2014 19:07:37 +0000 (+0100) Subject: re PR middle-end/64017 (Support ISL 0.14.0 (to fix ICE with gfortran.dg/graphite... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=797d88589e5ccb5bf5c1143aa728e517387fa87a;p=gcc.git re PR middle-end/64017 (Support ISL 0.14.0 (to fix ICE with gfortran.dg/graphite/pr42393.f90)) 2014-12-01 Tobias Burnus Jack Howarth 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 From-SVN: r218247 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f1e029e9d5d..88cfeef98b2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2014-12-01 Tobias Burnus + Jack Howarth + + 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 * combine.c (distribute_links): Handle multiple SETs. diff --git a/gcc/config.in b/gcc/config.in index 9cc0198c5c1..65d5e421a90 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 4f9d1dfdfce..6b46bbb9e4e 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 +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 : diff --git a/gcc/configure.ac b/gcc/configure.ac index 2293fb8fc79..48c8000b249 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_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 e9ea4a2fbc4..1fbef63d0e3 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 81ba3910595..9f30d2420c3 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 #include #include -#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 -#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 bbf30550e94..456b24e7651 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 #include #include -#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 -#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 195101a3572..4cce70093f1 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 77ccc3d605f..fa313df42a8 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 #include #include -#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 -#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 2e140ecb6ef..9136d6350f9 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 #include #include -/* 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 -#if defined(__cplusplus) +#if !defined(HAVE_ISL_SCHED_CONSTRAINTS_COMPUTE_SCHEDULE) && defined(__cplusplus) } #endif #endif