diff options
21 files changed, 258 insertions, 98 deletions
diff --git a/polly/lib/External/isl/GIT_HEAD_ID b/polly/lib/External/isl/GIT_HEAD_ID index e997d657270..fb405944c12 100644 --- a/polly/lib/External/isl/GIT_HEAD_ID +++ b/polly/lib/External/isl/GIT_HEAD_ID @@ -1 +1 @@ -isl-0.15-117-ge42acfe +isl-0.15-129-gb086c90 diff --git a/polly/lib/External/isl/Makefile.am b/polly/lib/External/isl/Makefile.am index ee2f86be3de..63047abced2 100644 --- a/polly/lib/External/isl/Makefile.am +++ b/polly/lib/External/isl/Makefile.am @@ -303,6 +303,18 @@ deprecated_HEADERS = \ include/isl/deprecated/val_int.h \ include/isl/deprecated/vec_int.h +BUILT_SOURCES = gitversion.h + +CLEANFILES = \ + gitversion.h + +DISTCLEANFILES = \ + isl-uninstalled.sh \ + isl-uninstalled.pc \ + isl.pc \ + isl.pc.in \ + include/isl/stdint.h + EXTRA_DIST = \ LICENSE \ isl_config_post.h \ diff --git a/polly/lib/External/isl/Makefile.in b/polly/lib/External/isl/Makefile.in index a2a0b0aae36..05d3e1492d1 100644 --- a/polly/lib/External/isl/Makefile.in +++ b/polly/lib/External/isl/Makefile.in @@ -1045,6 +1045,17 @@ deprecated_HEADERS = \ include/isl/deprecated/val_int.h \ include/isl/deprecated/vec_int.h +BUILT_SOURCES = gitversion.h +CLEANFILES = \ + gitversion.h + +DISTCLEANFILES = \ + isl-uninstalled.sh \ + isl-uninstalled.pc \ + isl.pc \ + isl.pc.in \ + include/isl/stdint.h + EXTRA_DIST = \ LICENSE \ isl_config_post.h \ @@ -1094,7 +1105,7 @@ EXTRA_DIST = \ pkgconfigdir = $(pkgconfig_libdir) pkgconfig_DATA = $(pkgconfig_libfile) -all: isl_config.h +all: $(BUILT_SOURCES) isl_config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: @@ -1980,7 +1991,8 @@ distcleancheck: distclean exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS -check: check-recursive +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) \ isl_config.h installdirs: installdirs-recursive @@ -1988,7 +2000,8 @@ installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(deprecateddir)" "$(DESTDIR)$(pkgincludedir)" "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-recursive +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive @@ -2013,16 +2026,19 @@ mostlyclean-generic: -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f imath_wrap/$(DEPDIR)/$(am__dirstamp) -rm -f imath_wrap/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ @@ -2101,7 +2117,8 @@ uninstall-am: uninstall-deprecatedHEADERS uninstall-libLTLIBRARIES \ uninstall-local uninstall-nodist_pkgincludeHEADERS \ uninstall-pkgconfigDATA uninstall-pkgincludeHEADERS -.MAKE: $(am__recursive_targets) all check-am install-am install-strip +.MAKE: $(am__recursive_targets) all check check-am install install-am \ + install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-TESTS check-am clean clean-cscope \ diff --git a/polly/lib/External/isl/basis_reduction_tab.c b/polly/lib/External/isl/basis_reduction_tab.c index 6f13da09b47..b42f677312b 100644 --- a/polly/lib/External/isl/basis_reduction_tab.c +++ b/polly/lib/External/isl/basis_reduction_tab.c @@ -63,19 +63,19 @@ struct tab_lp { #ifdef USE_SMALL_INT_OPT #define GBR_numref(a) isl_sioimath_encode_big(mp_rat_numer_ref(a)) #define GBR_denref(a) isl_sioimath_encode_big(mp_rat_denom_ref(a)) -#define GBR_floor(a, b) isl_sioimath_fdiv_q(&(a), GBR_numref(b), GBR_denref(b)) -#define GBR_ceil(a, b) isl_sioimath_cdiv_q(&(a), GBR_numref(b), GBR_denref(b)) +#define GBR_floor(a, b) isl_sioimath_fdiv_q((a), GBR_numref(b), GBR_denref(b)) +#define GBR_ceil(a, b) isl_sioimath_cdiv_q((a), GBR_numref(b), GBR_denref(b)) #define GBR_set_num_neg(a, b) \ do { \ isl_sioimath_scratchspace_t scratch; \ impz_neg(mp_rat_numer_ref(*a), \ - isl_sioimath_bigarg_src(b, &scratch)); \ + isl_sioimath_bigarg_src(*b, &scratch));\ } while (0) #define GBR_set_den(a, b) \ do { \ isl_sioimath_scratchspace_t scratch; \ impz_set(mp_rat_denom_ref(*a), \ - isl_sioimath_bigarg_src(b, &scratch)); \ + isl_sioimath_bigarg_src(*b, &scratch));\ } while (0) #else /* USE_SMALL_INT_OPT */ #define GBR_numref(a) mp_rat_numer_ref(a) diff --git a/polly/lib/External/isl/configure b/polly/lib/External/isl/configure index e058920fb83..5638d3656a2 100755 --- a/polly/lib/External/isl/configure +++ b/polly/lib/External/isl/configure @@ -18480,7 +18480,6 @@ ac_config_commands="$ac_config_commands $ax_create_pkgconfig_generate" GIT_HEAD_VERSION="\`GIT_DIR=$GIT_REPO git describe --always\`" fi -echo '#define GIT_HEAD_ID "'$GIT_HEAD_ID'"' > gitversion.h ac_config_headers="$ac_config_headers isl_config.h" diff --git a/polly/lib/External/isl/configure.ac b/polly/lib/External/isl/configure.ac index 7362f791582..508acf5d57d 100644 --- a/polly/lib/External/isl/configure.ac +++ b/polly/lib/External/isl/configure.ac @@ -247,7 +247,6 @@ PACKAGE_LIBS="-lisl $MP_LIBS" AX_CREATE_PKGCONFIG_INFO AX_DETECT_GIT_HEAD -echo '#define GIT_HEAD_ID "'$GIT_HEAD_ID'"' > gitversion.h AH_BOTTOM([#include <isl_config_post.h>]) AC_CONFIG_HEADERS(isl_config.h) diff --git a/polly/lib/External/isl/doc/Makefile.am b/polly/lib/External/isl/doc/Makefile.am index aa79a6c9516..625af68bf99 100644 --- a/polly/lib/External/isl/doc/Makefile.am +++ b/polly/lib/External/isl/doc/Makefile.am @@ -1,3 +1,16 @@ + +CLEANFILES = \ + manual.toc \ + manual.bbl \ + version.tex \ + user.tex \ + manual.pdf \ + manual.aux \ + manual.out \ + manual.blg \ + manual.log \ + manual.brf + if GENERATE_DOC export TEXINPUTS := $(srcdir):$(TEXINPUTS) export BIBINPUTS := $(srcdir):$(BIBINPUTS) diff --git a/polly/lib/External/isl/doc/Makefile.in b/polly/lib/External/isl/doc/Makefile.in index b5f56eb92bc..d58757b3814 100644 --- a/polly/lib/External/isl/doc/Makefile.in +++ b/polly/lib/External/isl/doc/Makefile.in @@ -262,6 +262,18 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ versioninfo = @versioninfo@ +CLEANFILES = \ + manual.toc \ + manual.bbl \ + version.tex \ + user.tex \ + manual.pdf \ + manual.aux \ + manual.out \ + manual.blg \ + manual.log \ + manual.brf + all: all-am .SUFFIXES: @@ -364,6 +376,7 @@ install-strip: mostlyclean-generic: clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) @@ -452,6 +465,7 @@ uninstall-am: mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am + @GENERATE_DOC_TRUE@export TEXINPUTS := $(srcdir):$(TEXINPUTS) @GENERATE_DOC_TRUE@export BIBINPUTS := $(srcdir):$(BIBINPUTS) @GENERATE_DOC_TRUE@export BSTINPUTS := $(srcdir):$(BSTINPUTS) diff --git a/polly/lib/External/isl/doc/manual.pdf b/polly/lib/External/isl/doc/manual.pdf Binary files differindex a502adfa14a..d37d7d9cdc9 100644 --- a/polly/lib/External/isl/doc/manual.pdf +++ b/polly/lib/External/isl/doc/manual.pdf diff --git a/polly/lib/External/isl/doc/user.pod b/polly/lib/External/isl/doc/user.pod index 35ece95ba80..a9a49075314 100644 --- a/polly/lib/External/isl/doc/user.pod +++ b/polly/lib/External/isl/doc/user.pod @@ -7582,6 +7582,15 @@ redundant. __isl_take isl_schedule *schedule, __isl_take isl_union_set *domain); +The following function can be used to simplify the domain +of a schedule with a domain node as root with respect to the given +parameter domain. + + #include <isl/schedule.h> + __isl_give isl_schedule *isl_schedule_gist_domain_params( + __isl_take isl_schedule *schedule, + __isl_take isl_set *context); + The following function resets the user pointers on all parameter and tuple identifiers referenced by the nodes of the given schedule. diff --git a/polly/lib/External/isl/include/isl/schedule.h b/polly/lib/External/isl/include/isl/schedule.h index 7a037895a85..4123288e34a 100644 --- a/polly/lib/External/isl/include/isl/schedule.h +++ b/polly/lib/External/isl/include/isl/schedule.h @@ -121,6 +121,8 @@ __isl_give isl_schedule *isl_schedule_set( __isl_take isl_schedule *schedule1, __isl_take isl_schedule *schedule2); __isl_give isl_schedule *isl_schedule_intersect_domain( __isl_take isl_schedule *schedule, __isl_take isl_union_set *domain); +__isl_give isl_schedule *isl_schedule_gist_domain_params( + __isl_take isl_schedule *schedule, __isl_take isl_set *context); __isl_give isl_schedule *isl_schedule_reset_user( __isl_take isl_schedule *schedule); diff --git a/polly/lib/External/isl/isl_equalities.c b/polly/lib/External/isl/isl_equalities.c index dbba7fa8cfa..83572a07b1e 100644 --- a/polly/lib/External/isl/isl_equalities.c +++ b/polly/lib/External/isl/isl_equalities.c @@ -544,6 +544,32 @@ error: return NULL; } +/* Return "bset" and set *T and *T2 to the identity transformation + * on "bset" (provided T and T2 are not NULL). + */ +static __isl_give isl_basic_set *return_with_identity( + __isl_take isl_basic_set *bset, __isl_give isl_mat **T, + __isl_give isl_mat **T2) +{ + unsigned dim; + isl_mat *id; + + if (!bset) + return NULL; + if (!T && !T2) + return bset; + + dim = isl_basic_set_dim(bset, isl_dim_set); + id = isl_mat_identity(isl_basic_map_get_ctx(bset), 1 + dim); + if (T) + *T = isl_mat_copy(id); + if (T2) + *T2 = isl_mat_copy(id); + isl_mat_free(id); + + return bset; +} + /* Use the n equalities of bset to unimodularly transform the * variables x such that n transformed variables x1' have a constant value * and rewrite the constraints of bset in terms of the remaining @@ -568,7 +594,7 @@ static struct isl_basic_set *compress_variables( dim = isl_basic_set_n_dim(bset); isl_assert(bset->ctx, bset->n_eq <= dim, goto error); if (bset->n_eq == 0) - return bset; + return return_with_identity(bset, T, T2); B = isl_mat_sub_alloc6(bset->ctx, bset->eq, 0, bset->n_eq, 0, 1 + dim); TC = isl_mat_variable_compression(B, T2); @@ -604,7 +630,7 @@ struct isl_basic_set *isl_basic_set_remove_equalities( isl_assert(bset->ctx, isl_basic_set_n_param(bset) == 0, goto error); bset = isl_basic_set_gauss(bset, NULL); if (ISL_F_ISSET(bset, ISL_BASIC_SET_EMPTY)) - return bset; + return return_with_identity(bset, T, T2); bset = compress_variables(bset, T, T2); return bset; error: diff --git a/polly/lib/External/isl/isl_int_sioimath.h b/polly/lib/External/isl/isl_int_sioimath.h index 91bec90594f..f4fa4b1a9e6 100644 --- a/polly/lib/External/isl/isl_int_sioimath.h +++ b/polly/lib/External/isl/isl_int_sioimath.h @@ -1149,68 +1149,68 @@ inline size_t isl_sioimath_sizeinbase(isl_sioimath_src arg, int base) void isl_sioimath_print(FILE *out, isl_sioimath_src i, int width); void isl_sioimath_dump(isl_sioimath_src arg); -typedef isl_sioimath isl_int; -#define isl_int_init(i) isl_sioimath_init(&(i)) -#define isl_int_clear(i) isl_sioimath_clear(&(i)) - -#define isl_int_set(r, i) isl_sioimath_set(&(r), i) -#define isl_int_set_si(r, i) isl_sioimath_set_si(&(r), i) -#define isl_int_set_ui(r, i) isl_sioimath_set_ui(&(r), i) -#define isl_int_fits_slong(r) isl_sioimath_fits_slong(r) -#define isl_int_get_si(r) isl_sioimath_get_si(r) -#define isl_int_fits_ulong(r) isl_sioimath_fits_ulong(r) -#define isl_int_get_ui(r) isl_sioimath_get_ui(r) -#define isl_int_get_d(r) isl_sioimath_get_d(r) -#define isl_int_get_str(r) isl_sioimath_get_str(r) -#define isl_int_abs(r, i) isl_sioimath_abs(&(r), i) -#define isl_int_neg(r, i) isl_sioimath_neg(&(r), i) -#define isl_int_swap(i, j) isl_sioimath_swap(&(i), &(j)) -#define isl_int_swap_or_set(i, j) isl_sioimath_swap(&(i), &(j)) -#define isl_int_add_ui(r, i, j) isl_sioimath_add_ui(&(r), i, j) -#define isl_int_sub_ui(r, i, j) isl_sioimath_sub_ui(&(r), i, j) - -#define isl_int_add(r, i, j) isl_sioimath_add(&(r), i, j) -#define isl_int_sub(r, i, j) isl_sioimath_sub(&(r), i, j) -#define isl_int_mul(r, i, j) isl_sioimath_mul(&(r), i, j) -#define isl_int_mul_2exp(r, i, j) isl_sioimath_mul_2exp(&(r), i, j) -#define isl_int_mul_si(r, i, j) isl_sioimath_mul_si(&(r), i, j) -#define isl_int_mul_ui(r, i, j) isl_sioimath_mul_ui(&(r), i, j) -#define isl_int_pow_ui(r, i, j) isl_sioimath_pow_ui(&(r), i, j) -#define isl_int_addmul(r, i, j) isl_sioimath_addmul(&(r), i, j) -#define isl_int_addmul_ui(r, i, j) isl_sioimath_addmul_ui(&(r), i, j) -#define isl_int_submul(r, i, j) isl_sioimath_submul(&(r), i, j) -#define isl_int_submul_ui(r, i, j) isl_sioimath_submul_ui(&(r), i, j) - -#define isl_int_gcd(r, i, j) isl_sioimath_gcd(&(r), i, j) -#define isl_int_lcm(r, i, j) isl_sioimath_lcm(&(r), i, j) -#define isl_int_divexact(r, i, j) isl_sioimath_tdiv_q(&(r), i, j) -#define isl_int_divexact_ui(r, i, j) isl_sioimath_tdiv_q_ui(&(r), i, j) -#define isl_int_tdiv_q(r, i, j) isl_sioimath_tdiv_q(&(r), i, j) -#define isl_int_cdiv_q(r, i, j) isl_sioimath_cdiv_q(&(r), i, j) -#define isl_int_fdiv_q(r, i, j) isl_sioimath_fdiv_q(&(r), i, j) -#define isl_int_fdiv_r(r, i, j) isl_sioimath_fdiv_r(&(r), i, j) -#define isl_int_fdiv_q_ui(r, i, j) isl_sioimath_fdiv_q_ui(&(r), i, j) - -#define isl_int_read(r, s) isl_sioimath_read(&(r), s) -#define isl_int_sgn(i) isl_sioimath_sgn(i) -#define isl_int_cmp(i, j) isl_sioimath_cmp(i, j) -#define isl_int_cmp_si(i, si) isl_sioimath_cmp_si(i, si) -#define isl_int_eq(i, j) (isl_sioimath_cmp(i, j) == 0) -#define isl_int_ne(i, j) (isl_sioimath_cmp(i, j) != 0) -#define isl_int_lt(i, j) (isl_sioimath_cmp(i, j) < 0) -#define isl_int_le(i, j) (isl_sioimath_cmp(i, j) <= 0) -#define isl_int_gt(i, j) (isl_sioimath_cmp(i, j) > 0) -#define isl_int_ge(i, j) (isl_sioimath_cmp(i, j) >= 0) -#define isl_int_abs_cmp(i, j) isl_sioimath_abs_cmp(i, j) -#define isl_int_abs_eq(i, j) (isl_sioimath_abs_cmp(i, j) == 0) -#define isl_int_abs_ne(i, j) (isl_sioimath_abs_cmp(i, j) != 0) -#define isl_int_abs_lt(i, j) (isl_sioimath_abs_cmp(i, j) < 0) -#define isl_int_abs_gt(i, j) (isl_sioimath_abs_cmp(i, j) > 0) -#define isl_int_abs_ge(i, j) (isl_sioimath_abs_cmp(i, j) >= 0) -#define isl_int_is_divisible_by(i, j) isl_sioimath_is_divisible_by(i, j) - -#define isl_int_hash(v, h) isl_sioimath_hash(v, h) +typedef isl_sioimath isl_int[1]; +#define isl_int_init(i) isl_sioimath_init((i)) +#define isl_int_clear(i) isl_sioimath_clear((i)) + +#define isl_int_set(r, i) isl_sioimath_set((r), *(i)) +#define isl_int_set_si(r, i) isl_sioimath_set_si((r), i) +#define isl_int_set_ui(r, i) isl_sioimath_set_ui((r), i) +#define isl_int_fits_slong(r) isl_sioimath_fits_slong(*(r)) +#define isl_int_get_si(r) isl_sioimath_get_si(*(r)) +#define isl_int_fits_ulong(r) isl_sioimath_fits_ulong(*(r)) +#define isl_int_get_ui(r) isl_sioimath_get_ui(*(r)) +#define isl_int_get_d(r) isl_sioimath_get_d(*(r)) +#define isl_int_get_str(r) isl_sioimath_get_str(*(r)) +#define isl_int_abs(r, i) isl_sioimath_abs((r), *(i)) +#define isl_int_neg(r, i) isl_sioimath_neg((r), *(i)) +#define isl_int_swap(i, j) isl_sioimath_swap((i), (j)) +#define isl_int_swap_or_set(i, j) isl_sioimath_swap((i), (j)) +#define isl_int_add_ui(r, i, j) isl_sioimath_add_ui((r), *(i), j) +#define isl_int_sub_ui(r, i, j) isl_sioimath_sub_ui((r), *(i), j) + +#define isl_int_add(r, i, j) isl_sioimath_add((r), *(i), *(j)) +#define isl_int_sub(r, i, j) isl_sioimath_sub((r), *(i), *(j)) +#define isl_int_mul(r, i, j) isl_sioimath_mul((r), *(i), *(j)) +#define isl_int_mul_2exp(r, i, j) isl_sioimath_mul_2exp((r), *(i), j) +#define isl_int_mul_si(r, i, j) isl_sioimath_mul_si((r), *(i), j) +#define isl_int_mul_ui(r, i, j) isl_sioimath_mul_ui((r), *(i), j) +#define isl_int_pow_ui(r, i, j) isl_sioimath_pow_ui((r), *(i), j) +#define isl_int_addmul(r, i, j) isl_sioimath_addmul((r), *(i), *(j)) +#define isl_int_addmul_ui(r, i, j) isl_sioimath_addmul_ui((r), *(i), j) +#define isl_int_submul(r, i, j) isl_sioimath_submul((r), *(i), *(j)) +#define isl_int_submul_ui(r, i, j) isl_sioimath_submul_ui((r), *(i), j) + +#define isl_int_gcd(r, i, j) isl_sioimath_gcd((r), *(i), *(j)) +#define isl_int_lcm(r, i, j) isl_sioimath_lcm((r), *(i), *(j)) +#define isl_int_divexact(r, i, j) isl_sioimath_tdiv_q((r), *(i), *(j)) +#define isl_int_divexact_ui(r, i, j) isl_sioimath_tdiv_q_ui((r), *(i), j) +#define isl_int_tdiv_q(r, i, j) isl_sioimath_tdiv_q((r), *(i), *(j)) +#define isl_int_cdiv_q(r, i, j) isl_sioimath_cdiv_q((r), *(i), *(j)) +#define isl_int_fdiv_q(r, i, j) isl_sioimath_fdiv_q((r), *(i), *(j)) +#define isl_int_fdiv_r(r, i, j) isl_sioimath_fdiv_r((r), *(i), *(j)) +#define isl_int_fdiv_q_ui(r, i, j) isl_sioimath_fdiv_q_ui((r), *(i), j) + +#define isl_int_read(r, s) isl_sioimath_read((r), s) +#define isl_int_sgn(i) isl_sioimath_sgn(*(i)) +#define isl_int_cmp(i, j) isl_sioimath_cmp(*(i), *(j)) +#define isl_int_cmp_si(i, si) isl_sioimath_cmp_si(*(i), si) +#define isl_int_eq(i, j) (isl_sioimath_cmp(*(i), *(j)) == 0) +#define isl_int_ne(i, j) (isl_sioimath_cmp(*(i), *(j)) != 0) +#define isl_int_lt(i, j) (isl_sioimath_cmp(*(i), *(j)) < 0) +#define isl_int_le(i, j) (isl_sioimath_cmp(*(i), *(j)) <= 0) +#define isl_int_gt(i, j) (isl_sioimath_cmp(*(i), *(j)) > 0) +#define isl_int_ge(i, j) (isl_sioimath_cmp(*(i), *(j)) >= 0) +#define isl_int_abs_cmp(i, j) isl_sioimath_abs_cmp(*(i), *(j)) +#define isl_int_abs_eq(i, j) (isl_sioimath_abs_cmp(*(i), *(j)) == 0) +#define isl_int_abs_ne(i, j) (isl_sioimath_abs_cmp(*(i), *(j)) != 0) +#define isl_int_abs_lt(i, j) (isl_sioimath_abs_cmp(*(i), *(j)) < 0) +#define isl_int_abs_gt(i, j) (isl_sioimath_abs_cmp(*(i), *(j)) > 0) +#define isl_int_abs_ge(i, j) (isl_sioimath_abs_cmp(*(i), *(j)) >= 0) +#define isl_int_is_divisible_by(i, j) isl_sioimath_is_divisible_by(*(i), *(j)) + +#define isl_int_hash(v, h) isl_sioimath_hash(*(v), h) #define isl_int_free_str(s) free(s) -#define isl_int_print(out, i, width) isl_sioimath_print(out, i, width) +#define isl_int_print(out, i, width) isl_sioimath_print(out, *(i), width) #endif /* ISL_INT_SIOIMATH_H */ diff --git a/polly/lib/External/isl/isl_map_simplify.c b/polly/lib/External/isl/isl_map_simplify.c index cb39b704dc2..52daf2944a4 100644 --- a/polly/lib/External/isl/isl_map_simplify.c +++ b/polly/lib/External/isl/isl_map_simplify.c @@ -2362,6 +2362,7 @@ static __isl_give isl_basic_set *update_ineq_free( * The (explicit) equalities of "bset" are assumed to have been taken * into account by the transformation such that only the inequalities * are relevant. + * "context" is assumed not to be empty. * * "row" keeps track of the constraint index of a "bset" inequality in "tab". * A value of -1 means that the inequality is obviously redundant and may @@ -2557,8 +2558,13 @@ static __isl_give isl_basic_set *uset_gist_compressed( ineq = isl_mat_product(ineq, isl_mat_copy(T)); context = isl_basic_set_preimage(context, T); - if (!ineq) + if (!ineq || !context) goto error; + if (isl_basic_set_plain_is_empty(context)) { + isl_mat_free(ineq); + isl_basic_set_free(context); + return isl_basic_set_set_to_empty(bset); + } ctx = isl_mat_get_ctx(ineq); n_row = isl_mat_rows(ineq); diff --git a/polly/lib/External/isl/isl_output.c b/polly/lib/External/isl/isl_output.c index 8ebe10ef565..26ef5472bc8 100644 --- a/polly/lib/External/isl/isl_output.c +++ b/polly/lib/External/isl/isl_output.c @@ -515,7 +515,12 @@ error: static __isl_give isl_printer *print_div(__isl_keep isl_space *dim, __isl_keep isl_mat *div, int pos, __isl_take isl_printer *p) { - int c = p->output_format == ISL_FORMAT_C; + int c; + + if (!p || !div) + return isl_printer_free(p); + + c = p->output_format == ISL_FORMAT_C; p = isl_printer_print_str(p, c ? "floord(" : "floor(("); p = print_affine_of_len(dim, div, p, div->row[pos] + 1, div->n_col - 1); @@ -554,22 +559,19 @@ static __isl_give isl_printer *print_div_list(__isl_take isl_printer *p, } static __isl_give isl_printer *print_disjunct(__isl_keep isl_basic_map *bmap, - __isl_keep isl_space *dim, __isl_take isl_printer *p, int latex) + __isl_keep isl_space *space, __isl_take isl_printer *p, int latex) { if (bmap->n_div > 0) { - isl_space *space; isl_mat *div; - space = isl_basic_map_get_space(bmap); div = isl_basic_map_get_divs(bmap); p = isl_printer_print_str(p, s_open_exists[latex]); p = print_div_list(p, space, div, latex); - isl_space_free(space); isl_mat_free(div); p = isl_printer_print_str(p, ": "); } - p = print_constraints(bmap, dim, p, latex); + p = print_constraints(bmap, space, p, latex); if (bmap->n_div > 0) p = isl_printer_print_str(p, s_close_exists[latex]); @@ -2028,6 +2030,7 @@ __isl_give isl_printer *isl_printer_print_local_space(__isl_take isl_printer *p, p = isl_printer_print_str(p, " : "); p = isl_printer_print_str(p, s_open_exists[0]); p = print_div_list(p, ls->dim, ls->div, 0); + p = isl_printer_print_str(p, s_close_exists[0]); } else if (isl_space_is_params(ls->dim)) p = isl_printer_print_str(p, s_such_that[0]); p = isl_printer_print_str(p, " }"); diff --git a/polly/lib/External/isl/isl_schedule.c b/polly/lib/External/isl/isl_schedule.c index 62b45836900..76510c8cbbf 100644 --- a/polly/lib/External/isl/isl_schedule.c +++ b/polly/lib/External/isl/isl_schedule.c @@ -478,6 +478,36 @@ error: return NULL; } +/* Replace the domain of the schedule "schedule" with the gist + * of the original domain with respect to the parameter domain "context". + */ +__isl_give isl_schedule *isl_schedule_gist_domain_params( + __isl_take isl_schedule *schedule, __isl_take isl_set *context) +{ + enum isl_schedule_node_type root_type; + isl_schedule_node *node; + + if (!schedule || !context) + goto error; + + root_type = isl_schedule_tree_get_type(schedule->root); + if (root_type != isl_schedule_node_domain) + isl_die(isl_schedule_get_ctx(schedule), isl_error_invalid, + "root node must be a domain node", goto error); + + node = isl_schedule_get_root(schedule); + isl_schedule_free(schedule); + node = isl_schedule_node_domain_gist_params(node, context); + schedule = isl_schedule_node_get_schedule(node); + isl_schedule_node_free(node); + + return schedule; +error: + isl_schedule_free(schedule); + isl_set_free(context); + return NULL; +} + /* Return an isl_union_map representation of the schedule. * If we still have access to the schedule tree, then we return * an isl_union_map corresponding to the subtree schedule of the child diff --git a/polly/lib/External/isl/isl_schedule_node.c b/polly/lib/External/isl/isl_schedule_node.c index 281d94d8068..3272ed15195 100644 --- a/polly/lib/External/isl/isl_schedule_node.c +++ b/polly/lib/External/isl/isl_schedule_node.c @@ -3418,6 +3418,31 @@ error: return NULL; } +/* Replace the domain of domain node "node" with the gist + * of the original domain with respect to the parameter domain "context". + */ +__isl_give isl_schedule_node *isl_schedule_node_domain_gist_params( + __isl_take isl_schedule_node *node, __isl_take isl_set *context) +{ + isl_union_set *domain; + isl_schedule_tree *tree; + + if (!node || !context) + goto error; + + tree = isl_schedule_tree_copy(node->tree); + domain = isl_schedule_tree_domain_get_domain(node->tree); + domain = isl_union_set_gist_params(domain, context); + tree = isl_schedule_tree_domain_set_domain(tree, domain); + node = isl_schedule_node_graft_tree(node, tree); + + return node; +error: + isl_schedule_node_free(node); + isl_set_free(context); + return NULL; +} + /* Internal data structure for isl_schedule_node_get_subtree_expansion. * "expansions" contains a list of accumulated expansions * for each outer expansion, set or sequence node. The first element diff --git a/polly/lib/External/isl/isl_schedule_node_private.h b/polly/lib/External/isl/isl_schedule_node_private.h index e89bcacb110..d6c33340728 100644 --- a/polly/lib/External/isl/isl_schedule_node_private.h +++ b/polly/lib/External/isl/isl_schedule_node_private.h @@ -44,6 +44,8 @@ __isl_give isl_schedule_node *isl_schedule_node_pullback_union_pw_multi_aff( __isl_give isl_schedule_node *isl_schedule_node_domain_intersect_domain( __isl_take isl_schedule_node *node, __isl_take isl_union_set *domain); +__isl_give isl_schedule_node *isl_schedule_node_domain_gist_params( + __isl_take isl_schedule_node *node, __isl_take isl_set *context); __isl_give isl_schedule_node *isl_schedule_node_insert_expansion( __isl_take isl_schedule_node *node, diff --git a/polly/lib/External/isl/isl_test.c b/polly/lib/External/isl/isl_test.c index abd0cc1348a..23a205e4704 100644 --- a/polly/lib/External/isl/isl_test.c +++ b/polly/lib/External/isl/isl_test.c @@ -1309,6 +1309,9 @@ struct { "[t1, t2] -> { [i4, i5, i6] : exists (e0 = floor((381 - t1)/5), " "e1 = floor((-1 + i4)/2): t2 = 0 and 2e1 = -1 + i4 and " "i4 <= 1 and 5e0 <= 381 - t1 and 20e0 >= 1511 - 4t1 - 5i4) }" }, + { "{ [0, 0, q, p] : -5 <= q <= 5 and p >= 0 }", + "{ [a, b, q, p] : b >= 1 + a }", + "{ [a, b, q, p] : false }" }, }; static int test_gist(struct isl_ctx *ctx) diff --git a/polly/lib/External/isl/isl_test_int.c b/polly/lib/External/isl/isl_test_int.c index e28f6a285f8..09884b1f83e 100644 --- a/polly/lib/External/isl/isl_test_int.c +++ b/polly/lib/External/isl/isl_test_int.c @@ -29,8 +29,8 @@ static void int_test_hash(isl_int val) isl_int_init(promoted); isl_int_set(promoted, val); - isl_sioimath_try_demote(&demoted); - isl_sioimath_promote(&promoted); + isl_sioimath_try_demote(demoted); + isl_sioimath_promote(promoted); assert(isl_int_eq(demoted, promoted)); @@ -86,14 +86,14 @@ static void invoke_alternate_representations_2args(char *arg1, char *arg2, isl_int_read(int2, arg2); if (j & 1) - isl_sioimath_promote(&int1); + isl_sioimath_promote(int1); else - isl_sioimath_try_demote(&int1); + isl_sioimath_try_demote(int1); if (j & 2) - isl_sioimath_promote(&int2); + isl_sioimath_promote(int2); else - isl_sioimath_try_demote(&int2); + isl_sioimath_try_demote(int2); (*fn)(int1, int2); } @@ -118,19 +118,19 @@ static void invoke_alternate_representations_3args(char *arg1, char *arg2, isl_int_read(int3, arg3); if (j & 1) - isl_sioimath_promote(&int1); + isl_sioimath_promote(int1); else - isl_sioimath_try_demote(&int1); + isl_sioimath_try_demote(int1); if (j & 2) - isl_sioimath_promote(&int2); + isl_sioimath_promote(int2); else - isl_sioimath_try_demote(&int2); + isl_sioimath_try_demote(int2); if (j & 4) - isl_sioimath_promote(&int3); + isl_sioimath_promote(int3); else - isl_sioimath_try_demote(&int3); + isl_sioimath_try_demote(int3); (*fn)(int1, int2, int3); } diff --git a/polly/lib/External/isl/isl_val_sioimath.c b/polly/lib/External/isl/isl_val_sioimath.c index 008f899ed18..42f87e3c3bf 100644 --- a/polly/lib/External/isl/isl_val_sioimath.c +++ b/polly/lib/External/isl/isl_val_sioimath.c @@ -13,8 +13,8 @@ __isl_give isl_val *isl_val_int_from_chunks(isl_ctx *ctx, size_t n, if (!v) return NULL; - impz_import(isl_sioimath_reinit_big(&v->n), n, -1, size, 0, 0, chunks); - isl_sioimath_try_demote(&v->n); + impz_import(isl_sioimath_reinit_big(v->n), n, -1, size, 0, 0, chunks); + isl_sioimath_try_demote(v->n); isl_int_set_si(v->d, 1); return v; @@ -44,7 +44,7 @@ int isl_val_get_abs_num_chunks(__isl_keep isl_val *v, size_t size, "expecting rational value", return -1); impz_export(chunks, NULL, -1, size, 0, 0, - isl_sioimath_bigarg_src(v->n, &scratch)); + isl_sioimath_bigarg_src(*v->n, &scratch)); if (isl_val_is_zero(v)) memset(chunks, 0, size); @@ -64,5 +64,5 @@ size_t isl_val_n_abs_num_chunks(__isl_keep isl_val *v, size_t size) "expecting rational value", return 0); size *= 8; - return (isl_sioimath_sizeinbase(v->n, 2) + size - 1) / size; + return (isl_sioimath_sizeinbase(*v->n, 2) + size - 1) / size; } |