[polly] r241048 - Update isl to isl-0.15-30-g3518765
Tobias Grosser
tobias at grosser.es
Tue Jun 30 01:22:15 PDT 2015
Author: grosser
Date: Tue Jun 30 03:22:14 2015
New Revision: 241048
URL: http://llvm.org/viewvc/llvm-project?rev=241048&view=rev
Log:
Update isl to isl-0.15-30-g3518765
This updated contains various changes to isl, including improvements to the
AST generator. For Polly, the most important change is a fix that unbreaks
builds on darwin (reported by: Jack Howard)
Added:
polly/trunk/lib/External/isl/isl_ffs.c
polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.c
polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.st
Modified:
polly/trunk/lib/External/isl/GIT_HEAD_ID
polly/trunk/lib/External/isl/Makefile.am
polly/trunk/lib/External/isl/Makefile.in
polly/trunk/lib/External/isl/compile (contents, props changed)
polly/trunk/lib/External/isl/config.guess (contents, props changed)
polly/trunk/lib/External/isl/config.sub (contents, props changed)
polly/trunk/lib/External/isl/configure (contents, props changed)
polly/trunk/lib/External/isl/configure.ac
polly/trunk/lib/External/isl/depcomp (contents, props changed)
polly/trunk/lib/External/isl/doc/manual.pdf
polly/trunk/lib/External/isl/doc/user.pod
polly/trunk/lib/External/isl/include/isl/aff.h
polly/trunk/lib/External/isl/include/isl/multi.h
polly/trunk/lib/External/isl/include/isl/schedule_node.h
polly/trunk/lib/External/isl/include/isl/set.h
polly/trunk/lib/External/isl/include/isl/val.h
polly/trunk/lib/External/isl/install-sh (contents, props changed)
polly/trunk/lib/External/isl/isl_aff.c
polly/trunk/lib/External/isl/isl_arg.c
polly/trunk/lib/External/isl/isl_ast_build.c
polly/trunk/lib/External/isl/isl_ast_build_expr.c
polly/trunk/lib/External/isl/isl_coalesce.c
polly/trunk/lib/External/isl/isl_config.h.in
polly/trunk/lib/External/isl/isl_config_post.h
polly/trunk/lib/External/isl/isl_hash.c
polly/trunk/lib/External/isl/isl_int_sioimath.c
polly/trunk/lib/External/isl/isl_map.c
polly/trunk/lib/External/isl/isl_map_private.h
polly/trunk/lib/External/isl/isl_map_simplify.c
polly/trunk/lib/External/isl/isl_multi_templ.c
polly/trunk/lib/External/isl/isl_range.c
polly/trunk/lib/External/isl/isl_schedule_band.c
polly/trunk/lib/External/isl/isl_schedule_band.h
polly/trunk/lib/External/isl/isl_schedule_node.c
polly/trunk/lib/External/isl/isl_schedule_tree.c
polly/trunk/lib/External/isl/isl_schedule_tree.h
polly/trunk/lib/External/isl/isl_space.c
polly/trunk/lib/External/isl/isl_stream.c
polly/trunk/lib/External/isl/isl_test.c
polly/trunk/lib/External/isl/isl_test_int.c
polly/trunk/lib/External/isl/isl_val.c
polly/trunk/lib/External/isl/ltmain.sh
polly/trunk/lib/External/isl/missing (contents, props changed)
polly/trunk/lib/External/isl/pip.c
polly/trunk/lib/External/isl/test-driver (contents, props changed)
polly/trunk/lib/External/isl/test_inputs/codegen/cloog/faber.c
polly/trunk/lib/External/isl/test_inputs/codegen/omega/iter9-0.c
polly/trunk/lib/External/isl/test_inputs/codegen/unroll4.c
Modified: polly/trunk/lib/External/isl/GIT_HEAD_ID
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/GIT_HEAD_ID?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/GIT_HEAD_ID (original)
+++ polly/trunk/lib/External/isl/GIT_HEAD_ID Tue Jun 30 03:22:14 2015
@@ -1 +1 @@
-isl-0.15-3-g532568a
+isl-0.15-30-g3518765
Modified: polly/trunk/lib/External/isl/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/Makefile.am?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/Makefile.am (original)
+++ polly/trunk/lib/External/isl/Makefile.am Tue Jun 30 03:22:14 2015
@@ -102,6 +102,7 @@ libisl_la_SOURCES = \
isl_factorization.c \
isl_factorization.h \
isl_farkas.c \
+ isl_ffs.c \
isl_flow.c \
isl_fold.c \
isl_hash.c \
Modified: polly/trunk/lib/External/isl/Makefile.in
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/Makefile.in?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/Makefile.in (original)
+++ polly/trunk/lib/External/isl/Makefile.in Tue Jun 30 03:22:14 2015
@@ -178,7 +178,7 @@ am__libisl_la_SOURCES_DIST = mp_get_memo
isl_coalesce.c isl_constraint.c isl_constraint_private.h \
isl_convex_hull.c isl_ctx.c isl_ctx_private.h isl_deprecated.c \
isl_dim_map.h isl_dim_map.c isl_equalities.c isl_equalities.h \
- isl_factorization.c isl_factorization.h isl_farkas.c \
+ isl_factorization.c isl_factorization.h isl_farkas.c isl_ffs.c \
isl_flow.c isl_fold.c isl_hash.c isl_id_to_ast_expr.c \
isl_id_to_pw_aff.c isl_ilp.c isl_ilp_private.h isl_input.c \
isl_int.h isl_local_space_private.h isl_local_space.c isl_lp.c \
@@ -225,19 +225,20 @@ am_libisl_la_OBJECTS = $(am__objects_4)
isl_bound.lo isl_coalesce.lo isl_constraint.lo \
isl_convex_hull.lo isl_ctx.lo isl_deprecated.lo isl_dim_map.lo \
isl_equalities.lo isl_factorization.lo isl_farkas.lo \
- isl_flow.lo isl_fold.lo isl_hash.lo isl_id_to_ast_expr.lo \
- isl_id_to_pw_aff.lo isl_ilp.lo isl_input.lo isl_local_space.lo \
- isl_lp.lo isl_map.lo isl_map_list.lo isl_map_simplify.lo \
- isl_map_subtract.lo isl_map_to_basic_set.lo isl_mat.lo \
- isl_morph.lo isl_id.lo isl_obj.lo isl_options.lo isl_output.lo \
- isl_point.lo isl_polynomial.lo isl_printer.lo print.lo \
- isl_range.lo isl_reordering.lo isl_sample.lo isl_scan.lo \
- isl_schedule.lo isl_schedule_band.lo isl_schedule_node.lo \
- isl_schedule_read.lo isl_schedule_tree.lo isl_scheduler.lo \
- isl_set_list.lo isl_sort.lo isl_space.lo isl_stream.lo \
- isl_seq.lo isl_tab.lo isl_tab_pip.lo isl_tarjan.lo \
- isl_transitive_closure.lo isl_union_map.lo isl_val.lo \
- isl_vec.lo isl_version.lo isl_vertices.lo
+ isl_ffs.lo isl_flow.lo isl_fold.lo isl_hash.lo \
+ isl_id_to_ast_expr.lo isl_id_to_pw_aff.lo isl_ilp.lo \
+ isl_input.lo isl_local_space.lo isl_lp.lo isl_map.lo \
+ isl_map_list.lo isl_map_simplify.lo isl_map_subtract.lo \
+ isl_map_to_basic_set.lo isl_mat.lo isl_morph.lo isl_id.lo \
+ isl_obj.lo isl_options.lo isl_output.lo isl_point.lo \
+ isl_polynomial.lo isl_printer.lo print.lo isl_range.lo \
+ isl_reordering.lo isl_sample.lo isl_scan.lo isl_schedule.lo \
+ isl_schedule_band.lo isl_schedule_node.lo isl_schedule_read.lo \
+ isl_schedule_tree.lo isl_scheduler.lo isl_set_list.lo \
+ isl_sort.lo isl_space.lo isl_stream.lo isl_seq.lo isl_tab.lo \
+ isl_tab_pip.lo isl_tarjan.lo isl_transitive_closure.lo \
+ isl_union_map.lo isl_val.lo isl_vec.lo isl_version.lo \
+ isl_vertices.lo
libisl_la_OBJECTS = $(am_libisl_la_OBJECTS)
AM_V_lt = $(am__v_lt_ at AM_V@)
am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
@@ -844,6 +845,7 @@ libisl_la_SOURCES = \
isl_factorization.c \
isl_factorization.h \
isl_farkas.c \
+ isl_ffs.c \
isl_flow.c \
isl_fold.c \
isl_hash.c \
@@ -1287,6 +1289,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/isl_equalities.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/isl_factorization.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/isl_farkas.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/isl_ffs.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/isl_flow.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/isl_fold.Plo at am__quote@
@AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/isl_gmp.Plo at am__quote@
Modified: polly/trunk/lib/External/isl/compile
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/compile?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
(empty)
Propchange: polly/trunk/lib/External/isl/compile
------------------------------------------------------------------------------
svn:executable = *
Modified: polly/trunk/lib/External/isl/config.guess
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/config.guess?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
(empty)
Propchange: polly/trunk/lib/External/isl/config.guess
------------------------------------------------------------------------------
svn:executable = *
Modified: polly/trunk/lib/External/isl/config.sub
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/config.sub?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
(empty)
Propchange: polly/trunk/lib/External/isl/config.sub
------------------------------------------------------------------------------
svn:executable = *
Modified: polly/trunk/lib/External/isl/configure
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/configure?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/configure (original)
+++ polly/trunk/lib/External/isl/configure Tue Jun 30 03:22:14 2015
@@ -17466,6 +17466,9 @@ fi
;;
esac
+if test "x$with_int" = "ximath-32" -a "x$GCC" = "xyes"; then
+ MP_CPPFLAGS="-std=gnu99 $MP_CPPFLAGS"
+fi
if test x$with_int = ximath -o x$with_int = ximath-32; then
IMATH_FOR_MP_TRUE=
@@ -17523,6 +17526,104 @@ cat >>confdefs.h <<_ACEOF
#define HAVE_DECL___BUILTIN_FFS $ac_have_decl
_ACEOF
+ac_fn_c_check_decl "$LINENO" "_BitScanForward" "ac_cv_have_decl__BitScanForward" "#include <intrin.h>
+"
+if test "x$ac_cv_have_decl__BitScanForward" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__BITSCANFORWARD $ac_have_decl
+_ACEOF
+
+if test "x$ac_cv_have_decl_ffs" = xno -a \
+ "x$ac_cv_have_decl___builtin_ffs" = xno -a \
+ "x$ac_cv_have_decl__BitScanForward" = xno; then
+ as_fn_error $? "No ffs implementation found" "$LINENO" 5
+fi
+ac_fn_c_check_decl "$LINENO" "strcasecmp" "ac_cv_have_decl_strcasecmp" "#include <strings.h>
+"
+if test "x$ac_cv_have_decl_strcasecmp" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRCASECMP $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "strncasecmp" "ac_cv_have_decl_strncasecmp" "#include <strings.h>
+"
+if test "x$ac_cv_have_decl_strncasecmp" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_STRNCASECMP $ac_have_decl
+_ACEOF
+
+ac_fn_c_check_decl "$LINENO" "_stricmp" "ac_cv_have_decl__stricmp" "#include <string.h>
+"
+if test "x$ac_cv_have_decl__stricmp" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__STRICMP $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "_strnicmp" "ac_cv_have_decl__strnicmp" "#include <string.h>
+"
+if test "x$ac_cv_have_decl__strnicmp" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__STRNICMP $ac_have_decl
+_ACEOF
+
+if test "x$ac_cv_have_decl_strcasecmp" = xno -a \
+ "x$ac_cv_have_decl__stricmp" = xno; then
+ as_fn_error $? "No strcasecmp implementation found" "$LINENO" 5
+fi
+if test "x$ac_cv_have_decl_strncasecmp" = xno -a \
+ "x$ac_cv_have_decl__strnicmp" = xno; then
+ as_fn_error $? "No strncasecmp implementation found" "$LINENO" 5
+fi
+ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "#include <stdio.h>
+"
+if test "x$ac_cv_have_decl_snprintf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SNPRINTF $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include <stdio.h>
+"
+if test "x$ac_cv_have_decl__snprintf" = xyes; then :
+ ac_have_decl=1
+else
+ ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__SNPRINTF $ac_have_decl
+_ACEOF
+
+if test "x$ac_cv_have_decl_snprintf" = xno -a \
+ "x$ac_cv_have_decl__snprintf" = xno; then
+ as_fn_error $? "No snprintf implementation found" "$LINENO" 5
+fi
Propchange: polly/trunk/lib/External/isl/configure
------------------------------------------------------------------------------
svn:executable = *
Modified: polly/trunk/lib/External/isl/configure.ac
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/configure.ac?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/configure.ac (original)
+++ polly/trunk/lib/External/isl/configure.ac Tue Jun 30 03:22:14 2015
@@ -59,6 +59,9 @@ imath|imath-32)
AX_DETECT_IMATH
;;
esac
+if test "x$with_int" = "ximath-32" -a "x$GCC" = "xyes"; then
+ MP_CPPFLAGS="-std=gnu99 $MP_CPPFLAGS"
+fi
AM_CONDITIONAL(IMATH_FOR_MP, test x$with_int = ximath -o x$with_int = ximath-32)
AM_CONDITIONAL(GMP_FOR_MP, test x$with_int = xgmp)
@@ -70,6 +73,27 @@ AS_IF([test "x$with_int" == "ximath-32"]
AC_CHECK_DECLS(ffs,[],[],[#include <strings.h>])
AC_CHECK_DECLS(__builtin_ffs,[],[],[])
+AC_CHECK_DECLS([_BitScanForward],[],[],[#include <intrin.h>])
+if test "x$ac_cv_have_decl_ffs" = xno -a \
+ "x$ac_cv_have_decl___builtin_ffs" = xno -a \
+ "x$ac_cv_have_decl__BitScanForward" = xno; then
+ AC_MSG_ERROR([No ffs implementation found])
+fi
+AC_CHECK_DECLS([strcasecmp,strncasecmp],[],[],[#include <strings.h>])
+AC_CHECK_DECLS([_stricmp,_strnicmp],[],[],[#include <string.h>])
+if test "x$ac_cv_have_decl_strcasecmp" = xno -a \
+ "x$ac_cv_have_decl__stricmp" = xno; then
+ AC_MSG_ERROR([No strcasecmp implementation found])
+fi
+if test "x$ac_cv_have_decl_strncasecmp" = xno -a \
+ "x$ac_cv_have_decl__strnicmp" = xno; then
+ AC_MSG_ERROR([No strncasecmp implementation found])
+fi
+AC_CHECK_DECLS([snprintf,_snprintf],[],[],[#include <stdio.h>])
+if test "x$ac_cv_have_decl_snprintf" = xno -a \
+ "x$ac_cv_have_decl__snprintf" = xno; then
+ AC_MSG_ERROR([No snprintf implementation found])
+fi
AC_SUBST(CLANG_CXXFLAGS)
AC_SUBST(CLANG_LDFLAGS)
Modified: polly/trunk/lib/External/isl/depcomp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/depcomp?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
(empty)
Propchange: polly/trunk/lib/External/isl/depcomp
------------------------------------------------------------------------------
svn:executable = *
Modified: polly/trunk/lib/External/isl/doc/manual.pdf
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/doc/manual.pdf?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
Binary files polly/trunk/lib/External/isl/doc/manual.pdf (original) and polly/trunk/lib/External/isl/doc/manual.pdf Tue Jun 30 03:22:14 2015 differ
Modified: polly/trunk/lib/External/isl/doc/user.pod
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/doc/user.pod?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/doc/user.pod (original)
+++ polly/trunk/lib/External/isl/doc/user.pod Tue Jun 30 03:22:14 2015
@@ -641,6 +641,8 @@ They can be inspected using the followin
#include <isl/val.h>
long isl_val_get_num_si(__isl_keep isl_val *v);
long isl_val_get_den_si(__isl_keep isl_val *v);
+ __isl_give isl_val *isl_val_get_den_val(
+ __isl_keep isl_val *v);
double isl_val_get_d(__isl_keep isl_val *v);
size_t isl_val_n_abs_num_chunks(__isl_keep isl_val *v,
size_t size);
@@ -2179,6 +2181,14 @@ from
#include <isl/map.h>
int isl_map_n_basic_map(__isl_keep isl_map *map);
+It is also possible to obtain a list of basic sets from a set
+
+ #include <isl/set.h>
+ __isl_give isl_basic_set_list *isl_set_get_basic_set_list(
+ __isl_keep isl_set *set);
+
+The returned list can be manipulated using the functions in L<"Lists">.
+
To iterate over the constraints of a basic set or map, use
#include <isl/constraint.h>
@@ -6261,7 +6271,7 @@ The functions C<isl_space_range_factor_d
C<isl_space_range_factor_range> extract the two arguments from
the result of a call to C<isl_space_range_product>.
-The arguments of a call to C<isl_map_range_product> can be extracted
+The arguments of a call to a product can be extracted
from the result using the following functions.
#include <isl/map.h>
@@ -6294,6 +6304,8 @@ from the result using the following func
__isl_take isl_union_map *umap);
#include <isl/val.h>
+ __isl_give isl_multi_val *isl_multi_val_factor_range(
+ __isl_take isl_multi_val *mv);
__isl_give isl_multi_val *
isl_multi_val_range_factor_domain(
__isl_take isl_multi_val *mv);
@@ -6302,6 +6314,8 @@ from the result using the following func
__isl_take isl_multi_val *mv);
#include <isl/aff.h>
+ __isl_give isl_multi_aff *isl_multi_aff_factor_range(
+ __isl_take isl_multi_aff *ma);
__isl_give isl_multi_aff *
isl_multi_aff_range_factor_domain(
__isl_take isl_multi_aff *ma);
@@ -6309,12 +6323,18 @@ from the result using the following func
isl_multi_aff_range_factor_range(
__isl_take isl_multi_aff *ma);
__isl_give isl_multi_pw_aff *
+ isl_multi_pw_aff_factor_range(
+ __isl_take isl_multi_pw_aff *mpa);
+ __isl_give isl_multi_pw_aff *
isl_multi_pw_aff_range_factor_domain(
__isl_take isl_multi_pw_aff *mpa);
__isl_give isl_multi_pw_aff *
isl_multi_pw_aff_range_factor_range(
__isl_take isl_multi_pw_aff *mpa);
__isl_give isl_multi_union_pw_aff *
+ isl_multi_union_pw_aff_factor_range(
+ __isl_take isl_multi_union_pw_aff *mupa);
+ __isl_give isl_multi_union_pw_aff *
isl_multi_union_pw_aff_range_factor_domain(
__isl_take isl_multi_union_pw_aff *mupa);
__isl_give isl_multi_union_pw_aff *
@@ -6324,6 +6344,11 @@ from the result using the following func
The splice functions are a generalization of the flat product functions,
where the second argument may be inserted at any position inside
the first argument rather than being placed at the end.
+The functions C<isl_multi_val_factor_range>,
+C<isl_multi_aff_factor_range>,
+C<isl_multi_pw_aff_factor_range> and
+C<isl_multi_union_pw_aff_factor_range>
+take functions that live in a set space.
#include <isl/val.h>
__isl_give isl_multi_val *isl_multi_val_range_splice(
@@ -6520,6 +6545,9 @@ to simplify the expression associated to
=item * Binary Arithmethic Operations
#include <isl/val.h>
+ __isl_give isl_multi_val *isl_multi_val_add(
+ __isl_take isl_multi_val *mv1,
+ __isl_take isl_multi_val *mv2);
__isl_give isl_multi_val *isl_multi_val_sub(
__isl_take isl_multi_val *mv1,
__isl_take isl_multi_val *mv2);
@@ -6534,6 +6562,9 @@ to simplify the expression associated to
__isl_give isl_pw_aff *isl_pw_aff_add(
__isl_take isl_pw_aff *pwaff1,
__isl_take isl_pw_aff *pwaff2);
+ __isl_give isl_multi_pw_aff *isl_multi_pw_aff_add(
+ __isl_take isl_multi_pw_aff *mpa1,
+ __isl_take isl_multi_pw_aff *mpa2);
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_add(
__isl_take isl_pw_multi_aff *pma1,
__isl_take isl_pw_multi_aff *pma2);
@@ -6543,6 +6574,10 @@ to simplify the expression associated to
__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_add(
__isl_take isl_union_pw_multi_aff *upma1,
__isl_take isl_union_pw_multi_aff *upma2);
+ __isl_give isl_multi_union_pw_aff *
+ isl_multi_union_pw_aff_add(
+ __isl_take isl_multi_union_pw_aff *mupa1,
+ __isl_take isl_multi_union_pw_aff *mupa2);
__isl_give isl_pw_aff *isl_pw_aff_min(
__isl_take isl_pw_aff *pwaff1,
__isl_take isl_pw_aff *pwaff2);
@@ -8098,7 +8133,7 @@ introduced expansion node. Grouping ins
ensures that they will be treated as a single statement by the
AST generator up to the point of the expansion node.
-The partial schedule of a band node can be scaled (down) using
+The partial schedule of a band node can be scaled (down) or reduced using
the following functions.
#include <isl/schedule_node.h>
@@ -8110,11 +8145,26 @@ the following functions.
isl_schedule_node_band_scale_down(
__isl_take isl_schedule_node *node,
__isl_take isl_multi_val *mv);
+ __isl_give isl_schedule_node *
+ isl_schedule_node_band_mod(
+ __isl_take isl_schedule_node *node,
+ __isl_take isl_multi_val *mv);
The spaces of the two arguments need to match.
After scaling, the partial schedule is replaced by its greatest
integer part to ensure that the schedule remains integral.
+The partial schedule of a band node can be shifted by an
+C<isl_multi_union_pw_aff> with a domain that is a superset
+of the domain of the partial schedule using
+the following function.
+
+ #include <isl/schedule_node.h>
+ __isl_give isl_schedule_node *
+ isl_schedule_node_band_shift(
+ __isl_take isl_schedule_node *node,
+ __isl_take isl_multi_union_pw_aff *shift);
+
A band node can be tiled using the following function.
#include <isl/schedule_node.h>
Modified: polly/trunk/lib/External/isl/include/isl/aff.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/aff.h?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/aff.h (original)
+++ polly/trunk/lib/External/isl/include/isl/aff.h Tue Jun 30 03:22:14 2015
@@ -340,9 +340,6 @@ __isl_give isl_multi_aff *isl_multi_aff_
__isl_give isl_multi_aff *isl_multi_aff_floor(__isl_take isl_multi_aff *ma);
-__isl_give isl_multi_aff *isl_multi_aff_add(__isl_take isl_multi_aff *maff1,
- __isl_take isl_multi_aff *maff2);
-
__isl_give isl_multi_aff *isl_multi_aff_product(
__isl_take isl_multi_aff *ma1, __isl_take isl_multi_aff *ma2);
Modified: polly/trunk/lib/External/isl/include/isl/multi.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/multi.h?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/multi.h (original)
+++ polly/trunk/lib/External/isl/include/isl/multi.h Tue Jun 30 03:22:14 2015
@@ -79,6 +79,8 @@ __isl_give isl_multi_##BASE *isl_multi_#
__isl_give isl_multi_##BASE *isl_multi_##BASE##_range_product( \
__isl_take isl_multi_##BASE *multi1, \
__isl_take isl_multi_##BASE *multi2); \
+__isl_give isl_multi_##BASE *isl_multi_##BASE##_factor_range( \
+ __isl_take isl_multi_##BASE *multi); \
isl_bool isl_multi_##BASE##_range_is_wrapping( \
__isl_keep isl_multi_##BASE *multi); \
__isl_give isl_multi_##BASE *isl_multi_##BASE##_range_factor_domain( \
@@ -98,6 +100,9 @@ __isl_give isl_multi_##BASE *isl_multi_#
__isl_give isl_multi_##BASE *isl_multi_##BASE##_mod_multi_val( \
__isl_take isl_multi_##BASE *multi, \
__isl_take isl_multi_val *mv); \
+__isl_give isl_multi_##BASE *isl_multi_##BASE##_add( \
+ __isl_take isl_multi_##BASE *multi1, \
+ __isl_take isl_multi_##BASE *multi2); \
__isl_give isl_multi_##BASE *isl_multi_##BASE##_sub( \
__isl_take isl_multi_##BASE *multi1, \
__isl_take isl_multi_##BASE *multi2); \
Modified: polly/trunk/lib/External/isl/include/isl/schedule_node.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/schedule_node.h?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/schedule_node.h (original)
+++ polly/trunk/lib/External/isl/include/isl/schedule_node.h Tue Jun 30 03:22:14 2015
@@ -123,6 +123,11 @@ __isl_give isl_schedule_node *isl_schedu
__isl_take isl_schedule_node *node, __isl_take isl_multi_val *mv);
__isl_give isl_schedule_node *isl_schedule_node_band_scale_down(
__isl_take isl_schedule_node *node, __isl_take isl_multi_val *mv);
+__isl_give isl_schedule_node *isl_schedule_node_band_mod(
+ __isl_take isl_schedule_node *node, __isl_take isl_multi_val *mv);
+__isl_give isl_schedule_node *isl_schedule_node_band_shift(
+ __isl_take isl_schedule_node *node,
+ __isl_take isl_multi_union_pw_aff *shift);
__isl_give isl_schedule_node *isl_schedule_node_band_tile(
__isl_take isl_schedule_node *node, __isl_take isl_multi_val *sizes);
__isl_give isl_schedule_node *isl_schedule_node_band_sink(
Modified: polly/trunk/lib/External/isl/include/isl/set.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/set.h?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/set.h (original)
+++ polly/trunk/lib/External/isl/include/isl/set.h Tue Jun 30 03:22:14 2015
@@ -433,6 +433,8 @@ int isl_set_n_basic_set(__isl_keep isl_s
__isl_export
isl_stat isl_set_foreach_basic_set(__isl_keep isl_set *set,
isl_stat (*fn)(__isl_take isl_basic_set *bset, void *user), void *user);
+__isl_give isl_basic_set_list *isl_set_get_basic_set_list(
+ __isl_keep isl_set *set);
isl_stat isl_set_foreach_point(__isl_keep isl_set *set,
isl_stat (*fn)(__isl_take isl_point *pnt, void *user), void *user);
Modified: polly/trunk/lib/External/isl/include/isl/val.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/val.h?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/val.h (original)
+++ polly/trunk/lib/External/isl/include/isl/val.h Tue Jun 30 03:22:14 2015
@@ -40,6 +40,7 @@ __isl_null isl_val *isl_val_free(__isl_t
isl_ctx *isl_val_get_ctx(__isl_keep isl_val *val);
long isl_val_get_num_si(__isl_keep isl_val *v);
long isl_val_get_den_si(__isl_keep isl_val *v);
+__isl_give isl_val *isl_val_get_den_val(__isl_keep isl_val *v);
double isl_val_get_d(__isl_keep isl_val *v);
size_t isl_val_n_abs_num_chunks(__isl_keep isl_val *v, size_t size);
int isl_val_get_abs_num_chunks(__isl_keep isl_val *v, size_t size,
Modified: polly/trunk/lib/External/isl/install-sh
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/install-sh?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
(empty)
Propchange: polly/trunk/lib/External/isl/install-sh
------------------------------------------------------------------------------
svn:executable = *
Modified: polly/trunk/lib/External/isl/isl_aff.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_aff.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_aff.c (original)
+++ polly/trunk/lib/External/isl/isl_aff.c Tue Jun 30 03:22:14 2015
@@ -3950,25 +3950,6 @@ __isl_give isl_pw_multi_aff *isl_pw_mult
return isl_pw_multi_aff_from_multi_aff(isl_multi_aff_identity(space));
}
-/* Add "ma2" to "ma1" and return the result.
- *
- * The parameters of "ma1" and "ma2" are assumed to have been aligned.
- */
-static __isl_give isl_multi_aff *isl_multi_aff_add_aligned(
- __isl_take isl_multi_aff *maff1, __isl_take isl_multi_aff *maff2)
-{
- return isl_multi_aff_bin_op(maff1, maff2, &isl_aff_add);
-}
-
-/* Add "ma2" to "ma1" and return the result.
- */
-__isl_give isl_multi_aff *isl_multi_aff_add(__isl_take isl_multi_aff *ma1,
- __isl_take isl_multi_aff *ma2)
-{
- return isl_multi_aff_align_params_multi_multi_and(ma1, ma2,
- &isl_multi_aff_add_aligned);
-}
-
/* Exploit the equalities in "eq" to simplify the affine expressions.
*/
static __isl_give isl_multi_aff *isl_multi_aff_substitute_equalities(
Modified: polly/trunk/lib/External/isl/isl_arg.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_arg.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_arg.c (original)
+++ polly/trunk/lib/External/isl/isl_arg.c Tue Jun 30 03:22:14 2015
@@ -13,6 +13,7 @@
#include <isl/arg.h>
#include <isl/ctx.h>
+#include <isl_config.h>
static struct isl_arg help_arg[] = {
ISL_ARG_PHANTOM_BOOL('h', "help", NULL, "print this help, then exit")
Modified: polly/trunk/lib/External/isl/isl_ast_build.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_ast_build.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_ast_build.c (original)
+++ polly/trunk/lib/External/isl/isl_ast_build.c Tue Jun 30 03:22:14 2015
@@ -18,6 +18,7 @@
#include <isl/union_map.h>
#include <isl_ast_build_private.h>
#include <isl_ast_private.h>
+#include <isl_config.h>
/* Construct a map that isolates the current dimension.
*
Modified: polly/trunk/lib/External/isl/isl_ast_build_expr.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_ast_build_expr.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_ast_build_expr.c (original)
+++ polly/trunk/lib/External/isl/isl_ast_build_expr.c Tue Jun 30 03:22:14 2015
@@ -661,6 +661,12 @@ static int mod_constraint_is_simpler(str
* not to involve any coefficients that are multiples of d, "c" may
* very well involve such coefficients. This means that we may actually
* miss some cases.
+ *
+ * If the constant term is "too large", then the constraint is rejected,
+ * where "too large" is fairly arbitrarily set to 1 << 15.
+ * We do this to avoid picking up constraints that bound a variable
+ * by a very large number, say the largest or smallest possible
+ * variable in the representation of some integer type.
*/
static isl_stat check_parallel_or_opposite(__isl_take isl_constraint *c,
void *user)
@@ -684,6 +690,15 @@ static isl_stat check_parallel_or_opposi
}
}
+ if (parallel || opposite) {
+ isl_val *v;
+
+ v = isl_val_abs(isl_constraint_get_constant_val(c));
+ if (isl_val_cmp_si(v, 1 << 15) > 0)
+ parallel = opposite = 0;
+ isl_val_free(v);
+ }
+
for (t = 0; t < 2; ++t) {
for (i = 0; i < n[t]; ++i) {
isl_val *v1, *v2;
@@ -1467,55 +1482,62 @@ __isl_give isl_ast_expr *isl_ast_build_e
return res;
}
-struct isl_expr_from_set_data {
- isl_ast_build *build;
- int first;
- isl_ast_expr *res;
-};
-
-/* Construct an isl_ast_expr that evaluates the conditions defining "bset"
- * and add it to data->res.
- * The result is simplified in terms of data->build->domain.
- */
-static isl_stat expr_from_set(__isl_take isl_basic_set *bset, void *user)
-{
- struct isl_expr_from_set_data *data = user;
- isl_ast_expr *expr;
-
- expr = isl_ast_build_expr_from_basic_set(data->build, bset);
- if (data->first)
- data->res = expr;
- else
- data->res = isl_ast_expr_or(data->res, expr);
-
- data->first = 0;
-
- if (!data->res)
- return isl_stat_error;
- return isl_stat_ok;
-}
-
/* Construct an isl_ast_expr that evaluates the conditions defining "set".
* The result is simplified in terms of build->domain.
*
* If "set" is an (obviously) empty set, then return the expression "0".
*
+ * If there are multiple disjuncts in the description of the set,
+ * then subsequent disjuncts are simplified in a context where
+ * the previous disjuncts have been removed from build->domain.
+ * In particular, constraints that ensure that there is no overlap
+ * with these previous disjuncts, can be removed.
+ *
* "set" lives in the internal schedule space.
*/
__isl_give isl_ast_expr *isl_ast_build_expr_from_set_internal(
__isl_keep isl_ast_build *build, __isl_take isl_set *set)
{
- struct isl_expr_from_set_data data = { build, 1, NULL };
+ int i, n;
+ isl_basic_set *bset;
+ isl_basic_set_list *list;
+ isl_set *domain;
+ isl_ast_expr *res;
- if (isl_set_foreach_basic_set(set, &expr_from_set, &data) < 0)
- data.res = isl_ast_expr_free(data.res);
- else if (data.first) {
+ list = isl_set_get_basic_set_list(set);
+ isl_set_free(set);
+
+ if (!list)
+ return NULL;
+ n = isl_basic_set_list_n_basic_set(list);
+ if (n == 0) {
isl_ctx *ctx = isl_ast_build_get_ctx(build);
- data.res = isl_ast_expr_from_val(isl_val_zero(ctx));
+ isl_basic_set_list_free(list);
+ return isl_ast_expr_from_val(isl_val_zero(ctx));
}
+ domain = isl_ast_build_get_domain(build);
+
+ bset = isl_basic_set_list_get_basic_set(list, 0);
+ set = isl_set_from_basic_set(isl_basic_set_copy(bset));
+ res = isl_ast_build_expr_from_basic_set(build, bset);
+
+ for (i = 1; i < n; ++i) {
+ isl_ast_expr *expr;
+
+ domain = isl_set_subtract(domain, set);
+ bset = isl_basic_set_list_get_basic_set(list, i);
+ set = isl_set_from_basic_set(isl_basic_set_copy(bset));
+ bset = isl_basic_set_gist(bset,
+ isl_set_simple_hull(isl_set_copy(domain)));
+ expr = isl_ast_build_expr_from_basic_set(build, bset);
+ res = isl_ast_expr_or(res, expr);
+ }
+
+ isl_set_free(domain);
isl_set_free(set);
- return data.res;
+ isl_basic_set_list_free(list);
+ return res;
}
/* Construct an isl_ast_expr that evaluates the conditions defining "set".
Modified: polly/trunk/lib/External/isl/isl_coalesce.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_coalesce.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_coalesce.c (original)
+++ polly/trunk/lib/External/isl/isl_coalesce.c Tue Jun 30 03:22:14 2015
@@ -1689,7 +1689,7 @@ static int shift_div(struct isl_coalesce
{
unsigned total;
- info->bmap = isl_basic_map_shift_div(info->bmap, div, shift);
+ info->bmap = isl_basic_map_shift_div(info->bmap, div, 0, shift);
if (!info->bmap)
return -1;
@@ -2464,7 +2464,7 @@ static enum isl_change coalesce_pair(int
/* Return the maximum of "a" and "b".
*/
-static inline int max(int a, int b)
+static int isl_max(int a, int b)
{
return a > b ? a : b;
}
@@ -2491,7 +2491,7 @@ static int coalesce_range(isl_ctx *ctx,
for (i = end1 - 1; i >= start1; --i) {
if (info[i].removed)
continue;
- for (j = max(i + 1, start2); j < end2; ++j) {
+ for (j = isl_max(i + 1, start2); j < end2; ++j) {
enum isl_change changed;
if (info[j].removed)
Modified: polly/trunk/lib/External/isl/isl_config.h.in
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_config.h.in?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_config.h.in (original)
+++ polly/trunk/lib/External/isl/isl_config.h.in Tue Jun 30 03:22:14 2015
@@ -44,6 +44,34 @@
to 0 if you don't. */
#undef HAVE_DECL_MP_GET_MEMORY_FUNCTIONS
+/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
+ don't. */
+#undef HAVE_DECL_SNPRINTF
+
+/* Define to 1 if you have the declaration of `strcasecmp', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRCASECMP
+
+/* Define to 1 if you have the declaration of `strncasecmp', and to 0 if you
+ don't. */
+#undef HAVE_DECL_STRNCASECMP
+
+/* Define to 1 if you have the declaration of `_BitScanForward', and to 0 if
+ you don't. */
+#undef HAVE_DECL__BITSCANFORWARD
+
+/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
+ don't. */
+#undef HAVE_DECL__SNPRINTF
+
+/* Define to 1 if you have the declaration of `_stricmp', and to 0 if you
+ don't. */
+#undef HAVE_DECL__STRICMP
+
+/* Define to 1 if you have the declaration of `_strnicmp', and to 0 if you
+ don't. */
+#undef HAVE_DECL__STRNICMP
+
/* Define to 1 if you have the declaration of `__builtin_ffs', and to 0 if you
don't. */
#undef HAVE_DECL___BUILTIN_FFS
Modified: polly/trunk/lib/External/isl/isl_config_post.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_config_post.h?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_config_post.h (original)
+++ polly/trunk/lib/External/isl/isl_config_post.h Tue Jun 30 03:22:14 2015
@@ -2,10 +2,35 @@
#define __attribute__(x)
#endif
+#if HAVE_DECL_FFS
+#include <strings.h>
+#endif
+
#if (HAVE_DECL_FFS==0) && (HAVE_DECL___BUILTIN_FFS==1)
#define ffs __builtin_ffs
#endif
+#if !HAVE_DECL_FFS && !HAVE_DECL___BUILTIN_FFS && HAVE_DECL__BITSCANFORWARD
+int isl_ffs(int i);
+#define ffs isl_ffs
+#endif
+
+#if HAVE_DECL_STRCASECMP || HAVE_DECL_STRNCASECMP
+#include <strings.h>
+#endif
+
+#if !HAVE_DECL_STRCASECMP && HAVE_DECL__STRICMP
+#define strcasecmp _stricmp
+#endif
+
+#if !HAVE_DECL_STRNCASECMP && HAVE_DECL__STRNICMP
+#define strncasecmp _strnicmp
+#endif
+
+#if !HAVE_DECL_SNPRINTF && HAVE_DECL__SNPRINTF
+#define snprintf _snprintf
+#endif
+
#ifdef GCC_WARN_UNUSED_RESULT
#define WARN_UNUSED GCC_WARN_UNUSED_RESULT
#else
Added: polly/trunk/lib/External/isl/isl_ffs.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_ffs.c?rev=241048&view=auto
==============================================================================
--- polly/trunk/lib/External/isl/isl_ffs.c (added)
+++ polly/trunk/lib/External/isl/isl_ffs.c Tue Jun 30 03:22:14 2015
@@ -0,0 +1,24 @@
+#include <isl_config.h>
+
+#if !HAVE_DECL_FFS && !HAVE_DECL___BUILTIN_FFS && HAVE_DECL__BITSCANFORWARD
+#include <intrin.h>
+
+/* Implementation of ffs in terms of _BitScanForward.
+ *
+ * ffs returns the position of the least significant bit set in i,
+ * with the least significant bit is position 1, or 0 if not bits are set.
+ *
+ * _BitScanForward returns 1 if mask is non-zero and sets index
+ * to the position of the least significant bit set in i,
+ * with the least significant bit is position 0.
+ */
+int isl_ffs(int i)
+{
+ unsigned char non_zero;
+ unsigned long index, mask = i;
+
+ non_zero = _BitScanForward(&index, mask);
+
+ return non_zero ? 1 + index : 0;
+}
+#endif
Modified: polly/trunk/lib/External/isl/isl_hash.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_hash.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_hash.c (original)
+++ polly/trunk/lib/External/isl/isl_hash.c Tue Jun 30 03:22:14 2015
@@ -8,7 +8,6 @@
*/
#include <stdlib.h>
-#include <strings.h>
#include <isl/hash.h>
#include <isl/ctx.h>
#include "isl_config.h"
Modified: polly/trunk/lib/External/isl/isl_int_sioimath.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_int_sioimath.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_int_sioimath.c (original)
+++ polly/trunk/lib/External/isl/isl_int_sioimath.c Tue Jun 30 03:22:14 2015
@@ -1,4 +1,4 @@
-#include <malloc.h>
+#include <stdlib.h>
#include <string.h>
#include <isl_int.h>
Modified: polly/trunk/lib/External/isl/isl_map.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_map.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_map.c (original)
+++ polly/trunk/lib/External/isl/isl_map.c Tue Jun 30 03:22:14 2015
@@ -9832,6 +9832,28 @@ isl_stat isl_set_foreach_basic_set(__isl
return isl_stat_ok;
}
+/* Return a list of basic sets, the union of which is equal to "set".
+ */
+__isl_give isl_basic_set_list *isl_set_get_basic_set_list(
+ __isl_keep isl_set *set)
+{
+ int i;
+ isl_basic_set_list *list;
+
+ if (!set)
+ return NULL;
+
+ list = isl_basic_set_list_alloc(isl_set_get_ctx(set), set->n);
+ for (i = 0; i < set->n; ++i) {
+ isl_basic_set *bset;
+
+ bset = isl_basic_set_copy(set->p[i]);
+ list = isl_basic_set_list_add(list, bset);
+ }
+
+ return list;
+}
+
__isl_give isl_basic_set *isl_basic_set_lift(__isl_take isl_basic_set *bset)
{
isl_space *dim;
Modified: polly/trunk/lib/External/isl/isl_map_private.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_map_private.h?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_map_private.h (original)
+++ polly/trunk/lib/External/isl/isl_map_private.h Tue Jun 30 03:22:14 2015
@@ -458,7 +458,7 @@ __isl_give isl_basic_map *isl_basic_map_
__isl_take isl_basic_map *bmap);
__isl_give isl_basic_map *isl_basic_map_shift_div(
- __isl_take isl_basic_map *bmap, int div, isl_int shift);
+ __isl_take isl_basic_map *bmap, int div, int pos, isl_int shift);
__isl_give isl_basic_map_list *isl_map_get_basic_map_list(
__isl_keep isl_map *map);
Modified: polly/trunk/lib/External/isl/isl_map_simplify.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_map_simplify.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_map_simplify.c (original)
+++ polly/trunk/lib/External/isl/isl_map_simplify.c Tue Jun 30 03:22:14 2015
@@ -12,7 +12,6 @@
* B.P. 105 - 78153 Le Chesnay, France
*/
-#include <strings.h>
#include <isl_ctx_private.h>
#include <isl_map_private.h>
#include "isl_equalities.h"
@@ -376,6 +375,80 @@ struct isl_basic_set *isl_basic_set_norm
(struct isl_basic_map *)bset);
}
+/* Assuming the variable at position "pos" has an integer coefficient
+ * in integer division "div", extract it from this integer division.
+ * "pos" is as determined by isl_basic_map_offset, i.e., pos == 0
+ * corresponds to the constant term.
+ *
+ * That is, the integer division is of the form
+ *
+ * floor((... + c * d * x_pos + ...)/d)
+ *
+ * Replace it by
+ *
+ * floor((... + 0 * x_pos + ...)/d) + c * x_pos
+ */
+static __isl_give isl_basic_map *remove_var_from_div(
+ __isl_take isl_basic_map *bmap, int div, int pos)
+{
+ isl_int shift;
+
+ isl_int_init(shift);
+ isl_int_divexact(shift, bmap->div[div][1 + pos], bmap->div[div][0]);
+ isl_int_neg(shift, shift);
+ bmap = isl_basic_map_shift_div(bmap, div, pos, shift);
+ isl_int_clear(shift);
+
+ return bmap;
+}
+
+/* Check if integer division "div" has any integral coefficient
+ * (or constant term). If so, extract them from the integer division.
+ */
+static __isl_give isl_basic_map *remove_independent_vars_from_div(
+ __isl_take isl_basic_map *bmap, int div)
+{
+ int i;
+ unsigned total = 1 + isl_basic_map_total_dim(bmap);
+
+ for (i = 0; i < total; ++i) {
+ if (isl_int_is_zero(bmap->div[div][1 + i]))
+ continue;
+ if (!isl_int_is_divisible_by(bmap->div[div][1 + i],
+ bmap->div[div][0]))
+ continue;
+ bmap = remove_var_from_div(bmap, div, i);
+ if (!bmap)
+ break;
+ }
+
+ return bmap;
+}
+
+/* Check if any known integer division has any integral coefficient
+ * (or constant term). If so, extract them from the integer division.
+ */
+static __isl_give isl_basic_map *remove_independent_vars_from_divs(
+ __isl_take isl_basic_map *bmap)
+{
+ int i;
+
+ if (!bmap)
+ return NULL;
+ if (bmap->n_div == 0)
+ return bmap;
+
+ for (i = 0; i < bmap->n_div; ++i) {
+ if (isl_int_is_zero(bmap->div[i][0]))
+ continue;
+ bmap = remove_independent_vars_from_div(bmap, i);
+ if (!bmap)
+ break;
+ }
+
+ return bmap;
+}
+
/* Remove any common factor in numerator and denominator of the div expression,
* not taking into account the constant term.
* That is, if the div is of the form
@@ -1319,6 +1392,7 @@ struct isl_basic_map *isl_basic_map_simp
if (isl_basic_map_plain_is_empty(bmap))
break;
bmap = isl_basic_map_normalize_constraints(bmap);
+ bmap = remove_independent_vars_from_divs(bmap);
bmap = normalize_div_expressions(bmap);
bmap = remove_duplicate_divs(bmap, &progress);
bmap = eliminate_unit_divs(bmap, &progress);
@@ -3479,7 +3553,10 @@ error:
return isl_basic_map_free(bmap);
}
-/* Shift the integer division at position "div" of "bmap" by "shift".
+/* Shift the integer division at position "div" of "bmap"
+ * by "shift" times the variable at position "pos".
+ * "pos" is as determined by isl_basic_map_offset, i.e., pos == 0
+ * corresponds to the constant term.
*
* That is, if the integer division has the form
*
@@ -3487,10 +3564,10 @@ error:
*
* then replace it by
*
- * floor((f(x) + shift * d)/d) - shift
+ * floor((f(x) + shift * d * x_pos)/d) - shift * x_pos
*/
__isl_give isl_basic_map *isl_basic_map_shift_div(
- __isl_take isl_basic_map *bmap, int div, isl_int shift)
+ __isl_take isl_basic_map *bmap, int div, int pos, isl_int shift)
{
int i;
unsigned total;
@@ -3501,18 +3578,18 @@ __isl_give isl_basic_map *isl_basic_map_
total = isl_basic_map_dim(bmap, isl_dim_all);
total -= isl_basic_map_dim(bmap, isl_dim_div);
- isl_int_addmul(bmap->div[div][1], shift, bmap->div[div][0]);
+ isl_int_addmul(bmap->div[div][1 + pos], shift, bmap->div[div][0]);
for (i = 0; i < bmap->n_eq; ++i) {
if (isl_int_is_zero(bmap->eq[i][1 + total + div]))
continue;
- isl_int_submul(bmap->eq[i][0],
+ isl_int_submul(bmap->eq[i][pos],
shift, bmap->eq[i][1 + total + div]);
}
for (i = 0; i < bmap->n_ineq; ++i) {
if (isl_int_is_zero(bmap->ineq[i][1 + total + div]))
continue;
- isl_int_submul(bmap->ineq[i][0],
+ isl_int_submul(bmap->ineq[i][pos],
shift, bmap->ineq[i][1 + total + div]);
}
for (i = 0; i < bmap->n_div; ++i) {
@@ -3520,7 +3597,7 @@ __isl_give isl_basic_map *isl_basic_map_
continue;
if (isl_int_is_zero(bmap->div[i][1 + 1 + total + div]))
continue;
- isl_int_submul(bmap->div[i][1],
+ isl_int_submul(bmap->div[i][1 + pos],
shift, bmap->div[i][1 + 1 + total + div]);
}
Modified: polly/trunk/lib/External/isl/isl_multi_templ.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_multi_templ.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_multi_templ.c (original)
+++ polly/trunk/lib/External/isl/isl_multi_templ.c Tue Jun 30 03:22:14 2015
@@ -869,6 +869,30 @@ __isl_give MULTI(BASE) *FN(MULTI(BASE),r
return multi;
}
+/* Given a function [B -> C], extract the function C.
+ */
+__isl_give MULTI(BASE) *FN(MULTI(BASE),factor_range)(
+ __isl_take MULTI(BASE) *multi)
+{
+ isl_space *space;
+ int total, keep;
+
+ if (!multi)
+ return NULL;
+ if (!isl_space_is_wrapping(multi->space))
+ isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
+ "not a product", return FN(MULTI(BASE),free)(multi));
+
+ space = FN(MULTI(BASE),get_space)(multi);
+ total = isl_space_dim(space, isl_dim_out);
+ space = isl_space_factor_range(space);
+ keep = isl_space_dim(space, isl_dim_out);
+ multi = FN(MULTI(BASE),drop_dims)(multi, isl_dim_out, 0, total - keep);
+ multi = FN(MULTI(BASE),reset_space)(multi, space);
+
+ return multi;
+}
+
#ifndef NO_PRODUCT
/* Given two MULTI(BASE)s A -> B and C -> D,
* construct a MULTI(BASE) [A -> C] -> [B -> D].
@@ -1092,6 +1116,25 @@ error:
return NULL;
}
+/* Add "multi2" from "multi1" and return the result.
+ *
+ * The parameters of "multi1" and "multi2" are assumed to have been aligned.
+ */
+static __isl_give MULTI(BASE) *FN(MULTI(BASE),add_aligned)(
+ __isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
+{
+ return FN(MULTI(BASE),bin_op)(multi1, multi2, &FN(EL,add));
+}
+
+/* Add "multi2" from "multi1" and return the result.
+ */
+__isl_give MULTI(BASE) *FN(MULTI(BASE),add)(__isl_take MULTI(BASE) *multi1,
+ __isl_take MULTI(BASE) *multi2)
+{
+ return FN(MULTI(BASE),align_params_multi_multi_and)(multi1, multi2,
+ &FN(MULTI(BASE),add_aligned));
+}
+
/* Subtract "multi2" from "multi1" and return the result.
*
* The parameters of "multi1" and "multi2" are assumed to have been aligned.
Modified: polly/trunk/lib/External/isl/isl_range.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_range.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_range.c (original)
+++ polly/trunk/lib/External/isl/isl_range.c Tue Jun 30 03:22:14 2015
@@ -137,16 +137,24 @@ error:
return -2;
}
+/* Return a positive ("sign" > 0) or negative ("sign" < 0) infinite polynomial
+ * with domain space "space".
+ */
+static __isl_give isl_qpolynomial *signed_infty(__isl_take isl_space *space,
+ int sign)
+{
+ if (sign > 0)
+ return isl_qpolynomial_infty_on_domain(space);
+ else
+ return isl_qpolynomial_neginfty_on_domain(space);
+}
+
static __isl_give isl_qpolynomial *bound2poly(__isl_take isl_constraint *bound,
- __isl_take isl_space *dim, unsigned pos, int sign)
+ __isl_take isl_space *space, unsigned pos, int sign)
{
- if (!bound) {
- if (sign > 0)
- return isl_qpolynomial_infty_on_domain(dim);
- else
- return isl_qpolynomial_neginfty_on_domain(dim);
- }
- isl_space_free(dim);
+ if (!bound)
+ return signed_infty(space, sign);
+ isl_space_free(space);
return isl_qpolynomial_from_constraint(bound, isl_dim_set, pos);
}
@@ -270,6 +278,52 @@ static isl_stat add_guarded_poly(__isl_t
return isl_stat_ok;
}
+/* Plug in "sub" for the variable at position "pos" in "poly".
+ *
+ * If "sub" is an infinite polynomial and if the variable actually
+ * appears in "poly", then calling isl_qpolynomial_substitute
+ * to perform the substitution may result in a NaN result.
+ * In such cases, return positive or negative infinity instead,
+ * depending on whether an upper bound or a lower bound is being computed,
+ * and mark the result as not being tight.
+ */
+static __isl_give isl_qpolynomial *plug_in_at_pos(
+ __isl_take isl_qpolynomial *poly, int pos,
+ __isl_take isl_qpolynomial *sub, struct range_data *data)
+{
+ isl_bool involves, infty;
+
+ involves = isl_qpolynomial_involves_dims(poly, isl_dim_in, pos, 1);
+ if (involves < 0)
+ goto error;
+ if (!involves) {
+ isl_qpolynomial_free(sub);
+ return poly;
+ }
+
+ infty = isl_qpolynomial_is_infty(sub);
+ if (infty >= 0 && !infty)
+ infty = isl_qpolynomial_is_neginfty(sub);
+ if (infty < 0)
+ goto error;
+ if (infty) {
+ isl_space *space = isl_qpolynomial_get_domain_space(poly);
+ data->tight = 0;
+ isl_qpolynomial_free(poly);
+ isl_qpolynomial_free(sub);
+ return signed_infty(space, data->sign);
+ }
+
+ poly = isl_qpolynomial_substitute(poly, isl_dim_in, pos, 1, &sub);
+ isl_qpolynomial_free(sub);
+
+ return poly;
+error:
+ isl_qpolynomial_free(poly);
+ isl_qpolynomial_free(sub);
+ return NULL;
+}
+
/* Given a lower and upper bound on the final variable and constraints
* on the remaining variables where these bounds are active,
* eliminate the variable from data->poly based on these bounds.
@@ -312,10 +366,8 @@ static isl_stat propagate_on_bound_pair(
isl_constraint_free(upper);
}
poly = isl_qpolynomial_copy(data->poly);
- poly = isl_qpolynomial_substitute(poly, isl_dim_in, nvar, 1, &sub);
+ poly = plug_in_at_pos(poly, nvar, sub, data);
poly = isl_qpolynomial_drop_dims(poly, isl_dim_in, nvar, 1);
-
- isl_qpolynomial_free(sub);
} else {
isl_qpolynomial *l, *u;
isl_qpolynomial *pos, *neg;
@@ -331,14 +383,11 @@ static isl_stat propagate_on_bound_pair(
pos = isl_qpolynomial_terms_of_sign(data->poly, data->signs, sign);
neg = isl_qpolynomial_terms_of_sign(data->poly, data->signs, -sign);
- pos = isl_qpolynomial_substitute(pos, isl_dim_in, nvar, 1, &u);
- neg = isl_qpolynomial_substitute(neg, isl_dim_in, nvar, 1, &l);
+ pos = plug_in_at_pos(pos, nvar, u, data);
+ neg = plug_in_at_pos(neg, nvar, l, data);
poly = isl_qpolynomial_add(pos, neg);
poly = isl_qpolynomial_drop_dims(poly, isl_dim_in, nvar, 1);
-
- isl_qpolynomial_free(u);
- isl_qpolynomial_free(l);
}
if (isl_basic_set_dim(bset, isl_dim_set) == 0)
Modified: polly/trunk/lib/External/isl/isl_schedule_band.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_schedule_band.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_schedule_band.c (original)
+++ polly/trunk/lib/External/isl/isl_schedule_band.c Tue Jun 30 03:22:14 2015
@@ -950,6 +950,61 @@ error:
return NULL;
}
+/* Reduce the partial schedule of "band" modulo the factors in "mv".
+ */
+__isl_give isl_schedule_band *isl_schedule_band_mod(
+ __isl_take isl_schedule_band *band, __isl_take isl_multi_val *mv)
+{
+ band = isl_schedule_band_cow(band);
+ if (!band || !mv)
+ goto error;
+ band->mupa = isl_multi_union_pw_aff_mod_multi_val(band->mupa, mv);
+ if (!band->mupa)
+ return isl_schedule_band_free(band);
+ return band;
+error:
+ isl_schedule_band_free(band);
+ isl_multi_val_free(mv);
+ return NULL;
+}
+
+/* Shift the partial schedule of "band" by "shift" after checking
+ * that the domain of the partial schedule would not be affected
+ * by this shift.
+ */
+__isl_give isl_schedule_band *isl_schedule_band_shift(
+ __isl_take isl_schedule_band *band,
+ __isl_take isl_multi_union_pw_aff *shift)
+{
+ isl_union_set *dom1, *dom2;
+ isl_bool subset;
+
+ band = isl_schedule_band_cow(band);
+ if (!band || !shift)
+ goto error;
+ dom1 = isl_multi_union_pw_aff_domain(
+ isl_multi_union_pw_aff_copy(band->mupa));
+ dom2 = isl_multi_union_pw_aff_domain(
+ isl_multi_union_pw_aff_copy(shift));
+ subset = isl_union_set_is_subset(dom1, dom2);
+ isl_union_set_free(dom1);
+ isl_union_set_free(dom2);
+ if (subset < 0)
+ goto error;
+ if (!subset)
+ isl_die(isl_schedule_band_get_ctx(band), isl_error_invalid,
+ "domain of shift needs to include domain of "
+ "partial schedule", goto error);
+ band->mupa = isl_multi_union_pw_aff_add(band->mupa, shift);
+ if (!band->mupa)
+ return isl_schedule_band_free(band);
+ return band;
+error:
+ isl_schedule_band_free(band);
+ isl_multi_union_pw_aff_free(shift);
+ return NULL;
+}
+
/* Given the schedule of a band, construct the corresponding
* schedule for the tile loops based on the given tile sizes
* and return the result.
Modified: polly/trunk/lib/External/isl/isl_schedule_band.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_schedule_band.h?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_schedule_band.h (original)
+++ polly/trunk/lib/External/isl/isl_schedule_band.h Tue Jun 30 03:22:14 2015
@@ -94,11 +94,16 @@ __isl_give isl_schedule_band *isl_schedu
__isl_take isl_schedule_band *band, __isl_take isl_multi_val *mv);
__isl_give isl_schedule_band *isl_schedule_band_scale_down(
__isl_take isl_schedule_band *band, __isl_take isl_multi_val *mv);
+__isl_give isl_schedule_band *isl_schedule_band_mod(
+ __isl_take isl_schedule_band *band, __isl_take isl_multi_val *mv);
__isl_give isl_schedule_band *isl_schedule_band_tile(
__isl_take isl_schedule_band *band, __isl_take isl_multi_val *sizes);
__isl_give isl_schedule_band *isl_schedule_band_point(
__isl_take isl_schedule_band *band, __isl_keep isl_schedule_band *tile,
__isl_take isl_multi_val *sizes);
+__isl_give isl_schedule_band *isl_schedule_band_shift(
+ __isl_take isl_schedule_band *band,
+ __isl_take isl_multi_union_pw_aff *shift);
__isl_give isl_schedule_band *isl_schedule_band_drop(
__isl_take isl_schedule_band *band, int pos, int n);
__isl_give isl_schedule_band *isl_schedule_band_gist(
Modified: polly/trunk/lib/External/isl/isl_schedule_node.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_schedule_node.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_schedule_node.c (original)
+++ polly/trunk/lib/External/isl/isl_schedule_node.c Tue Jun 30 03:22:14 2015
@@ -1764,6 +1764,91 @@ error:
return NULL;
}
+/* Reduce the partial schedule of the band node "node"
+ * modulo the factors in "mv".
+ */
+__isl_give isl_schedule_node *isl_schedule_node_band_mod(
+ __isl_take isl_schedule_node *node, __isl_take isl_multi_val *mv)
+{
+ isl_schedule_tree *tree;
+ isl_bool anchored;
+
+ if (!node || !mv)
+ goto error;
+ if (check_space_multi_val(node, mv) < 0)
+ goto error;
+ anchored = isl_schedule_node_is_subtree_anchored(node);
+ if (anchored < 0)
+ goto error;
+ if (anchored)
+ isl_die(isl_schedule_node_get_ctx(node), isl_error_invalid,
+ "cannot perform mod on band node with anchored subtree",
+ goto error);
+
+ tree = isl_schedule_node_get_tree(node);
+ tree = isl_schedule_tree_band_mod(tree, mv);
+ return isl_schedule_node_graft_tree(node, tree);
+error:
+ isl_multi_val_free(mv);
+ isl_schedule_node_free(node);
+ return NULL;
+}
+
+/* Make sure that that spaces of "node" and "mupa" are the same.
+ * Return isl_stat_error on error, reporting the error to the user.
+ */
+static isl_stat check_space_multi_union_pw_aff(
+ __isl_keep isl_schedule_node *node,
+ __isl_keep isl_multi_union_pw_aff *mupa)
+{
+ isl_space *node_space, *mupa_space;
+ isl_bool equal;
+
+ node_space = isl_schedule_node_band_get_space(node);
+ mupa_space = isl_multi_union_pw_aff_get_space(mupa);
+ equal = isl_space_tuple_is_equal(node_space, isl_dim_set,
+ mupa_space, isl_dim_set);
+ isl_space_free(mupa_space);
+ isl_space_free(node_space);
+ if (equal < 0)
+ return isl_stat_error;
+ if (!equal)
+ isl_die(isl_schedule_node_get_ctx(node), isl_error_invalid,
+ "spaces don't match", return isl_stat_error);
+
+ return isl_stat_ok;
+}
+
+/* Shift the partial schedule of the band node "node" by "shift".
+ */
+__isl_give isl_schedule_node *isl_schedule_node_band_shift(
+ __isl_take isl_schedule_node *node,
+ __isl_take isl_multi_union_pw_aff *shift)
+{
+ isl_schedule_tree *tree;
+ int anchored;
+
+ if (!node || !shift)
+ goto error;
+ if (check_space_multi_union_pw_aff(node, shift) < 0)
+ goto error;
+ anchored = isl_schedule_node_is_subtree_anchored(node);
+ if (anchored < 0)
+ goto error;
+ if (anchored)
+ isl_die(isl_schedule_node_get_ctx(node), isl_error_invalid,
+ "cannot shift band node with anchored subtree",
+ goto error);
+
+ tree = isl_schedule_node_get_tree(node);
+ tree = isl_schedule_tree_band_shift(tree, shift);
+ return isl_schedule_node_graft_tree(node, tree);
+error:
+ isl_multi_union_pw_aff_free(shift);
+ isl_schedule_node_free(node);
+ return NULL;
+}
+
/* Tile "node" with tile sizes "sizes".
*
* The current node is replaced by two nested nodes corresponding
Modified: polly/trunk/lib/External/isl/isl_schedule_tree.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_schedule_tree.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_schedule_tree.c (original)
+++ polly/trunk/lib/External/isl/isl_schedule_tree.c Tue Jun 30 03:22:14 2015
@@ -2032,6 +2032,60 @@ error:
return NULL;
}
+/* Reduce the partial schedule of the band root node of "tree"
+ * modulo the factors in "mv".
+ */
+__isl_give isl_schedule_tree *isl_schedule_tree_band_mod(
+ __isl_take isl_schedule_tree *tree, __isl_take isl_multi_val *mv)
+{
+ if (!tree || !mv)
+ goto error;
+ if (tree->type != isl_schedule_node_band)
+ isl_die(isl_schedule_tree_get_ctx(tree), isl_error_invalid,
+ "not a band node", goto error);
+
+ tree = isl_schedule_tree_cow(tree);
+ if (!tree)
+ goto error;
+
+ tree->band = isl_schedule_band_mod(tree->band, mv);
+ if (!tree->band)
+ return isl_schedule_tree_free(tree);
+
+ return tree;
+error:
+ isl_schedule_tree_free(tree);
+ isl_multi_val_free(mv);
+ return NULL;
+}
+
+/* Shift the partial schedule of the band root node of "tree" by "shift".
+ */
+__isl_give isl_schedule_tree *isl_schedule_tree_band_shift(
+ __isl_take isl_schedule_tree *tree,
+ __isl_take isl_multi_union_pw_aff *shift)
+{
+ if (!tree || !shift)
+ goto error;
+ if (tree->type != isl_schedule_node_band)
+ isl_die(isl_schedule_tree_get_ctx(tree), isl_error_invalid,
+ "not a band node", goto error);
+
+ tree = isl_schedule_tree_cow(tree);
+ if (!tree)
+ goto error;
+
+ tree->band = isl_schedule_band_shift(tree->band, shift);
+ if (!tree->band)
+ return isl_schedule_tree_free(tree);
+
+ return tree;
+error:
+ isl_schedule_tree_free(tree);
+ isl_multi_union_pw_aff_free(shift);
+ return NULL;
+}
+
/* Given two trees with sequence roots, replace the child at position
* "pos" of "tree" with the children of "child".
*/
Modified: polly/trunk/lib/External/isl/isl_schedule_tree.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_schedule_tree.h?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_schedule_tree.h (original)
+++ polly/trunk/lib/External/isl/isl_schedule_tree.h Tue Jun 30 03:22:14 2015
@@ -223,8 +223,13 @@ __isl_give isl_schedule_tree *isl_schedu
__isl_take isl_schedule_tree *tree, __isl_take isl_multi_val *mv);
__isl_give isl_schedule_tree *isl_schedule_tree_band_scale_down(
__isl_take isl_schedule_tree *tree, __isl_take isl_multi_val *mv);
+__isl_give isl_schedule_tree *isl_schedule_tree_band_mod(
+ __isl_take isl_schedule_tree *tree, __isl_take isl_multi_val *mv);
__isl_give isl_schedule_tree *isl_schedule_tree_band_tile(
__isl_take isl_schedule_tree *tree, __isl_take isl_multi_val *sizes);
+__isl_give isl_schedule_tree *isl_schedule_tree_band_shift(
+ __isl_take isl_schedule_tree *tree,
+ __isl_take isl_multi_union_pw_aff *shift);
__isl_give isl_schedule_tree *isl_schedule_tree_band_split(
__isl_take isl_schedule_tree *tree, int pos);
__isl_give isl_schedule_tree *isl_schedule_tree_band_gist(
Modified: polly/trunk/lib/External/isl/isl_space.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_space.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_space.c (original)
+++ polly/trunk/lib/External/isl/isl_space.c Tue Jun 30 03:22:14 2015
@@ -1288,15 +1288,6 @@ __isl_give isl_space *isl_space_factor_d
return space;
}
-/* Given a space of the form [A -> B] -> [C -> D], return the space B -> D.
- */
-__isl_give isl_space *isl_space_factor_range(__isl_take isl_space *space)
-{
- space = isl_space_domain_factor_range(space);
- space = isl_space_range_factor_range(space);
- return space;
-}
-
/* Given a space of the form [A -> B] -> C, return the space A -> C.
*/
__isl_give isl_space *isl_space_domain_factor_domain(
@@ -1413,19 +1404,18 @@ error:
return NULL;
}
-/* Given a space of the form A -> [B -> C], return the space A -> C.
+/* Internal function that selects the range of the map that is
+ * embedded in either a set space or the range of a map space.
+ * In particular, given a space of the form [A -> B], return the space B.
+ * Given a space of the form A -> [B -> C], return the space A -> C.
*/
-__isl_give isl_space *isl_space_range_factor_range(
- __isl_take isl_space *space)
+static __isl_give isl_space *range_factor_range(__isl_take isl_space *space)
{
isl_space *nested;
isl_space *range;
if (!space)
return NULL;
- if (!isl_space_range_is_wrapping(space))
- isl_die(isl_space_get_ctx(space), isl_error_invalid,
- "range not a product", return isl_space_free(space));
nested = space->nested[1];
range = isl_space_copy(space);
@@ -1451,6 +1441,47 @@ error:
return NULL;
}
+/* Given a space of the form A -> [B -> C], return the space A -> C.
+ */
+__isl_give isl_space *isl_space_range_factor_range(
+ __isl_take isl_space *space)
+{
+ if (!space)
+ return NULL;
+ if (!isl_space_range_is_wrapping(space))
+ isl_die(isl_space_get_ctx(space), isl_error_invalid,
+ "range not a product", return isl_space_free(space));
+
+ return range_factor_range(space);
+}
+
+/* Given a space of the form [A -> B], return the space B.
+ */
+static __isl_give isl_space *set_factor_range(__isl_take isl_space *space)
+{
+ if (!space)
+ return NULL;
+ if (!isl_space_is_wrapping(space))
+ isl_die(isl_space_get_ctx(space), isl_error_invalid,
+ "not a product", return isl_space_free(space));
+
+ return range_factor_range(space);
+}
+
+/* Given a space of the form [A -> B] -> [C -> D], return the space B -> D.
+ * Given a space of the form [A -> B], return the space B.
+ */
+__isl_give isl_space *isl_space_factor_range(__isl_take isl_space *space)
+{
+ if (!space)
+ return NULL;
+ if (isl_space_is_set(space))
+ return set_factor_range(space);
+ space = isl_space_domain_factor_range(space);
+ space = isl_space_range_factor_range(space);
+ return space;
+}
+
__isl_give isl_space *isl_space_map_from_set(__isl_take isl_space *dim)
{
isl_ctx *ctx;
Modified: polly/trunk/lib/External/isl/isl_stream.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_stream.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_stream.c (original)
+++ polly/trunk/lib/External/isl/isl_stream.c Tue Jun 30 03:22:14 2015
@@ -9,7 +9,6 @@
#include <ctype.h>
#include <string.h>
-#include <strings.h>
#include <isl/ctx.h>
#include <isl_stream_private.h>
#include <isl/map.h>
Modified: polly/trunk/lib/External/isl/isl_test.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_test.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_test.c (original)
+++ polly/trunk/lib/External/isl/isl_test.c Tue Jun 30 03:22:14 2015
@@ -2606,33 +2606,30 @@ static int test_union(isl_ctx *ctx)
/* Check that computing a bound of a non-zero polynomial over an unbounded
* domain does not produce a rational value.
- * Ideally, we want the value to be infinity, but we accept NaN for now.
- * We certainly do not want to obtain the value zero.
+ * In particular, check that the upper bound is infinity.
*/
static int test_bound_unbounded_domain(isl_ctx *ctx)
{
const char *str;
- isl_set *dom;
- isl_point *pnt;
isl_pw_qpolynomial *pwqp;
- isl_pw_qpolynomial_fold *pwf;
- isl_val *v;
- int is_rat;
+ isl_pw_qpolynomial_fold *pwf, *pwf2;
+ isl_bool equal;
str = "{ [m,n] -> -m * n }";
pwqp = isl_pw_qpolynomial_read_from_str(ctx, str);
pwf = isl_pw_qpolynomial_bound(pwqp, isl_fold_max, NULL);
- dom = isl_pw_qpolynomial_fold_domain(isl_pw_qpolynomial_fold_copy(pwf));
- pnt = isl_set_sample_point(dom);
- v = isl_pw_qpolynomial_fold_eval(pwf, pnt);
- is_rat = isl_val_is_rat(v);
- isl_val_free(v);
+ str = "{ infty }";
+ pwqp = isl_pw_qpolynomial_read_from_str(ctx, str);
+ pwf2 = isl_pw_qpolynomial_bound(pwqp, isl_fold_max, NULL);
+ equal = isl_pw_qpolynomial_fold_plain_is_equal(pwf, pwf2);
+ isl_pw_qpolynomial_fold_free(pwf);
+ isl_pw_qpolynomial_fold_free(pwf2);
- if (is_rat < 0)
+ if (equal < 0)
return -1;
- if (is_rat)
+ if (!equal)
isl_die(ctx, isl_error_unknown,
- "unexpected rational value", return -1);
+ "expecting infinite polynomial bound", return -1);
return 0;
}
Modified: polly/trunk/lib/External/isl/isl_test_int.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_test_int.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_test_int.c (original)
+++ polly/trunk/lib/External/isl/isl_test_int.c Tue Jun 30 03:22:14 2015
@@ -75,12 +75,13 @@ static void int_test_single_value()
static void invoke_alternate_representations_2args(char *arg1, char *arg2,
void (*fn)(isl_int, isl_int))
{
+ int j;
isl_int int1, int2;
isl_int_init(int1);
isl_int_init(int2);
- for (int j = 0; j < 4; ++j) {
+ for (j = 0; j < 4; ++j) {
isl_int_read(int1, arg1);
isl_int_read(int2, arg2);
@@ -104,13 +105,14 @@ static void invoke_alternate_representat
static void invoke_alternate_representations_3args(char *arg1, char *arg2,
char *arg3, void (*fn)(isl_int, isl_int, isl_int))
{
+ int j;
isl_int int1, int2, int3;
isl_int_init(int1);
isl_int_init(int2);
isl_int_init(int3);
- for (int j = 0; j < 8; ++j) {
+ for (j = 0; j < 8; ++j) {
isl_int_read(int1, arg1);
isl_int_read(int2, arg2);
isl_int_read(int3, arg3);
Modified: polly/trunk/lib/External/isl/isl_val.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_val.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_val.c (original)
+++ polly/trunk/lib/External/isl/isl_val.c Tue Jun 30 03:22:14 2015
@@ -323,6 +323,20 @@ long isl_val_get_den_si(__isl_keep isl_v
return isl_int_get_si(v->d);
}
+/* Extract the denominator of a rational value "v" as an isl_val.
+ *
+ * If "v" is not a rational value, then the result is undefined.
+ */
+__isl_give isl_val *isl_val_get_den_val(__isl_keep isl_val *v)
+{
+ if (!v)
+ return NULL;
+ if (!isl_val_is_rat(v))
+ isl_die(isl_val_get_ctx(v), isl_error_invalid,
+ "expecting rational value", return NULL);
+ return isl_val_int_from_isl_int(isl_val_get_ctx(v), v->d);
+}
+
/* Return an approximation of "v" as a double.
*/
double isl_val_get_d(__isl_keep isl_val *v)
Modified: polly/trunk/lib/External/isl/ltmain.sh
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/ltmain.sh?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/ltmain.sh (original)
+++ polly/trunk/lib/External/isl/ltmain.sh Tue Jun 30 03:22:14 2015
@@ -70,7 +70,7 @@
# compiler: $LTCC
# compiler flags: $LTCFLAGS
# linker: $LD (gnu? $with_gnu_ld)
-# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.11
+# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1.10ubuntu1
# automake: $automake_version
# autoconf: $autoconf_version
#
@@ -80,7 +80,7 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION="2.4.2 Debian-2.4.2-1.11"
+VERSION="2.4.2 Debian-2.4.2-1.10ubuntu1"
TIMESTAMP=""
package_revision=1.3337
Modified: polly/trunk/lib/External/isl/missing
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/missing?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
(empty)
Propchange: polly/trunk/lib/External/isl/missing
------------------------------------------------------------------------------
svn:executable = *
Modified: polly/trunk/lib/External/isl/pip.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/pip.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/pip.c (original)
+++ polly/trunk/lib/External/isl/pip.c Tue Jun 30 03:22:14 2015
@@ -9,7 +9,6 @@
#include <assert.h>
#include <string.h>
-#include <strings.h>
#include <isl_map_private.h>
#include <isl/aff.h>
#include <isl/set.h>
@@ -22,6 +21,7 @@
#include <isl_point_private.h>
#include <isl_vec_private.h>
#include <isl/options.h>
+#include <isl_config.h>
/* The input of this program is the same as that of the "example" program
* from the PipLib distribution, except that the "big parameter column"
Modified: polly/trunk/lib/External/isl/test-driver
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test-driver?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
(empty)
Propchange: polly/trunk/lib/External/isl/test-driver
------------------------------------------------------------------------------
svn:executable = *
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/cloog/faber.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/cloog/faber.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/cloog/faber.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/cloog/faber.c Tue Jun 30 03:22:14 2015
@@ -86,13 +86,13 @@
S1(c0, c1, c2);
}
if (c0 >= 79 && c0 % 14 >= 9) {
- for (int c2 = max((c0 - 70) / 14 + 24, (c0 - 70) / 14 - (3 * c0 + 14) / 14 + 49); c2 <= (c0 - 70) / 14 - (3 * c0 + 17) / 14 + 56; c2 += 1)
+ for (int c2 = max(c0 / 14 + 19, -((3 * c0 + 14) / 14) + c0 / 14 + 44); c2 <= -((3 * c0 + 17) / 14) + c0 / 14 + 51; c2 += 1)
S1(c0, c0 / 14 - 5, c2);
} else if (c0 <= 69 && c0 % 14 >= 9) {
if (c0 <= 41)
S7(c0, -3, 6);
S6(c0, c0 / 14 - 5, 8);
- for (int c2 = -((-c0 + 83) / 14) - (3 * c0 + 14) / 14 + 49; c2 <= -((-c0 + 83) / 14) - (3 * c0 + 17) / 14 + 56; c2 += 1)
+ for (int c2 = -((3 * c0 + 14) / 14) + c0 / 14 + 44; c2 <= -((3 * c0 + 17) / 14) + c0 / 14 + 51; c2 += 1)
S1(c0, c0 / 14 - 5, c2);
}
for (int c1 = (c0 + 5) / 14 - 5; c1 < 0; c1 += 1) {
Added: polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.c?rev=241048&view=auto
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.c (added)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.c Tue Jun 30 03:22:14 2015
@@ -0,0 +1,34 @@
+{
+ for (int c0 = 0; c0 < n - 31; c0 += 32)
+ for (int c1 = 0; c1 <= n; c1 += 32) {
+ if (n >= c1 + 32) {
+ for (int c2 = 0; c2 <= 31; c2 += 1)
+ for (int c3 = 0; c3 <= 31; c3 += 1)
+ S_1(c0 + c2, c1 + c3);
+ } else
+ for (int c2 = 0; c2 <= 31; c2 += 1) {
+ for (int c3 = 0; c3 < n - c1; c3 += 1)
+ S_1(c0 + c2, c1 + c3);
+ S_2(c0 + c2);
+ }
+ }
+ if (n >= 32) {
+ for (int c1 = 0; c1 < n; c1 += 32) {
+ if (n >= c1 + 32) {
+ for (int c2 = 0; c2 < n % 32; c2 += 1)
+ for (int c3 = 0; c3 <= 31; c3 += 1)
+ S_1(-((n - 1) % 32) + n + c2 - 1, c1 + c3);
+ } else
+ for (int c2 = 0; c2 < n - c1; c2 += 1) {
+ for (int c3 = 0; c3 < n - c1; c3 += 1)
+ S_1(c1 + c2, c1 + c3);
+ S_2(c1 + c2);
+ }
+ }
+ } else
+ for (int c2 = 0; c2 < n; c2 += 1) {
+ for (int c3 = 0; c3 < n; c3 += 1)
+ S_1(c2, c3);
+ S_2(c2);
+ }
+}
Added: polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.st
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.st?rev=241048&view=auto
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.st (added)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.st Tue Jun 30 03:22:14 2015
@@ -0,0 +1,16 @@
+# Check that no expressions of the form ((-n + 2147483648) % 32) are produced.
+domain: "[n] -> { S_2[i] : i >= 0 and i <= -1 + n; S_1[i, j] : j >= 0 and j <= -1 + n and i >= 0 and i <= -1 + n }"
+child:
+ context: "[n] -> { [] : n <= 2147483647 and n >= 0 }"
+ child:
+ schedule: "[n] -> [{ S_1[i, j] -> [(32*floor((i)/32))]; S_2[i] -> [(32*floor((i)/32))] }, { S_1[i, j] -> [(32*floor((j)/32))]; S_2[i] -> [(32*floor((n)/32))] }]"
+ permutable: 1
+ options: "[n] -> { atomic[i0] : i0 >= 0 and i0 <= 1; isolate[[] -> [i0, i1]] : (exists (e0 = floor((i0)/32), e1 = floor((i1)/32): 32e0 = i0 and 32e1 = i1 and i0 >= 0 and i0 <= -32 + n and i1 >= 0 and i1 <= n)) or (exists (e0 = floor((i0)/32), e1 = floor((i1)/32): 32e0 = i0 and 32e1 = i1 and i0 >= 0 and i0 <= -32 + n and i1 >= -31 + n and i1 <= -31 + 2n)) }"
+ child:
+ schedule: "[n] -> [{ S_1[i, j] -> [(i - 32*floor((i)/32))]; S_2[i] -> [(i - 32*floor((i)/32))] }, { S_1[i, j] -> [(j - 32*floor((j)/32))]; S_2[i] -> [(n - 32*floor((n)/32))] }]"
+ permutable: 1
+ options: "{ separate[i0] : i0 >= 0 and i0 <= 1 }"
+ child:
+ sequence:
+ - filter: "[n] -> { S_1[i, j] }"
+ - filter: "[n] -> { S_2[i] }"
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/omega/iter9-0.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/omega/iter9-0.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/omega/iter9-0.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/omega/iter9-0.c Tue Jun 30 03:22:14 2015
@@ -6,6 +6,6 @@ for (int c0 = 1; c0 <= 15; c0 += 1) {
s2(c0);
s1(c0);
}
- if (((-exprVar1 + 15) % 8) + c0 <= 15 || (c0 >= exprVar1 + 1 && (exprVar1 - c0 + 1) % 8 == 0))
+ if (((-exprVar1 + 15) % 8) + c0 <= 15 || (c0 >= 9 && (exprVar1 - c0 + 1) % 8 == 0))
s5(c0);
}
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/unroll4.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/unroll4.c?rev=241048&r1=241047&r2=241048&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/unroll4.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/unroll4.c Tue Jun 30 03:22:14 2015
@@ -4,7 +4,7 @@
write_shared_A(3, (-t1 / 3) + 4, t2 + 32);
{
int c3 = t2 >= 2 && ((t1 + 3) % 4) + 1 >= t2 ? t2 + 32 : ((t2 + 30) % 32) + 2;
- if (c3 == t2 + 32 || (c3 == t2 && t2 >= ((t1 + 3) % 4) + ((t2 - 1) % 2) + 2))
+ if (c3 == t2 + 32 || t2 >= ((t1 + 3) % 4) + ((t2 + 1) % 2) + 2)
write_shared_A(3, ((t1 + 3) % 4) + 5, c3);
}
if (t1 >= 1 && t2 >= t1 + 1 && t2 <= 4)
@@ -14,7 +14,7 @@
write_shared_A(4, (-t1 / 3) + 4, t2 + 32);
{
int c3 = t2 >= 2 && ((t1 + 3) % 4) + 1 >= t2 ? t2 + 32 : ((t2 + 30) % 32) + 2;
- if (c3 == t2 + 32 || (c3 == t2 && t2 >= ((t1 + 3) % 4) + ((t2 - 1) % 2) + 2))
+ if (c3 == t2 + 32 || t2 >= ((t1 + 3) % 4) + ((t2 + 1) % 2) + 2)
write_shared_A(4, ((t1 + 3) % 4) + 5, c3);
}
if (t1 >= 1 && t2 >= t1 + 1 && t2 <= 4)
More information about the llvm-commits
mailing list