[polly] r257898 - Update to ISL 0.16.1
Michael Kruse via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 15 07:54:49 PST 2016
Author: meinersbur
Date: Fri Jan 15 09:54:45 2016
New Revision: 257898
URL: http://llvm.org/viewvc/llvm-project?rev=257898&view=rev
Log:
Update to ISL 0.16.1
Added:
polly/trunk/lib/External/isl/isl_output_private.h
Modified:
polly/trunk/lib/External/isl/AUTHORS
polly/trunk/lib/External/isl/ChangeLog
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/configure
polly/trunk/lib/External/isl/configure.ac
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/aff_type.h
polly/trunk/lib/External/isl/include/isl/ctx.h
polly/trunk/lib/External/isl/include/isl/flow.h
polly/trunk/lib/External/isl/include/isl/map.h
polly/trunk/lib/External/isl/include/isl/multi.h
polly/trunk/lib/External/isl/include/isl/point.h
polly/trunk/lib/External/isl/include/isl/polynomial.h
polly/trunk/lib/External/isl/include/isl/schedule.h
polly/trunk/lib/External/isl/include/isl/schedule_node.h
polly/trunk/lib/External/isl/include/isl/schedule_type.h
polly/trunk/lib/External/isl/include/isl/set.h
polly/trunk/lib/External/isl/include/isl/space.h
polly/trunk/lib/External/isl/include/isl/union_map.h
polly/trunk/lib/External/isl/include/isl/union_set.h
polly/trunk/lib/External/isl/include/isl/val.h
polly/trunk/lib/External/isl/interface/all.h
polly/trunk/lib/External/isl/isl_aff.c
polly/trunk/lib/External/isl/isl_affine_hull.c
polly/trunk/lib/External/isl/isl_ast_codegen.c
polly/trunk/lib/External/isl/isl_coalesce.c
polly/trunk/lib/External/isl/isl_config.h.in
polly/trunk/lib/External/isl/isl_convex_hull.c
polly/trunk/lib/External/isl/isl_flow.c
polly/trunk/lib/External/isl/isl_input.c
polly/trunk/lib/External/isl/isl_local_space.c
polly/trunk/lib/External/isl/isl_local_space_private.h
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_mat.c
polly/trunk/lib/External/isl/isl_morph.c
polly/trunk/lib/External/isl/isl_multi_templ.c
polly/trunk/lib/External/isl/isl_output.c
polly/trunk/lib/External/isl/isl_point.c
polly/trunk/lib/External/isl/isl_printer.c
polly/trunk/lib/External/isl/isl_printer_private.h
polly/trunk/lib/External/isl/isl_schedule.c
polly/trunk/lib/External/isl/isl_schedule_node.c
polly/trunk/lib/External/isl/isl_schedule_node_private.h
polly/trunk/lib/External/isl/isl_scheduler.c
polly/trunk/lib/External/isl/isl_space.c
polly/trunk/lib/External/isl/isl_tab.c
polly/trunk/lib/External/isl/isl_test.c
polly/trunk/lib/External/isl/isl_transitive_closure.c
polly/trunk/lib/External/isl/isl_union_map.c
polly/trunk/lib/External/isl/isl_union_templ.c
polly/trunk/lib/External/isl/print_templ.c
polly/trunk/lib/External/isl/test_inputs/codegen/cloog/dealII.c
polly/trunk/lib/External/isl/test_inputs/codegen/cloog/faber.c
polly/trunk/lib/External/isl/test_inputs/codegen/cloog/jacobi-shared.c
polly/trunk/lib/External/isl/test_inputs/codegen/cloog/reservoir-liu-zhuge1.c
polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.c
polly/trunk/lib/External/isl/test_inputs/codegen/omega/dagstuhl1-1.c
polly/trunk/lib/External/isl/test_inputs/codegen/omega/lefur03-0.c
polly/trunk/lib/External/isl/test_inputs/codegen/omega/lefur04-0.c
polly/trunk/lib/External/isl/test_inputs/codegen/omega/p.delft2-0.c
polly/trunk/lib/External/isl/test_inputs/codegen/omega/ts1d-check0-0.c
polly/trunk/lib/External/isl/test_inputs/codegen/pldi2012/figure8_b.c
polly/trunk/lib/External/isl/test_inputs/codegen/redundant.c
polly/trunk/lib/External/isl/test_inputs/codegen/separate2.c
polly/trunk/lib/External/isl/test_inputs/codegen/separation_class2.c
polly/trunk/lib/External/isl/test_inputs/codegen/unroll3.c
polly/trunk/lib/External/isl/test_inputs/codegen/unroll4.c
polly/trunk/test/DependenceInfo/computeout.ll
polly/trunk/test/DependenceInfo/do_pluto_matmult.ll
polly/trunk/test/DependenceInfo/reduction_complex_location.ll
polly/trunk/test/DependenceInfo/reduction_dependences_equal_non_reduction_dependences.ll
polly/trunk/test/DependenceInfo/reduction_mixed_reduction_and_non_reduction_dependences.ll
polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum.ll
polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum_2.ll
polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum_3.ll
polly/trunk/test/DependenceInfo/reduction_multiple_reductions.ll
polly/trunk/test/DependenceInfo/reduction_multiple_reductions_2.ll
polly/trunk/test/DependenceInfo/reduction_partially_escaping_intermediate_in_other_stmt.ll
polly/trunk/test/DependenceInfo/reduction_privatization_deps.ll
polly/trunk/test/DependenceInfo/reduction_privatization_deps_2.ll
polly/trunk/test/DependenceInfo/reduction_privatization_deps_3.ll
polly/trunk/test/DependenceInfo/reduction_privatization_deps_4.ll
polly/trunk/test/DependenceInfo/reduction_privatization_deps_5.ll
polly/trunk/test/DependenceInfo/reduction_simple_iv.ll
polly/trunk/test/DependenceInfo/reduction_simple_iv_debug_wrapped_dependences.ll
polly/trunk/test/DependenceInfo/reduction_simple_privatization_deps_2.ll
polly/trunk/test/DependenceInfo/reduction_simple_privatization_deps_w_parameter.ll
polly/trunk/test/DependenceInfo/reduction_two_reductions_different_rloops.ll
polly/trunk/test/DependenceInfo/sequential_loops.ll
polly/trunk/test/Isl/CodeGen/exprModDiv.ll
polly/trunk/test/Isl/CodeGen/inner_scev_sdiv_in_lb.ll
polly/trunk/test/Isl/CodeGen/invariant_load_escaping_second_scop.ll
polly/trunk/test/ScheduleOptimizer/full_partial_tile_separation.ll
polly/trunk/test/ScopInfo/20111108-Parameter-not-detected.ll
polly/trunk/test/ScopInfo/NonAffine/div_backedge.ll
polly/trunk/test/ScopInfo/NonAffine/div_domain.ll
polly/trunk/test/ScopInfo/NonAffine/modulo_backedge.ll
polly/trunk/test/ScopInfo/NonAffine/modulo_domain.ll
polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_1.ll
polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_2.ll
polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_3.ll
polly/trunk/test/ScopInfo/NonAffine/non_affine_access_with_range_2.ll
polly/trunk/test/ScopInfo/NonAffine/non_affine_but_sdiv.ll
polly/trunk/test/ScopInfo/NonAffine/non_affine_but_srem.ll
polly/trunk/test/ScopInfo/NonAffine/non_affine_conditional_surrounding_affine_loop.ll
polly/trunk/test/ScopInfo/NonAffine/non_affine_conditional_surrounding_non_affine_loop.ll
polly/trunk/test/ScopInfo/NonAffine/non_affine_float_compare.ll
polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_condition.ll
polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll
polly/trunk/test/ScopInfo/NonAffine/non_affine_parametric_loop.ll
polly/trunk/test/ScopInfo/assume_gep_bounds_2.ll
polly/trunk/test/ScopInfo/cfg_consequences.ll
polly/trunk/test/ScopInfo/complex-loop-nesting.ll
polly/trunk/test/ScopInfo/cond_constant_in_loop.ll
polly/trunk/test/ScopInfo/eager-binary-and-or-conditions.ll
polly/trunk/test/ScopInfo/exit_phi_accesses-2.ll
polly/trunk/test/ScopInfo/exit_phi_accesses.ll
polly/trunk/test/ScopInfo/intra-non-affine-stmt-phi-node.ll
polly/trunk/test/ScopInfo/intra_and_inter_bb_scalar_dep.ll
polly/trunk/test/ScopInfo/invariant-loads-leave-read-only-statements.ll
polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_escaping.ll
polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_same_pointer.ll
polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_same_pointer_escaping.ll
polly/trunk/test/ScopInfo/invariant_loads_complicated_dependences.ll
polly/trunk/test/ScopInfo/invariant_loop_bounds.ll
polly/trunk/test/ScopInfo/invariant_same_loop_bound_multiple_times-1.ll
polly/trunk/test/ScopInfo/invariant_same_loop_bound_multiple_times-2.ll
polly/trunk/test/ScopInfo/isl_trip_count_01.ll
polly/trunk/test/ScopInfo/isl_trip_count_03.ll
polly/trunk/test/ScopInfo/isl_trip_count_multiple_exiting_blocks.ll
polly/trunk/test/ScopInfo/long-sequence-of-error-blocks.ll
polly/trunk/test/ScopInfo/loop_affine_bound_0.ll
polly/trunk/test/ScopInfo/loop_affine_bound_1.ll
polly/trunk/test/ScopInfo/loop_affine_bound_2.ll
polly/trunk/test/ScopInfo/loop_carry.ll
polly/trunk/test/ScopInfo/many-scalar-dependences.ll
polly/trunk/test/ScopInfo/multidim_2d_outer_parametric_offset.ll
polly/trunk/test/ScopInfo/multidim_2d_parametric_array_static_loop_bounds.ll
polly/trunk/test/ScopInfo/multidim_3d_parametric_array_static_loop_bounds.ll
polly/trunk/test/ScopInfo/multidim_fixedsize_different_dimensionality.ll
polly/trunk/test/ScopInfo/multidim_fortran_2d_params.ll
polly/trunk/test/ScopInfo/multidim_fortran_srem.ll
polly/trunk/test/ScopInfo/multidim_ivs_and_integer_offsets_3d.ll
polly/trunk/test/ScopInfo/multidim_ivs_and_parameteric_offsets_3d.ll
polly/trunk/test/ScopInfo/multidim_nested_start_integer.ll
polly/trunk/test/ScopInfo/multidim_only_ivs_2d.ll
polly/trunk/test/ScopInfo/multidim_only_ivs_3d.ll
polly/trunk/test/ScopInfo/multidim_only_ivs_3d_cast.ll
polly/trunk/test/ScopInfo/multidim_only_ivs_3d_reverse.ll
polly/trunk/test/ScopInfo/multidim_single_and_multidim_array.ll
polly/trunk/test/ScopInfo/multidim_srem.ll
polly/trunk/test/ScopInfo/multiple-binary-or-conditions.ll
polly/trunk/test/ScopInfo/multiple_exiting_blocks.ll
polly/trunk/test/ScopInfo/multiple_exiting_blocks_two_loop.ll
polly/trunk/test/ScopInfo/multiple_latch_blocks.ll
polly/trunk/test/ScopInfo/nested-loops.ll
polly/trunk/test/ScopInfo/non_affine_access.ll
polly/trunk/test/ScopInfo/non_affine_region_1.ll
polly/trunk/test/ScopInfo/non_affine_region_2.ll
polly/trunk/test/ScopInfo/non_affine_region_3.ll
polly/trunk/test/ScopInfo/non_affine_region_4.ll
polly/trunk/test/ScopInfo/phi_condition_modeling_2.ll
polly/trunk/test/ScopInfo/phi_loop_carried_float.ll
polly/trunk/test/ScopInfo/phi_scalar_simple_1.ll
polly/trunk/test/ScopInfo/phi_scalar_simple_2.ll
polly/trunk/test/ScopInfo/pointer-used-as-base-pointer-and-scalar-read.ll
polly/trunk/test/ScopInfo/ranged_parameter.ll
polly/trunk/test/ScopInfo/ranged_parameter_wrap.ll
polly/trunk/test/ScopInfo/read-only-scalar-used-in-phi.ll
polly/trunk/test/ScopInfo/read-only-statements.ll
polly/trunk/test/ScopInfo/remarks.ll
polly/trunk/test/ScopInfo/scalar.ll
polly/trunk/test/ScopInfo/simple_loop_1.ll
polly/trunk/test/ScopInfo/switch-1.ll
polly/trunk/test/ScopInfo/switch-2.ll
polly/trunk/test/ScopInfo/switch-3.ll
polly/trunk/test/ScopInfo/switch-4.ll
polly/trunk/test/ScopInfo/switch-5.ll
polly/trunk/test/ScopInfo/switch-6.ll
polly/trunk/test/ScopInfo/switch-7.ll
polly/trunk/test/ScopInfo/tempscop-printing.ll
polly/trunk/test/ScopInfo/two-loops-right-after-each-other.ll
polly/trunk/test/ScopInfo/unsigned-condition.ll
polly/trunk/test/ScopInfo/user_context.ll
polly/trunk/test/ScopInfo/user_provided_assumptions.ll
polly/trunk/test/ScopInfo/user_provided_non_dominating_assumptions.ll
polly/trunk/test/ScopInfo/wraping_signed_expr_2.ll
polly/trunk/test/ScopInfo/wraping_signed_expr_4.ll
polly/trunk/test/ScopInfo/wraping_signed_expr_5.ll
Modified: polly/trunk/lib/External/isl/AUTHORS
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/AUTHORS?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/AUTHORS (original)
+++ polly/trunk/lib/External/isl/AUTHORS Fri Jan 15 09:54:45 2016
@@ -19,10 +19,11 @@ isl was written by
2012-2014 Ecole Normale Superieure
45 rue d'Ulm, 75230 Paris
France
-2014 INRIA Rocquencourt
+2014-2015 INRIA Rocquencourt
Domaine de Voluceau - Rocquencourt, B.P. 105
78153 Le Chesnay
France
+2015 Polly Labs
Contributions by
Modified: polly/trunk/lib/External/isl/ChangeLog
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/ChangeLog?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/ChangeLog (original)
+++ polly/trunk/lib/External/isl/ChangeLog Fri Jan 15 09:54:45 2016
@@ -1,3 +1,17 @@
+version: 0.16.1
+date: Thu Jan 14 18:08:06 CET 2016
+changes:
+ - fix bug in simplification
+---
+version: 0.16
+date: Tue Jan 12 09:56:16 CET 2016
+changes:
+ - add 32 bit integer optimization for IMath
+ - minor AST generator improvements
+ - add isl_union_flow_get_full_{may,must}_dependence
+ - minor improvements to Python bindings
+ - minor improvements to set and map printing
+---
version: 0.15
date: Thu Jun 11 12:45:33 CEST 2015
changes:
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/GIT_HEAD_ID (original)
+++ polly/trunk/lib/External/isl/GIT_HEAD_ID Fri Jan 15 09:54:45 2016
@@ -1 +1 @@
-isl-0.15-142-gf101714
+isl-0.16.1
Modified: polly/trunk/lib/External/isl/Makefile.am
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/Makefile.am?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/Makefile.am (original)
+++ polly/trunk/lib/External/isl/Makefile.am Fri Jan 15 09:54:45 2016
@@ -133,6 +133,7 @@ libisl_la_SOURCES = \
isl_options.c \
isl_options_private.h \
isl_output.c \
+ isl_output_private.h \
isl_point_private.h \
isl_point.c \
isl_polynomial_private.h \
Modified: polly/trunk/lib/External/isl/Makefile.in
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/Makefile.in?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/Makefile.in (original)
+++ polly/trunk/lib/External/isl/Makefile.in Fri Jan 15 09:54:45 2016
@@ -193,8 +193,8 @@ am__libisl_la_SOURCES_DIST = mp_get_memo
isl_map_subtract.c isl_map_private.h isl_map_to_basic_set.c \
isl_mat.c isl_mat_private.h isl_morph.c isl_morph.h isl_id.c \
isl_id_private.h isl_obj.c isl_options.c isl_options_private.h \
- isl_output.c isl_point_private.h isl_point.c \
- isl_polynomial_private.h isl_polynomial.c \
+ isl_output.c isl_output_private.h isl_point_private.h \
+ isl_point.c isl_polynomial_private.h isl_polynomial.c \
isl_printer_private.h isl_printer.c print.c isl_range.c \
isl_range.h isl_reordering.c isl_reordering.h isl_sample.h \
isl_sample.c isl_scan.c isl_scan.h isl_schedule.c \
@@ -888,6 +888,7 @@ libisl_la_SOURCES = \
isl_options.c \
isl_options_private.h \
isl_output.c \
+ isl_output_private.h \
isl_point_private.h \
isl_point.c \
isl_polynomial_private.h \
Modified: polly/trunk/lib/External/isl/configure
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/configure?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/configure (original)
+++ polly/trunk/lib/External/isl/configure Fri Jan 15 09:54:45 2016
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for isl 0.15.
+# Generated by GNU Autoconf 2.69 for isl 0.16.1.
#
# Report bugs to <isl-development at googlegroups.com>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='isl'
PACKAGE_TARNAME='isl'
-PACKAGE_VERSION='0.15'
-PACKAGE_STRING='isl 0.15'
+PACKAGE_VERSION='0.16.1'
+PACKAGE_STRING='isl 0.16.1'
PACKAGE_BUGREPORT='isl-development at googlegroups.com'
PACKAGE_URL=''
@@ -1361,7 +1361,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures isl 0.15 to adapt to many kinds of systems.
+\`configure' configures isl 0.16.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1431,7 +1431,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of isl 0.15:";;
+ short | recursive ) echo "Configuration of isl 0.16.1:";;
esac
cat <<\_ACEOF
@@ -1556,7 +1556,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-isl configure 0.15
+isl configure 0.16.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2420,7 +2420,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by isl $as_me 0.15, which was
+It was created by isl $as_me 0.16.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3284,7 +3284,7 @@ fi
# Define the identity of the package.
PACKAGE='isl'
- VERSION='0.15'
+ VERSION='0.16.1'
cat >>confdefs.h <<_ACEOF
@@ -3417,7 +3417,7 @@ fi
AM_BACKSLASH='\'
-versioninfo=15:0:0
+versioninfo=16:1:1
if test "x$prefix" != "xNONE"; then
prefix_wd=`cd $prefix && pwd`
@@ -18228,6 +18228,21 @@ $as_echo "#define HAVE_ADT_OWNINGPTR_H /
fi
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <clang/Basic/Builtins.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "initializeBuiltins" >/dev/null 2>&1; then :
+
+else
+
+$as_echo "#define initializeBuiltins InitializeBuiltins" >>confdefs.h
+
+fi
+rm -f conftest*
+
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -19131,7 +19146,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by isl $as_me 0.15, which was
+This file was extended by isl $as_me 0.16.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -19197,7 +19212,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-isl config.status 0.15
+isl config.status 0.16.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
Modified: polly/trunk/lib/External/isl/configure.ac
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/configure.ac?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/configure.ac (original)
+++ polly/trunk/lib/External/isl/configure.ac Fri Jan 15 09:54:45 2016
@@ -1,10 +1,10 @@
-AC_INIT([isl], [0.15], [isl-development at googlegroups.com])
+AC_INIT([isl], [0.16.1], [isl-development at googlegroups.com])
AC_CONFIG_AUX_DIR([.])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign])
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
AC_SUBST(versioninfo)
-versioninfo=15:0:0
+versioninfo=16:1:1
if test "x$prefix" != "xNONE"; then
prefix_wd=`cd $prefix && pwd`
@@ -227,6 +227,10 @@ system)
AC_CHECK_HEADER([llvm/ADT/OwningPtr.h],
[AC_DEFINE([HAVE_ADT_OWNINGPTR_H], [],
[Define if llvm/ADT/OwningPtr.h exists])])
+ AC_EGREP_HEADER([initializeBuiltins],
+ [clang/Basic/Builtins.h], [],
+ [AC_DEFINE([initializeBuiltins], [InitializeBuiltins],
+ [Define to InitializeBuiltins for older versions of clang])])
AC_LANG_POP
CPPFLAGS="$SAVE_CPPFLAGS"
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
Binary files polly/trunk/lib/External/isl/doc/manual.pdf (original) and polly/trunk/lib/External/isl/doc/manual.pdf Fri Jan 15 09:54:45 2016 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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/doc/user.pod (original)
+++ polly/trunk/lib/External/isl/doc/user.pod Fri Jan 15 09:54:45 2016
@@ -988,6 +988,9 @@ of the original object.
__isl_keep isl_qpolynomial *qp);
__isl_give isl_space *isl_qpolynomial_get_space(
__isl_keep isl_qpolynomial *qp);
+ __isl_give isl_space *
+ isl_qpolynomial_fold_get_domain_space(
+ __isl_keep isl_qpolynomial_fold *fold);
__isl_give isl_space *isl_qpolynomial_fold_get_space(
__isl_keep isl_qpolynomial_fold *fold);
__isl_give isl_space *isl_pw_qpolynomial_get_domain_space(
@@ -2128,6 +2131,11 @@ To iterate over all the sets or maps in
isl_stat (*fn)(__isl_take isl_map *map, void *user),
void *user);
+These functions call the callback function once for each
+(pair of) space(s) for which there are elements in the input.
+The argument to the callback contains all elements in the input
+with that (pair of) space(s).
+
The number of sets or maps in a union set or map can be obtained
from
@@ -2329,6 +2337,8 @@ A singleton set can be created from a po
__isl_take isl_point *pnt);
__isl_give isl_set *isl_set_from_point(
__isl_take isl_point *pnt);
+ __isl_give isl_union_set *isl_union_set_from_point(
+ __isl_take isl_point *pnt);
and a box can be created from two opposite extremal points using
@@ -2361,12 +2371,14 @@ enumerating and return C<-1> as well.
If the enumeration is performed successfully and to completion,
then C<isl_set_foreach_point> returns C<0>.
-To obtain a single point of a (basic) set, use
+To obtain a single point of a (basic or union) set, use
__isl_give isl_point *isl_basic_set_sample_point(
__isl_take isl_basic_set *bset);
__isl_give isl_point *isl_set_sample_point(
__isl_take isl_set *set);
+ __isl_give isl_point *isl_union_set_sample_point(
+ __isl_take isl_union_set *uset);
If C<set> does not contain any (integer) points, then the
resulting point will be ``void'', a property that can be
@@ -2728,6 +2740,10 @@ then this space also needs to be a set s
__isl_give isl_multi_aff *isl_multi_aff_from_aff_list(
__isl_take isl_space *space,
__isl_take isl_aff_list *list);
+ __isl_give isl_multi_pw_aff *
+ isl_multi_pw_aff_from_pw_aff_list(
+ __isl_take isl_space *space,
+ __isl_take isl_pw_aff_list *list);
__isl_give isl_multi_union_pw_aff *
isl_multi_union_pw_aff_from_union_pw_aff_list(
__isl_take isl_space *space,
@@ -3406,6 +3422,9 @@ Objects can be read from input using the
isl_ctx *ctx, const char *str);
__isl_give isl_multi_pw_aff *isl_multi_pw_aff_read_from_str(
isl_ctx *ctx, const char *str);
+ __isl_give isl_union_pw_aff *
+ isl_union_pw_aff_read_from_str(
+ isl_ctx *ctx, const char *str);
__isl_give isl_union_pw_multi_aff *
isl_union_pw_multi_aff_read_from_str(
isl_ctx *ctx, const char *str);
@@ -3889,18 +3908,39 @@ i.e., whether both domain and range are
=item * Currying
+ #include <isl/space.h>
+ isl_bool isl_space_can_curry(
+ __isl_keep isl_space *space);
+
+ #include <isl/map.h>
isl_bool isl_basic_map_can_curry(
__isl_keep isl_basic_map *bmap);
isl_bool isl_map_can_curry(__isl_keep isl_map *map);
Check whether the domain of the (basic) relation is a wrapped relation.
+ #include <isl/space.h>
+ __isl_give isl_space *isl_space_uncurry(
+ __isl_take isl_space *space);
+
+ #include <isl/map.h>
isl_bool isl_basic_map_can_uncurry(
__isl_keep isl_basic_map *bmap);
isl_bool isl_map_can_uncurry(__isl_keep isl_map *map);
Check whether the range of the (basic) relation is a wrapped relation.
+ #include <isl/space.h>
+ isl_bool isl_space_can_range_curry(
+ __isl_keep isl_space *space);
+
+ #include <isl/map.h>
+ isl_bool isl_map_can_range_curry(
+ __isl_keep isl_map *map);
+
+Check whether the domain of the relation wrapped in the range of
+the input is itself a wrapped relation.
+
=item * Special Values
#include <isl/aff.h>
@@ -4332,10 +4372,11 @@ on a given parameter domain using the fo
__isl_give isl_set *isl_set_from_params(
__isl_take isl_set *set);
-=item * Constructing a relation from a set
+=item * Constructing a relation from one or two sets
-Create a relation with the given set as domain or range.
-The range or domain of the created relation is a zero-dimensional
+Create a relation with the given set(s) as domain and/or range.
+If only the domain or the range is specified, then
+the range or domain of the created relation is a zero-dimensional
flat anonymous space.
#include <isl/space.h>
@@ -4359,6 +4400,12 @@ flat anonymous space.
__isl_give isl_map *isl_map_from_range(
__isl_take isl_set *set);
+ #include <isl/union_map.h>
+ __isl_give isl_union_map *
+ isl_union_map_from_domain_and_range(
+ __isl_take isl_union_set *domain,
+ __isl_take isl_union_set *range);
+
#include <isl/val.h>
__isl_give isl_multi_val *isl_multi_val_from_range(
__isl_take isl_multi_val *mv);
@@ -4818,6 +4865,11 @@ per space.
__isl_take isl_basic_map *bmap,
enum isl_dim_type type,
unsigned first, unsigned n);
+ __isl_give isl_basic_map *
+ isl_basic_map_drop_constraints_not_involving_dims(
+ __isl_take isl_basic_map *bmap,
+ enum isl_dim_type type,
+ unsigned first, unsigned n);
__isl_give isl_map *
isl_map_drop_constraints_involving_dims(
__isl_take isl_map *map,
@@ -5146,6 +5198,21 @@ and use it as the domain of a nested rel
with the original range as range of this nested relation.
The C<uncurry> functions perform the inverse operation.
+ #include <isl/space.h>
+ __isl_give isl_space *isl_space_range_curry(
+ __isl_take isl_space *space);
+
+ #include <isl/map.h>
+ __isl_give isl_map *isl_map_range_curry(
+ __isl_take isl_map *map);
+
+ #include <isl/union_map.h>
+ __isl_give isl_union_map *isl_union_map_range_curry(
+ __isl_take isl_union_map *umap);
+
+These functions apply the currying to the relation that
+is nested inside the range of the input.
+
=item * Aligning parameters
Change the order of the parameters of the given set, relation
@@ -6322,6 +6389,9 @@ from the result using the following func
isl_union_map_domain_factor_range(
__isl_take isl_union_map *umap);
__isl_give isl_union_map *
+ isl_union_map_range_factor_domain(
+ __isl_take isl_union_map *umap);
+ __isl_give isl_union_map *
isl_union_map_range_factor_range(
__isl_take isl_union_map *umap);
@@ -7677,6 +7747,10 @@ A representation of the schedule can be
__isl_give isl_printer *isl_printer_print_schedule(
__isl_take isl_printer *p,
__isl_keep isl_schedule *schedule);
+ __isl_give char *isl_schedule_to_str(
+ __isl_keep isl_schedule *schedule);
+
+C<isl_schedule_to_str> prints the schedule in flow format.
The schedule tree can be traversed through the use of
C<isl_schedule_node> objects that point to a particular
@@ -8183,6 +8257,20 @@ 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 following function can be used to flatten a nested
+sequence.
+
+ #include <isl/schedule_node.h>
+ __isl_give isl_schedule_node *
+ isl_schedule_node_sequence_splice_child(
+ __isl_take isl_schedule_node *node, int pos);
+
+That is, given a sequence node C<node> that has another sequence node
+in its child at position C<pos> (in particular, the child of that filter
+node is a sequence node), attach the children of that other sequence
+node as children of C<node>, replacing the original child at position
+C<pos>.
+
The partial schedule of a band node can be scaled (down) or reduced using
the following functions.
@@ -8265,14 +8353,20 @@ position as the node pointed to by C<nod
#include <isl/schedule_node.h>
__isl_give isl_schedule_node *
+ isl_schedule_node_order_before(
+ __isl_take isl_schedule_node *node,
+ __isl_take isl_union_set *filter);
+ __isl_give isl_schedule_node *
isl_schedule_node_order_after(
__isl_take isl_schedule_node *node,
__isl_take isl_union_set *filter);
-This function splits the domain elements that reach C<node>
+These functions split the domain elements that reach C<node>
into those that satisfy C<filter> and those that do not and
arranges for the elements that do satisfy the filter to be
-executed after those that do not. The order is imposed by
+executed before (in case of C<isl_schedule_node_order_before>)
+or after (in case of C<isl_schedule_node_order_after>)
+those that do not. The order is imposed by
a sequence node, possibly reusing the grandparent of C<node>
on two copies of the subtree attached to the original C<node>.
Both copies are simplified with respect to their filter.
@@ -8325,6 +8419,10 @@ A representation of the schedule node ca
__isl_give isl_printer *isl_printer_print_schedule_node(
__isl_take isl_printer *p,
__isl_keep isl_schedule_node *node);
+ __isl_give char *isl_schedule_node_to_str(
+ __isl_keep isl_schedule_node *node);
+
+C<isl_schedule_node_to_str> prints the schedule node in block format.
=head2 Dependence Analysis
@@ -8337,7 +8435,8 @@ of which of the source access relations
to access the same data element before the given iteration
of the sink access.
The resulting dependence relations map source iterations
-to the corresponding sink iterations.
+to either the corresponding sink iterations or
+pairs of corresponding sink iterations and accessed data elements.
To compute standard flow dependences, the sink should be
a read, while the sources should be writes.
If any of the source accesses are marked as being I<may>
@@ -8410,6 +8509,19 @@ the access relations. In particular, th
relations are effectively intersected with the domain of the schedule
and only the resulting accesses are considered by the dependence analysis.
+A representation of the information contained in an object
+of type C<isl_union_access_info> can be obtained using
+
+ #include <isl/flow.h>
+ __isl_give isl_printer *
+ isl_printer_print_union_access_info(
+ __isl_take isl_printer *p,
+ __isl_keep isl_union_access_info *access);
+ __isl_give char *isl_union_access_info_to_str(
+ __isl_keep isl_union_access_info *access);
+
+C<isl_union_access_info_to_str> prints the information in flow format.
+
The output of C<isl_union_access_info_compute_flow> can be examined
and freed using the following functions.
@@ -8418,6 +8530,12 @@ and freed using the following functions.
__isl_keep isl_union_flow *flow);
__isl_give isl_union_map *isl_union_flow_get_may_dependence(
__isl_keep isl_union_flow *flow);
+ __isl_give isl_union_map *
+ isl_union_flow_get_full_must_dependence(
+ __isl_keep isl_union_flow *flow);
+ __isl_give isl_union_map *
+ isl_union_flow_get_full_may_dependence(
+ __isl_keep isl_union_flow *flow);
__isl_give isl_union_map *isl_union_flow_get_must_no_source(
__isl_keep isl_union_flow *flow);
__isl_give isl_union_map *isl_union_flow_get_may_no_source(
@@ -8430,6 +8548,13 @@ relates domain elements of must sources
The relation returned by C<isl_union_flow_get_may_dependence>
relates domain elements of must or may sources to domain elements of the sink
and includes the previous relation as a subset.
+The relation returned by C<isl_union_flow_get_full_must_dependence>
+relates domain elements of must sources to pairs of domain elements of the sink
+and accessed data elements.
+The relation returned by C<isl_union_flow_get_full_may_dependence>
+relates domain elements of must or may sources to pairs of
+domain elements of the sink and accessed data elements.
+This relation includes the previous relation as a subset.
The relation returned by C<isl_union_flow_get_must_no_source> is the subset
of the sink relation for which no dependences have been found.
The relation returned by C<isl_union_flow_get_may_no_source> is the subset
@@ -8438,6 +8563,18 @@ That is, it contains those sink access t
of the elements in the relation returned
by C<isl_union_flow_get_must_dependence>.
+A representation of the information contained in an object
+of type C<isl_union_flow> can be obtained using
+
+ #include <isl/flow.h>
+ __isl_give isl_printer *isl_printer_print_union_flow(
+ __isl_take isl_printer *p,
+ __isl_keep isl_union_flow *flow);
+ __isl_give char *isl_union_flow_to_str(
+ __isl_keep isl_union_flow *flow);
+
+C<isl_union_flow_to_str> prints the information in flow format.
+
=head3 Low-level Interface
A lower-level interface is provided by the following functions.
@@ -8729,6 +8866,9 @@ An C<isl_schedule_constraints> object ca
using the following functions.
#include <isl/schedule.h>
+ __isl_give isl_union_set *
+ isl_schedule_constraints_get_domain(
+ __isl_keep isl_schedule_constraints *sc);
__isl_give isl_union_map *
isl_schedule_constraints_get_validity(
__isl_keep isl_schedule_constraints *sc);
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/aff.h (original)
+++ polly/trunk/lib/External/isl/include/isl/aff.h Fri Jan 15 09:54:45 2016
@@ -89,6 +89,7 @@ __isl_give isl_aff *isl_aff_mul(__isl_ta
__isl_take isl_aff *aff2);
__isl_give isl_aff *isl_aff_div(__isl_take isl_aff *aff1,
__isl_take isl_aff *aff2);
+__isl_export
__isl_give isl_aff *isl_aff_add(__isl_take isl_aff *aff1,
__isl_take isl_aff *aff2);
__isl_give isl_aff *isl_aff_sub(__isl_take isl_aff *aff1,
@@ -121,6 +122,7 @@ __isl_give isl_aff *isl_aff_gist_params(
__isl_give isl_aff *isl_aff_pullback_aff(__isl_take isl_aff *aff1,
__isl_take isl_aff *aff2);
+__isl_overload
__isl_give isl_aff *isl_aff_pullback_multi_aff(__isl_take isl_aff *aff,
__isl_take isl_multi_aff *ma);
@@ -132,6 +134,7 @@ __isl_give isl_basic_set *isl_aff_le_bas
__isl_give isl_basic_set *isl_aff_ge_basic_set(__isl_take isl_aff *aff1,
__isl_take isl_aff *aff2);
+__isl_constructor
__isl_give isl_aff *isl_aff_read_from_str(isl_ctx *ctx, const char *str);
__isl_give isl_printer *isl_printer_print_aff(__isl_take isl_printer *p,
__isl_keep isl_aff *aff);
@@ -141,6 +144,7 @@ isl_ctx *isl_pw_aff_get_ctx(__isl_keep i
__isl_give isl_space *isl_pw_aff_get_domain_space(__isl_keep isl_pw_aff *pwaff);
__isl_give isl_space *isl_pw_aff_get_space(__isl_keep isl_pw_aff *pwaff);
+__isl_constructor
__isl_give isl_pw_aff *isl_pw_aff_from_aff(__isl_take isl_aff *aff);
__isl_give isl_pw_aff *isl_pw_aff_empty(__isl_take isl_space *dim);
__isl_give isl_pw_aff *isl_pw_aff_alloc(__isl_take isl_set *set,
@@ -179,6 +183,7 @@ __isl_give isl_pw_aff *isl_pw_aff_union_
__isl_take isl_pw_aff *pwaff2);
__isl_give isl_pw_aff *isl_pw_aff_union_max(__isl_take isl_pw_aff *pwaff1,
__isl_take isl_pw_aff *pwaff2);
+__isl_export
__isl_give isl_pw_aff *isl_pw_aff_union_add(__isl_take isl_pw_aff *pwaff1,
__isl_take isl_pw_aff *pwaff2);
@@ -216,6 +221,7 @@ __isl_give isl_pw_aff *isl_pw_aff_mul(__
__isl_take isl_pw_aff *pwaff2);
__isl_give isl_pw_aff *isl_pw_aff_div(__isl_take isl_pw_aff *pa1,
__isl_take isl_pw_aff *pa2);
+__isl_export
__isl_give isl_pw_aff *isl_pw_aff_add(__isl_take isl_pw_aff *pwaff1,
__isl_take isl_pw_aff *pwaff2);
__isl_give isl_pw_aff *isl_pw_aff_sub(__isl_take isl_pw_aff *pwaff1,
@@ -261,10 +267,13 @@ __isl_give isl_pw_aff *isl_pw_aff_gist(_
__isl_give isl_pw_aff *isl_pw_aff_gist_params(__isl_take isl_pw_aff *pwaff,
__isl_take isl_set *context);
+__isl_overload
__isl_give isl_pw_aff *isl_pw_aff_pullback_multi_aff(
__isl_take isl_pw_aff *pa, __isl_take isl_multi_aff *ma);
+__isl_overload
__isl_give isl_pw_aff *isl_pw_aff_pullback_pw_multi_aff(
__isl_take isl_pw_aff *pa, __isl_take isl_pw_multi_aff *pma);
+__isl_overload
__isl_give isl_pw_aff *isl_pw_aff_pullback_multi_pw_aff(
__isl_take isl_pw_aff *pa, __isl_take isl_multi_pw_aff *mpa);
@@ -301,6 +310,7 @@ __isl_give isl_map *isl_pw_aff_lt_map(__
__isl_give isl_map *isl_pw_aff_gt_map(__isl_take isl_pw_aff *pa1,
__isl_take isl_pw_aff *pa2);
+__isl_constructor
__isl_give isl_pw_aff *isl_pw_aff_read_from_str(isl_ctx *ctx, const char *str);
__isl_give isl_printer *isl_printer_print_pw_aff(__isl_take isl_printer *p,
__isl_keep isl_pw_aff *pwaff);
@@ -327,6 +337,7 @@ ISL_DECLARE_MULTI_NEG(aff)
ISL_DECLARE_MULTI_DIMS(aff)
ISL_DECLARE_MULTI_WITH_DOMAIN(aff)
+__isl_constructor
__isl_give isl_multi_aff *isl_multi_aff_from_aff(__isl_take isl_aff *aff);
__isl_give isl_multi_aff *isl_multi_aff_identity(__isl_take isl_space *space);
__isl_give isl_multi_aff *isl_multi_aff_domain_map(__isl_take isl_space *space);
@@ -340,9 +351,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_product(
- __isl_take isl_multi_aff *ma1, __isl_take isl_multi_aff *ma2);
-
__isl_give isl_multi_aff *isl_multi_aff_gist_params(
__isl_take isl_multi_aff *maff, __isl_take isl_set *context);
__isl_give isl_multi_aff *isl_multi_aff_gist(__isl_take isl_multi_aff *maff,
@@ -351,6 +359,7 @@ __isl_give isl_multi_aff *isl_multi_aff_
__isl_give isl_multi_aff *isl_multi_aff_lift(__isl_take isl_multi_aff *maff,
__isl_give isl_local_space **ls);
+__isl_overload
__isl_give isl_multi_aff *isl_multi_aff_pullback_multi_aff(
__isl_take isl_multi_aff *ma1, __isl_take isl_multi_aff *ma2);
@@ -367,6 +376,7 @@ __isl_give char *isl_multi_aff_to_str(__
__isl_give isl_printer *isl_printer_print_multi_aff(__isl_take isl_printer *p,
__isl_keep isl_multi_aff *maff);
+__isl_constructor
__isl_give isl_multi_aff *isl_multi_aff_read_from_str(isl_ctx *ctx,
const char *str);
void isl_multi_aff_dump(__isl_keep isl_multi_aff *maff);
@@ -384,8 +394,10 @@ __isl_give isl_pw_multi_aff *isl_pw_mult
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_project_out_map(
__isl_take isl_space *space, enum isl_dim_type type,
unsigned first, unsigned n);
+__isl_constructor
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_multi_aff(
__isl_take isl_multi_aff *ma);
+__isl_constructor
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_pw_aff(
__isl_take isl_pw_aff *pa);
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_alloc(__isl_take isl_set *set,
@@ -456,12 +468,14 @@ __isl_give isl_pw_multi_aff *isl_pw_mult
__isl_take isl_pw_multi_aff *pma, enum isl_dim_type type,
unsigned pos, int value);
+__isl_export
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_union_add(
__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_neg(
__isl_take isl_pw_multi_aff *pma);
+__isl_export
__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);
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_sub(
@@ -484,10 +498,13 @@ __isl_give isl_pw_multi_aff *isl_pw_mult
__isl_give isl_multi_aff *isl_multi_aff_flatten_domain(
__isl_take isl_multi_aff *ma);
+__isl_export
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_range_product(
__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
+__isl_export
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_flat_range_product(
__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
+__isl_export
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_product(
__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
@@ -511,8 +528,10 @@ __isl_give isl_pw_multi_aff *isl_pw_mult
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_gist(
__isl_take isl_pw_multi_aff *pma, __isl_take isl_set *set);
+__isl_overload
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_pullback_multi_aff(
__isl_take isl_pw_multi_aff *pma, __isl_take isl_multi_aff *ma);
+__isl_overload
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_pullback_pw_multi_aff(
__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
@@ -529,6 +548,7 @@ __isl_give isl_printer *isl_printer_prin
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_set(__isl_take isl_set *set);
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_map(__isl_take isl_map *map);
+__isl_constructor
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_read_from_str(isl_ctx *ctx,
const char *str);
void isl_pw_multi_aff_dump(__isl_keep isl_pw_multi_aff *pma);
@@ -538,6 +558,7 @@ __isl_give isl_union_pw_multi_aff *isl_u
__isl_take isl_space *space);
__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_from_aff(
__isl_take isl_aff *aff);
+__isl_constructor
__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_from_pw_multi_aff(
__isl_take isl_pw_multi_aff *pma);
__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_from_domain(
@@ -588,6 +609,7 @@ __isl_give isl_union_pw_multi_aff *isl_u
__isl_take isl_union_pw_multi_aff *upma,
__isl_take isl_union_set *context);
+__isl_overload
__isl_give isl_union_pw_multi_aff *
isl_union_pw_multi_aff_pullback_union_pw_multi_aff(
__isl_take isl_union_pw_multi_aff *upma1,
@@ -616,9 +638,11 @@ __isl_give isl_union_set *isl_union_pw_m
__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_neg(
__isl_take isl_union_pw_multi_aff *upma);
+__isl_export
__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_export
__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_union_add(
__isl_take isl_union_pw_multi_aff *upma1,
__isl_take isl_union_pw_multi_aff *upma2);
@@ -633,6 +657,7 @@ __isl_give isl_union_pw_multi_aff *isl_u
__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_scale_multi_val(
__isl_take isl_union_pw_multi_aff *upma, __isl_take isl_multi_val *mv);
+__isl_export
__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_flat_range_product(
__isl_take isl_union_pw_multi_aff *upma1,
__isl_take isl_union_pw_multi_aff *upma2);
@@ -646,6 +671,7 @@ __isl_give isl_union_pw_multi_aff *isl_u
__isl_take isl_union_pw_multi_aff *upma,
__isl_take isl_union_set *uset);
+__isl_overload
__isl_give isl_union_map *isl_union_map_from_union_pw_multi_aff(
__isl_take isl_union_pw_multi_aff *upma);
@@ -657,6 +683,7 @@ __isl_give isl_union_pw_multi_aff *isl_u
__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_from_union_map(
__isl_take isl_union_map *umap);
+__isl_constructor
__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_read_from_str(
isl_ctx *ctx, const char *str);
void isl_union_pw_multi_aff_dump(__isl_keep isl_union_pw_multi_aff *upma);
@@ -665,8 +692,10 @@ __isl_give char *isl_union_pw_multi_aff_
__isl_give isl_multi_pw_aff *isl_multi_pw_aff_identity(
__isl_take isl_space *space);
+__isl_constructor
__isl_give isl_multi_pw_aff *isl_multi_pw_aff_from_multi_aff(
__isl_take isl_multi_aff *ma);
+__isl_constructor
__isl_give isl_multi_pw_aff *isl_multi_pw_aff_from_pw_aff(
__isl_take isl_pw_aff *pa);
__isl_give isl_set *isl_multi_pw_aff_domain(__isl_take isl_multi_pw_aff *mpa);
@@ -685,10 +714,13 @@ __isl_give isl_multi_pw_aff *isl_multi_p
isl_bool isl_multi_pw_aff_is_equal(__isl_keep isl_multi_pw_aff *mpa1,
__isl_keep isl_multi_pw_aff *mpa2);
+__isl_overload
__isl_give isl_multi_pw_aff *isl_multi_pw_aff_pullback_multi_aff(
__isl_take isl_multi_pw_aff *mpa, __isl_take isl_multi_aff *ma);
+__isl_overload
__isl_give isl_multi_pw_aff *isl_multi_pw_aff_pullback_pw_multi_aff(
__isl_take isl_multi_pw_aff *mpa, __isl_take isl_pw_multi_aff *pma);
+__isl_overload
__isl_give isl_multi_pw_aff *isl_multi_pw_aff_pullback_multi_pw_aff(
__isl_take isl_multi_pw_aff *mpa1, __isl_take isl_multi_pw_aff *mpa2);
@@ -701,6 +733,7 @@ __isl_give isl_set *isl_set_from_multi_p
__isl_give isl_map *isl_map_from_multi_pw_aff(__isl_take isl_multi_pw_aff *mpa);
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_multi_pw_aff(
__isl_take isl_multi_pw_aff *mpa);
+__isl_constructor
__isl_give isl_multi_pw_aff *isl_multi_pw_aff_from_pw_multi_aff(
__isl_take isl_pw_multi_aff *pma);
@@ -711,6 +744,7 @@ __isl_give isl_map *isl_multi_pw_aff_lex
__isl_give isl_map *isl_multi_pw_aff_lex_gt_map(
__isl_take isl_multi_pw_aff *mpa1, __isl_take isl_multi_pw_aff *mpa2);
+__isl_constructor
__isl_give isl_multi_pw_aff *isl_multi_pw_aff_read_from_str(isl_ctx *ctx,
const char *str);
__isl_give isl_printer *isl_printer_print_multi_pw_aff(
@@ -743,6 +777,7 @@ __isl_give isl_union_pw_aff *isl_union_p
__isl_give isl_union_pw_aff *isl_union_pw_aff_empty(
__isl_take isl_space *space);
+__isl_constructor
__isl_give isl_union_pw_aff *isl_union_pw_aff_from_pw_aff(
__isl_take isl_pw_aff *pa);
__isl_give isl_union_pw_aff *isl_union_pw_aff_val_on_domain(
@@ -752,6 +787,7 @@ __isl_give isl_union_pw_aff *isl_union_p
__isl_give isl_union_pw_aff *isl_union_pw_aff_add_pw_aff(
__isl_take isl_union_pw_aff *upa, __isl_take isl_pw_aff *pa);
+__isl_constructor
__isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_from_union_pw_aff(
__isl_take isl_union_pw_aff *upa);
@@ -771,8 +807,10 @@ __isl_give isl_union_set *isl_union_pw_a
__isl_give isl_union_pw_aff *isl_union_pw_aff_neg(
__isl_take isl_union_pw_aff *upa);
+__isl_export
__isl_give isl_union_pw_aff *isl_union_pw_aff_add(
__isl_take isl_union_pw_aff *upa1, __isl_take isl_union_pw_aff *upa2);
+__isl_export
__isl_give isl_union_pw_aff *isl_union_pw_aff_union_add(
__isl_take isl_union_pw_aff *upa1, __isl_take isl_union_pw_aff *upa2);
__isl_give isl_union_pw_aff *isl_union_pw_aff_sub(
@@ -785,6 +823,7 @@ __isl_give isl_union_pw_aff *isl_union_p
__isl_give isl_union_pw_aff *isl_union_pw_aff_gist_params(
__isl_take isl_union_pw_aff *upa, __isl_take isl_set *context);
+__isl_overload
__isl_give isl_union_pw_aff *isl_union_pw_aff_pullback_union_pw_multi_aff(
__isl_take isl_union_pw_aff *upa,
__isl_take isl_union_pw_multi_aff *upma);
@@ -819,6 +858,9 @@ __isl_give isl_union_set *isl_union_pw_a
__isl_give isl_union_map *isl_union_map_from_union_pw_aff(
__isl_take isl_union_pw_aff *upa);
+__isl_constructor
+__isl_give isl_union_pw_aff *isl_union_pw_aff_read_from_str(isl_ctx *ctx,
+ const char *str);
__isl_give char *isl_union_pw_aff_to_str(__isl_keep isl_union_pw_aff *upa);
__isl_give isl_printer *isl_printer_print_union_pw_aff(
__isl_take isl_printer *p, __isl_keep isl_union_pw_aff *upa);
@@ -828,8 +870,10 @@ ISL_DECLARE_MULTI_NEG(union_pw_aff)
__isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_from_multi_aff(
__isl_take isl_multi_aff *ma);
+__isl_constructor
__isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_from_union_pw_aff(
__isl_take isl_union_pw_aff *upa);
+__isl_constructor
__isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_from_multi_pw_aff(
__isl_take isl_multi_pw_aff *mpa);
__isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_multi_val_on_domain(
@@ -869,6 +913,7 @@ __isl_give isl_multi_union_pw_aff *isl_m
__isl_take isl_multi_union_pw_aff *mupa,
__isl_take isl_pw_multi_aff *pma);
+__isl_overload
__isl_give isl_multi_union_pw_aff *
isl_multi_union_pw_aff_pullback_union_pw_multi_aff(
__isl_take isl_multi_union_pw_aff *mupa,
@@ -878,6 +923,7 @@ __isl_give isl_union_pw_multi_aff *
isl_union_pw_multi_aff_from_multi_union_pw_aff(
__isl_take isl_multi_union_pw_aff *mupa);
+__isl_export
__isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_union_add(
__isl_take isl_multi_union_pw_aff *mupa1,
__isl_take isl_multi_union_pw_aff *mupa2);
@@ -888,6 +934,7 @@ isl_multi_union_pw_aff_from_union_pw_mul
__isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_from_union_map(
__isl_take isl_union_map *umap);
+__isl_overload
__isl_give isl_union_map *isl_union_map_from_multi_union_pw_aff(
__isl_take isl_multi_union_pw_aff *mupa);
@@ -897,6 +944,7 @@ __isl_give isl_union_set *isl_multi_unio
__isl_give isl_multi_pw_aff *isl_multi_union_pw_aff_extract_multi_pw_aff(
__isl_keep isl_multi_union_pw_aff *mupa, __isl_take isl_space *space);
+__isl_constructor
__isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_read_from_str(
isl_ctx *ctx, const char *str);
__isl_give char *isl_multi_union_pw_aff_to_str(
Modified: polly/trunk/lib/External/isl/include/isl/aff_type.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/aff_type.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/aff_type.h (original)
+++ polly/trunk/lib/External/isl/include/isl/aff_type.h Fri Jan 15 09:54:45 2016
@@ -7,36 +7,40 @@
extern "C" {
#endif
-struct isl_aff;
+struct __isl_subclass(isl_multi_aff) __isl_subclass(isl_pw_aff) isl_aff;
typedef struct isl_aff isl_aff;
ISL_DECLARE_LIST(aff)
-struct isl_pw_aff;
+struct __isl_subclass(isl_pw_multi_aff) __isl_subclass(isl_multi_pw_aff)
+ __isl_subclass(isl_union_pw_aff) isl_pw_aff;
typedef struct isl_pw_aff isl_pw_aff;
ISL_DECLARE_LIST(pw_aff)
-struct isl_union_pw_aff;
+struct __isl_subclass(isl_multi_union_pw_aff)
+ __isl_subclass(isl_union_pw_multi_aff) isl_union_pw_aff;
typedef struct isl_union_pw_aff isl_union_pw_aff;
ISL_DECLARE_LIST_TYPE(union_pw_aff)
-struct isl_multi_aff;
+struct __isl_subclass(isl_pw_multi_aff) __isl_subclass(isl_multi_pw_aff)
+ isl_multi_aff;
typedef struct isl_multi_aff isl_multi_aff;
-struct isl_pw_multi_aff;
+struct __isl_subclass(isl_union_pw_multi_aff) __isl_subclass(isl_multi_pw_aff)
+ isl_pw_multi_aff;
typedef struct isl_pw_multi_aff isl_pw_multi_aff;
-struct isl_union_pw_multi_aff;
+struct __isl_export isl_union_pw_multi_aff;
typedef struct isl_union_pw_multi_aff isl_union_pw_multi_aff;
ISL_DECLARE_LIST_TYPE(union_pw_multi_aff)
-struct isl_multi_pw_aff;
+struct __isl_subclass(isl_multi_union_pw_aff) isl_multi_pw_aff;
typedef struct isl_multi_pw_aff isl_multi_pw_aff;
-struct isl_multi_union_pw_aff;
+struct __isl_export isl_multi_union_pw_aff;
typedef struct isl_multi_union_pw_aff isl_multi_union_pw_aff;
#if defined(__cplusplus)
Modified: polly/trunk/lib/External/isl/include/isl/ctx.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/ctx.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/ctx.h (original)
+++ polly/trunk/lib/External/isl/include/isl/ctx.h Fri Jan 15 09:54:45 2016
@@ -30,6 +30,9 @@
#ifndef __isl_export
#define __isl_export
#endif
+#ifndef __isl_overload
+#define __isl_overload
+#endif
#ifndef __isl_constructor
#define __isl_constructor
#endif
@@ -80,7 +83,7 @@ enum isl_error {
};
typedef enum {
isl_stat_error = -1,
- isl_stat_ok = 0,
+ isl_stat_ok = 0
} isl_stat;
typedef enum {
isl_bool_error = -1,
Modified: polly/trunk/lib/External/isl/include/isl/flow.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/flow.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/flow.h (original)
+++ polly/trunk/lib/External/isl/include/isl/flow.h Fri Jan 15 09:54:45 2016
@@ -6,6 +6,7 @@
#include <isl/union_set_type.h>
#include <isl/union_map_type.h>
#include <isl/schedule.h>
+#include <isl/printer.h>
#if defined(__cplusplus)
extern "C" {
@@ -64,22 +65,27 @@ void isl_flow_free(__isl_take isl_flow *
isl_ctx *isl_flow_get_ctx(__isl_keep isl_flow *deps);
-struct isl_union_access_info;
+struct __isl_export isl_union_access_info;
typedef struct isl_union_access_info isl_union_access_info;
-struct isl_union_flow;
+struct __isl_export isl_union_flow;
typedef struct isl_union_flow isl_union_flow;
+__isl_constructor
__isl_give isl_union_access_info *isl_union_access_info_from_sink(
__isl_take isl_union_map *sink);
+__isl_export
__isl_give isl_union_access_info *isl_union_access_info_set_must_source(
__isl_take isl_union_access_info *access,
__isl_take isl_union_map *must_source);
+__isl_export
__isl_give isl_union_access_info *isl_union_access_info_set_may_source(
__isl_take isl_union_access_info *access,
__isl_take isl_union_map *may_source);
+__isl_export
__isl_give isl_union_access_info *isl_union_access_info_set_schedule(
__isl_take isl_union_access_info *access,
__isl_take isl_schedule *schedule);
+__isl_export
__isl_give isl_union_access_info *isl_union_access_info_set_schedule_map(
__isl_take isl_union_access_info *access,
__isl_take isl_union_map *schedule_map);
@@ -91,20 +97,40 @@ __isl_null isl_union_access_info *isl_un
isl_ctx *isl_union_access_info_get_ctx(
__isl_keep isl_union_access_info *access);
+__isl_give isl_printer *isl_printer_print_union_access_info(
+ __isl_take isl_printer *p, __isl_keep isl_union_access_info *access);
+__isl_give char *isl_union_access_info_to_str(
+ __isl_keep isl_union_access_info *access);
+
+__isl_export
__isl_give isl_union_flow *isl_union_access_info_compute_flow(
__isl_take isl_union_access_info *access);
isl_ctx *isl_union_flow_get_ctx(__isl_keep isl_union_flow *flow);
+__isl_export
__isl_give isl_union_map *isl_union_flow_get_must_dependence(
__isl_keep isl_union_flow *flow);
+__isl_export
__isl_give isl_union_map *isl_union_flow_get_may_dependence(
__isl_keep isl_union_flow *flow);
+__isl_export
+__isl_give isl_union_map *isl_union_flow_get_full_must_dependence(
+ __isl_keep isl_union_flow *flow);
+__isl_export
+__isl_give isl_union_map *isl_union_flow_get_full_may_dependence(
+ __isl_keep isl_union_flow *flow);
+__isl_export
__isl_give isl_union_map *isl_union_flow_get_must_no_source(
__isl_keep isl_union_flow *flow);
+__isl_export
__isl_give isl_union_map *isl_union_flow_get_may_no_source(
__isl_keep isl_union_flow *flow);
__isl_null isl_union_flow *isl_union_flow_free(__isl_take isl_union_flow *flow);
+__isl_give isl_printer *isl_printer_print_union_flow(
+ __isl_take isl_printer *p, __isl_keep isl_union_flow *flow);
+__isl_give char *isl_union_flow_to_str(__isl_keep isl_union_flow *flow);
+
int isl_union_map_compute_flow(__isl_take isl_union_map *sink,
__isl_take isl_union_map *must_source,
__isl_take isl_union_map *may_source,
Modified: polly/trunk/lib/External/isl/include/isl/map.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/map.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/map.h (original)
+++ polly/trunk/lib/External/isl/include/isl/map.h Fri Jan 15 09:54:45 2016
@@ -552,6 +552,9 @@ isl_bool isl_map_can_curry(__isl_keep is
__isl_give isl_basic_map *isl_basic_map_curry(__isl_take isl_basic_map *bmap);
__isl_give isl_map *isl_map_curry(__isl_take isl_map *map);
+isl_bool isl_map_can_range_curry(__isl_keep isl_map *map);
+__isl_give isl_map *isl_map_range_curry(__isl_take isl_map *map);
+
isl_bool isl_basic_map_can_uncurry(__isl_keep isl_basic_map *bmap);
isl_bool isl_map_can_uncurry(__isl_keep isl_map *map);
__isl_give isl_basic_map *isl_basic_map_uncurry(__isl_take isl_basic_map *bmap);
@@ -565,6 +568,9 @@ __isl_give isl_map *isl_map_align_divs(_
__isl_give isl_basic_map *isl_basic_map_drop_constraints_involving_dims(
__isl_take isl_basic_map *bmap,
enum isl_dim_type type, unsigned first, unsigned n);
+__isl_give isl_basic_map *isl_basic_map_drop_constraints_not_involving_dims(
+ __isl_take isl_basic_map *bmap,
+ enum isl_dim_type type, unsigned first, unsigned n);
__isl_give isl_map *isl_map_drop_constraints_involving_dims(
__isl_take isl_map *map,
enum isl_dim_type type, unsigned first, unsigned n);
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/multi.h (original)
+++ polly/trunk/lib/External/isl/include/isl/multi.h Fri Jan 15 09:54:45 2016
@@ -73,9 +73,11 @@ __isl_give isl_multi_##BASE *isl_multi_#
__isl_take isl_multi_##BASE *multi2); \
__isl_give isl_multi_##BASE *isl_multi_##BASE##_flatten_range( \
__isl_take isl_multi_##BASE *multi); \
+__isl_export \
__isl_give isl_multi_##BASE *isl_multi_##BASE##_flat_range_product( \
__isl_take isl_multi_##BASE *multi1, \
__isl_take isl_multi_##BASE *multi2); \
+__isl_export \
__isl_give isl_multi_##BASE *isl_multi_##BASE##_range_product( \
__isl_take isl_multi_##BASE *multi1, \
__isl_take isl_multi_##BASE *multi2); \
@@ -100,6 +102,7 @@ __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_export \
__isl_give isl_multi_##BASE *isl_multi_##BASE##_add( \
__isl_take isl_multi_##BASE *multi1, \
__isl_take isl_multi_##BASE *multi2); \
@@ -128,6 +131,7 @@ __isl_give isl_multi_##BASE *isl_multi_#
unsigned n);
#define ISL_DECLARE_MULTI_WITH_DOMAIN(BASE) \
+__isl_export \
__isl_give isl_multi_##BASE *isl_multi_##BASE##_product( \
__isl_take isl_multi_##BASE *multi1, \
__isl_take isl_multi_##BASE *multi2); \
Modified: polly/trunk/lib/External/isl/include/isl/point.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/point.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/point.h (original)
+++ polly/trunk/lib/External/isl/include/isl/point.h Fri Jan 15 09:54:45 2016
@@ -9,7 +9,7 @@
extern "C" {
#endif
-struct isl_point;
+struct __isl_subclass(isl_basic_set) isl_point;
typedef struct isl_point isl_point;
isl_ctx *isl_point_get_ctx(__isl_keep isl_point *pnt);
Modified: polly/trunk/lib/External/isl/include/isl/polynomial.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/polynomial.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/polynomial.h (original)
+++ polly/trunk/lib/External/isl/include/isl/polynomial.h Fri Jan 15 09:54:45 2016
@@ -284,6 +284,8 @@ isl_bool isl_qpolynomial_fold_is_nan(__i
int isl_qpolynomial_fold_plain_is_equal(__isl_keep isl_qpolynomial_fold *fold1,
__isl_keep isl_qpolynomial_fold *fold2);
+__isl_give isl_space *isl_qpolynomial_fold_get_domain_space(
+ __isl_keep isl_qpolynomial_fold *fold);
__isl_give isl_space *isl_qpolynomial_fold_get_space(
__isl_keep isl_qpolynomial_fold *fold);
Modified: polly/trunk/lib/External/isl/include/isl/schedule.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/schedule.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/schedule.h (original)
+++ polly/trunk/lib/External/isl/include/isl/schedule.h Fri Jan 15 09:54:45 2016
@@ -63,6 +63,8 @@ __isl_null isl_schedule_constraints *isl
isl_ctx *isl_schedule_constraints_get_ctx(
__isl_keep isl_schedule_constraints *sc);
+__isl_give isl_union_set *isl_schedule_constraints_get_domain(
+ __isl_keep isl_schedule_constraints *sc);
__isl_give isl_union_map *isl_schedule_constraints_get_validity(
__isl_keep isl_schedule_constraints *sc);
__isl_give isl_union_map *isl_schedule_constraints_get_coincidence(
@@ -88,12 +90,14 @@ __isl_give isl_schedule *isl_schedule_fr
__isl_take isl_union_set *domain);
__isl_give isl_schedule *isl_schedule_copy(__isl_keep isl_schedule *sched);
__isl_null isl_schedule *isl_schedule_free(__isl_take isl_schedule *sched);
+__isl_export
__isl_give isl_union_map *isl_schedule_get_map(__isl_keep isl_schedule *sched);
isl_ctx *isl_schedule_get_ctx(__isl_keep isl_schedule *sched);
isl_bool isl_schedule_plain_is_equal(__isl_keep isl_schedule *schedule1,
__isl_keep isl_schedule *schedule2);
+__isl_export
__isl_give isl_schedule_node *isl_schedule_get_root(
__isl_keep isl_schedule *schedule);
__isl_give isl_union_set *isl_schedule_get_domain(
@@ -128,6 +132,7 @@ __isl_give isl_schedule *isl_schedule_re
__isl_take isl_schedule *schedule);
__isl_give isl_schedule *isl_schedule_align_params(
__isl_take isl_schedule *schedule, __isl_take isl_space *space);
+__isl_overload
__isl_give isl_schedule *isl_schedule_pullback_union_pw_multi_aff(
__isl_take isl_schedule *schedule,
__isl_take isl_union_pw_multi_aff *upma);
@@ -136,11 +141,13 @@ __isl_give isl_band_list *isl_schedule_g
__isl_keep isl_schedule *schedule);
__isl_give isl_schedule *isl_schedule_read_from_file(isl_ctx *ctx, FILE *input);
+__isl_constructor
__isl_give isl_schedule *isl_schedule_read_from_str(isl_ctx *ctx,
const char *str);
__isl_give isl_printer *isl_printer_print_schedule(__isl_take isl_printer *p,
__isl_keep isl_schedule *schedule);
void isl_schedule_dump(__isl_keep isl_schedule *schedule);
+__isl_give char *isl_schedule_to_str(__isl_keep isl_schedule *schedule);
int isl_schedule_foreach_band(__isl_keep isl_schedule *sched,
int (*fn)(__isl_keep isl_band *band, void *user), void *user);
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/schedule_node.h (original)
+++ polly/trunk/lib/External/isl/include/isl/schedule_node.h Fri Jan 15 09:54:45 2016
@@ -29,6 +29,7 @@ enum isl_schedule_node_type isl_schedule
__isl_keep isl_schedule_node *node);
enum isl_schedule_node_type isl_schedule_node_get_parent_type(
__isl_keep isl_schedule_node *node);
+__isl_export
__isl_give isl_schedule *isl_schedule_node_get_schedule(
__isl_keep isl_schedule_node *node);
@@ -64,10 +65,12 @@ __isl_give isl_schedule_node *isl_schedu
__isl_give isl_schedule_node *isl_schedule_node_root(
__isl_take isl_schedule_node *node);
+__isl_export
__isl_give isl_schedule_node *isl_schedule_node_parent(
__isl_take isl_schedule_node *node);
__isl_give isl_schedule_node *isl_schedule_node_ancestor(
__isl_take isl_schedule_node *node, int generation);
+__isl_export
__isl_give isl_schedule_node *isl_schedule_node_child(
__isl_take isl_schedule_node *node, int pos);
__isl_give isl_schedule_node *isl_schedule_node_first_child(
@@ -83,6 +86,9 @@ isl_bool isl_schedule_node_is_subtree_an
__isl_give isl_schedule_node *isl_schedule_node_group(
__isl_take isl_schedule_node *node, __isl_take isl_id *group_id);
+__isl_give isl_schedule_node *isl_schedule_node_sequence_splice_child(
+ __isl_take isl_schedule_node *node, int pos);
+
__isl_give isl_space *isl_schedule_node_band_get_space(
__isl_keep isl_schedule_node *node);
__isl_give isl_multi_union_pw_aff *isl_schedule_node_band_get_partial_schedule(
@@ -105,8 +111,10 @@ __isl_give isl_union_set *isl_schedule_n
__isl_give isl_schedule_node *isl_schedule_node_band_set_ast_build_options(
__isl_take isl_schedule_node *node, __isl_take isl_union_set *options);
unsigned isl_schedule_node_band_n_member(__isl_keep isl_schedule_node *node);
+__isl_export
isl_bool isl_schedule_node_band_member_get_coincident(
__isl_keep isl_schedule_node *node, int pos);
+__isl_export
__isl_give isl_schedule_node *isl_schedule_node_band_member_set_coincident(
__isl_take isl_schedule_node *node, int pos, int coincident);
isl_bool isl_schedule_node_band_get_permutable(
@@ -157,12 +165,15 @@ __isl_give isl_union_set *isl_schedule_n
__isl_keep isl_schedule_node *node);
__isl_give isl_union_set *isl_schedule_node_get_universe_domain(
__isl_keep isl_schedule_node *node);
+__isl_export
__isl_give isl_multi_union_pw_aff *
isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(
__isl_keep isl_schedule_node *node);
+__isl_export
__isl_give isl_union_pw_multi_aff *
isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(
__isl_keep isl_schedule_node *node);
+__isl_export
__isl_give isl_union_map *isl_schedule_node_get_prefix_schedule_union_map(
__isl_keep isl_schedule_node *node);
__isl_give isl_union_map *isl_schedule_node_get_prefix_schedule_relation(
@@ -197,6 +208,8 @@ __isl_give isl_schedule_node *isl_schedu
__isl_give isl_schedule_node *isl_schedule_node_delete(
__isl_take isl_schedule_node *node);
+__isl_give isl_schedule_node *isl_schedule_node_order_before(
+ __isl_take isl_schedule_node *node, __isl_take isl_union_set *filter);
__isl_give isl_schedule_node *isl_schedule_node_order_after(
__isl_take isl_schedule_node *node, __isl_take isl_union_set *filter);
@@ -215,6 +228,7 @@ __isl_give isl_schedule_node *isl_schedu
__isl_give isl_printer *isl_printer_print_schedule_node(
__isl_take isl_printer *p, __isl_keep isl_schedule_node *node);
void isl_schedule_node_dump(__isl_keep isl_schedule_node *node);
+__isl_give char *isl_schedule_node_to_str(__isl_keep isl_schedule_node *node);
#if defined(__cplusplus)
}
Modified: polly/trunk/lib/External/isl/include/isl/schedule_type.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/schedule_type.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/schedule_type.h (original)
+++ polly/trunk/lib/External/isl/include/isl/schedule_type.h Fri Jan 15 09:54:45 2016
@@ -20,10 +20,10 @@ enum isl_schedule_node_type {
isl_schedule_node_set
};
-struct isl_schedule_node;
+struct __isl_export isl_schedule_node;
typedef struct isl_schedule_node isl_schedule_node;
-struct isl_schedule;
+struct __isl_export isl_schedule;
typedef struct isl_schedule isl_schedule;
#if defined(__cplusplus)
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/set.h (original)
+++ polly/trunk/lib/External/isl/include/isl/set.h Fri Jan 15 09:54:45 2016
@@ -440,7 +440,9 @@ isl_stat isl_set_foreach_point(__isl_kee
isl_stat (*fn)(__isl_take isl_point *pnt, void *user), void *user);
__isl_give isl_val *isl_set_count_val(__isl_keep isl_set *set);
+__isl_constructor
__isl_give isl_basic_set *isl_basic_set_from_point(__isl_take isl_point *pnt);
+__isl_constructor
__isl_give isl_set *isl_set_from_point(__isl_take isl_point *pnt);
__isl_give isl_basic_set *isl_basic_set_box_from_points(
__isl_take isl_point *pnt1, __isl_take isl_point *pnt2);
Modified: polly/trunk/lib/External/isl/include/isl/space.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/space.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/space.h (original)
+++ polly/trunk/lib/External/isl/include/isl/space.h Fri Jan 15 09:54:45 2016
@@ -141,6 +141,9 @@ __isl_give isl_space *isl_space_zip(__is
isl_bool isl_space_can_curry(__isl_keep isl_space *space);
__isl_give isl_space *isl_space_curry(__isl_take isl_space *space);
+isl_bool isl_space_can_range_curry(__isl_keep isl_space *space);
+__isl_give isl_space *isl_space_range_curry(__isl_take isl_space *space);
+
isl_bool isl_space_can_uncurry(__isl_keep isl_space *space);
__isl_give isl_space *isl_space_uncurry(__isl_take isl_space *space);
Modified: polly/trunk/lib/External/isl/include/isl/union_map.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/union_map.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/union_map.h (original)
+++ polly/trunk/lib/External/isl/include/isl/union_map.h Fri Jan 15 09:54:45 2016
@@ -40,12 +40,17 @@ int isl_union_map_find_dim_by_name(__isl
__isl_give isl_union_map *isl_union_map_universe(
__isl_take isl_union_map *umap);
__isl_give isl_set *isl_union_map_params(__isl_take isl_union_map *umap);
+__isl_export
__isl_give isl_union_set *isl_union_map_domain(__isl_take isl_union_map *umap);
+__isl_export
__isl_give isl_union_set *isl_union_map_range(__isl_take isl_union_map *umap);
+__isl_export
__isl_give isl_union_map *isl_union_map_domain_map(
__isl_take isl_union_map *umap);
+__isl_export
__isl_give isl_union_pw_multi_aff *isl_union_map_domain_map_union_pw_multi_aff(
__isl_take isl_union_map *umap);
+__isl_export
__isl_give isl_union_map *isl_union_map_range_map(
__isl_take isl_union_map *umap);
__isl_give isl_union_map *isl_union_set_wrapped_domain_map(
@@ -68,6 +73,7 @@ __isl_give isl_union_map *isl_union_map_
__isl_export
__isl_give isl_union_map *isl_union_map_coalesce(
__isl_take isl_union_map *umap);
+__isl_export
__isl_give isl_union_map *isl_union_map_compute_divs(
__isl_take isl_union_map *umap);
__isl_export
@@ -89,24 +95,35 @@ __isl_give isl_union_map *isl_union_map_
__isl_export
__isl_give isl_union_map *isl_union_map_intersect_params(
__isl_take isl_union_map *umap, __isl_take isl_set *set);
+__isl_export
__isl_give isl_union_map *isl_union_map_product(__isl_take isl_union_map *umap1,
__isl_take isl_union_map *umap2);
+__isl_export
__isl_give isl_union_map *isl_union_map_domain_product(
__isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2);
__isl_give isl_union_map *isl_union_map_flat_domain_product(
__isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2);
+__isl_export
__isl_give isl_union_map *isl_union_map_range_product(
__isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2);
__isl_give isl_union_map *isl_union_map_flat_range_product(
__isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2);
+__isl_export
__isl_give isl_union_map *isl_union_map_domain_factor_domain(
__isl_take isl_union_map *umap);
+__isl_export
__isl_give isl_union_map *isl_union_map_domain_factor_range(
__isl_take isl_union_map *umap);
+__isl_export
+__isl_give isl_union_map *isl_union_map_range_factor_domain(
+ __isl_take isl_union_map *umap);
+__isl_export
__isl_give isl_union_map *isl_union_map_range_factor_range(
__isl_take isl_union_map *umap);
+__isl_export
__isl_give isl_union_map *isl_union_map_factor_domain(
__isl_take isl_union_map *umap);
+__isl_export
__isl_give isl_union_map *isl_union_map_factor_range(
__isl_take isl_union_map *umap);
__isl_export
@@ -160,6 +177,7 @@ __isl_give isl_union_map *isl_union_map_
__isl_take isl_union_pw_multi_aff *upma);
__isl_export
__isl_give isl_union_map *isl_union_map_reverse(__isl_take isl_union_map *umap);
+__isl_export
__isl_give isl_union_map *isl_union_map_from_domain_and_range(
__isl_take isl_union_set *domain, __isl_take isl_union_set *range);
@@ -211,6 +229,7 @@ __isl_give isl_map *isl_map_from_union_m
__isl_give isl_basic_map *isl_union_map_sample(__isl_take isl_union_map *umap);
+__isl_overload
__isl_give isl_union_map *isl_union_map_fixed_power_val(
__isl_take isl_union_map *umap, __isl_take isl_val *exp);
__isl_give isl_union_map *isl_union_map_power(__isl_take isl_union_map *umap,
@@ -247,11 +266,16 @@ __isl_give isl_printer *isl_printer_prin
__isl_keep isl_union_map *umap);
void isl_union_map_dump(__isl_keep isl_union_map *umap);
+__isl_export
__isl_give isl_union_set *isl_union_map_wrap(__isl_take isl_union_map *umap);
+__isl_export
__isl_give isl_union_map *isl_union_set_unwrap(__isl_take isl_union_set *uset);
+__isl_export
__isl_give isl_union_map *isl_union_map_zip(__isl_take isl_union_map *umap);
__isl_give isl_union_map *isl_union_map_curry(__isl_take isl_union_map *umap);
+__isl_give isl_union_map *isl_union_map_range_curry(
+ __isl_take isl_union_map *umap);
__isl_give isl_union_map *isl_union_map_uncurry(__isl_take isl_union_map *umap);
__isl_give isl_union_map *isl_union_map_align_params(
Modified: polly/trunk/lib/External/isl/include/isl/union_set.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/include/isl/union_set.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/union_set.h (original)
+++ polly/trunk/lib/External/isl/include/isl/union_set.h Fri Jan 15 09:54:45 2016
@@ -46,6 +46,7 @@ __isl_give isl_union_set *isl_union_set_
__isl_export
__isl_give isl_union_set *isl_union_set_coalesce(
__isl_take isl_union_set *uset);
+__isl_export
__isl_give isl_union_set *isl_union_set_compute_divs(
__isl_take isl_union_set *uset);
__isl_export
@@ -55,6 +56,7 @@ __isl_give isl_union_set *isl_union_set_
__isl_give isl_union_set *isl_union_set_add_set(__isl_take isl_union_set *uset,
__isl_take isl_set *set);
+__isl_export
__isl_give isl_union_set *isl_union_set_union(__isl_take isl_union_set *uset1,
__isl_take isl_union_set *uset2);
__isl_export
@@ -115,10 +117,17 @@ __isl_give int isl_union_set_contains(__
__isl_give isl_set *isl_union_set_extract_set(__isl_keep isl_union_set *uset,
__isl_take isl_space *dim);
__isl_give isl_set *isl_set_from_union_set(__isl_take isl_union_set *uset);
+__isl_export
isl_stat isl_union_set_foreach_point(__isl_keep isl_union_set *uset,
isl_stat (*fn)(__isl_take isl_point *pnt, void *user), void *user);
__isl_give isl_basic_set *isl_union_set_sample(__isl_take isl_union_set *uset);
+__isl_export
+__isl_give isl_point *isl_union_set_sample_point(
+ __isl_take isl_union_set *uset);
+
+__isl_constructor
+__isl_give isl_union_set *isl_union_set_from_point(__isl_take isl_point *pnt);
__isl_give isl_union_set *isl_union_set_lift(__isl_take isl_union_set *uset);
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/include/isl/val.h (original)
+++ polly/trunk/lib/External/isl/include/isl/val.h Fri Jan 15 09:54:45 2016
@@ -10,12 +10,12 @@
extern "C" {
#endif
-struct isl_val;
+struct __isl_export isl_val;
typedef struct isl_val isl_val;
ISL_DECLARE_LIST(val)
-struct isl_multi_val;
+struct __isl_export isl_multi_val;
typedef struct isl_multi_val isl_multi_val;
ISL_DECLARE_MULTI(val)
@@ -23,12 +23,19 @@ ISL_DECLARE_MULTI_NEG(val)
ISL_DECLARE_MULTI_DIMS(val)
ISL_DECLARE_MULTI_WITH_DOMAIN(val)
+__isl_export
__isl_give isl_val *isl_val_zero(isl_ctx *ctx);
+__isl_export
__isl_give isl_val *isl_val_one(isl_ctx *ctx);
+__isl_export
__isl_give isl_val *isl_val_negone(isl_ctx *ctx);
+__isl_export
__isl_give isl_val *isl_val_nan(isl_ctx *ctx);
+__isl_export
__isl_give isl_val *isl_val_infty(isl_ctx *ctx);
+__isl_export
__isl_give isl_val *isl_val_neginfty(isl_ctx *ctx);
+__isl_constructor
__isl_give isl_val *isl_val_int_from_si(isl_ctx *ctx, long i);
__isl_give isl_val *isl_val_int_from_ui(isl_ctx *ctx, unsigned long u);
__isl_give isl_val *isl_val_int_from_chunks(isl_ctx *ctx, size_t n,
@@ -96,6 +103,7 @@ isl_bool isl_val_abs_eq(__isl_keep isl_v
isl_bool isl_val_is_divisible_by(__isl_keep isl_val *v1,
__isl_keep isl_val *v2);
+__isl_constructor
__isl_give isl_val *isl_val_read_from_str(isl_ctx *ctx, const char *str);
__isl_give isl_printer *isl_printer_print_val(__isl_take isl_printer *p,
__isl_keep isl_val *v);
Modified: polly/trunk/lib/External/isl/interface/all.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/interface/all.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/interface/all.h (original)
+++ polly/trunk/lib/External/isl/interface/all.h Fri Jan 15 09:54:45 2016
@@ -1,4 +1,9 @@
+#include <isl/val.h>
+#include <isl/aff.h>
#include <isl/set.h>
#include <isl/map.h>
#include <isl/union_set.h>
#include <isl/union_map.h>
+#include <isl/flow.h>
+#include <isl/schedule.h>
+#include <isl/schedule_node.h>
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_aff.c (original)
+++ polly/trunk/lib/External/isl/isl_aff.c Fri Jan 15 09:54:45 2016
@@ -1242,7 +1242,7 @@ __isl_give isl_aff *isl_aff_neg(__isl_ta
* expression, but we would also need to check that no other divs are
* defined in terms of them.
*/
-__isl_give isl_aff *isl_aff_remove_unused_divs( __isl_take isl_aff *aff)
+__isl_give isl_aff *isl_aff_remove_unused_divs(__isl_take isl_aff *aff)
{
int pos;
int off;
@@ -4380,58 +4380,198 @@ error:
return NULL;
}
-/* Given a basic map with a single output dimension that is defined
- * in terms of the parameters and input dimensions using an equality,
- * extract an isl_aff that expresses the output dimension in terms
+/* Subtract the initial "n" elements in "ma" with coefficients in "c" and
+ * denominator "denom".
+ * "denom" is allowed to be negative, in which case the actual denominator
+ * is -denom and the expressions are added instead.
+ */
+static __isl_give isl_aff *subtract_initial(__isl_take isl_aff *aff,
+ __isl_keep isl_multi_aff *ma, int n, isl_int *c, isl_int denom)
+{
+ int i, first;
+ int sign;
+ isl_int d;
+
+ first = isl_seq_first_non_zero(c, n);
+ if (first == -1)
+ return aff;
+
+ sign = isl_int_sgn(denom);
+ isl_int_init(d);
+ isl_int_abs(d, denom);
+ for (i = first; i < n; ++i) {
+ isl_aff *aff_i;
+
+ if (isl_int_is_zero(c[i]))
+ continue;
+ aff_i = isl_multi_aff_get_aff(ma, i);
+ aff_i = isl_aff_scale(aff_i, c[i]);
+ aff_i = isl_aff_scale_down(aff_i, d);
+ if (sign >= 0)
+ aff = isl_aff_sub(aff, aff_i);
+ else
+ aff = isl_aff_add(aff, aff_i);
+ }
+ isl_int_clear(d);
+
+ return aff;
+}
+
+/* Extract an affine expression that expresses the output dimension "pos"
+ * of "bmap" in terms of the parameters and input dimensions from
+ * equality "eq".
+ * Note that this expression may involve integer divisions defined
+ * in terms of parameters and input dimensions.
+ * The equality may also involve references to earlier (but not later)
+ * output dimensions. These are replaced by the corresponding elements
+ * in "ma".
+ *
+ * If the equality is of the form
+ *
+ * f(i) + h(j) + a x + g(i) = 0,
+ *
+ * with f(i) a linear combinations of the parameters and input dimensions,
+ * g(i) a linear combination of integer divisions defined in terms of the same
+ * and h(j) a linear combinations of earlier output dimensions,
+ * then the affine expression is
+ *
+ * (-f(i) - g(i))/a - h(j)/a
+ *
+ * If the equality is of the form
+ *
+ * f(i) + h(j) - a x + g(i) = 0,
+ *
+ * then the affine expression is
+ *
+ * (f(i) + g(i))/a - h(j)/(-a)
+ *
+ *
+ * If "div" refers to an integer division (i.e., it is smaller than
+ * the number of integer divisions), then the equality constraint
+ * does involve an integer division (the one at position "div") that
+ * is defined in terms of output dimensions. However, this integer
+ * division can be eliminated by exploiting a pair of constraints
+ * x >= l and x <= l + n, with n smaller than the coefficient of "div"
+ * in the equality constraint. "ineq" refers to inequality x >= l, i.e.,
+ * -l + x >= 0.
+ * In particular, let
+ *
+ * x = e(i) + m floor(...)
+ *
+ * with e(i) the expression derived above and floor(...) the integer
+ * division involving output dimensions.
+ * From
+ *
+ * l <= x <= l + n,
+ *
+ * we have
+ *
+ * 0 <= x - l <= n
+ *
+ * This means
+ *
+ * e(i) + m floor(...) - l = (e(i) + m floor(...) - l) mod m
+ * = (e(i) - l) mod m
+ *
+ * Therefore,
+ *
+ * x - l = (e(i) - l) mod m
+ *
+ * or
+ *
+ * x = ((e(i) - l) mod m) + l
+ *
+ * The variable "shift" below contains the expression -l, which may
+ * also involve a linear combination of earlier output dimensions.
+ */
+static __isl_give isl_aff *extract_aff_from_equality(
+ __isl_keep isl_basic_map *bmap, int pos, int eq, int div, int ineq,
+ __isl_keep isl_multi_aff *ma)
+{
+ unsigned o_out;
+ unsigned n_div, n_out;
+ isl_ctx *ctx;
+ isl_local_space *ls;
+ isl_aff *aff, *shift;
+ isl_val *mod;
+
+ ctx = isl_basic_map_get_ctx(bmap);
+ ls = isl_basic_map_get_local_space(bmap);
+ ls = isl_local_space_domain(ls);
+ aff = isl_aff_alloc(isl_local_space_copy(ls));
+ if (!aff)
+ goto error;
+ o_out = isl_basic_map_offset(bmap, isl_dim_out);
+ n_out = isl_basic_map_dim(bmap, isl_dim_out);
+ n_div = isl_basic_map_dim(bmap, isl_dim_div);
+ if (isl_int_is_neg(bmap->eq[eq][o_out + pos])) {
+ isl_seq_cpy(aff->v->el + 1, bmap->eq[eq], o_out);
+ isl_seq_cpy(aff->v->el + 1 + o_out,
+ bmap->eq[eq] + o_out + n_out, n_div);
+ } else {
+ isl_seq_neg(aff->v->el + 1, bmap->eq[eq], o_out);
+ isl_seq_neg(aff->v->el + 1 + o_out,
+ bmap->eq[eq] + o_out + n_out, n_div);
+ }
+ if (div < n_div)
+ isl_int_set_si(aff->v->el[1 + o_out + div], 0);
+ isl_int_abs(aff->v->el[0], bmap->eq[eq][o_out + pos]);
+ aff = subtract_initial(aff, ma, pos, bmap->eq[eq] + o_out,
+ bmap->eq[eq][o_out + pos]);
+ if (div < n_div) {
+ shift = isl_aff_alloc(isl_local_space_copy(ls));
+ if (!shift)
+ goto error;
+ isl_seq_cpy(shift->v->el + 1, bmap->ineq[ineq], o_out);
+ isl_seq_cpy(shift->v->el + 1 + o_out,
+ bmap->ineq[ineq] + o_out + n_out, n_div);
+ isl_int_set_si(shift->v->el[0], 1);
+ shift = subtract_initial(shift, ma, pos,
+ bmap->ineq[ineq] + o_out, ctx->negone);
+ aff = isl_aff_add(aff, isl_aff_copy(shift));
+ mod = isl_val_int_from_isl_int(ctx,
+ bmap->eq[eq][o_out + n_out + div]);
+ mod = isl_val_abs(mod);
+ aff = isl_aff_mod_val(aff, mod);
+ aff = isl_aff_sub(aff, shift);
+ }
+
+ isl_local_space_free(ls);
+ return aff;
+error:
+ isl_local_space_free(ls);
+ isl_aff_free(aff);
+ return NULL;
+}
+
+/* Given a basic map with output dimensions defined
+ * in terms of the parameters input dimensions and earlier
+ * output dimensions using an equality (and possibly a pair on inequalities),
+ * extract an isl_aff that expresses output dimension "pos" in terms
* of the parameters and input dimensions.
* Note that this expression may involve integer divisions defined
* in terms of parameters and input dimensions.
+ * "ma" contains the expressions corresponding to earlier output dimensions.
*
* This function shares some similarities with
* isl_basic_map_has_defining_equality and isl_constraint_get_bound.
*/
static __isl_give isl_aff *extract_isl_aff_from_basic_map(
- __isl_take isl_basic_map *bmap)
+ __isl_keep isl_basic_map *bmap, int pos, __isl_keep isl_multi_aff *ma)
{
- int eq;
- unsigned offset;
- unsigned n_div;
- isl_local_space *ls;
+ int eq, div, ineq;
isl_aff *aff;
if (!bmap)
return NULL;
- if (isl_basic_map_dim(bmap, isl_dim_out) != 1)
- isl_die(isl_basic_map_get_ctx(bmap), isl_error_invalid,
- "basic map should have a single output dimension",
- goto error);
- eq = isl_basic_map_output_defining_equality(bmap, 0);
+ eq = isl_basic_map_output_defining_equality(bmap, pos, &div, &ineq);
if (eq >= bmap->n_eq)
isl_die(isl_basic_map_get_ctx(bmap), isl_error_invalid,
- "unable to find suitable equality", goto error);
- ls = isl_basic_map_get_local_space(bmap);
- aff = isl_aff_alloc(isl_local_space_domain(ls));
- if (!aff)
- goto error;
- offset = isl_basic_map_offset(bmap, isl_dim_out);
- n_div = isl_basic_map_dim(bmap, isl_dim_div);
- if (isl_int_is_neg(bmap->eq[eq][offset])) {
- isl_seq_cpy(aff->v->el + 1, bmap->eq[eq], offset);
- isl_seq_cpy(aff->v->el + 1 + offset, bmap->eq[eq] + offset + 1,
- n_div);
- } else {
- isl_seq_neg(aff->v->el + 1, bmap->eq[eq], offset);
- isl_seq_neg(aff->v->el + 1 + offset, bmap->eq[eq] + offset + 1,
- n_div);
- }
- isl_int_abs(aff->v->el[0], bmap->eq[eq][offset]);
- isl_basic_map_free(bmap);
+ "unable to find suitable equality", return NULL);
+ aff = extract_aff_from_equality(bmap, pos, eq, div, ineq, ma);
aff = isl_aff_remove_unused_divs(aff);
return aff;
-error:
- isl_basic_map_free(bmap);
- return NULL;
}
/* Given a basic map where each output dimension is defined
@@ -4453,14 +4593,9 @@ static __isl_give isl_multi_aff *extract
n_out = isl_basic_map_dim(bmap, isl_dim_out);
for (i = 0; i < n_out; ++i) {
- isl_basic_map *bmap_i;
isl_aff *aff;
- bmap_i = isl_basic_map_copy(bmap);
- bmap_i = isl_basic_map_project_out(bmap_i, isl_dim_out,
- i + 1, n_out - (1 + i));
- bmap_i = isl_basic_map_project_out(bmap_i, isl_dim_out, 0, i);
- aff = extract_isl_aff_from_basic_map(bmap_i);
+ aff = extract_isl_aff_from_basic_map(bmap, i, ma);
ma = isl_multi_aff_set_aff(ma, i, aff);
}
@@ -4488,12 +4623,22 @@ __isl_give isl_multi_aff *isl_multi_aff_
* Since some applications expect the result of isl_pw_multi_aff_from_map
* to only contain integer affine expressions, we compute the floor
* of the expression before returning.
+ *
+ * Remove all constraints involving local variables without
+ * an explicit representation (resulting in the removal of those
+ * local variables) prior to the actual extraction to ensure
+ * that the local spaces in which the resulting affine expressions
+ * are created do not contain any unknown local variables.
+ * Removing such constraints is safe because constraints involving
+ * unknown local variables are not used to determine whether
+ * a basic map is obviously single-valued.
*/
static __isl_give isl_pw_multi_aff *plain_pw_multi_aff_from_map(
__isl_take isl_set *domain, __isl_take isl_basic_map *bmap)
{
isl_multi_aff *ma;
+ bmap = isl_basic_map_drop_constraint_involving_unknown_divs(bmap);
ma = extract_isl_multi_aff_from_basic_map(bmap);
ma = isl_multi_aff_floor(ma);
return isl_pw_multi_aff_alloc(domain, ma);
@@ -4800,7 +4945,7 @@ static __isl_give isl_multi_aff *range_m
*
* We basically plug (1) into "map", resulting in a map with "a"
* in the range instead of "x". The corresponding isl_pw_multi_aff
- * defining "a" is then plugged back into (1) to obtain a definition fro "x".
+ * defining "a" is then plugged back into (1) to obtain a definition for "x".
*
* Specifically, given the input map
*
@@ -4914,8 +5059,8 @@ static __isl_give isl_pw_multi_aff *pw_m
*
* x = m a + f(..)
*
- * with m greater than 1, a some combination of existentiall quantified
- * variables and f and expression in the parameters and input dimensions.
+ * with m greater than 1, a some combination of existentially quantified
+ * variables and f an expression in the parameters and input dimensions.
* If so, we remove the stride in pw_multi_aff_from_map_stride.
*
* Otherwise, we continue with pw_multi_aff_from_map_check_div for a further
@@ -4924,7 +5069,7 @@ static __isl_give isl_pw_multi_aff *pw_m
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_map(__isl_take isl_map *map)
{
int i, j;
- int sv;
+ isl_bool sv;
isl_basic_map *hull;
unsigned n_out;
unsigned o_out;
@@ -4935,7 +5080,8 @@ __isl_give isl_pw_multi_aff *isl_pw_mult
if (!map)
return NULL;
- hull = isl_map_affine_hull(isl_map_copy(map));
+ map = isl_map_detect_equalities(map);
+ hull = isl_map_unshifted_simple_hull(isl_map_copy(map));
sv = isl_basic_map_plain_is_single_valued(hull);
if (sv >= 0 && sv)
return plain_pw_multi_aff_from_map(isl_map_domain(map), hull);
Modified: polly/trunk/lib/External/isl/isl_affine_hull.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_affine_hull.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_affine_hull.c (original)
+++ polly/trunk/lib/External/isl/isl_affine_hull.c Fri Jan 15 09:54:45 2016
@@ -652,6 +652,9 @@ __isl_give isl_map *isl_map_drop_constra
return isl_map_free(map);
}
+ if (map->n > 1)
+ ISL_F_CLR(map, ISL_MAP_DISJOINT);
+
return map;
}
Modified: polly/trunk/lib/External/isl/isl_ast_codegen.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_ast_codegen.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_ast_codegen.c (original)
+++ polly/trunk/lib/External/isl/isl_ast_codegen.c Fri Jan 15 09:54:45 2016
@@ -109,6 +109,54 @@ static __isl_give isl_ast_graft *at_each
return graft;
}
+/* Generate a call expression for the single executed
+ * domain element "map" and put a guard around it based its (simplified)
+ * domain. "executed" is the original inverse schedule from which "map"
+ * has been derived. In particular, "map" is either identical to "executed"
+ * or it is the result of gisting "executed" with respect to the build domain.
+ * "executed" is only used if there is an at_each_domain callback.
+ *
+ * At this stage, any pending constraints in the build can no longer
+ * be simplified with respect to any enforced constraints since
+ * the call node does not have any enforced constraints.
+ * Since all pending constraints not covered by any enforced constraints
+ * will be added as a guard to the graft in create_node_scaled,
+ * even in the eliminated case, the pending constraints
+ * can be considered to have been generated by outer constructs.
+ *
+ * If the user has set an at_each_domain callback, it is called
+ * on the constructed call expression node.
+ */
+static isl_stat add_domain(__isl_take isl_map *executed,
+ __isl_take isl_map *map, struct isl_generate_domain_data *data)
+{
+ isl_ast_build *build;
+ isl_ast_graft *graft;
+ isl_ast_graft_list *list;
+ isl_set *guard, *pending;
+
+ build = isl_ast_build_copy(data->build);
+ pending = isl_ast_build_get_pending(build);
+ build = isl_ast_build_replace_pending_by_guard(build, pending);
+
+ guard = isl_map_domain(isl_map_copy(map));
+ guard = isl_set_compute_divs(guard);
+ guard = isl_set_coalesce(guard);
+ guard = isl_set_gist(guard, isl_ast_build_get_generated(build));
+ guard = isl_ast_build_specialize(build, guard);
+
+ graft = isl_ast_graft_alloc_domain(map, build);
+ graft = at_each_domain(graft, executed, build);
+ isl_ast_build_free(build);
+ isl_map_free(executed);
+ graft = isl_ast_graft_add_guard(graft, guard, data->build);
+
+ list = isl_ast_graft_list_from_ast_graft(graft);
+ data->list = isl_ast_graft_list_concat(data->list, list);
+
+ return isl_stat_ok;
+}
+
/* Generate an AST for a single domain based on
* the inverse schedule "executed" and add it to data->list.
*
@@ -127,7 +175,11 @@ static __isl_give isl_ast_graft *at_each
* On the other hand, we only perform the test after having taken the gist
* of the domain as the resulting map is the one from which the call
* expression is constructed. Using this map to construct the call
- * expression usually yields simpler results.
+ * expression usually yields simpler results in cases where the original
+ * map is not obviously single-valued.
+ * If the original map is obviously single-valued, then the gist
+ * operation is skipped.
+ *
* Because we perform the single-valuedness test on the gisted map,
* we may in rare cases fail to recognize that the inverse schedule
* is single-valued. This becomes problematic if this happens
@@ -137,29 +189,13 @@ static __isl_give isl_ast_graft *at_each
* and revert to the ungisted map if the gisted map turns out not to be
* single-valued.
*
- * Otherwise, we generate a call expression for the single executed
- * domain element and put a guard around it based on the (simplified)
- * domain of "executed".
- *
- * At this stage, any pending constraints in the build can no longer
- * be simplified with respect to any enforced constraints since
- * the call node does not have any enforced constraints.
- * We therefore turn all pending constraints into guards
- * (after simplifying them with respect to the already generated
- * constraints) and add them to both the generated constraints
- * and the guard of the constructed graft. This guard will ensure
- * that the constraints are effectively generated.
- *
- * If the user has set an at_each_domain callback, it is called
- * on the constructed call expression node.
+ * Otherwise, call add_domain to generate a call expression (with guard) and
+ * to call the at_each_domain callback, if any.
*/
static isl_stat generate_domain(__isl_take isl_map *executed, void *user)
{
struct isl_generate_domain_data *data = user;
- isl_ast_build *build;
- isl_ast_graft *graft;
- isl_ast_graft_list *list;
- isl_set *guard, *domain;
+ isl_set *domain;
isl_map *map = NULL;
int empty, sv;
@@ -174,6 +210,12 @@ static isl_stat generate_domain(__isl_ta
return isl_stat_ok;
}
+ sv = isl_map_plain_is_single_valued(executed);
+ if (sv < 0)
+ goto error;
+ if (sv)
+ return add_domain(executed, isl_map_copy(executed), data);
+
executed = isl_map_coalesce(executed);
map = isl_map_copy(executed);
map = isl_ast_build_compute_gist_map_domain(data->build, map);
@@ -187,27 +229,8 @@ static isl_stat generate_domain(__isl_ta
else
return generate_non_single_valued(executed, data);
}
- guard = isl_map_domain(isl_map_copy(map));
- guard = isl_set_compute_divs(guard);
- guard = isl_set_intersect(guard,
- isl_ast_build_get_pending(data->build));
- guard = isl_set_coalesce(guard);
- guard = isl_ast_build_specialize(data->build, guard);
- guard = isl_set_gist(guard, isl_ast_build_get_generated(data->build));
-
- build = isl_ast_build_copy(data->build);
- build = isl_ast_build_replace_pending_by_guard(build,
- isl_set_copy(guard));
- graft = isl_ast_graft_alloc_domain(map, build);
- graft = at_each_domain(graft, executed, build);
- isl_ast_build_free(build);
- isl_map_free(executed);
- graft = isl_ast_graft_add_guard(graft, guard, data->build);
- list = isl_ast_graft_list_from_ast_graft(graft);
- data->list = isl_ast_graft_list_concat(data->list, list);
-
- return isl_stat_ok;
+ return add_domain(executed, map, data);
error:
isl_map_free(map);
isl_map_free(executed);
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_coalesce.c (original)
+++ polly/trunk/lib/External/isl/isl_coalesce.c Fri Jan 15 09:54:45 2016
@@ -2153,7 +2153,7 @@ error:
static int add_sub_vars(struct isl_coalesce_info *info,
__isl_keep isl_aff_list *list, int dim, int extra_var)
{
- int i, n;
+ int i, j, n;
isl_space *space;
space = isl_basic_map_get_space(info->bmap);
@@ -2179,8 +2179,8 @@ static int add_sub_vars(struct isl_coale
return -1;
if (isl_basic_map_alloc_div(info->bmap) < 0)
return -1;
- if (i != n - 1)
- isl_basic_map_swap_div(info->bmap, i, n - 1);
+ for (j = n - 1; j > i; --j)
+ isl_basic_map_swap_div(info->bmap, j - 1, j);
}
return 0;
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_config.h.in (original)
+++ polly/trunk/lib/External/isl/isl_config.h.in Fri Jan 15 09:54:45 2016
@@ -197,4 +197,7 @@
/* Define to getResultType for older versions of clang */
#undef getReturnType
+/* Define to InitializeBuiltins for older versions of clang */
+#undef initializeBuiltins
+
#include <isl_config_post.h>
Modified: polly/trunk/lib/External/isl/isl_convex_hull.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_convex_hull.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_convex_hull.c (original)
+++ polly/trunk/lib/External/isl/isl_convex_hull.c Fri Jan 15 09:54:45 2016
@@ -2414,6 +2414,176 @@ __isl_give isl_basic_set *isl_set_unshif
return isl_map_unshifted_simple_hull(set);
}
+/* Drop all inequalities from "bmap1" that do not also appear in "bmap2".
+ * A constraint that appears with different constant terms
+ * in "bmap1" and "bmap2" is also kept, with the least restrictive
+ * (i.e., greatest) constant term.
+ * "bmap1" and "bmap2" are assumed to have the same (known)
+ * integer divisions.
+ * The constraints of both "bmap1" and "bmap2" are assumed
+ * to have been sorted using isl_basic_map_sort_constraints.
+ *
+ * Run through the inequality constraints of "bmap1" and "bmap2"
+ * in sorted order.
+ * Each constraint of "bmap1" without a matching constraint in "bmap2"
+ * is removed.
+ * If a match is found, the constraint is kept. If needed, the constant
+ * term of the constraint is adjusted.
+ */
+static __isl_give isl_basic_map *select_shared_inequalities(
+ __isl_take isl_basic_map *bmap1, __isl_keep isl_basic_map *bmap2)
+{
+ int i1, i2;
+
+ bmap1 = isl_basic_map_cow(bmap1);
+ if (!bmap1 || !bmap2)
+ return isl_basic_map_free(bmap1);
+
+ i1 = bmap1->n_ineq - 1;
+ i2 = bmap2->n_ineq - 1;
+ while (bmap1 && i1 >= 0 && i2 >= 0) {
+ int cmp;
+
+ cmp = isl_basic_map_constraint_cmp(bmap1, bmap1->ineq[i1],
+ bmap2->ineq[i2]);
+ if (cmp < 0) {
+ --i2;
+ continue;
+ }
+ if (cmp > 0) {
+ if (isl_basic_map_drop_inequality(bmap1, i1) < 0)
+ bmap1 = isl_basic_map_free(bmap1);
+ --i1;
+ continue;
+ }
+ if (isl_int_lt(bmap1->ineq[i1][0], bmap2->ineq[i2][0]))
+ isl_int_set(bmap1->ineq[i1][0], bmap2->ineq[i2][0]);
+ --i1;
+ --i2;
+ }
+ for (; i1 >= 0; --i1)
+ if (isl_basic_map_drop_inequality(bmap1, i1) < 0)
+ bmap1 = isl_basic_map_free(bmap1);
+
+ return bmap1;
+}
+
+/* Drop all equalities from "bmap1" that do not also appear in "bmap2".
+ * "bmap1" and "bmap2" are assumed to have the same (known)
+ * integer divisions.
+ *
+ * Run through the equality constraints of "bmap1" and "bmap2".
+ * Each constraint of "bmap1" without a matching constraint in "bmap2"
+ * is removed.
+ */
+static __isl_give isl_basic_map *select_shared_equalities(
+ __isl_take isl_basic_map *bmap1, __isl_keep isl_basic_map *bmap2)
+{
+ int i1, i2;
+ unsigned total;
+
+ bmap1 = isl_basic_map_cow(bmap1);
+ if (!bmap1 || !bmap2)
+ return isl_basic_map_free(bmap1);
+
+ total = isl_basic_map_total_dim(bmap1);
+
+ i1 = bmap1->n_eq - 1;
+ i2 = bmap2->n_eq - 1;
+ while (bmap1 && i1 >= 0 && i2 >= 0) {
+ int last1, last2;
+
+ last1 = isl_seq_last_non_zero(bmap1->eq[i1] + 1, total);
+ last2 = isl_seq_last_non_zero(bmap2->eq[i2] + 1, total);
+ if (last1 > last2) {
+ --i2;
+ continue;
+ }
+ if (last1 < last2) {
+ if (isl_basic_map_drop_equality(bmap1, i1) < 0)
+ bmap1 = isl_basic_map_free(bmap1);
+ --i1;
+ continue;
+ }
+ if (!isl_seq_eq(bmap1->eq[i1], bmap2->eq[i2], 1 + total)) {
+ if (isl_basic_map_drop_equality(bmap1, i1) < 0)
+ bmap1 = isl_basic_map_free(bmap1);
+ }
+ --i1;
+ --i2;
+ }
+ for (; i1 >= 0; --i1)
+ if (isl_basic_map_drop_equality(bmap1, i1) < 0)
+ bmap1 = isl_basic_map_free(bmap1);
+
+ return bmap1;
+}
+
+/* Compute a superset of "bmap1" and "bmap2" that is described
+ * by only the constraints that appear in both "bmap1" and "bmap2".
+ *
+ * First drop constraints that involve unknown integer divisions
+ * since it is not trivial to check whether two such integer divisions
+ * in different basic maps are the same.
+ * Then align the remaining (known) divs and sort the constraints.
+ * Finally drop all inequalities and equalities from "bmap1" that
+ * do not also appear in "bmap2".
+ */
+__isl_give isl_basic_map *isl_basic_map_plain_unshifted_simple_hull(
+ __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2)
+{
+ bmap1 = isl_basic_map_drop_constraint_involving_unknown_divs(bmap1);
+ bmap2 = isl_basic_map_drop_constraint_involving_unknown_divs(bmap2);
+ bmap2 = isl_basic_map_align_divs(bmap2, bmap1);
+ bmap1 = isl_basic_map_align_divs(bmap1, bmap2);
+ bmap1 = isl_basic_map_gauss(bmap1, NULL);
+ bmap2 = isl_basic_map_gauss(bmap2, NULL);
+ bmap1 = isl_basic_map_sort_constraints(bmap1);
+ bmap2 = isl_basic_map_sort_constraints(bmap2);
+
+ bmap1 = select_shared_inequalities(bmap1, bmap2);
+ bmap1 = select_shared_equalities(bmap1, bmap2);
+
+ isl_basic_map_free(bmap2);
+ bmap1 = isl_basic_map_finalize(bmap1);
+ return bmap1;
+}
+
+/* Compute a superset of the convex hull of "map" that is described
+ * by only the constraints in the constituents of "map".
+ * In particular, the result is composed of constraints that appear
+ * in each of the basic maps of "map"
+ *
+ * Constraints that involve unknown integer divisions are dropped
+ * since it is not trivial to check whether two such integer divisions
+ * in different basic maps are the same.
+ *
+ * The hull is initialized from the first basic map and then
+ * updated with respect to the other basic maps in turn.
+ */
+__isl_give isl_basic_map *isl_map_plain_unshifted_simple_hull(
+ __isl_take isl_map *map)
+{
+ int i;
+ isl_basic_map *hull;
+
+ if (!map)
+ return NULL;
+ if (map->n <= 1)
+ return map_simple_hull_trivial(map);
+ map = isl_map_drop_constraint_involving_unknown_divs(map);
+ hull = isl_basic_map_copy(map->p[0]);
+ for (i = 1; i < map->n; ++i) {
+ isl_basic_map *bmap_i;
+
+ bmap_i = isl_basic_map_copy(map->p[i]);
+ hull = isl_basic_map_plain_unshifted_simple_hull(hull, bmap_i);
+ }
+
+ isl_map_free(map);
+ return hull;
+}
+
/* Check if "ineq" is a bound on "set" and, if so, add it to "hull".
*
* For each basic set in "set", we first check if the basic set
Modified: polly/trunk/lib/External/isl/isl_flow.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_flow.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_flow.c (original)
+++ polly/trunk/lib/External/isl/isl_flow.c Fri Jan 15 09:54:45 2016
@@ -167,6 +167,8 @@ struct isl_labeled_map {
*
* domain_map is an auxiliary map that maps the sink access relation
* to the domain of this access relation.
+ * This field is only needed when restrict_fn is set and
+ * the field itself is set by isl_access_info_compute_flow.
*
* restrict_fn is a callback that (if not NULL) will be called
* right before any lexicographical maximization.
@@ -1062,18 +1064,17 @@ error:
*
* To deal with multi-valued sink access relations, the sink iteration
* domain is first extended with dimensions that correspond to the data
- * space. After the computation is finished, these extra dimensions are
- * projected out again.
+ * space. However, these extra dimensions are not projected out again.
+ * It is up to the caller to decide whether these dimensions should be kept.
*/
-__isl_give isl_flow *isl_access_info_compute_flow(__isl_take isl_access_info *acc)
+static __isl_give isl_flow *access_info_compute_flow_core(
+ __isl_take isl_access_info *acc)
{
- int j;
struct isl_flow *res = NULL;
if (!acc)
return NULL;
- acc->domain_map = isl_map_domain_map(isl_map_copy(acc->sink.map));
acc->sink.map = isl_map_range_map(acc->sink.map);
if (!acc->sink.map)
goto error;
@@ -1084,22 +1085,56 @@ __isl_give isl_flow *isl_access_info_com
acc = isl_access_info_sort_sources(acc);
res = compute_val_based_dependences(acc);
}
+ acc = isl_access_info_free(acc);
if (!res)
+ return NULL;
+ if (!res->must_no_source || !res->may_no_source)
goto error;
+ return res;
+error:
+ isl_access_info_free(acc);
+ isl_flow_free(res);
+ return NULL;
+}
+
+/* Given a "sink" access, a list of n "source" accesses,
+ * compute for each iteration of the sink access
+ * and for each element accessed by that iteration,
+ * the source access in the list that last accessed the
+ * element accessed by the sink access before this sink access.
+ * Each access is given as a map from the loop iterators
+ * to the array indices.
+ * The result is a list of n relations between source and sink
+ * iterations and a subset of the domain of the sink access,
+ * corresponding to those iterations that access an element
+ * not previously accessed.
+ *
+ * To deal with multi-valued sink access relations,
+ * access_info_compute_flow_core extends the sink iteration domain
+ * with dimensions that correspond to the data space. These extra dimensions
+ * are projected out from the result of access_info_compute_flow_core.
+ */
+__isl_give isl_flow *isl_access_info_compute_flow(__isl_take isl_access_info *acc)
+{
+ int j;
+ struct isl_flow *res;
+
+ if (!acc)
+ return NULL;
+
+ acc->domain_map = isl_map_domain_map(isl_map_copy(acc->sink.map));
+ res = access_info_compute_flow_core(acc);
+ if (!res)
+ return NULL;
for (j = 0; j < res->n_source; ++j) {
- res->dep[j].map = isl_map_apply_range(res->dep[j].map,
- isl_map_copy(acc->domain_map));
+ res->dep[j].map = isl_map_range_factor_domain(res->dep[j].map);
if (!res->dep[j].map)
goto error;
}
- if (!res->must_no_source || !res->may_no_source)
- goto error;
- isl_access_info_free(acc);
return res;
error:
- isl_access_info_free(acc);
isl_flow_free(res);
return NULL;
}
@@ -1368,6 +1403,70 @@ __isl_give isl_union_access_info *isl_un
return copy;
}
+/* Print a key-value pair of a YAML mapping to "p",
+ * with key "name" and value "umap".
+ */
+static __isl_give isl_printer *print_union_map_field(__isl_take isl_printer *p,
+ const char *name, __isl_keep isl_union_map *umap)
+{
+ p = isl_printer_print_str(p, name);
+ p = isl_printer_yaml_next(p);
+ p = isl_printer_print_str(p, "\"");
+ p = isl_printer_print_union_map(p, umap);
+ p = isl_printer_print_str(p, "\"");
+ p = isl_printer_yaml_next(p);
+
+ return p;
+}
+
+/* Print the information contained in "access" to "p".
+ * The information is printed as a YAML document.
+ */
+__isl_give isl_printer *isl_printer_print_union_access_info(
+ __isl_take isl_printer *p, __isl_keep isl_union_access_info *access)
+{
+ if (!access)
+ return isl_printer_free(p);
+
+ p = isl_printer_yaml_start_mapping(p);
+ p = print_union_map_field(p, "sink", access->sink);
+ p = print_union_map_field(p, "must_source", access->must_source);
+ p = print_union_map_field(p, "may_source", access->may_source);
+ if (access->schedule) {
+ p = isl_printer_print_str(p, "schedule");
+ p = isl_printer_yaml_next(p);
+ p = isl_printer_print_schedule(p, access->schedule);
+ p = isl_printer_yaml_next(p);
+ } else {
+ p = print_union_map_field(p, "schedule_map",
+ access->schedule_map);
+ }
+ p = isl_printer_yaml_end_mapping(p);
+
+ return p;
+}
+
+/* Return a string representation of the information in "access".
+ * The information is printed in flow format.
+ */
+__isl_give char *isl_union_access_info_to_str(
+ __isl_keep isl_union_access_info *access)
+{
+ isl_printer *p;
+ char *s;
+
+ if (!access)
+ return NULL;
+
+ p = isl_printer_to_str(isl_union_access_info_get_ctx(access));
+ p = isl_printer_set_yaml_style(p, ISL_YAML_STYLE_FLOW);
+ p = isl_printer_print_union_access_info(p, access);
+ s = isl_printer_get_str(p);
+ isl_printer_free(p);
+
+ return s;
+}
+
/* Update the fields of "access" such that they all have the same parameters,
* keeping in mind that the schedule_map field may be NULL and ignoring
* the schedule field.
@@ -1457,10 +1556,15 @@ isl_union_access_info_introduce_schedule
return access;
}
-/* This structure epresents the result of a dependence analysis computation.
+/* This structure represents the result of a dependence analysis computation.
*
- * "must_dep" represents the definite dependences.
- * "may_dep" represents the non-definite dependences.
+ * "must_dep" represents the full definite dependences
+ * "may_dep" represents the full non-definite dependences.
+ * Both are of the form
+ *
+ * [Source] -> [[Sink -> Data]]
+ *
+ * (after the schedule dimensions have been projected out).
* "must_no_source" represents the subset of the sink accesses for which
* definitely no source was found.
* "may_no_source" represents the subset of the sink accesses for which
@@ -1509,9 +1613,9 @@ void isl_union_flow_dump(__isl_keep isl_
isl_union_map_dump(flow->may_no_source);
}
-/* Return the definite dependences in "flow".
+/* Return the full definite dependences in "flow", with accessed elements.
*/
-__isl_give isl_union_map *isl_union_flow_get_must_dependence(
+__isl_give isl_union_map *isl_union_flow_get_full_must_dependence(
__isl_keep isl_union_flow *flow)
{
if (!flow)
@@ -1519,16 +1623,44 @@ __isl_give isl_union_map *isl_union_flow
return isl_union_map_copy(flow->must_dep);
}
+/* Return the full possible dependences in "flow", including the definite
+ * dependences, with accessed elements.
+ */
+__isl_give isl_union_map *isl_union_flow_get_full_may_dependence(
+ __isl_keep isl_union_flow *flow)
+{
+ if (!flow)
+ return NULL;
+ return isl_union_map_union(isl_union_map_copy(flow->must_dep),
+ isl_union_map_copy(flow->may_dep));
+}
+
+/* Return the definite dependences in "flow", without the accessed elements.
+ */
+__isl_give isl_union_map *isl_union_flow_get_must_dependence(
+ __isl_keep isl_union_flow *flow)
+{
+ isl_union_map *dep;
+
+ if (!flow)
+ return NULL;
+ dep = isl_union_map_copy(flow->must_dep);
+ return isl_union_map_range_factor_domain(dep);
+}
+
/* Return the possible dependences in "flow", including the definite
- * dependences.
+ * dependences, without the accessed elements.
*/
__isl_give isl_union_map *isl_union_flow_get_may_dependence(
__isl_keep isl_union_flow *flow)
{
+ isl_union_map *dep;
+
if (!flow)
return NULL;
- return isl_union_map_union(isl_union_map_copy(flow->must_dep),
+ dep = isl_union_map_union(isl_union_map_copy(flow->must_dep),
isl_union_map_copy(flow->may_dep));
+ return isl_union_map_range_factor_domain(dep);
}
/* Return the non-definite dependences in "flow".
@@ -1614,6 +1746,20 @@ error:
* to the iteration domains prior to the dependence analysis by
* replacing the iteration domain D, by the wrapped map [S -> D].
* Replace these wrapped maps by the original D.
+ *
+ * In particular, the dependences computed by access_info_compute_flow_core
+ * are of the form
+ *
+ * [S -> D] -> [[S' -> D'] -> A]
+ *
+ * The schedule dimensions are projected out by first currying the range,
+ * resulting in
+ *
+ * [S -> D] -> [S' -> [D' -> A]]
+ *
+ * and then computing the factor range
+ *
+ * D -> [D' -> A]
*/
static __isl_give isl_union_flow *isl_union_flow_drop_schedule(
__isl_take isl_union_flow *flow)
@@ -1621,7 +1767,9 @@ static __isl_give isl_union_flow *isl_un
if (!flow)
return NULL;
+ flow->must_dep = isl_union_map_range_curry(flow->must_dep);
flow->must_dep = isl_union_map_factor_range(flow->must_dep);
+ flow->may_dep = isl_union_map_range_curry(flow->may_dep);
flow->may_dep = isl_union_map_factor_range(flow->may_dep);
flow->must_no_source =
isl_union_map_domain_factor_range(flow->must_no_source);
@@ -1754,7 +1902,7 @@ static int before(void *first, void *sec
/* Given a sink access, look for all the source accesses that access
* the same array and perform dataflow analysis on them using
- * isl_access_info_compute_flow.
+ * isl_access_info_compute_flow_core.
*/
static isl_stat compute_flow(__isl_take isl_map *map, void *user)
{
@@ -1801,7 +1949,7 @@ static isl_stat compute_flow(__isl_take
&collect_matching_array, data) < 0)
goto error;
- flow = isl_access_info_compute_flow(data->accesses);
+ flow = access_info_compute_flow_core(data->accesses);
data->accesses = NULL;
if (!flow)
@@ -2233,6 +2381,19 @@ error:
/* Given a scheduled sink access relation "sink", compute the corresponding
* dependences on the sources in "data" and add the computed dependences
* to "uf".
+ *
+ * The dependences computed by access_info_compute_flow_core are of the form
+ *
+ * [S -> I] -> [[S' -> I'] -> A]
+ *
+ * The schedule dimensions are projected out by first currying the range,
+ * resulting in
+ *
+ * [S -> I] -> [S' -> [I' -> A]]
+ *
+ * and then computing the factor range
+ *
+ * I -> [I' -> A]
*/
static __isl_give isl_union_flow *compute_single_flow(
__isl_take isl_union_flow *uf, struct isl_scheduled_access *sink,
@@ -2250,7 +2411,7 @@ static __isl_give isl_union_flow *comput
&before_node, data->n_source);
access = add_matching_sources(access, sink, data);
- flow = isl_access_info_compute_flow(access);
+ flow = access_info_compute_flow_core(access);
if (!flow)
return isl_union_flow_free(uf);
@@ -2264,7 +2425,8 @@ static __isl_give isl_union_flow *comput
for (i = 0; i < flow->n_source; ++i) {
isl_union_map *dep;
- map = isl_map_factor_range(isl_map_copy(flow->dep[i].map));
+ map = isl_map_range_curry(isl_map_copy(flow->dep[i].map));
+ map = isl_map_factor_range(map);
dep = isl_union_map_from_map(map);
if (flow->dep[i].must)
uf->must_dep = isl_union_map_union(uf->must_dep, dep);
@@ -2371,6 +2533,51 @@ __isl_give isl_union_flow *isl_union_acc
return compute_flow_union_map(access);
}
+/* Print the information contained in "flow" to "p".
+ * The information is printed as a YAML document.
+ */
+__isl_give isl_printer *isl_printer_print_union_flow(
+ __isl_take isl_printer *p, __isl_keep isl_union_flow *flow)
+{
+ isl_union_map *umap;
+
+ if (!flow)
+ return isl_printer_free(p);
+
+ p = isl_printer_yaml_start_mapping(p);
+ p = print_union_map_field(p, "must_dependence", flow->must_dep);
+ umap = isl_union_flow_get_may_dependence(flow);
+ p = print_union_map_field(p, "may_dependence", umap);
+ isl_union_map_free(umap);
+ p = print_union_map_field(p, "must_no_source", flow->must_no_source);
+ umap = isl_union_flow_get_may_no_source(flow);
+ p = print_union_map_field(p, "may_no_source", umap);
+ isl_union_map_free(umap);
+ p = isl_printer_yaml_end_mapping(p);
+
+ return p;
+}
+
+/* Return a string representation of the information in "flow".
+ * The information is printed in flow format.
+ */
+__isl_give char *isl_union_flow_to_str(__isl_keep isl_union_flow *flow)
+{
+ isl_printer *p;
+ char *s;
+
+ if (!flow)
+ return NULL;
+
+ p = isl_printer_to_str(isl_union_flow_get_ctx(flow));
+ p = isl_printer_set_yaml_style(p, ISL_YAML_STYLE_FLOW);
+ p = isl_printer_print_union_flow(p, flow);
+ s = isl_printer_get_str(p);
+ isl_printer_free(p);
+
+ return s;
+}
+
/* Given a collection of "sink" and "source" accesses,
* compute for each iteration of a sink access
* and for each element accessed by that iteration,
Modified: polly/trunk/lib/External/isl/isl_input.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_input.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_input.c (original)
+++ polly/trunk/lib/External/isl/isl_input.c Fri Jan 15 09:54:45 2016
@@ -658,10 +658,28 @@ error:
return NULL;
}
+/* Is "type" the type of a comparison operator between lists
+ * of affine expressions?
+ */
+static int is_list_comparator_type(int type)
+{
+ switch (type) {
+ case ISL_TOKEN_LEX_LT:
+ case ISL_TOKEN_LEX_GT:
+ case ISL_TOKEN_LEX_LE:
+ case ISL_TOKEN_LEX_GE:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
static int is_comparator(struct isl_token *tok)
{
if (!tok)
return 0;
+ if (is_list_comparator_type(tok->type))
+ return 1;
switch (tok->type) {
case ISL_TOKEN_LT:
@@ -1426,6 +1444,81 @@ static __isl_give isl_map *read_map_tupl
return map_from_tuple(tuple, map, type, v, rational);
}
+/* Given two equal-length lists of piecewise affine expression with the space
+ * of "set" as domain, construct a set in the same space that expresses
+ * that "left" and "right" satisfy the comparison "type".
+ *
+ * A space is constructed of the same dimension as the number of elements
+ * in the two lists. The comparison is then expressed in a map from
+ * this space to itself and wrapped into a set. Finally the two lists
+ * of piecewise affine expressions are plugged into this set.
+ *
+ * Let S be the space of "set" and T the constructed space.
+ * The lists are first changed into two isl_multi_pw_affs in S -> T and
+ * then combined into an isl_multi_pw_aff in S -> [T -> T],
+ * while the comparison is first expressed in T -> T, then [T -> T]
+ * and finally in S.
+ */
+static __isl_give isl_set *list_cmp(__isl_keep isl_set *set, int type,
+ __isl_take isl_pw_aff_list *left, __isl_take isl_pw_aff_list *right)
+{
+ isl_space *space;
+ int n;
+ isl_multi_pw_aff *mpa1, *mpa2;
+
+ if (!set || !left || !right)
+ goto error;
+
+ space = isl_set_get_space(set);
+ n = isl_pw_aff_list_n_pw_aff(left);
+ space = isl_space_from_domain(space);
+ space = isl_space_add_dims(space, isl_dim_out, n);
+ mpa1 = isl_multi_pw_aff_from_pw_aff_list(isl_space_copy(space), left);
+ mpa2 = isl_multi_pw_aff_from_pw_aff_list(isl_space_copy(space), right);
+ mpa1 = isl_multi_pw_aff_range_product(mpa1, mpa2);
+
+ space = isl_space_range(space);
+ switch (type) {
+ case ISL_TOKEN_LEX_LT:
+ set = isl_map_wrap(isl_map_lex_lt(space));
+ break;
+ case ISL_TOKEN_LEX_GT:
+ set = isl_map_wrap(isl_map_lex_gt(space));
+ break;
+ case ISL_TOKEN_LEX_LE:
+ set = isl_map_wrap(isl_map_lex_le(space));
+ break;
+ case ISL_TOKEN_LEX_GE:
+ set = isl_map_wrap(isl_map_lex_ge(space));
+ break;
+ default:
+ isl_multi_pw_aff_free(mpa1);
+ isl_space_free(space);
+ isl_die(isl_set_get_ctx(set), isl_error_internal,
+ "unhandled list comparison type", return NULL);
+ }
+ set = isl_set_preimage_multi_pw_aff(set, mpa1);
+ return set;
+error:
+ isl_pw_aff_list_free(left);
+ isl_pw_aff_list_free(right);
+ return NULL;
+}
+
+/* Construct constraints of the form
+ *
+ * a op b
+ *
+ * where a is an element in "left", op is an operator of type "type" and
+ * b is an element in "right", add the constraints to "set" and return
+ * the result.
+ * "rational" is set if the constraints should be treated as
+ * a rational constraints.
+ *
+ * If "type" is the type of a comparison operator between lists
+ * of affine expressions, then a single (compound) constraint
+ * is constructed by list_cmp instead.
+ */
static __isl_give isl_set *construct_constraints(
__isl_take isl_set *set, int type,
__isl_keep isl_pw_aff_list *left, __isl_keep isl_pw_aff_list *right,
@@ -1439,7 +1532,9 @@ static __isl_give isl_set *construct_con
left = isl_pw_aff_list_set_rational(left);
right = isl_pw_aff_list_set_rational(right);
}
- if (type == ISL_TOKEN_LE)
+ if (is_list_comparator_type(type))
+ cond = list_cmp(set, type, left, right);
+ else if (type == ISL_TOKEN_LE)
cond = isl_pw_aff_list_le_set(left, right);
else if (type == ISL_TOKEN_GE)
cond = isl_pw_aff_list_ge_set(left, right);
@@ -1455,11 +1550,32 @@ static __isl_give isl_set *construct_con
return isl_set_intersect(set, cond);
}
+/* Read a constraint from "s", add it to "map" and return the result.
+ * "v" contains a description of the identifiers parsed so far.
+ * "rational" is set if the constraint should be treated as
+ * a rational constraint.
+ * The constraint read from "s" may be applied to multiple pairs
+ * of affine expressions and may be chained.
+ * In particular, a list of affine expressions is read, followed
+ * by a comparison operator and another list of affine expressions.
+ * The comparison operator is then applied to each pair of elements
+ * in the two lists and the results are added to "map".
+ * However, if the operator expects two lists of affine expressions,
+ * then it is applied directly to those lists and the two lists
+ * are required to have the same length.
+ * If the next token is another comparison operator, then another
+ * list of affine expressions is read and the process repeats.
+ *
+ * The processing is performed on a wrapped copy of "map" because
+ * an affine expression cannot have a binary relation as domain.
+ */
static __isl_give isl_map *add_constraint(__isl_keep isl_stream *s,
struct vars *v, __isl_take isl_map *map, int rational)
{
- struct isl_token *tok = NULL;
+ struct isl_token *tok;
+ int type;
isl_pw_aff_list *list1 = NULL, *list2 = NULL;
+ int n1, n2;
isl_set *set;
set = isl_map_wrap(map);
@@ -1471,17 +1587,23 @@ static __isl_give isl_map *add_constrain
isl_stream_error(s, tok, "missing operator");
if (tok)
isl_stream_push_token(s, tok);
- tok = NULL;
goto error;
}
+ type = tok->type;
+ isl_token_free(tok);
for (;;) {
list2 = accept_affine_list(s, isl_set_get_space(set), v);
if (!list2)
goto error;
+ n1 = isl_pw_aff_list_n_pw_aff(list1);
+ n2 = isl_pw_aff_list_n_pw_aff(list2);
+ if (is_list_comparator_type(type) && n1 != n2) {
+ isl_stream_error(s, NULL,
+ "list arguments not of same size");
+ goto error;
+ }
- set = construct_constraints(set, tok->type, list1, list2,
- rational);
- isl_token_free(tok);
+ set = construct_constraints(set, type, list1, list2, rational);
isl_pw_aff_list_free(list1);
list1 = list2;
@@ -1491,13 +1613,13 @@ static __isl_give isl_map *add_constrain
isl_stream_push_token(s, tok);
break;
}
+ type = tok->type;
+ isl_token_free(tok);
}
isl_pw_aff_list_free(list1);
return isl_set_unwrap(set);
error:
- if (tok)
- isl_token_free(tok);
isl_pw_aff_list_free(list1);
isl_pw_aff_list_free(list2);
isl_set_free(set);
@@ -3588,6 +3710,61 @@ static __isl_give isl_union_pw_aff *read
return upa;
}
+/* Read an isl_union_pw_aff from "s".
+ *
+ * First check if there are any paramters, then read in the opening brace
+ * and use read_union_pw_aff_with_dom to read in the body of
+ * the isl_union_pw_aff. Finally, read the closing brace.
+ */
+__isl_give isl_union_pw_aff *isl_stream_read_union_pw_aff(
+ __isl_keep isl_stream *s)
+{
+ struct vars *v;
+ isl_set *dom;
+ isl_union_pw_aff *upa = NULL;
+
+ v = vars_new(s->ctx);
+ if (!v)
+ return NULL;
+
+ dom = isl_set_universe(isl_space_params_alloc(s->ctx, 0));
+ if (next_is_tuple(s)) {
+ dom = read_map_tuple(s, dom, isl_dim_param, v, 1, 0);
+ if (isl_stream_eat(s, ISL_TOKEN_TO))
+ goto error;
+ }
+ if (isl_stream_eat(s, '{'))
+ goto error;
+
+ upa = read_union_pw_aff_with_dom(s, isl_set_copy(dom), v);
+
+ if (isl_stream_eat(s, '}'))
+ goto error;
+
+ vars_free(v);
+ isl_set_free(dom);
+ return upa;
+error:
+ vars_free(v);
+ isl_set_free(dom);
+ isl_union_pw_aff_free(upa);
+ return NULL;
+}
+
+/* Read an isl_union_pw_aff from "str".
+ */
+__isl_give isl_union_pw_aff *isl_union_pw_aff_read_from_str(isl_ctx *ctx,
+ const char *str)
+{
+ isl_union_pw_aff *upa;
+ isl_stream *s = isl_stream_new_str(ctx, str);
+ if (!s)
+ return NULL;
+ upa = isl_stream_read_union_pw_aff(s);
+ isl_stream_free(s);
+ return upa;
+}
+
/* This function is called for each element in a tuple inside
* isl_stream_read_multi_union_pw_aff.
*
Modified: polly/trunk/lib/External/isl/isl_local_space.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_local_space.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_local_space.c (original)
+++ polly/trunk/lib/External/isl/isl_local_space.c Fri Jan 15 09:54:45 2016
@@ -740,18 +740,20 @@ int isl_local_space_div_is_known(__isl_k
return !isl_int_is_zero(ls->div->row[div][0]);
}
-int isl_local_space_divs_known(__isl_keep isl_local_space *ls)
+/* Does "ls" have an explicit representation for all local variables?
+ */
+isl_bool isl_local_space_divs_known(__isl_keep isl_local_space *ls)
{
int i;
if (!ls)
- return -1;
+ return isl_bool_error;
for (i = 0; i < ls->div->n_row; ++i)
if (isl_int_is_zero(ls->div->row[i][0]))
- return 0;
+ return isl_bool_false;
- return 1;
+ return isl_bool_true;
}
__isl_give isl_local_space *isl_local_space_domain(
Modified: polly/trunk/lib/External/isl/isl_local_space_private.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_local_space_private.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_local_space_private.h (original)
+++ polly/trunk/lib/External/isl/isl_local_space_private.h Fri Jan 15 09:54:45 2016
@@ -32,7 +32,7 @@ unsigned isl_local_space_offset(__isl_ke
__isl_give isl_local_space *isl_local_space_replace_divs(
__isl_take isl_local_space *ls, __isl_take isl_mat *div);
int isl_local_space_div_is_known(__isl_keep isl_local_space *ls, int div);
-int isl_local_space_divs_known(__isl_keep isl_local_space *ls);
+isl_bool isl_local_space_divs_known(__isl_keep isl_local_space *ls);
__isl_give isl_local_space *isl_local_space_substitute_equalities(
__isl_take isl_local_space *ls, __isl_take isl_basic_set *eq);
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_map.c (original)
+++ polly/trunk/lib/External/isl/isl_map.c Fri Jan 15 09:54:45 2016
@@ -322,6 +322,38 @@ __isl_give isl_local_space *isl_basic_se
return isl_basic_map_get_local_space(bset);
}
+/* For each known div d = floor(f/m), add the constraints
+ *
+ * f - m d >= 0
+ * -(f-(n-1)) + m d >= 0
+ *
+ * Do not finalize the result.
+ */
+static __isl_give isl_basic_map *add_known_div_constraints(
+ __isl_take isl_basic_map *bmap)
+{
+ int i;
+ unsigned n_div;
+
+ if (!bmap)
+ return NULL;
+ n_div = isl_basic_map_dim(bmap, isl_dim_div);
+ if (n_div == 0)
+ return bmap;
+ bmap = isl_basic_map_cow(bmap);
+ bmap = isl_basic_map_extend_constraints(bmap, 0, 2 * n_div);
+ if (!bmap)
+ return NULL;
+ for (i = 0; i < n_div; ++i) {
+ if (isl_int_is_zero(bmap->div[i][0]))
+ continue;
+ if (isl_basic_map_add_div_constraints(bmap, i) < 0)
+ return isl_basic_map_free(bmap);
+ }
+
+ return bmap;
+}
+
__isl_give isl_basic_map *isl_basic_map_from_local_space(
__isl_take isl_local_space *ls)
{
@@ -340,11 +372,9 @@ __isl_give isl_basic_map *isl_basic_map_
if (isl_basic_map_alloc_div(bmap) < 0)
goto error;
- for (i = 0; i < n_div; ++i) {
+ for (i = 0; i < n_div; ++i)
isl_seq_cpy(bmap->div[i], ls->div->row[i], ls->div->n_col);
- if (isl_basic_map_add_div_constraints(bmap, i) < 0)
- goto error;
- }
+ bmap = add_known_div_constraints(bmap);
isl_local_space_free(ls);
return bmap;
@@ -4441,11 +4471,13 @@ int isl_basic_map_add_div_constraints(st
*
* f - m d >= 0
* -(f-(n-1)) + m d >= 0
+ *
+ * Remove duplicate constraints in case of some these div constraints
+ * already appear in "bmap".
*/
__isl_give isl_basic_map *isl_basic_map_add_known_div_constraints(
__isl_take isl_basic_map *bmap)
{
- int i;
unsigned n_div;
if (!bmap)
@@ -4453,17 +4485,8 @@ __isl_give isl_basic_map *isl_basic_map_
n_div = isl_basic_map_dim(bmap, isl_dim_div);
if (n_div == 0)
return bmap;
- bmap = isl_basic_map_cow(bmap);
- bmap = isl_basic_map_extend_constraints(bmap, 0, 2 * n_div);
- if (!bmap)
- return NULL;
- for (i = 0; i < n_div; ++i) {
- if (isl_int_is_zero(bmap->div[i][0]))
- continue;
- if (isl_basic_map_add_div_constraints(bmap, i) < 0)
- return isl_basic_map_free(bmap);
- }
+ bmap = add_known_div_constraints(bmap);
bmap = isl_basic_map_remove_duplicate_constraints(bmap, NULL, 0);
bmap = isl_basic_map_finalize(bmap);
return bmap;
@@ -4703,6 +4726,11 @@ struct isl_set *isl_set_to_underlying_se
return (struct isl_set *)isl_map_underlying_set((struct isl_map *)set);
}
+/* Replace the space of "bmap" by "space".
+ *
+ * If the space of "bmap" is identical to "space" (including the identifiers
+ * of the input and output dimensions), then simply return the original input.
+ */
__isl_give isl_basic_map *isl_basic_map_reset_space(
__isl_take isl_basic_map *bmap, __isl_take isl_space *space)
{
@@ -4711,6 +4739,12 @@ __isl_give isl_basic_map *isl_basic_map_
if (!bmap)
goto error;
equal = isl_space_is_equal(bmap->dim, space);
+ if (equal >= 0 && equal)
+ equal = isl_space_match(bmap->dim, isl_dim_in,
+ space, isl_dim_in);
+ if (equal >= 0 && equal)
+ equal = isl_space_match(bmap->dim, isl_dim_out,
+ space, isl_dim_out);
if (equal < 0)
goto error;
if (equal) {
@@ -6886,30 +6920,47 @@ error:
return NULL;
}
-int isl_basic_map_divs_known(__isl_keep isl_basic_map *bmap)
+/* Does local variable "div" of "bmap" have an explicit representation?
+ */
+isl_bool isl_basic_map_div_is_known(__isl_keep isl_basic_map *bmap, int div)
+{
+ if (!bmap)
+ return isl_bool_error;
+ if (div < 0 || div >= isl_basic_map_dim(bmap, isl_dim_div))
+ isl_die(isl_basic_map_get_ctx(bmap), isl_error_invalid,
+ "position out of bounds", return isl_bool_error);
+ return !isl_int_is_zero(bmap->div[div][0]);
+}
+
+/* Does "bmap" have an explicit representation for all local variables?
+ */
+isl_bool isl_basic_map_divs_known(__isl_keep isl_basic_map *bmap)
{
int i;
unsigned off;
if (!bmap)
- return -1;
+ return isl_bool_error;
off = isl_space_dim(bmap->dim, isl_dim_all);
for (i = 0; i < bmap->n_div; ++i) {
- if (isl_int_is_zero(bmap->div[i][0]))
- return 0;
+ if (!isl_basic_map_div_is_known(bmap, i))
+ return isl_bool_false;
isl_assert(bmap->ctx, isl_int_is_zero(bmap->div[i][1+1+off+i]),
- return -1);
+ return isl_bool_error);
}
- return 1;
+ return isl_bool_true;
}
-static int map_divs_known(__isl_keep isl_map *map)
+/* Do all basic maps in "map" have an explicit representation
+ * for all local variables?
+ */
+isl_bool isl_map_divs_known(__isl_keep isl_map *map)
{
int i;
if (!map)
- return -1;
+ return isl_bool_error;
for (i = 0; i < map->n; ++i) {
int known = isl_basic_map_divs_known(map->p[i]);
@@ -6917,7 +6968,7 @@ static int map_divs_known(__isl_keep isl
return known;
}
- return 1;
+ return isl_bool_true;
}
/* If bmap contains any unknown divs, then compute explicit
@@ -6962,7 +7013,7 @@ struct isl_map *isl_map_compute_divs(str
if (map->n == 0)
return map;
- known = map_divs_known(map);
+ known = isl_map_divs_known(map);
if (known < 0) {
isl_map_free(map);
return NULL;
@@ -8789,8 +8840,23 @@ int isl_set_plain_dim_has_fixed_lower_bo
return fixed;
}
-/* uset_gist depends on constraints without existentially quantified
+/* Return -1 if the constraint "c1" should be sorted before "c2"
+ * and 1 if it should be sorted after "c2".
+ * Return 0 if the two constraints are the same (up to the constant term).
+ *
+ * In particular, if a constraint involves later variables than another
+ * then it is sorted after this other constraint.
+ * uset_gist depends on constraints without existentially quantified
* variables sorting first.
+ *
+ * For constraints that have the same latest variable, those
+ * with the same coefficient for this latest variable (first in absolute value
+ * and then in actual value) are grouped together.
+ * This is useful for detecting pairs of constraints that can
+ * be chained in their printed representation.
+ *
+ * Finally, within a group, constraints are sorted according to
+ * their coefficients (excluding the constant term).
*/
static int sort_constraint_cmp(const void *p1, const void *p2, void *arg)
{
@@ -8798,6 +8864,7 @@ static int sort_constraint_cmp(const voi
isl_int **c2 = (isl_int **) p2;
int l1, l2;
unsigned size = *(unsigned *) arg;
+ int cmp;
l1 = isl_seq_last_non_zero(*c1 + 1, size);
l2 = isl_seq_last_non_zero(*c2 + 1, size);
@@ -8805,11 +8872,33 @@ static int sort_constraint_cmp(const voi
if (l1 != l2)
return l1 - l2;
+ cmp = isl_int_abs_cmp((*c1)[1 + l1], (*c2)[1 + l1]);
+ if (cmp != 0)
+ return cmp;
+ cmp = isl_int_cmp((*c1)[1 + l1], (*c2)[1 + l1]);
+ if (cmp != 0)
+ return -cmp;
+
return isl_seq_cmp(*c1 + 1, *c2 + 1, size);
}
-static struct isl_basic_map *isl_basic_map_sort_constraints(
- struct isl_basic_map *bmap)
+/* Return -1 if the constraint "c1" of "bmap" is sorted before "c2"
+ * by isl_basic_map_sort_constraints, 1 if it is sorted after "c2"
+ * and 0 if the two constraints are the same (up to the constant term).
+ */
+int isl_basic_map_constraint_cmp(__isl_keep isl_basic_map *bmap,
+ isl_int *c1, isl_int *c2)
+{
+ unsigned total;
+
+ if (!bmap)
+ return -2;
+ total = isl_basic_map_total_dim(bmap);
+ return sort_constraint_cmp(&c1, &c2, &total);
+}
+
+__isl_give isl_basic_map *isl_basic_map_sort_constraints(
+ __isl_take isl_basic_map *bmap)
{
unsigned total;
@@ -10302,18 +10391,126 @@ static int div_may_involve_output(__isl_
return 0;
}
+/* Return the first integer division of "bmap" in the range
+ * [first, first + n[ that may depend on any output dimensions and
+ * that has a non-zero coefficient in "c" (where the first coefficient
+ * in "c" corresponds to integer division "first").
+ */
+static int first_div_may_involve_output(__isl_keep isl_basic_map *bmap,
+ isl_int *c, int first, int n)
+{
+ int k;
+
+ if (!bmap)
+ return -1;
+
+ for (k = first; k < first + n; ++k) {
+ if (isl_int_is_zero(c[k]))
+ continue;
+ if (div_may_involve_output(bmap, k))
+ return k;
+ }
+
+ return first + n;
+}
+
+/* Look for a pair of inequality constraints in "bmap" of the form
+ *
+ * -l + i >= 0 or i >= l
+ * and
+ * n + l - i >= 0 or i <= l + n
+ *
+ * with n < "m" and i the output dimension at position "pos".
+ * (Note that n >= 0 as otherwise the two constraints would conflict.)
+ * Furthermore, "l" is only allowed to involve parameters, input dimensions
+ * and earlier output dimensions, as well as integer divisions that do
+ * not involve any of the output dimensions.
+ *
+ * Return the index of the first inequality constraint or bmap->n_ineq
+ * if no such pair can be found.
+ */
+static int find_modulo_constraint_pair(__isl_keep isl_basic_map *bmap,
+ int pos, isl_int m)
+{
+ int i, j;
+ isl_ctx *ctx;
+ unsigned total;
+ unsigned n_div, o_div;
+ unsigned n_out, o_out;
+ int less;
+
+ if (!bmap)
+ return -1;
+
+ ctx = isl_basic_map_get_ctx(bmap);
+ total = isl_basic_map_total_dim(bmap);
+ n_out = isl_basic_map_dim(bmap, isl_dim_out);
+ o_out = isl_basic_map_offset(bmap, isl_dim_out);
+ n_div = isl_basic_map_dim(bmap, isl_dim_div);
+ o_div = isl_basic_map_offset(bmap, isl_dim_div);
+ for (i = 0; i < bmap->n_ineq; ++i) {
+ if (!isl_int_abs_eq(bmap->ineq[i][o_out + pos], ctx->one))
+ continue;
+ if (isl_seq_first_non_zero(bmap->ineq[i] + o_out + pos + 1,
+ n_out - (pos + 1)) != -1)
+ continue;
+ if (first_div_may_involve_output(bmap, bmap->ineq[i] + o_div,
+ 0, n_div) < n_div)
+ continue;
+ for (j = i + 1; j < bmap->n_ineq; ++j) {
+ if (!isl_int_abs_eq(bmap->ineq[j][o_out + pos],
+ ctx->one))
+ continue;
+ if (!isl_seq_is_neg(bmap->ineq[i] + 1,
+ bmap->ineq[j] + 1, total))
+ continue;
+ break;
+ }
+ if (j >= bmap->n_ineq)
+ continue;
+ isl_int_add(bmap->ineq[i][0],
+ bmap->ineq[i][0], bmap->ineq[j][0]);
+ less = isl_int_abs_lt(bmap->ineq[i][0], m);
+ isl_int_sub(bmap->ineq[i][0],
+ bmap->ineq[i][0], bmap->ineq[j][0]);
+ if (!less)
+ continue;
+ if (isl_int_is_one(bmap->ineq[i][o_out + pos]))
+ return i;
+ else
+ return j;
+ }
+
+ return bmap->n_ineq;
+}
+
/* Return the index of the equality of "bmap" that defines
* the output dimension "pos" in terms of earlier dimensions.
* The equality may also involve integer divisions, as long
* as those integer divisions are defined in terms of
* parameters or input dimensions.
+ * In this case, *div is set to the number of integer divisions and
+ * *ineq is set to the number of inequality constraints (provided
+ * div and ineq are not NULL).
+ *
+ * The equality may also involve a single integer division involving
+ * the output dimensions (typically only output dimension "pos") as
+ * long as the coefficient of output dimension "pos" is 1 or -1 and
+ * there is a pair of constraints i >= l and i <= l + n, with i referring
+ * to output dimension "pos", l an expression involving only earlier
+ * dimensions and n smaller than the coefficient of the integer division
+ * in the equality. In this case, the output dimension can be defined
+ * in terms of a modulo expression that does not involve the integer division.
+ * *div is then set to this single integer division and
+ * *ineq is set to the index of constraint i >= l.
+ *
* Return bmap->n_eq if there is no such equality.
* Return -1 on error.
*/
int isl_basic_map_output_defining_equality(__isl_keep isl_basic_map *bmap,
- int pos)
+ int pos, int *div, int *ineq)
{
- int j, k;
+ int j, k, l;
unsigned n_out, o_out;
unsigned n_div, o_div;
@@ -10325,20 +10522,37 @@ int isl_basic_map_output_defining_equali
n_div = isl_basic_map_dim(bmap, isl_dim_div);
o_div = isl_basic_map_offset(bmap, isl_dim_div);
+ if (ineq)
+ *ineq = bmap->n_ineq;
+ if (div)
+ *div = n_div;
for (j = 0; j < bmap->n_eq; ++j) {
if (isl_int_is_zero(bmap->eq[j][o_out + pos]))
continue;
if (isl_seq_first_non_zero(bmap->eq[j] + o_out + pos + 1,
n_out - (pos + 1)) != -1)
continue;
- for (k = 0; k < n_div; ++k) {
- if (isl_int_is_zero(bmap->eq[j][o_div + k]))
- continue;
- if (div_may_involve_output(bmap, k))
- break;
- }
+ k = first_div_may_involve_output(bmap, bmap->eq[j] + o_div,
+ 0, n_div);
if (k >= n_div)
return j;
+ if (!isl_int_is_one(bmap->eq[j][o_out + pos]) &&
+ !isl_int_is_negone(bmap->eq[j][o_out + pos]))
+ continue;
+ if (first_div_may_involve_output(bmap, bmap->eq[j] + o_div,
+ k + 1, n_div - (k+1)) < n_div)
+ continue;
+ l = find_modulo_constraint_pair(bmap, pos,
+ bmap->eq[j][o_div + k]);
+ if (l < 0)
+ return -1;
+ if (l >= bmap->n_ineq)
+ continue;
+ if (div)
+ *div = k;
+ if (ineq)
+ *ineq = l;
+ return j;
}
return bmap->n_eq;
@@ -10362,7 +10576,8 @@ isl_bool isl_basic_map_plain_is_single_v
for (i = 0; i < n_out; ++i) {
int eq;
- eq = isl_basic_map_output_defining_equality(bmap, i);
+ eq = isl_basic_map_output_defining_equality(bmap, i,
+ NULL, NULL);
if (eq < 0)
return isl_bool_error;
if (eq >= bmap->n_eq)
@@ -10582,6 +10797,35 @@ isl_bool isl_set_is_wrapping(__isl_keep
return isl_space_is_wrapping(set->dim);
}
+/* Modify the space of "map" through a call to "change".
+ * If "can_change" is set (not NULL), then first call it to check
+ * if the modification is allowed, printing the error message "cannot_change"
+ * if it is not.
+ */
+static __isl_give isl_map *isl_map_change_space(__isl_take isl_map *map,
+ isl_bool (*can_change)(__isl_keep isl_map *map),
+ const char *cannot_change,
+ __isl_give isl_space *(*change)(__isl_take isl_space *space))
+{
+ isl_bool ok;
+ isl_space *space;
+
+ if (!map)
+ return NULL;
+
+ ok = can_change ? can_change(map) : isl_bool_true;
+ if (ok < 0)
+ return isl_map_free(map);
+ if (!ok)
+ isl_die(isl_map_get_ctx(map), isl_error_invalid, cannot_change,
+ return isl_map_free(map));
+
+ space = change(isl_map_get_space(map));
+ map = isl_map_reset_space(map, space);
+
+ return map;
+}
+
/* Is the domain of "map" a wrapped relation?
*/
isl_bool isl_map_domain_is_wrapping(__isl_keep isl_map *map)
@@ -10620,27 +10864,11 @@ error:
return NULL;
}
+/* Given a map A -> B, return the set (A -> B).
+ */
__isl_give isl_set *isl_map_wrap(__isl_take isl_map *map)
{
- int i;
-
- map = isl_map_cow(map);
- if (!map)
- return NULL;
-
- for (i = 0; i < map->n; ++i) {
- map->p[i] = (isl_basic_map *)isl_basic_map_wrap(map->p[i]);
- if (!map->p[i])
- goto error;
- }
- map->dim = isl_space_wrap(map->dim);
- if (!map->dim)
- goto error;
-
- return (isl_set *)map;
-error:
- isl_map_free(map);
- return NULL;
+ return isl_map_change_space(map, NULL, NULL, &isl_space_wrap);
}
__isl_give isl_basic_map *isl_basic_set_unwrap(__isl_take isl_basic_set *bset)
@@ -10661,35 +10889,13 @@ error:
return NULL;
}
+/* Given a set (A -> B), return the map A -> B.
+ * Error out if "set" is not of the form (A -> B).
+ */
__isl_give isl_map *isl_set_unwrap(__isl_take isl_set *set)
{
- int i;
-
- if (!set)
- return NULL;
-
- if (!isl_set_is_wrapping(set))
- isl_die(set->ctx, isl_error_invalid, "not a wrapping set",
- goto error);
-
- set = isl_set_cow(set);
- if (!set)
- return NULL;
-
- for (i = 0; i < set->n; ++i) {
- set->p[i] = (isl_basic_set *)isl_basic_set_unwrap(set->p[i]);
- if (!set->p[i])
- goto error;
- }
-
- set->dim = isl_space_unwrap(set->dim);
- if (!set->dim)
- goto error;
-
- return (isl_map *)set;
-error:
- isl_set_free(set);
- return NULL;
+ return isl_map_change_space(set, &isl_set_is_wrapping,
+ "not a wrapping set", &isl_space_unwrap);
}
__isl_give isl_basic_map *isl_basic_map_reset(__isl_take isl_basic_map *bmap,
@@ -10826,33 +11032,17 @@ error:
return NULL;
}
+/* Remove any internal structure from the spaces of domain and range of "map".
+ */
__isl_give isl_map *isl_map_flatten(__isl_take isl_map *map)
{
- int i;
-
if (!map)
return NULL;
if (!map->dim->nested[0] && !map->dim->nested[1])
return map;
- map = isl_map_cow(map);
- if (!map)
- return NULL;
-
- for (i = 0; i < map->n; ++i) {
- map->p[i] = isl_basic_map_flatten(map->p[i]);
- if (!map->p[i])
- goto error;
- }
- map->dim = isl_space_flatten(map->dim);
- if (!map->dim)
- goto error;
-
- return map;
-error:
- isl_map_free(map);
- return NULL;
+ return isl_map_change_space(map, NULL, NULL, &isl_space_flatten);
}
__isl_give isl_set *isl_set_flatten(__isl_take isl_set *set)
@@ -10873,62 +11063,30 @@ __isl_give isl_map *isl_set_flatten_map(
return map;
}
+/* Remove any internal structure from the space of the domain of "map".
+ */
__isl_give isl_map *isl_map_flatten_domain(__isl_take isl_map *map)
{
- int i;
-
if (!map)
return NULL;
if (!map->dim->nested[0])
return map;
- map = isl_map_cow(map);
- if (!map)
- return NULL;
-
- for (i = 0; i < map->n; ++i) {
- map->p[i] = isl_basic_map_flatten_domain(map->p[i]);
- if (!map->p[i])
- goto error;
- }
- map->dim = isl_space_flatten_domain(map->dim);
- if (!map->dim)
- goto error;
-
- return map;
-error:
- isl_map_free(map);
- return NULL;
+ return isl_map_change_space(map, NULL, NULL, &isl_space_flatten_domain);
}
+/* Remove any internal structure from the space of the range of "map".
+ */
__isl_give isl_map *isl_map_flatten_range(__isl_take isl_map *map)
{
- int i;
-
if (!map)
return NULL;
if (!map->dim->nested[1])
return map;
- map = isl_map_cow(map);
- if (!map)
- return NULL;
-
- for (i = 0; i < map->n; ++i) {
- map->p[i] = isl_basic_map_flatten_range(map->p[i]);
- if (!map->p[i])
- goto error;
- }
- map->dim = isl_space_flatten_range(map->dim);
- if (!map->dim)
- goto error;
-
- return map;
-error:
- isl_map_free(map);
- return NULL;
+ return isl_map_change_space(map, NULL, NULL, &isl_space_flatten_range);
}
/* Reorder the dimensions of "bmap" according to the given dim_map
@@ -11305,6 +11463,7 @@ __isl_give isl_basic_map *isl_basic_map_
bmap->dim = isl_space_zip(bmap->dim);
if (!bmap->dim)
goto error;
+ bmap = isl_basic_map_mark_final(bmap);
return bmap;
error:
isl_basic_map_free(bmap);
@@ -11385,6 +11544,7 @@ __isl_give isl_basic_map *isl_basic_map_
bmap->dim = isl_space_curry(bmap->dim);
if (!bmap->dim)
goto error;
+ bmap = isl_basic_map_mark_final(bmap);
return bmap;
error:
isl_basic_map_free(bmap);
@@ -11396,33 +11556,30 @@ error:
*/
__isl_give isl_map *isl_map_curry(__isl_take isl_map *map)
{
- int i;
-
- if (!map)
- return NULL;
-
- if (!isl_map_can_curry(map))
- isl_die(map->ctx, isl_error_invalid, "map cannot be curried",
- goto error);
+ return isl_map_change_space(map, &isl_map_can_curry,
+ "map cannot be curried", &isl_space_curry);
+}
- map = isl_map_cow(map);
+/* Can isl_map_range_curry be applied to "map"?
+ * That is, does it have a nested relation in its range,
+ * the domain of which is itself a nested relation?
+ */
+isl_bool isl_map_can_range_curry(__isl_keep isl_map *map)
+{
if (!map)
- return NULL;
-
- for (i = 0; i < map->n; ++i) {
- map->p[i] = isl_basic_map_curry(map->p[i]);
- if (!map->p[i])
- goto error;
- }
+ return isl_bool_error;
- map->dim = isl_space_curry(map->dim);
- if (!map->dim)
- goto error;
+ return isl_space_can_range_curry(map->dim);
+}
- return map;
-error:
- isl_map_free(map);
- return NULL;
+/* Given a map A -> ((B -> C) -> D), return the corresponding map
+ * A -> (B -> (C -> D)).
+ */
+__isl_give isl_map *isl_map_range_curry(__isl_take isl_map *map)
+{
+ return isl_map_change_space(map, &isl_map_can_range_curry,
+ "map range cannot be curried",
+ &isl_space_range_curry);
}
/* Can we apply isl_basic_map_uncurry to "bmap"?
@@ -11466,6 +11623,7 @@ __isl_give isl_basic_map *isl_basic_map_
bmap->dim = isl_space_uncurry(bmap->dim);
if (!bmap->dim)
return isl_basic_map_free(bmap);
+ bmap = isl_basic_map_mark_final(bmap);
return bmap;
}
@@ -11474,30 +11632,8 @@ __isl_give isl_basic_map *isl_basic_map_
*/
__isl_give isl_map *isl_map_uncurry(__isl_take isl_map *map)
{
- int i;
-
- if (!map)
- return NULL;
-
- if (!isl_map_can_uncurry(map))
- isl_die(map->ctx, isl_error_invalid, "map cannot be uncurried",
- return isl_map_free(map));
-
- map = isl_map_cow(map);
- if (!map)
- return NULL;
-
- for (i = 0; i < map->n; ++i) {
- map->p[i] = isl_basic_map_uncurry(map->p[i]);
- if (!map->p[i])
- return isl_map_free(map);
- }
-
- map->dim = isl_space_uncurry(map->dim);
- if (!map->dim)
- return isl_map_free(map);
-
- return map;
+ return isl_map_change_space(map, &isl_map_can_uncurry,
+ "map cannot be uncurried", &isl_space_uncurry);
}
/* Construct a basic map mapping the domain of the affine expression
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_map_private.h (original)
+++ polly/trunk/lib/External/isl/isl_map_private.h Fri Jan 15 09:54:45 2016
@@ -128,6 +128,8 @@ __isl_give isl_basic_set *isl_basic_set_
__isl_give isl_basic_map *isl_basic_map_alloc(isl_ctx *ctx,
unsigned nparam, unsigned in, unsigned out, unsigned extra,
unsigned n_eq, unsigned n_ineq);
+__isl_give isl_basic_map *isl_basic_map_mark_final(
+ __isl_take isl_basic_map *bmap);
__isl_give isl_basic_map *isl_basic_map_finalize(
__isl_take isl_basic_map *bmap);
__isl_give isl_basic_map *isl_basic_map_extend(__isl_take isl_basic_map *base,
@@ -271,6 +273,10 @@ struct isl_basic_map *isl_basic_map_gaus
struct isl_basic_map *bmap, int *progress);
struct isl_basic_set *isl_basic_set_gauss(
struct isl_basic_set *bset, int *progress);
+int isl_basic_map_constraint_cmp(__isl_keep isl_basic_map *bmap,
+ isl_int *c1, isl_int *c2);
+__isl_give isl_basic_map *isl_basic_map_sort_constraints(
+ __isl_take isl_basic_map *bmap);
__isl_give isl_basic_set *isl_basic_set_sort_constraints(
__isl_take isl_basic_set *bset);
int isl_basic_map_plain_cmp(const __isl_keep isl_basic_map *bmap1,
@@ -291,6 +297,10 @@ __isl_give isl_basic_set_list *isl_basic
struct isl_set *isl_map_underlying_set(struct isl_map *map);
struct isl_basic_map *isl_basic_map_overlying_set(struct isl_basic_set *bset,
struct isl_basic_map *like);
+__isl_give isl_basic_map *isl_basic_map_drop_constraint_involving_unknown_divs(
+ __isl_take isl_basic_map *bmap);
+__isl_give isl_map *isl_map_drop_constraint_involving_unknown_divs(
+ __isl_take isl_map *map);
__isl_give isl_basic_set *isl_basic_set_drop_constraints_involving(
__isl_take isl_basic_set *bset, unsigned first, unsigned n);
__isl_give isl_basic_set *isl_basic_set_drop(__isl_take isl_basic_set *bset,
@@ -397,7 +407,9 @@ __isl_give isl_basic_map *isl_basic_map_
__isl_give isl_basic_set *isl_basic_set_expand_divs(
__isl_take isl_basic_set *bset, __isl_take isl_mat *div, int *exp);
-int isl_basic_map_divs_known(__isl_keep isl_basic_map *bmap);
+isl_bool isl_basic_map_div_is_known(__isl_keep isl_basic_map *bmap, int div);
+isl_bool isl_basic_map_divs_known(__isl_keep isl_basic_map *bmap);
+isl_bool isl_map_divs_known(__isl_keep isl_map *map);
__isl_give isl_mat *isl_basic_set_get_divs(__isl_keep isl_basic_set *bset);
__isl_give isl_mat *isl_basic_map_get_divs(__isl_keep isl_basic_map *bmap);
@@ -436,6 +448,11 @@ int isl_map_is_set(__isl_keep isl_map *m
int isl_basic_set_plain_dim_is_fixed(__isl_keep isl_basic_set *bset,
unsigned dim, isl_int *val);
+__isl_give isl_map *isl_map_plain_gist_basic_map(__isl_take isl_map *map,
+ __isl_take isl_basic_map *context);
+
+__isl_give isl_basic_map *isl_map_plain_unshifted_simple_hull(
+ __isl_take isl_map *map);
__isl_give isl_basic_set *isl_basic_set_plain_affine_hull(
__isl_take isl_basic_set *bset);
__isl_give isl_basic_map *isl_basic_map_plain_affine_hull(
@@ -454,7 +471,7 @@ int isl_map_plain_is_fixed(__isl_keep is
enum isl_dim_type type, unsigned pos, isl_int *val);
int isl_basic_map_output_defining_equality(__isl_keep isl_basic_map *bmap,
- int pos);
+ int pos, int *div, int *ineq);
__isl_give isl_basic_map *isl_basic_map_reduce_coefficients(
__isl_take isl_basic_map *bmap);
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_map_simplify.c (original)
+++ polly/trunk/lib/External/isl/isl_map_simplify.c Fri Jan 15 09:54:45 2016
@@ -1610,15 +1610,28 @@ static struct isl_basic_map *remove_redu
return bmap;
}
-struct isl_basic_map *isl_basic_map_finalize(struct isl_basic_map *bmap)
+/* Mark "bmap" as final, without checking for obviously redundant
+ * integer divisions. This function should be used when "bmap"
+ * is known not to involve any such integer divisions.
+ */
+__isl_give isl_basic_map *isl_basic_map_mark_final(
+ __isl_take isl_basic_map *bmap)
{
- bmap = remove_redundant_divs(bmap);
if (!bmap)
return NULL;
ISL_F_SET(bmap, ISL_BASIC_SET_FINAL);
return bmap;
}
+/* Mark "bmap" as final, after removing obviously redundant integer divisions.
+ */
+struct isl_basic_map *isl_basic_map_finalize(struct isl_basic_map *bmap)
+{
+ bmap = remove_redundant_divs(bmap);
+ bmap = isl_basic_map_mark_final(bmap);
+ return bmap;
+}
+
struct isl_basic_set *isl_basic_set_finalize(struct isl_basic_set *bset)
{
return (struct isl_basic_set *)
@@ -1830,6 +1843,86 @@ __isl_give isl_basic_set *isl_basic_set_
return isl_basic_map_eliminate(bset, type, first, n);
}
+/* Remove all constraints from "bmap" that reference any unknown local
+ * variables (directly or indirectly).
+ *
+ * Dropping all constraints on a local variable will make it redundant,
+ * so it will get removed implicitly by
+ * isl_basic_map_drop_constraints_involving_dims. Some other local
+ * variables may also end up becoming redundant if they only appear
+ * in constraints together with the unknown local variable.
+ * Therefore, start over after calling
+ * isl_basic_map_drop_constraints_involving_dims.
+ */
+__isl_give isl_basic_map *isl_basic_map_drop_constraint_involving_unknown_divs(
+ __isl_take isl_basic_map *bmap)
+{
+ isl_bool known;
+ int i, n_div, o_div;
+
+ known = isl_basic_map_divs_known(bmap);
+ if (known < 0)
+ return isl_basic_map_free(bmap);
+ if (known)
+ return bmap;
+
+ n_div = isl_basic_map_dim(bmap, isl_dim_div);
+ o_div = isl_basic_map_offset(bmap, isl_dim_div) - 1;
+
+ for (i = 0; i < n_div; ++i) {
+ known = isl_basic_map_div_is_known(bmap, i);
+ if (known < 0)
+ return isl_basic_map_free(bmap);
+ if (known)
+ continue;
+ bmap = remove_dependent_vars(bmap, o_div + i);
+ bmap = isl_basic_map_drop_constraints_involving_dims(bmap,
+ isl_dim_div, i, 1);
+ if (!bmap)
+ return NULL;
+ n_div = isl_basic_map_dim(bmap, isl_dim_div);
+ i = -1;
+ }
+
+ return bmap;
+}
+
+/* Remove all constraints from "map" that reference any unknown local
+ * variables (directly or indirectly).
+ *
+ * Since constraints may get dropped from the basic maps,
+ * they may no longer be disjoint from each other.
+ */
+__isl_give isl_map *isl_map_drop_constraint_involving_unknown_divs(
+ __isl_take isl_map *map)
+{
+ int i;
+ isl_bool known;
+
+ known = isl_map_divs_known(map);
+ if (known < 0)
+ return isl_map_free(map);
+ if (known)
+ return map;
+
+ map = isl_map_cow(map);
+ if (!map)
+ return NULL;
+
+ for (i = 0; i < map->n; ++i) {
+ map->p[i] =
+ isl_basic_map_drop_constraint_involving_unknown_divs(
+ map->p[i]);
+ if (!map->p[i])
+ return isl_map_free(map);
+ }
+
+ if (map->n > 1)
+ ISL_F_CLR(map, ISL_MAP_DISJOINT);
+
+ return map;
+}
+
/* Don't assume equalities are in order, because align_divs
* may have changed the order of the divs.
*/
@@ -2842,6 +2935,230 @@ error:
return NULL;
}
+/* Drop all inequalities from "bmap" that also appear in "context".
+ * "context" is assumed to have only known local variables and
+ * the initial local variables of "bmap" are assumed to be the same
+ * as those of "context".
+ * The constraints of both "bmap" and "context" are assumed
+ * to have been sorted using isl_basic_map_sort_constraints.
+ *
+ * Run through the inequality constraints of "bmap" and "context"
+ * in sorted order.
+ * If a constraint of "bmap" involves variables not in "context",
+ * then it cannot appear in "context".
+ * If a matching constraint is found, it is removed from "bmap".
+ */
+static __isl_give isl_basic_map *drop_inequalities(
+ __isl_take isl_basic_map *bmap, __isl_keep isl_basic_map *context)
+{
+ int i1, i2;
+ unsigned total, extra;
+
+ if (!bmap || !context)
+ return isl_basic_map_free(bmap);
+
+ total = isl_basic_map_total_dim(context);
+ extra = isl_basic_map_total_dim(bmap) - total;
+
+ i1 = bmap->n_ineq - 1;
+ i2 = context->n_ineq - 1;
+ while (bmap && i1 >= 0 && i2 >= 0) {
+ int cmp;
+
+ if (isl_seq_first_non_zero(bmap->ineq[i1] + 1 + total,
+ extra) != -1) {
+ --i1;
+ continue;
+ }
+ cmp = isl_basic_map_constraint_cmp(context, bmap->ineq[i1],
+ context->ineq[i2]);
+ if (cmp < 0) {
+ --i2;
+ continue;
+ }
+ if (cmp > 0) {
+ --i1;
+ continue;
+ }
+ if (isl_int_eq(bmap->ineq[i1][0], context->ineq[i2][0])) {
+ bmap = isl_basic_map_cow(bmap);
+ if (isl_basic_map_drop_inequality(bmap, i1) < 0)
+ bmap = isl_basic_map_free(bmap);
+ }
+ --i1;
+ --i2;
+ }
+
+ return bmap;
+}
+
+/* Drop all equalities from "bmap" that also appear in "context".
+ * "context" is assumed to have only known local variables and
+ * the initial local variables of "bmap" are assumed to be the same
+ * as those of "context".
+ *
+ * Run through the equality constraints of "bmap" and "context"
+ * in sorted order.
+ * If a constraint of "bmap" involves variables not in "context",
+ * then it cannot appear in "context".
+ * If a matching constraint is found, it is removed from "bmap".
+ */
+static __isl_give isl_basic_map *drop_equalities(
+ __isl_take isl_basic_map *bmap, __isl_keep isl_basic_map *context)
+{
+ int i1, i2;
+ unsigned total, extra;
+
+ if (!bmap || !context)
+ return isl_basic_map_free(bmap);
+
+ total = isl_basic_map_total_dim(context);
+ extra = isl_basic_map_total_dim(bmap) - total;
+
+ i1 = bmap->n_eq - 1;
+ i2 = context->n_eq - 1;
+
+ while (bmap && i1 >= 0 && i2 >= 0) {
+ int last1, last2;
+
+ if (isl_seq_first_non_zero(bmap->eq[i1] + 1 + total,
+ extra) != -1)
+ break;
+ last1 = isl_seq_last_non_zero(bmap->eq[i1] + 1, total);
+ last2 = isl_seq_last_non_zero(context->eq[i2] + 1, total);
+ if (last1 > last2) {
+ --i2;
+ continue;
+ }
+ if (last1 < last2) {
+ --i1;
+ continue;
+ }
+ if (isl_seq_eq(bmap->eq[i1], context->eq[i2], 1 + total)) {
+ bmap = isl_basic_map_cow(bmap);
+ if (isl_basic_map_drop_equality(bmap, i1) < 0)
+ bmap = isl_basic_map_free(bmap);
+ }
+ --i1;
+ --i2;
+ }
+
+ return bmap;
+}
+
+/* Remove the constraints in "context" from "bmap".
+ * "context" is assumed to have explicit representations
+ * for all local variables.
+ *
+ * First align the divs of "bmap" to those of "context" and
+ * sort the constraints. Then drop all constraints from "bmap"
+ * that appear in "context".
+ */
+__isl_give isl_basic_map *isl_basic_map_plain_gist(
+ __isl_take isl_basic_map *bmap, __isl_take isl_basic_map *context)
+{
+ isl_bool done, known;
+
+ done = isl_basic_map_is_universe(context);
+ if (done == isl_bool_false)
+ done = isl_basic_map_is_universe(bmap);
+ if (done == isl_bool_false)
+ done = isl_basic_map_plain_is_empty(context);
+ if (done == isl_bool_false)
+ done = isl_basic_map_plain_is_empty(bmap);
+ if (done < 0)
+ goto error;
+ if (done) {
+ isl_basic_map_free(context);
+ return bmap;
+ }
+ known = isl_basic_map_divs_known(context);
+ if (known < 0)
+ goto error;
+ if (!known)
+ isl_die(isl_basic_map_get_ctx(bmap), isl_error_invalid,
+ "context has unknown divs", goto error);
+
+ bmap = isl_basic_map_align_divs(bmap, context);
+ bmap = isl_basic_map_gauss(bmap, NULL);
+ bmap = isl_basic_map_sort_constraints(bmap);
+ context = isl_basic_map_sort_constraints(context);
+
+ bmap = drop_inequalities(bmap, context);
+ bmap = drop_equalities(bmap, context);
+
+ isl_basic_map_free(context);
+ bmap = isl_basic_map_finalize(bmap);
+ return bmap;
+error:
+ isl_basic_map_free(bmap);
+ isl_basic_map_free(context);
+ return NULL;
+}
+
+/* Replace "map" by the disjunct at position "pos" and free "context".
+ */
+static __isl_give isl_map *replace_by_disjunct(__isl_take isl_map *map,
+ int pos, __isl_take isl_basic_map *context)
+{
+ isl_basic_map *bmap;
+
+ bmap = isl_basic_map_copy(map->p[pos]);
+ isl_map_free(map);
+ isl_basic_map_free(context);
+ return isl_map_from_basic_map(bmap);
+}
+
+/* Remove the constraints in "context" from "map".
+ * If any of the disjuncts in the result turns out to be the universe,
+ * the return this universe.
+ * "context" is assumed to have explicit representations
+ * for all local variables.
+ */
+__isl_give isl_map *isl_map_plain_gist_basic_map(__isl_take isl_map *map,
+ __isl_take isl_basic_map *context)
+{
+ int i;
+ isl_bool univ, known;
+
+ univ = isl_basic_map_is_universe(context);
+ if (univ < 0)
+ goto error;
+ if (univ) {
+ isl_basic_map_free(context);
+ return map;
+ }
+ known = isl_basic_map_divs_known(context);
+ if (known < 0)
+ goto error;
+ if (!known)
+ isl_die(isl_map_get_ctx(map), isl_error_invalid,
+ "context has unknown divs", goto error);
+
+ map = isl_map_cow(map);
+ if (!map)
+ goto error;
+ for (i = 0; i < map->n; ++i) {
+ map->p[i] = isl_basic_map_plain_gist(map->p[i],
+ isl_basic_map_copy(context));
+ univ = isl_basic_map_is_universe(map->p[i]);
+ if (univ < 0)
+ goto error;
+ if (univ && map->n > 1)
+ return replace_by_disjunct(map, i, context);
+ }
+
+ isl_basic_map_free(context);
+ ISL_F_CLR(map, ISL_MAP_NORMALIZED);
+ if (map->n > 1)
+ ISL_F_CLR(map, ISL_MAP_DISJOINT);
+ return map;
+error:
+ isl_map_free(map);
+ isl_basic_map_free(context);
+ return NULL;
+}
+
/* Return a map that has the same intersection with "context" as "map"
* and that is as "simple" as possible.
*
@@ -3233,6 +3550,13 @@ isl_bool isl_set_is_disjoint(__isl_keep
return isl_map_is_disjoint(set1, set2);
}
+/* Is "v" equal to 0, 1 or -1?
+ */
+static int is_zero_or_one(isl_int v)
+{
+ return isl_int_is_zero(v) || isl_int_is_one(v) || isl_int_is_negone(v);
+}
+
/* Check if we can combine a given div with lower bound l and upper
* bound u with some other div and if so return that other div.
* Otherwise return -1.
@@ -3258,6 +3582,8 @@ isl_bool isl_set_is_disjoint(__isl_keep
*
* e + f (a + m b) >= 0
*
+ * Furthermore, in the constraints that only contain b, the coefficient
+ * of b should be equal to 1 or -1.
* If so, we return b so that "a + m b" can be replaced by
* a single div "c = a + m b".
*/
@@ -3314,8 +3640,11 @@ static int div_find_coalesce(struct isl_
int valid;
if (j == l || j == u)
continue;
- if (isl_int_is_zero(bmap->ineq[j][1 + dim + div]))
- continue;
+ if (isl_int_is_zero(bmap->ineq[j][1 + dim + div])) {
+ if (is_zero_or_one(bmap->ineq[j][1 + dim + i]))
+ continue;
+ break;
+ }
if (isl_int_is_zero(bmap->ineq[j][1 + dim + i]))
break;
isl_int_mul(bmap->ineq[j][1 + dim + div],
@@ -3487,8 +3816,8 @@ error:
return NULL;
}
-/* Given a pair of divs div1 and div2 such that, expect for the lower bound l
- * and the upper bound u, div1 always occurs together with div2 in the form
+/* Given a pair of divs div1 and div2 such that, except for the lower bound l
+ * and the upper bound u, div1 always occurs together with div2 in the form
* (div1 + m div2), where m is the constant range on the variable div1
* allowed by l and u, replace the pair div1 and div2 by a single
* div that is equal to div1 + m div2.
@@ -3496,6 +3825,7 @@ error:
* The new div will appear in the location that contains div2.
* We need to modify all constraints that contain
* div2 = (div - div1) / m
+ * The coefficient of div2 is known to be equal to 1 or -1.
* (If a constraint does not contain div2, it will also not contain div1.)
* If the constraint also contains div1, then we know they appear
* as f (div1 + m div2) and we can simply replace (div1 + m div2) by div,
@@ -3512,20 +3842,19 @@ error:
*
* A lower bound on div2
*
- * n div2 + t >= 0
+ * div2 + t >= 0
*
* can be replaced by
*
- * (n * (m div 2 + div1) + m t + n f)/g >= 0
+ * m div2 + div1 + m t + f >= 0
*
- * with g = gcd(m,n).
* An upper bound
*
- * -n div2 + t >= 0
+ * -div2 + t >= 0
*
* can be replaced by
*
- * (-n * (m div2 + div1) + m t + n f')/g >= 0
+ * -(m div2 + div1) + m t + f' >= 0
*
* These constraint are those that we would obtain from eliminating
* div1 using Fourier-Motzkin.
@@ -3536,17 +3865,16 @@ error:
static struct isl_basic_map *coalesce_divs(struct isl_basic_map *bmap,
unsigned div1, unsigned div2, unsigned l, unsigned u)
{
- isl_int a;
- isl_int b;
+ isl_ctx *ctx;
isl_int m;
unsigned dim, total;
int i;
+ ctx = isl_basic_map_get_ctx(bmap);
+
dim = isl_space_dim(bmap->dim, isl_dim_all);
total = 1 + dim + bmap->n_div;
- isl_int_init(a);
- isl_int_init(b);
isl_int_init(m);
isl_int_add(m, bmap->ineq[l][0], bmap->ineq[u][0]);
isl_int_add_ui(m, m, 1);
@@ -3556,26 +3884,18 @@ static struct isl_basic_map *coalesce_di
continue;
if (isl_int_is_zero(bmap->ineq[i][1 + dim + div2]))
continue;
- if (isl_int_is_zero(bmap->ineq[i][1 + dim + div1])) {
- isl_int_gcd(b, m, bmap->ineq[i][1 + dim + div2]);
- isl_int_divexact(a, m, b);
- isl_int_divexact(b, bmap->ineq[i][1 + dim + div2], b);
- if (isl_int_is_pos(b)) {
- isl_seq_combine(bmap->ineq[i], a, bmap->ineq[i],
- b, bmap->ineq[l], total);
- } else {
- isl_int_neg(b, b);
- isl_seq_combine(bmap->ineq[i], a, bmap->ineq[i],
- b, bmap->ineq[u], total);
- }
- }
+ if (isl_int_is_zero(bmap->ineq[i][1 + dim + div1]))
+ if (isl_int_is_pos(bmap->ineq[i][1 + dim + div2]))
+ isl_seq_combine(bmap->ineq[i], m, bmap->ineq[i],
+ ctx->one, bmap->ineq[l], total);
+ else
+ isl_seq_combine(bmap->ineq[i], m, bmap->ineq[i],
+ ctx->one, bmap->ineq[u], total);
isl_int_set(bmap->ineq[i][1 + dim + div2],
bmap->ineq[i][1 + dim + div1]);
isl_int_set_si(bmap->ineq[i][1 + dim + div1], 0);
}
- isl_int_clear(a);
- isl_int_clear(b);
isl_int_clear(m);
if (l > u) {
isl_basic_map_drop_inequality(bmap, l);
Modified: polly/trunk/lib/External/isl/isl_mat.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_mat.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_mat.c (original)
+++ polly/trunk/lib/External/isl/isl_mat.c Fri Jan 15 09:54:45 2016
@@ -1123,7 +1123,7 @@ static int preimage(struct isl_ctx *ctx,
* M the matrix mat.
*
* If there are fewer variables x' then there are x, then we perform
- * the transformation in place, which that, in principle,
+ * the transformation in place, which means that, in principle,
* this frees up some extra variables as the number
* of columns remains constant, but we would have to extend
* the div array too as the number of rows in this array is assumed
Modified: polly/trunk/lib/External/isl/isl_morph.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_morph.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_morph.c (original)
+++ polly/trunk/lib/External/isl/isl_morph.c Fri Jan 15 09:54:45 2016
@@ -398,7 +398,7 @@ static __isl_give isl_basic_set *copy_eq
k = isl_basic_set_alloc_equality(eq);
if (k < 0)
goto error;
- isl_seq_cpy(eq->eq[k], bset->eq[first + k], 1 + total);
+ isl_seq_cpy(eq->eq[k], bset->eq[first + i], 1 + total);
}
return eq;
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_multi_templ.c (original)
+++ polly/trunk/lib/External/isl/isl_multi_templ.c Fri Jan 15 09:54:45 2016
@@ -1248,7 +1248,7 @@ __isl_give MULTI(BASE) *FN(MULTI(BASE),s
multi = FN(MULTI(BASE),cow)(multi);
if (!multi)
- return NULL;
+ goto error;
for (i = 0; i < multi->n; ++i) {
isl_val *v;
Modified: polly/trunk/lib/External/isl/isl_output.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_output.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_output.c (original)
+++ polly/trunk/lib/External/isl/isl_output.c Fri Jan 15 09:54:45 2016
@@ -30,6 +30,7 @@
#include <isl_val_private.h>
#include <isl/ast_build.h>
#include <isl_sort.h>
+#include <isl_output_private.h>
static const char *s_to[2] = { " -> ", " \\to " };
static const char *s_and[2] = { " and ", " \\wedge " };
@@ -174,7 +175,10 @@ static int count_same_name(__isl_keep is
return count;
}
-static __isl_give isl_printer *print_name(__isl_keep isl_space *dim,
+/* Print the name of the variable of type "type" and position "pos"
+ * in "space" to "p".
+ */
+static __isl_give isl_printer *print_name(__isl_keep isl_space *space,
__isl_take isl_printer *p, enum isl_dim_type type, unsigned pos,
int latex)
{
@@ -182,7 +186,8 @@ static __isl_give isl_printer *print_nam
char buffer[20];
int primes;
- name = type == isl_dim_div ? NULL : isl_space_get_dim_name(dim, type, pos);
+ name = type == isl_dim_div ? NULL
+ : isl_space_get_dim_name(space, type, pos);
if (!name) {
const char *prefix;
@@ -190,14 +195,14 @@ static __isl_give isl_printer *print_nam
prefix = s_param_prefix[latex];
else if (type == isl_dim_div)
prefix = s_div_prefix[latex];
- else if (isl_space_is_set(dim) || type == isl_dim_in)
+ else if (isl_space_is_set(space) || type == isl_dim_in)
prefix = s_input_prefix[latex];
else
prefix = s_output_prefix[latex];
snprintf(buffer, sizeof(buffer), "%s%d", prefix, pos);
name = buffer;
}
- primes = count_same_name(dim, name == buffer ? isl_dim_div : type,
+ primes = count_same_name(space, name == buffer ? isl_dim_div : type,
pos, name);
p = isl_printer_print_str(p, name);
while (primes-- > 0)
@@ -229,10 +234,27 @@ static enum isl_dim_type pos2type(__isl_
return type;
}
+/* Can the div expression of the integer division at position "row" of "div"
+ * be printed?
+ * In particular, are the div expressions available and does the selected
+ * variable have a known explicit representation?
+ * Furthermore, the Omega format does not allow and div expressions
+ * to be printed.
+ */
+static isl_bool can_print_div_expr(__isl_keep isl_printer *p,
+ __isl_keep isl_mat *div, int pos)
+{
+ if (p->output_format == ISL_FORMAT_OMEGA)
+ return isl_bool_false;
+ if (!div)
+ return isl_bool_false;
+ return !isl_int_is_zero(div->row[pos][0]);
+}
+
static __isl_give isl_printer *print_div(__isl_keep isl_space *dim,
__isl_keep isl_mat *div, int pos, __isl_take isl_printer *p);
-static __isl_give isl_printer *print_term(__isl_keep isl_space *dim,
+static __isl_give isl_printer *print_term(__isl_keep isl_space *space,
__isl_keep isl_mat *div,
isl_int c, unsigned pos, __isl_take isl_printer *p, int latex)
{
@@ -242,9 +264,8 @@ static __isl_give isl_printer *print_ter
if (pos == 0)
return isl_printer_print_isl_int(p, c);
- type = pos2type(dim, &pos);
- print_div_def = type == isl_dim_div && div &&
- !isl_int_is_zero(div->row[pos][0]);
+ type = pos2type(space, &pos);
+ print_div_def = type == isl_dim_div && can_print_div_expr(p, div, pos);
if (isl_int_is_one(c))
;
@@ -256,9 +277,9 @@ static __isl_give isl_printer *print_ter
p = isl_printer_print_str(p, "*");
}
if (print_div_def)
- p = print_div(dim, div, pos, p);
+ p = print_div(space, div, pos, p);
else
- p = print_name(dim, p, type, pos, latex);
+ p = print_name(space, p, type, pos, latex);
return p;
}
@@ -291,34 +312,18 @@ static __isl_give isl_printer *print_aff
return p;
}
+/* Print an affine expression "c" corresponding to a constraint in "bmap"
+ * to "p", with the variable names taken from "space" and
+ * the integer division definitions taken from "div".
+ */
static __isl_give isl_printer *print_affine(__isl_keep isl_basic_map *bmap,
- __isl_keep isl_space *dim, __isl_take isl_printer *p, isl_int *c)
+ __isl_keep isl_space *space, __isl_keep isl_mat *div,
+ __isl_take isl_printer *p, isl_int *c)
{
unsigned len = 1 + isl_basic_map_total_dim(bmap);
- return print_affine_of_len(dim, NULL, p, c, len);
+ return print_affine_of_len(space, div, p, c, len);
}
-/* Internal data structure for print_space.
- *
- * latex is set if that is the output format.
- * print_dim (if not NULL) is called on each dimension.
- * user is set by the caller of print_space and may be used inside print_dim.
- *
- * space is the global space that is being printed. This field is set by
- * print_space.
- * type is the tuple of the global space that is currently being printed.
- * This field is set by print_space.
- */
-struct isl_print_space_data {
- int latex;
- __isl_give isl_printer *(*print_dim)(__isl_take isl_printer *p,
- struct isl_print_space_data *data, unsigned pos);
- void *user;
-
- isl_space *space;
- enum isl_dim_type type;
-};
-
/* offset is the offset of local_dim inside data->type of data->space.
*/
static __isl_give isl_printer *print_nested_var_list(__isl_take isl_printer *p,
@@ -407,20 +412,20 @@ static __isl_give isl_printer *print_nes
return p;
}
-static __isl_give isl_printer *print_space(__isl_keep isl_space *dim,
+__isl_give isl_printer *isl_print_space(__isl_keep isl_space *space,
__isl_take isl_printer *p, int rational,
struct isl_print_space_data *data)
{
if (rational && !data->latex)
p = isl_printer_print_str(p, "rat: ");
- if (isl_space_is_params(dim))
+ if (isl_space_is_params(space))
;
- else if (isl_space_is_set(dim))
- p = print_tuple(dim, p, isl_dim_set, data);
+ else if (isl_space_is_set(space))
+ p = print_tuple(space, p, isl_dim_set, data);
else {
- p = print_tuple(dim, p, isl_dim_in, data);
+ p = print_tuple(space, p, isl_dim_in, data);
p = isl_printer_print_str(p, s_to[data->latex]);
- p = print_tuple(dim, p, isl_dim_out, data);
+ p = print_tuple(space, p, isl_dim_out, data);
}
return p;
@@ -440,8 +445,91 @@ static __isl_give isl_printer *print_ome
return p;
}
+/* Does the inequality constraint following "i" in "bmap"
+ * have an opposite value for the same last coefficient?
+ * "last" is the position of the last coefficient of inequality "i".
+ * If the next constraint is a div constraint, then it is ignored
+ * since div constraints are not printed.
+ */
+static int next_is_opposite(__isl_keep isl_basic_map *bmap, int i, int last)
+{
+ unsigned total = isl_basic_map_total_dim(bmap);
+ unsigned o_div = isl_basic_map_offset(bmap, isl_dim_div);
+
+ if (i + 1 >= bmap->n_ineq)
+ return 0;
+ if (isl_seq_last_non_zero(bmap->ineq[i + 1], 1 + total) != last)
+ return 0;
+ if (last >= o_div &&
+ isl_basic_map_is_div_constraint(bmap, bmap->ineq[i + 1],
+ last - o_div))
+ return 0;
+ return isl_int_abs_eq(bmap->ineq[i][last], bmap->ineq[i + 1][last]) &&
+ !isl_int_eq(bmap->ineq[i][last], bmap->ineq[i + 1][last]);
+}
+
+/* Return a string representation of the operator used when
+ * printing a constraint where the LHS is greater than or equal to the LHS
+ * (sign > 0) or smaller than or equal to the LHS (sign < 0).
+ * If "strict" is set, then return the strict version of the comparison
+ * operator.
+ */
+static const char *constraint_op(int sign, int strict, int latex)
+{
+ if (strict)
+ return sign < 0 ? "<" : ">";
+ if (sign < 0)
+ return s_le[latex];
+ else
+ return s_ge[latex];
+}
+
+/* Print one side of a constraint "c" from "bmap" to "p", with
+ * the variable names taken from "space" and the integer division definitions
+ * taken from "div".
+ * "last" is the position of the last non-zero coefficient.
+ * Let c' be the result of zeroing out this coefficient, then
+ * the partial constraint
+ *
+ * c' op
+ *
+ * is printed.
+ * "first_constraint" is set if this is the first constraint
+ * in the conjunction.
+ */
+static __isl_give isl_printer *print_half_constraint(struct isl_basic_map *bmap,
+ __isl_keep isl_space *space, __isl_keep isl_mat *div,
+ __isl_take isl_printer *p, isl_int *c, int last, const char *op,
+ int first_constraint, int latex)
+{
+ if (!first_constraint)
+ p = isl_printer_print_str(p, s_and[latex]);
+
+ isl_int_set_si(c[last], 0);
+ p = print_affine(bmap, space, div, p, c);
+
+ p = isl_printer_print_str(p, " ");
+ p = isl_printer_print_str(p, op);
+ p = isl_printer_print_str(p, " ");
+
+ return p;
+}
+
+/* Print a constraint "c" from "bmap" to "p", with the variable names
+ * taken from "space" and the integer division definitions taken from "div".
+ * "last" is the position of the last non-zero coefficient, which is
+ * moreover assumed to be negative.
+ * Let c' be the result of zeroing out this coefficient, then
+ * the constraint is printed in the form
+ *
+ * -c[last] op c'
+ *
+ * "first_constraint" is set if this is the first constraint
+ * in the conjunction.
+ */
static __isl_give isl_printer *print_constraint(struct isl_basic_map *bmap,
- __isl_keep isl_space *dim, __isl_take isl_printer *p,
+ __isl_keep isl_space *space, __isl_keep isl_mat *div,
+ __isl_take isl_printer *p,
isl_int *c, int last, const char *op, int first_constraint, int latex)
{
if (!first_constraint)
@@ -449,24 +537,74 @@ static __isl_give isl_printer *print_con
isl_int_abs(c[last], c[last]);
- p = print_term(dim, NULL, c[last], last, p, latex);
+ p = print_term(space, div, c[last], last, p, latex);
p = isl_printer_print_str(p, " ");
p = isl_printer_print_str(p, op);
p = isl_printer_print_str(p, " ");
isl_int_set_si(c[last], 0);
- p = print_affine(bmap, dim, p, c);
+ p = print_affine(bmap, space, div, p, c);
return p;
}
+/* Print the constraints of "bmap" to "p".
+ * The names of the variables are taken from "space" and
+ * the integer division definitions are taken from "div".
+ * Div constraints are only printed in "dump" mode.
+ * The constraints are sorted prior to printing (except in "dump" mode).
+ *
+ * If x is the last variable with a non-zero coefficient,
+ * then a lower bound
+ *
+ * f - a x >= 0
+ *
+ * is printed as
+ *
+ * a x <= f
+ *
+ * while an upper bound
+ *
+ * f + a x >= 0
+ *
+ * is printed as
+ *
+ * a x >= -f
+ *
+ * If the next constraint has an opposite sign for the same last coefficient,
+ * then it is printed as
+ *
+ * f >= a x
+ *
+ * or
+ *
+ * -f <= a x
+ *
+ * instead. In fact, the "a x" part is not printed explicitly, but
+ * reused from the next constraint, which is therefore treated as
+ * a first constraint in the conjunction.
+ *
+ * If the constant term of "f" is -1, then "f" is replaced by "f + 1" and
+ * the comparison operator is replaced by the strict variant.
+ * Essentially, ">= 1" is replaced by "> 0".
+ */
static __isl_give isl_printer *print_constraints(__isl_keep isl_basic_map *bmap,
- __isl_keep isl_space *dim, __isl_take isl_printer *p, int latex)
+ __isl_keep isl_space *space, __isl_keep isl_mat *div,
+ __isl_take isl_printer *p, int latex)
{
int i;
- struct isl_vec *c;
+ isl_vec *c = NULL;
+ int rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL);
unsigned total = isl_basic_map_total_dim(bmap);
+ unsigned o_div = isl_basic_map_offset(bmap, isl_dim_div);
+ int first = 1;
+
+ bmap = isl_basic_map_copy(bmap);
+ if (!p->dump)
+ bmap = isl_basic_map_sort_constraints(bmap);
+ if (!bmap)
+ goto error;
c = isl_vec_alloc(bmap->ctx, 1 + total);
if (!c)
@@ -484,29 +622,48 @@ static __isl_give isl_printer *print_con
isl_seq_cpy(c->el, bmap->eq[i], 1 + total);
else
isl_seq_neg(c->el, bmap->eq[i], 1 + total);
- p = print_constraint(bmap, dim, p, c->el, l,
- "=", i == bmap->n_eq - 1, latex);
+ p = print_constraint(bmap, space, div, p, c->el, l,
+ "=", first, latex);
+ first = 0;
}
for (i = 0; i < bmap->n_ineq; ++i) {
int l = isl_seq_last_non_zero(bmap->ineq[i], 1 + total);
+ int strict;
int s;
const char *op;
if (l < 0)
continue;
+ if (!p->dump && l >= o_div &&
+ isl_basic_map_is_div_constraint(bmap, bmap->ineq[i],
+ l - o_div))
+ continue;
s = isl_int_sgn(bmap->ineq[i][l]);
+ strict = !rational && isl_int_is_negone(bmap->ineq[i][0]);
if (s < 0)
isl_seq_cpy(c->el, bmap->ineq[i], 1 + total);
else
isl_seq_neg(c->el, bmap->ineq[i], 1 + total);
- op = s < 0 ? s_le[latex] : s_ge[latex];
- p = print_constraint(bmap, dim, p, c->el, l,
- op, !bmap->n_eq && !i, latex);
+ if (strict)
+ isl_int_set_si(c->el[0], 0);
+ if (!p->dump && next_is_opposite(bmap, i, l)) {
+ op = constraint_op(-s, strict, latex);
+ p = print_half_constraint(bmap, space, div, p, c->el, l,
+ op, first, latex);
+ first = 1;
+ } else {
+ op = constraint_op(s, strict, latex);
+ p = print_constraint(bmap, space, div, p, c->el, l,
+ op, first, latex);
+ first = 0;
+ }
}
+ isl_basic_map_free(bmap);
isl_vec_free(c);
return p;
error:
+ isl_basic_map_free(bmap);
isl_vec_free(c);
isl_printer_free(p);
return NULL;
@@ -530,13 +687,17 @@ static __isl_give isl_printer *print_div
return p;
}
-/* Print a comma separated list of div names, with their definitions
- * (provided that they have a definition and we are printing in isl format).
+/* Print a comma separated list of div names, except those that have
+ * a definition that can be printed.
+ * If "print_defined_divs" is set, then those div names are printed
+ * as well, along with their definitions.
*/
static __isl_give isl_printer *print_div_list(__isl_take isl_printer *p,
- __isl_keep isl_space *space, __isl_keep isl_mat *div, int latex)
+ __isl_keep isl_space *space, __isl_keep isl_mat *div, int latex,
+ int print_defined_divs)
{
int i;
+ int first = 1;
unsigned n_div;
if (!p || !space || !div)
@@ -545,11 +706,13 @@ static __isl_give isl_printer *print_div
n_div = isl_mat_rows(div);
for (i = 0; i < n_div; ++i) {
- if (i)
+ if (!print_defined_divs && can_print_div_expr(p, div, i))
+ continue;
+ if (!first)
p = isl_printer_print_str(p, ", ");
p = print_name(space, p, isl_dim_div, i, latex);
- if (p->output_format != ISL_FORMAT_ISL ||
- isl_int_is_zero(div->row[i][0]))
+ first = 0;
+ if (!can_print_div_expr(p, div, i))
continue;
p = isl_printer_print_str(p, " = ");
p = print_div(space, div, i, p);
@@ -558,22 +721,52 @@ static __isl_give isl_printer *print_div
return p;
}
+/* Does printing "bmap" require an "exists" clause?
+ * That is, are there any local variables without an explicit representation?
+ */
+static isl_bool need_exists(__isl_keep isl_printer *p,
+ __isl_keep isl_basic_map *bmap, __isl_keep isl_mat *div)
+{
+ int i;
+
+ if (!p || !bmap)
+ return isl_bool_error;
+ if (bmap->n_div == 0)
+ return isl_bool_false;
+ for (i = 0; i < bmap->n_div; ++i)
+ if (!can_print_div_expr(p, div, i))
+ return isl_bool_true;
+ return isl_bool_false;
+}
+
+/* Print the constraints of "bmap" to "p".
+ * The names of the variables are taken from "space".
+ * "latex" is set if the constraints should be printed in LaTeX format.
+ * Do not print inline explicit div representations in "dump" mode.
+ */
static __isl_give isl_printer *print_disjunct(__isl_keep isl_basic_map *bmap,
__isl_keep isl_space *space, __isl_take isl_printer *p, int latex)
{
- if (bmap->n_div > 0) {
- isl_mat *div;
+ isl_mat *div;
+ isl_bool exists;
- div = isl_basic_map_get_divs(bmap);
+ div = isl_basic_map_get_divs(bmap);
+ if (p->dump)
+ exists = bmap->n_div > 0;
+ else
+ exists = need_exists(p, bmap, div);
+ if (exists >= 0 && exists) {
p = isl_printer_print_str(p, s_open_exists[latex]);
- p = print_div_list(p, space, div, latex);
- isl_mat_free(div);
+ p = print_div_list(p, space, div, latex, p->dump);
p = isl_printer_print_str(p, ": ");
}
- p = print_constraints(bmap, space, p, latex);
+ if (p->dump)
+ div = isl_mat_free(div);
+ p = print_constraints(bmap, space, div, p, latex);
+ isl_mat_free(div);
- if (bmap->n_div > 0)
+ if (exists >= 0 && exists)
p = isl_printer_print_str(p, s_close_exists[latex]);
return p;
}
@@ -658,22 +851,22 @@ static __isl_give isl_printer *isl_basic
p = isl_printer_print_str(p, " -> ");
}
p = isl_printer_print_str(p, "{ ");
- p = print_space(bmap->dim, p, rational, &data);
+ p = isl_print_space(bmap->dim, p, rational, &data);
p = isl_printer_print_str(p, " : ");
p = print_disjunct(bmap, bmap->dim, p, latex);
p = isl_printer_print_str(p, " }");
return p;
}
-static __isl_give isl_printer *print_disjuncts(__isl_keep isl_map *map,
- __isl_take isl_printer *p, int latex)
+/* Print the disjuncts of a map (or set) "map" to "p".
+ * The names of the variables are taken from "space".
+ * "latex" is set if the constraints should be printed in LaTeX format.
+ */
+static __isl_give isl_printer *print_disjuncts_core(__isl_keep isl_map *map,
+ __isl_keep isl_space *space, __isl_take isl_printer *p, int latex)
{
int i;
- if (isl_map_plain_is_universe(map))
- return p;
-
- p = isl_printer_print_str(p, s_such_that[latex]);
if (map->n == 0)
p = isl_printer_print_str(p, "1 = 0");
for (i = 0; i < map->n; ++i) {
@@ -681,25 +874,96 @@ static __isl_give isl_printer *print_dis
p = isl_printer_print_str(p, s_or[latex]);
if (map->n > 1 && map->p[i]->n_eq + map->p[i]->n_ineq > 1)
p = isl_printer_print_str(p, "(");
- p = print_disjunct(map->p[i], map->dim, p, latex);
+ p = print_disjunct(map->p[i], space, p, latex);
if (map->n > 1 && map->p[i]->n_eq + map->p[i]->n_ineq > 1)
p = isl_printer_print_str(p, ")");
}
return p;
}
+/* Print the disjuncts of a map (or set) "map" to "p".
+ * The names of the variables are taken from "space".
+ * "hull" describes constraints shared by all disjuncts of "map".
+ * "latex" is set if the constraints should be printed in LaTeX format.
+ *
+ * Print the disjuncts as a conjunction of "hull" and
+ * the result of removing the constraints of "hull" from "map".
+ * If this result turns out to be the universe, then simply print "hull".
+ */
+static __isl_give isl_printer *print_disjuncts_in_hull(__isl_keep isl_map *map,
+ __isl_keep isl_space *space, __isl_take isl_basic_map *hull,
+ __isl_take isl_printer *p, int latex)
+{
+ isl_bool is_universe;
+
+ p = print_disjunct(hull, space, p, latex);
+ map = isl_map_plain_gist_basic_map(isl_map_copy(map), hull);
+ is_universe = isl_map_plain_is_universe(map);
+ if (is_universe < 0)
+ goto error;
+ if (!is_universe) {
+ p = isl_printer_print_str(p, s_and[latex]);
+ p = isl_printer_print_str(p, "(");
+ p = print_disjuncts_core(map, space, p, latex);
+ p = isl_printer_print_str(p, ")");
+ }
+ isl_map_free(map);
+
+ return p;
+error:
+ isl_map_free(map);
+ isl_printer_free(p);
+ return NULL;
+}
+
+/* Print the disjuncts of a map (or set) "map" to "p".
+ * The names of the variables are taken from "space".
+ * "latex" is set if the constraints should be printed in LaTeX format.
+ *
+ * If there are at least two disjuncts and "dump" mode is not turned out,
+ * check for any shared constraints among all disjuncts.
+ * If there are any, then print them separately in print_disjuncts_in_hull.
+ */
+static __isl_give isl_printer *print_disjuncts(__isl_keep isl_map *map,
+ __isl_keep isl_space *space, __isl_take isl_printer *p, int latex)
+{
+ if (isl_map_plain_is_universe(map))
+ return p;
+
+ p = isl_printer_print_str(p, s_such_that[latex]);
+
+ if (!p->dump && map->n >= 2) {
+ isl_basic_map *hull;
+ isl_bool is_universe;
+
+ hull = isl_map_plain_unshifted_simple_hull(isl_map_copy(map));
+ is_universe = isl_basic_map_is_universe(hull);
+ if (is_universe < 0)
+ p = isl_printer_free(p);
+ else if (!is_universe)
+ return print_disjuncts_in_hull(map, space, hull,
+ p, latex);
+ isl_basic_map_free(hull);
+ }
+
+ return print_disjuncts_core(map, space, p, latex);
+}
+
/* Print the disjuncts of a map (or set).
+ * The names of the variables are taken from "space".
+ * "latex" is set if the constraints should be printed in LaTeX format.
+ *
* If the map turns out to be a universal parameter domain, then
* we need to print the colon. Otherwise, the output looks identical
* to the empty set.
*/
static __isl_give isl_printer *print_disjuncts_map(__isl_keep isl_map *map,
- __isl_take isl_printer *p, int latex)
+ __isl_keep isl_space *space, __isl_take isl_printer *p, int latex)
{
if (isl_map_plain_is_universe(map) && isl_space_is_params(map->dim))
return isl_printer_print_str(p, s_such_that[latex]);
else
- return print_disjuncts(map, p, latex);
+ return print_disjuncts(map, space, p, latex);
}
struct isl_aff_split {
@@ -890,7 +1154,7 @@ static __isl_give isl_printer *print_dim
}
static __isl_give isl_printer *print_split_map(__isl_take isl_printer *p,
- struct isl_aff_split *split, int n)
+ struct isl_aff_split *split, int n, __isl_keep isl_space *space)
{
struct isl_print_space_data data = { 0 };
int i;
@@ -898,18 +1162,15 @@ static __isl_give isl_printer *print_spl
data.print_dim = &print_dim_eq;
for (i = 0; i < n; ++i) {
- isl_space *dim;
-
if (!split[i].map)
break;
- dim = split[i].map->dim;
rational = split[i].map->n > 0 &&
ISL_F_ISSET(split[i].map->p[0], ISL_BASIC_MAP_RATIONAL);
if (i)
p = isl_printer_print_str(p, "; ");
data.user = split[i].aff;
- p = print_space(dim, p, rational, &data);
- p = print_disjuncts_map(split[i].map, p, 0);
+ p = isl_print_space(space, p, rational, &data);
+ p = print_disjuncts_map(split[i].map, space, p, 0);
}
return p;
@@ -922,15 +1183,15 @@ static __isl_give isl_printer *isl_map_p
struct isl_aff_split *split = NULL;
int rational;
- if (map->n > 0)
+ if (!p->dump && map->n > 0)
split = split_aff(map);
if (split) {
- p = print_split_map(p, split, map->n);
+ p = print_split_map(p, split, map->n, map->dim);
} else {
rational = map->n > 0 &&
ISL_F_ISSET(map->p[0], ISL_BASIC_MAP_RATIONAL);
- p = print_space(map->dim, p, rational, &data);
- p = print_disjuncts_map(map, p, 0);
+ p = isl_print_space(map->dim, p, rational, &data);
+ p = print_disjuncts_map(map, map->dim, p, 0);
}
free_split(split, map->n);
return p;
@@ -964,8 +1225,8 @@ static __isl_give isl_printer *print_lat
p = isl_printer_print_str(p, s_open_set[1]);
data.print_dim = &print_dim_eq;
data.user = aff;
- p = print_space(map->dim, p, 0, &data);
- p = print_disjuncts_map(map, p, 1);
+ p = isl_print_space(map->dim, p, 0, &data);
+ p = print_disjuncts_map(map, map->dim, p, 1);
p = isl_printer_print_str(p, s_close_set[1]);
return p;
@@ -1335,7 +1596,7 @@ static __isl_give isl_printer *print_qpo
}
p = isl_printer_print_str(p, "{ ");
if (!isl_space_is_params(qp->dim)) {
- p = print_space(qp->dim, p, 0, &data);
+ p = isl_print_space(qp->dim, p, 0, &data);
p = isl_printer_print_str(p, " -> ");
}
p = print_qpolynomial(p, qp);
@@ -1449,14 +1710,18 @@ static __isl_give isl_printer *isl_pwqp_
int i = 0;
for (i = 0; i < pwqp->n; ++i) {
+ isl_space *space;
+
if (i)
p = isl_printer_print_str(p, "; ");
- if (!isl_space_is_params(pwqp->p[i].set->dim)) {
- p = print_space(pwqp->p[i].set->dim, p, 0, &data);
+ space = isl_qpolynomial_get_domain_space(pwqp->p[i].qp);
+ if (!isl_space_is_params(space)) {
+ p = isl_print_space(space, p, 0, &data);
p = isl_printer_print_str(p, " -> ");
}
p = print_qpolynomial(p, pwqp->p[i].qp);
- p = print_disjuncts((isl_map *)pwqp->p[i].set, p, 0);
+ p = print_disjuncts((isl_map *)pwqp->p[i].set, space, p, 0);
+ isl_space_free(space);
}
return p;
@@ -1512,14 +1777,18 @@ static __isl_give isl_printer *isl_pwf_p
int i = 0;
for (i = 0; i < pwf->n; ++i) {
+ isl_space *space;
+
if (i)
p = isl_printer_print_str(p, "; ");
- if (!isl_space_is_params(pwf->p[i].set->dim)) {
- p = print_space(pwf->p[i].set->dim, p, 0, &data);
+ space = isl_qpolynomial_fold_get_domain_space(pwf->p[i].fold);
+ if (!isl_space_is_params(space)) {
+ p = isl_print_space(space, p, 0, &data);
p = isl_printer_print_str(p, " -> ");
}
p = qpolynomial_fold_print(pwf->p[i].fold, p);
- p = print_disjuncts((isl_map *)pwf->p[i].set, p, 0);
+ p = print_disjuncts((isl_map *)pwf->p[i].set, space, p, 0);
+ isl_space_free(space);
}
return p;
@@ -1970,23 +2239,23 @@ error:
}
static __isl_give isl_printer *isl_printer_print_space_isl(
- __isl_take isl_printer *p, __isl_keep isl_space *dim)
+ __isl_take isl_printer *p, __isl_keep isl_space *space)
{
struct isl_print_space_data data = { 0 };
- if (!dim)
+ if (!space)
goto error;
- if (isl_space_dim(dim, isl_dim_param) > 0) {
- p = print_tuple(dim, p, isl_dim_param, &data);
+ if (isl_space_dim(space, isl_dim_param) > 0) {
+ p = print_tuple(space, p, isl_dim_param, &data);
p = isl_printer_print_str(p, " -> ");
}
p = isl_printer_print_str(p, "{ ");
- if (isl_space_is_params(dim))
+ if (isl_space_is_params(space))
p = isl_printer_print_str(p, s_such_that[0]);
else
- p = print_space(dim, p, 0, &data);
+ p = isl_print_space(space, p, 0, &data);
p = isl_printer_print_str(p, " }");
return p;
@@ -2024,12 +2293,12 @@ __isl_give isl_printer *isl_printer_prin
p = isl_printer_print_str(p, " -> ");
}
p = isl_printer_print_str(p, "{ ");
- p = print_space(ls->dim, p, 0, &data);
+ p = isl_print_space(ls->dim, p, 0, &data);
n_div = isl_local_space_dim(ls, isl_dim_div);
if (n_div > 0) {
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 = print_div_list(p, ls->dim, ls->div, 0, 1);
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]);
@@ -2113,10 +2382,14 @@ static __isl_give isl_printer *print_pw_
return isl_printer_free(p);
for (i = 0; i < pa->n; ++i) {
+ isl_space *space;
+
if (i)
p = isl_printer_print_str(p, "; ");
p = print_aff(p, pa->p[i].aff);
- p = print_disjuncts((isl_map *)pa->p[i].set, p, 0);
+ space = isl_aff_get_domain_space(pa->p[i].aff);
+ p = print_disjuncts((isl_map *)pa->p[i].set, space, p, 0);
+ isl_space_free(space);
}
return p;
@@ -2405,7 +2678,7 @@ static __isl_give isl_printer *print_mul
data.print_dim = &print_dim_ma;
data.user = maff;
- return print_space(maff->space, p, 0, &data);
+ return isl_print_space(maff->space, p, 0, &data);
}
static __isl_give isl_printer *print_multi_aff_isl(__isl_take isl_printer *p,
@@ -2453,10 +2726,14 @@ static __isl_give isl_printer *print_pw_
goto error;
for (i = 0; i < pma->n; ++i) {
+ isl_space *space;
+
if (i)
p = isl_printer_print_str(p, "; ");
p = print_multi_aff(p, pma->p[i].maff);
- p = print_disjuncts((isl_map *)pma->p[i].set, p, 0);
+ space = isl_multi_aff_get_domain_space(pma->p[i].maff);
+ p = print_disjuncts((isl_map *)pma->p[i].set, space, p, 0);
+ isl_space_free(space);
}
return p;
error:
@@ -2631,10 +2908,14 @@ static __isl_give isl_printer *print_dim
if (need_parens)
p = isl_printer_print_str(p, "(");
for (i = 0; i < pa->n; ++i) {
+ isl_space *space;
+
if (i)
p = isl_printer_print_str(p, "; ");
p = print_aff_body(p, pa->p[i].aff);
- p = print_disjuncts(pa->p[i].set, p, 0);
+ space = isl_aff_get_domain_space(pa->p[i].aff);
+ p = print_disjuncts(pa->p[i].set, space, p, 0);
+ isl_space_free(space);
}
if (need_parens)
p = isl_printer_print_str(p, ")");
@@ -2659,7 +2940,7 @@ static __isl_give isl_printer *print_mul
p = isl_printer_print_str(p, "{ ");
data.print_dim = &print_dim_mpa;
data.user = mpa;
- p = print_space(mpa->space, p, 0, &data);
+ p = isl_print_space(mpa->space, p, 0, &data);
p = isl_printer_print_str(p, " }");
return p;
}
@@ -2711,7 +2992,7 @@ static __isl_give isl_printer *print_mul
p = isl_printer_print_str(p, "{ ");
data.print_dim = &print_dim_mv;
data.user = mv;
- p = print_space(mv->space, p, 0, &data);
+ p = isl_print_space(mv->space, p, 0, &data);
p = isl_printer_print_str(p, " }");
return p;
}
@@ -2771,7 +3052,7 @@ static __isl_give isl_printer *print_mul
data.print_dim = &print_union_pw_aff_dim;
data.user = mupa;
- p = print_space(space, p, 0, &data);
+ p = isl_print_space(space, p, 0, &data);
isl_space_free(space);
return p;
Added: polly/trunk/lib/External/isl/isl_output_private.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_output_private.h?rev=257898&view=auto
==============================================================================
--- polly/trunk/lib/External/isl/isl_output_private.h (added)
+++ polly/trunk/lib/External/isl/isl_output_private.h Fri Jan 15 09:54:45 2016
@@ -0,0 +1,27 @@
+#include <isl/space.h>
+#include <isl/printer.h>
+
+/* Internal data structure for isl_print_space.
+ *
+ * latex is set if that is the output format.
+ * print_dim (if not NULL) is called on each dimension.
+ * user is set by the caller of print_space and may be used inside print_dim.
+ *
+ * space is the global space that is being printed. This field is set by
+ * print_space.
+ * type is the tuple of the global space that is currently being printed.
+ * This field is set by print_space.
+ */
+struct isl_print_space_data {
+ int latex;
+ __isl_give isl_printer *(*print_dim)(__isl_take isl_printer *p,
+ struct isl_print_space_data *data, unsigned pos);
+ void *user;
+
+ isl_space *space;
+ enum isl_dim_type type;
+};
+
+__isl_give isl_printer *isl_print_space(__isl_keep isl_space *space,
+ __isl_take isl_printer *p, int rational,
+ struct isl_print_space_data *data);
Modified: polly/trunk/lib/External/isl/isl_point.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_point.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_point.c (original)
+++ polly/trunk/lib/External/isl/isl_point.c Fri Jan 15 09:54:45 2016
@@ -1,12 +1,14 @@
#include <isl_map_private.h>
#include <isl_point_private.h>
#include <isl/set.h>
+#include <isl/union_set.h>
#include <isl_sample.h>
#include <isl_scan.h>
#include <isl_seq.h>
#include <isl_space_private.h>
#include <isl_val_private.h>
#include <isl_vec_private.h>
+#include <isl_output_private.h>
#include <isl/deprecated/point_int.h>
isl_ctx *isl_point_get_ctx(__isl_keep isl_point *pnt)
@@ -445,6 +447,24 @@ __isl_give isl_set *isl_set_from_point(_
return isl_set_from_basic_set(bset);
}
+/* Construct a union set, containing the single element "pnt".
+ * If "pnt" is void, then return an empty union set.
+ */
+__isl_give isl_union_set *isl_union_set_from_point(__isl_take isl_point *pnt)
+{
+ if (!pnt)
+ return NULL;
+ if (isl_point_is_void(pnt)) {
+ isl_space *space;
+
+ space = isl_point_get_space(pnt);
+ isl_point_free(pnt);
+ return isl_union_set_empty(space);
+ }
+
+ return isl_union_set_from_set(isl_set_from_point(pnt));
+}
+
__isl_give isl_basic_set *isl_basic_set_box_from_points(
__isl_take isl_point *pnt1, __isl_take isl_point *pnt2)
{
@@ -537,9 +557,26 @@ __isl_give isl_set *isl_set_box_from_poi
return isl_set_from_basic_set(bset);
}
+/* Print the coordinate at position "pos" of the point "pnt".
+ */
+static __isl_give isl_printer *print_coordinate(__isl_take isl_printer *p,
+ struct isl_print_space_data *data, unsigned pos)
+{
+ isl_point *pnt = data->user;
+
+ p = isl_printer_print_isl_int(p, pnt->vec->el[1 + pos]);
+ if (!isl_int_is_one(pnt->vec->el[0])) {
+ p = isl_printer_print_str(p, "/");
+ p = isl_printer_print_isl_int(p, pnt->vec->el[0]);
+ }
+
+ return p;
+}
+
__isl_give isl_printer *isl_printer_print_point(
__isl_take isl_printer *p, __isl_keep isl_point *pnt)
{
+ struct isl_print_space_data data = { 0 };
int i;
unsigned nparam;
unsigned dim;
@@ -573,16 +610,10 @@ __isl_give isl_printer *isl_printer_prin
p = isl_printer_print_str(p, "]");
p = isl_printer_print_str(p, " -> ");
}
- p = isl_printer_print_str(p, "[");
- for (i = 0; i < dim; ++i) {
- if (i)
- p = isl_printer_print_str(p, ", ");
- p = isl_printer_print_isl_int(p, pnt->vec->el[1 + nparam + i]);
- if (!isl_int_is_one(pnt->vec->el[0])) {
- p = isl_printer_print_str(p, "/");
- p = isl_printer_print_isl_int(p, pnt->vec->el[0]);
- }
- }
- p = isl_printer_print_str(p, "]");
+ data.print_dim = &print_coordinate;
+ data.user = pnt;
+ p = isl_printer_print_str(p, "{ ");
+ p = isl_print_space(pnt->dim, p, 0, &data);
+ p = isl_printer_print_str(p, " }");
return p;
}
Modified: polly/trunk/lib/External/isl/isl_printer.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_printer.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_printer.c (original)
+++ polly/trunk/lib/External/isl/isl_printer.c Fri Jan 15 09:54:45 2016
@@ -384,6 +384,20 @@ int isl_printer_get_output_format(__isl_
return p->output_format;
}
+/* Keep track of whether the printing to "p" is being performed from
+ * an isl_*_dump function as specified by "dump".
+ */
+__isl_give isl_printer *isl_printer_set_dump(__isl_take isl_printer *p,
+ int dump)
+{
+ if (!p)
+ return NULL;
+
+ p->dump = dump;
+
+ return p;
+}
+
/* Set the YAML style of "p" to "yaml_style" and return the updated printer.
*/
__isl_give isl_printer *isl_printer_set_yaml_style(__isl_take isl_printer *p,
Modified: polly/trunk/lib/External/isl/isl_printer_private.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_printer_private.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_printer_private.h (original)
+++ polly/trunk/lib/External/isl/isl_printer_private.h Fri Jan 15 09:54:45 2016
@@ -1,3 +1,6 @@
+#ifndef ISL_PRINTER_PRIVATE_H
+#define ISL_PRINTER_PRIVATE_H
+
#include <isl/printer.h>
#include <isl_yaml.h>
@@ -5,6 +8,8 @@ struct isl_printer_ops;
/* A printer to a file or a string.
*
+ * "dump" is set if the printing is performed from an isl_*_dump function.
+ *
* yaml_style is the YAML style in which the next elements should
* be printed and may be either ISL_YAML_STYLE_BLOCK or ISL_YAML_STYLE_FLOW,
* with ISL_YAML_STYLE_FLOW being the default.
@@ -22,6 +27,7 @@ struct isl_printer {
char *buf;
int indent;
int output_format;
+ int dump;
char *indent_prefix;
char *prefix;
char *suffix;
@@ -32,3 +38,8 @@ struct isl_printer {
int yaml_size;
enum isl_yaml_state *yaml_state;
};
+
+__isl_give isl_printer *isl_printer_set_dump(__isl_take isl_printer *p,
+ int dump);
+
+#endif
Modified: polly/trunk/lib/External/isl/isl_schedule.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_schedule.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_schedule.c (original)
+++ polly/trunk/lib/External/isl/isl_schedule.c Fri Jan 15 09:54:45 2016
@@ -1132,3 +1132,23 @@ void isl_schedule_dump(__isl_keep isl_sc
isl_printer_free(printer);
}
+
+/* Return a string representation of "schedule".
+ * Print the schedule in flow format.
+ */
+__isl_give char *isl_schedule_to_str(__isl_keep isl_schedule *schedule)
+{
+ isl_printer *printer;
+ char *s;
+
+ if (!schedule)
+ return NULL;
+
+ printer = isl_printer_to_str(isl_schedule_get_ctx(schedule));
+ printer = isl_printer_set_yaml_style(printer, ISL_YAML_STYLE_FLOW);
+ printer = isl_printer_print_schedule(printer, schedule);
+ s = isl_printer_get_str(printer);
+ isl_printer_free(printer);
+
+ return s;
+}
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_schedule_node.c (original)
+++ polly/trunk/lib/External/isl/isl_schedule_node.c Fri Jan 15 09:54:45 2016
@@ -772,7 +772,7 @@ __isl_give isl_union_map *isl_schedule_n
* there is also a filter ancestor that filters out all the extended
* domain elements.
*
- * Essentially, this functions intersected the domain of the output
+ * Essentially, this function intersects the domain of the output
* of isl_schedule_node_get_prefix_schedule_union_map with the output
* of isl_schedule_node_get_domain, except that it only traverses
* the ancestors of "node" once.
@@ -2088,6 +2088,39 @@ error:
return NULL;
}
+/* Intersect the filter of filter node "node" with "filter".
+ *
+ * If the filter of the node is already a subset of "filter",
+ * then leave the node unchanged.
+ */
+__isl_give isl_schedule_node *isl_schedule_node_filter_intersect_filter(
+ __isl_take isl_schedule_node *node, __isl_take isl_union_set *filter)
+{
+ isl_union_set *node_filter = NULL;
+ isl_bool subset;
+
+ if (!node || !filter)
+ goto error;
+
+ node_filter = isl_schedule_node_filter_get_filter(node);
+ subset = isl_union_set_is_subset(node_filter, filter);
+ if (subset < 0)
+ goto error;
+ if (subset) {
+ isl_union_set_free(node_filter);
+ isl_union_set_free(filter);
+ return node;
+ }
+ node_filter = isl_union_set_intersect(node_filter, filter);
+ node = isl_schedule_node_filter_set_filter(node, node_filter);
+ return node;
+error:
+ isl_schedule_node_free(node);
+ isl_union_set_free(node_filter);
+ isl_union_set_free(filter);
+ return NULL;
+}
+
/* Return the guard of the guard node "node".
*/
__isl_give isl_set *isl_schedule_node_guard_get_guard(
@@ -2138,6 +2171,50 @@ error:
return NULL;
}
+/* Given a sequence node "node", with a child at position "pos" that
+ * is also a sequence node, attach the children of that node directly
+ * as children of "node" at that position, replacing the original child.
+ *
+ * The filters of these children are intersected with the filter
+ * of the child at position "pos".
+ */
+__isl_give isl_schedule_node *isl_schedule_node_sequence_splice_child(
+ __isl_take isl_schedule_node *node, int pos)
+{
+ int i, n;
+ isl_union_set *filter;
+ isl_schedule_node *child;
+ isl_schedule_tree *tree;
+
+ if (!node)
+ return NULL;
+ if (isl_schedule_node_get_type(node) != isl_schedule_node_sequence)
+ isl_die(isl_schedule_node_get_ctx(node), isl_error_invalid,
+ "not a sequence node", isl_schedule_node_free(node));
+ node = isl_schedule_node_child(node, pos);
+ node = isl_schedule_node_child(node, 0);
+ if (isl_schedule_node_get_type(node) != isl_schedule_node_sequence)
+ isl_die(isl_schedule_node_get_ctx(node), isl_error_invalid,
+ "not a sequence node", isl_schedule_node_free(node));
+ child = isl_schedule_node_copy(node);
+ node = isl_schedule_node_parent(node);
+ filter = isl_schedule_node_filter_get_filter(node);
+ n = isl_schedule_node_n_children(child);
+ for (i = 0; i < n; ++i) {
+ child = isl_schedule_node_child(child, i);
+ child = isl_schedule_node_filter_intersect_filter(child,
+ isl_union_set_copy(filter));
+ child = isl_schedule_node_parent(child);
+ }
+ isl_union_set_free(filter);
+ tree = isl_schedule_node_get_tree(child);
+ isl_schedule_node_free(child);
+ node = isl_schedule_node_parent(node);
+ node = isl_schedule_node_sequence_splice(node, pos, tree);
+
+ return node;
+}
+
/* Update the ancestors of "node" to point to the tree that "node"
* now points to.
* That is, replace the child in the original parent that corresponds
@@ -2418,6 +2495,8 @@ __isl_give isl_schedule_node *isl_schedu
* with filters described by "filters", attach this sequence
* of filter tree nodes as children to a new tree of type "type" and
* replace the original subtree of "node" by this new tree.
+ * Each copy of the original subtree is simplified with respect
+ * to the corresponding filter.
*/
static __isl_give isl_schedule_node *isl_schedule_node_insert_children(
__isl_take isl_schedule_node *node,
@@ -2439,11 +2518,16 @@ static __isl_give isl_schedule_node *isl
n = isl_union_set_list_n_union_set(filters);
list = isl_schedule_tree_list_alloc(ctx, n);
for (i = 0; i < n; ++i) {
+ isl_schedule_node *node_i;
isl_schedule_tree *tree;
isl_union_set *filter;
- tree = isl_schedule_node_get_tree(node);
filter = isl_union_set_list_get_union_set(filters, i);
+ node_i = isl_schedule_node_copy(node);
+ node_i = isl_schedule_node_gist(node_i,
+ isl_union_set_copy(filter));
+ tree = isl_schedule_node_get_tree(node_i);
+ isl_schedule_node_free(node_i);
tree = isl_schedule_tree_insert_filter(tree, filter);
list = isl_schedule_tree_list_add(list, tree);
}
@@ -4206,7 +4290,8 @@ __isl_give isl_schedule_node *isl_schedu
/* Split the domain elements that reach "node" into those that satisfy
* "filter" and those that do not. Arrange for the first subset to be
- * executed after the second subset.
+ * executed before or after the second subset, depending on the value
+ * of "before".
* Return a pointer to the tree corresponding to the second subset,
* except when this subset is empty in which case the original pointer
* is returned.
@@ -4217,8 +4302,9 @@ __isl_give isl_schedule_node *isl_schedu
* The children in the sequence are copies of the original subtree,
* simplified with respect to their filters.
*/
-__isl_give isl_schedule_node *isl_schedule_node_order_after(
- __isl_take isl_schedule_node *node, __isl_take isl_union_set *filter)
+static __isl_give isl_schedule_node *isl_schedule_node_order_before_or_after(
+ __isl_take isl_schedule_node *node, __isl_take isl_union_set *filter,
+ int before)
{
enum isl_schedule_node_type ancestors[] =
{ isl_schedule_node_filter, isl_schedule_node_sequence };
@@ -4262,9 +4348,14 @@ __isl_give isl_schedule_node *isl_schedu
isl_schedule_node_free(node2);
tree1 = isl_schedule_tree_insert_filter(tree1, node_filter);
tree2 = isl_schedule_tree_insert_filter(tree2, filter);
- tree1 = isl_schedule_tree_sequence_pair(tree1, tree2);
- node = graft_or_splice(node, tree1, 0);
+ if (before) {
+ tree1 = isl_schedule_tree_sequence_pair(tree2, tree1);
+ node = graft_or_splice(node, tree1, 1);
+ } else {
+ tree1 = isl_schedule_tree_sequence_pair(tree1, tree2);
+ node = graft_or_splice(node, tree1, 0);
+ }
return node;
error:
@@ -4274,6 +4365,32 @@ error:
return NULL;
}
+/* Split the domain elements that reach "node" into those that satisfy
+ * "filter" and those that do not. Arrange for the first subset to be
+ * executed before the second subset.
+ * Return a pointer to the tree corresponding to the second subset,
+ * except when this subset is empty in which case the original pointer
+ * is returned.
+ */
+__isl_give isl_schedule_node *isl_schedule_node_order_before(
+ __isl_take isl_schedule_node *node, __isl_take isl_union_set *filter)
+{
+ return isl_schedule_node_order_before_or_after(node, filter, 1);
+}
+
+/* Split the domain elements that reach "node" into those that satisfy
+ * "filter" and those that do not. Arrange for the first subset to be
+ * executed after the second subset.
+ * Return a pointer to the tree corresponding to the second subset,
+ * except when this subset is empty in which case the original pointer
+ * is returned.
+ */
+__isl_give isl_schedule_node *isl_schedule_node_order_after(
+ __isl_take isl_schedule_node *node, __isl_take isl_union_set *filter)
+{
+ return isl_schedule_node_order_before_or_after(node, filter, 0);
+}
+
/* Reset the user pointer on all identifiers of parameters and tuples
* in the schedule node "node".
*/
@@ -4428,3 +4545,24 @@ void isl_schedule_node_dump(__isl_keep i
isl_printer_free(printer);
}
+
+/* Return a string representation of "node".
+ * Print the schedule node in block format as it would otherwise
+ * look identical to the entire schedule.
+ */
+__isl_give char *isl_schedule_node_to_str(__isl_keep isl_schedule_node *node)
+{
+ isl_printer *printer;
+ char *s;
+
+ if (!node)
+ return NULL;
+
+ printer = isl_printer_to_str(isl_schedule_node_get_ctx(node));
+ printer = isl_printer_set_yaml_style(printer, ISL_YAML_STYLE_BLOCK);
+ printer = isl_printer_print_schedule_node(printer, node);
+ s = isl_printer_get_str(printer);
+ isl_printer_free(printer);
+
+ return s;
+}
Modified: polly/trunk/lib/External/isl/isl_schedule_node_private.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_schedule_node_private.h?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_schedule_node_private.h (original)
+++ polly/trunk/lib/External/isl/isl_schedule_node_private.h Fri Jan 15 09:54:45 2016
@@ -3,6 +3,7 @@
#include <isl/schedule_node.h>
#include <isl_schedule_band.h>
+#include <isl_schedule_tree.h>
/* An isl_schedule_node points to a particular location in a schedule tree.
*
@@ -42,6 +43,9 @@ __isl_give isl_schedule_node *isl_schedu
__isl_take isl_schedule_node *node,
__isl_take isl_union_pw_multi_aff *upma);
+__isl_give isl_schedule_node *isl_schedule_node_gist(
+ __isl_take isl_schedule_node *node, __isl_take isl_union_set *context);
+
__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(
Modified: polly/trunk/lib/External/isl/isl_scheduler.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_scheduler.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_scheduler.c (original)
+++ polly/trunk/lib/External/isl/isl_scheduler.c Fri Jan 15 09:54:45 2016
@@ -45,7 +45,8 @@ enum isl_edge_type {
isl_edge_condition,
isl_edge_conditional_validity,
isl_edge_proximity,
- isl_edge_last = isl_edge_proximity
+ isl_edge_last = isl_edge_proximity,
+ isl_edge_local
};
/* The constraints that need to be satisfied by a schedule on "domain".
@@ -267,6 +268,17 @@ isl_ctx *isl_schedule_constraints_get_ct
return sc ? isl_union_set_get_ctx(sc->domain) : NULL;
}
+/* Return the domain of "sc".
+ */
+__isl_give isl_union_set *isl_schedule_constraints_get_domain(
+ __isl_keep isl_schedule_constraints *sc)
+{
+ if (!sc)
+ return NULL;
+
+ return isl_union_set_copy(sc->domain);
+}
+
/* Return the validity constraints of "sc".
*/
__isl_give isl_union_map *isl_schedule_constraints_get_validity(
@@ -468,6 +480,8 @@ static int node_scc_at_least(struct isl_
* If these fields are NULL, then they represent the empty relation.
* src is the source node
* dst is the sink node
+ *
+ * types is a bit vector containing the types of this edge.
* validity is set if the edge is used to ensure correctness
* coincidence is used to enforce zero dependence distances
* proximity is set if the edge is used to minimize dependence distances
@@ -490,17 +504,96 @@ struct isl_sched_edge {
struct isl_sched_node *src;
struct isl_sched_node *dst;
- unsigned validity : 1;
- unsigned coincidence : 1;
- unsigned proximity : 1;
- unsigned local : 1;
- unsigned condition : 1;
- unsigned conditional_validity : 1;
+ unsigned types;
int start;
int end;
};
+/* Is "edge" marked as being of type "type"?
+ */
+static int is_type(struct isl_sched_edge *edge, enum isl_edge_type type)
+{
+ return ISL_FL_ISSET(edge->types, 1 << type);
+}
+
+/* Mark "edge" as being of type "type".
+ */
+static void set_type(struct isl_sched_edge *edge, enum isl_edge_type type)
+{
+ ISL_FL_SET(edge->types, 1 << type);
+}
+
+/* No longer mark "edge" as being of type "type"?
+ */
+static void clear_type(struct isl_sched_edge *edge, enum isl_edge_type type)
+{
+ ISL_FL_CLR(edge->types, 1 << type);
+}
+
+/* Is "edge" marked as a validity edge?
+ */
+static int is_validity(struct isl_sched_edge *edge)
+{
+ return is_type(edge, isl_edge_validity);
+}
+
+/* Mark "edge" as a validity edge.
+ */
+static void set_validity(struct isl_sched_edge *edge)
+{
+ set_type(edge, isl_edge_validity);
+}
+
+/* Is "edge" marked as a proximity edge?
+ */
+static int is_proximity(struct isl_sched_edge *edge)
+{
+ return is_type(edge, isl_edge_proximity);
+}
+
+/* Is "edge" marked as a local edge?
+ */
+static int is_local(struct isl_sched_edge *edge)
+{
+ return is_type(edge, isl_edge_local);
+}
+
+/* Mark "edge" as a local edge.
+ */
+static void set_local(struct isl_sched_edge *edge)
+{
+ set_type(edge, isl_edge_local);
+}
+
+/* No longer mark "edge" as a local edge.
+ */
+static void clear_local(struct isl_sched_edge *edge)
+{
+ clear_type(edge, isl_edge_local);
+}
+
+/* Is "edge" marked as a coincidence edge?
+ */
+static int is_coincidence(struct isl_sched_edge *edge)
+{
+ return is_type(edge, isl_edge_coincidence);
+}
+
+/* Is "edge" marked as a condition edge?
+ */
+static int is_condition(struct isl_sched_edge *edge)
+{
+ return is_type(edge, isl_edge_condition);
+}
+
+/* Is "edge" marked as a conditional validity edge?
+ */
+static int is_conditional_validity(struct isl_sched_edge *edge)
+{
+ return is_type(edge, isl_edge_conditional_validity);
+}
+
/* Internal information about the dependence graph used during
* the construction of the schedule.
*
@@ -534,7 +627,9 @@ struct isl_sched_edge {
* and sink spaces; there is one such table for each type;
* a given edge may be referenced from more than one table
* if the corresponding relation appears in more than one of the
- * sets of dependences
+ * sets of dependences; however, for each type there is only
+ * a single edge between a given pair of source and sink space
+ * in the entire graph
*
* node_table contains pointers into the node array, hashed on the space
*
@@ -1058,23 +1153,17 @@ struct isl_extract_edge_data {
};
/* Merge edge2 into edge1, freeing the contents of edge2.
- * "type" is the type of the schedule constraint from which edge2 was
- * extracted.
* Return 0 on success and -1 on failure.
*
* edge1 and edge2 are assumed to have the same value for the map field.
*/
-static int merge_edge(enum isl_edge_type type, struct isl_sched_edge *edge1,
+static int merge_edge(struct isl_sched_edge *edge1,
struct isl_sched_edge *edge2)
{
- edge1->validity |= edge2->validity;
- edge1->coincidence |= edge2->coincidence;
- edge1->proximity |= edge2->proximity;
- edge1->condition |= edge2->condition;
- edge1->conditional_validity |= edge2->conditional_validity;
+ edge1->types |= edge2->types;
isl_map_free(edge2->map);
- if (type == isl_edge_condition) {
+ if (is_condition(edge2)) {
if (!edge1->tagged_condition)
edge1->tagged_condition = edge2->tagged_condition;
else
@@ -1083,7 +1172,7 @@ static int merge_edge(enum isl_edge_type
edge2->tagged_condition);
}
- if (type == isl_edge_conditional_validity) {
+ if (is_conditional_validity(edge2)) {
if (!edge1->tagged_validity)
edge1->tagged_validity = edge2->tagged_validity;
else
@@ -1092,9 +1181,9 @@ static int merge_edge(enum isl_edge_type
edge2->tagged_validity);
}
- if (type == isl_edge_condition && !edge1->tagged_condition)
+ if (is_condition(edge2) && !edge1->tagged_condition)
return -1;
- if (type == isl_edge_conditional_validity && !edge1->tagged_validity)
+ if (is_conditional_validity(edge2) && !edge1->tagged_validity)
return -1;
return 0;
@@ -1173,6 +1262,38 @@ static __isl_give isl_map *map_intersect
return tagged;
}
+/* Return a pointer to the node that lives in the domain space of "map"
+ * or NULL if there is no such node.
+ */
+static struct isl_sched_node *find_domain_node(isl_ctx *ctx,
+ struct isl_sched_graph *graph, __isl_keep isl_map *map)
+{
+ struct isl_sched_node *node;
+ isl_space *space;
+
+ space = isl_space_domain(isl_map_get_space(map));
+ node = graph_find_node(ctx, graph, space);
+ isl_space_free(space);
+
+ return node;
+}
+
+/* Return a pointer to the node that lives in the range space of "map"
+ * or NULL if there is no such node.
+ */
+static struct isl_sched_node *find_range_node(isl_ctx *ctx,
+ struct isl_sched_graph *graph, __isl_keep isl_map *map)
+{
+ struct isl_sched_node *node;
+ isl_space *space;
+
+ space = isl_space_range(isl_map_get_space(map));
+ node = graph_find_node(ctx, graph, space);
+ isl_space_free(space);
+
+ return node;
+}
+
/* Add a new edge to the graph based on the given map
* and add it to data->graph->edge_table[data->type].
* If a dependence relation of a given type happens to be identical
@@ -1202,7 +1323,6 @@ static isl_stat extract_edge(__isl_take
struct isl_extract_edge_data *data = user;
struct isl_sched_graph *graph = data->graph;
struct isl_sched_node *src, *dst;
- isl_space *dim;
struct isl_sched_edge *edge;
isl_map *tagged = NULL;
@@ -1216,12 +1336,8 @@ static isl_stat extract_edge(__isl_take
}
}
- dim = isl_space_domain(isl_map_get_space(map));
- src = graph_find_node(ctx, graph, dim);
- isl_space_free(dim);
- dim = isl_space_range(isl_map_get_space(map));
- dst = graph_find_node(ctx, graph, dim);
- isl_space_free(dim);
+ src = find_domain_node(ctx, graph, map);
+ dst = find_range_node(ctx, graph, map);
if (!src || !dst) {
isl_map_free(map);
@@ -1240,30 +1356,16 @@ static isl_stat extract_edge(__isl_take
graph->edge[graph->n_edge].src = src;
graph->edge[graph->n_edge].dst = dst;
graph->edge[graph->n_edge].map = map;
- graph->edge[graph->n_edge].validity = 0;
- graph->edge[graph->n_edge].coincidence = 0;
- graph->edge[graph->n_edge].proximity = 0;
- graph->edge[graph->n_edge].condition = 0;
- graph->edge[graph->n_edge].local = 0;
- graph->edge[graph->n_edge].conditional_validity = 0;
+ graph->edge[graph->n_edge].types = 0;
graph->edge[graph->n_edge].tagged_condition = NULL;
graph->edge[graph->n_edge].tagged_validity = NULL;
- if (data->type == isl_edge_validity)
- graph->edge[graph->n_edge].validity = 1;
- if (data->type == isl_edge_coincidence)
- graph->edge[graph->n_edge].coincidence = 1;
- if (data->type == isl_edge_proximity)
- graph->edge[graph->n_edge].proximity = 1;
- if (data->type == isl_edge_condition) {
- graph->edge[graph->n_edge].condition = 1;
+ set_type(&graph->edge[graph->n_edge], data->type);
+ if (data->type == isl_edge_condition)
graph->edge[graph->n_edge].tagged_condition =
isl_union_map_from_map(tagged);
- }
- if (data->type == isl_edge_conditional_validity) {
- graph->edge[graph->n_edge].conditional_validity = 1;
+ if (data->type == isl_edge_conditional_validity)
graph->edge[graph->n_edge].tagged_validity =
isl_union_map_from_map(tagged);
- }
edge = graph_find_matching_edge(graph, &graph->edge[graph->n_edge]);
if (!edge) {
@@ -1274,12 +1376,70 @@ static isl_stat extract_edge(__isl_take
return graph_edge_table_add(ctx, graph, data->type,
&graph->edge[graph->n_edge++]);
- if (merge_edge(data->type, edge, &graph->edge[graph->n_edge]) < 0)
+ if (merge_edge(edge, &graph->edge[graph->n_edge]) < 0)
return -1;
return graph_edge_table_add(ctx, graph, data->type, edge);
}
+/* Initialize the schedule graph "graph" from the schedule constraints "sc".
+ *
+ * The context is included in the domain before the nodes of
+ * the graphs are extracted in order to be able to exploit
+ * any possible additional equalities.
+ * Note that this intersection is only performed locally here.
+ */
+static isl_stat graph_init(struct isl_sched_graph *graph,
+ __isl_keep isl_schedule_constraints *sc)
+{
+ isl_ctx *ctx;
+ isl_union_set *domain;
+ struct isl_extract_edge_data data;
+ enum isl_edge_type i;
+ isl_stat r;
+
+ if (!sc)
+ return isl_stat_error;
+
+ ctx = isl_schedule_constraints_get_ctx(sc);
+
+ domain = isl_schedule_constraints_get_domain(sc);
+ graph->n = isl_union_set_n_set(domain);
+ isl_union_set_free(domain);
+
+ if (graph_alloc(ctx, graph, graph->n,
+ isl_schedule_constraints_n_map(sc)) < 0)
+ return isl_stat_error;
+
+ if (compute_max_row(graph, sc) < 0)
+ return isl_stat_error;
+ graph->root = 1;
+ graph->n = 0;
+ domain = isl_schedule_constraints_get_domain(sc);
+ domain = isl_union_set_intersect_params(domain,
+ isl_set_copy(sc->context));
+ r = isl_union_set_foreach_set(domain, &extract_node, graph);
+ isl_union_set_free(domain);
+ if (r < 0)
+ return isl_stat_error;
+ if (graph_init_table(ctx, graph) < 0)
+ return isl_stat_error;
+ for (i = isl_edge_first; i <= isl_edge_last; ++i)
+ graph->max_edge[i] = isl_union_map_n_map(sc->constraint[i]);
+ if (graph_init_edge_tables(ctx, graph) < 0)
+ return isl_stat_error;
+ graph->n_edge = 0;
+ data.graph = graph;
+ for (i = isl_edge_first; i <= isl_edge_last; ++i) {
+ data.type = i;
+ if (isl_union_map_foreach_map(sc->constraint[i],
+ &extract_edge, &data) < 0)
+ return isl_stat_error;
+ }
+
+ return isl_stat_ok;
+}
+
/* Check whether there is any dependence from node[j] to node[i]
* or from node[i] to node[j].
*/
@@ -1821,8 +1981,9 @@ static int add_all_validity_constraints(
struct isl_sched_edge *edge= &graph->edge[i];
int local;
- local = edge->local || (edge->coincidence && use_coincidence);
- if (!edge->validity && !local)
+ local = is_local(edge) ||
+ (is_coincidence(edge) && use_coincidence);
+ if (!is_validity(edge) && !local)
continue;
if (edge->src != edge->dst)
continue;
@@ -1834,8 +1995,9 @@ static int add_all_validity_constraints(
struct isl_sched_edge *edge = &graph->edge[i];
int local;
- local = edge->local || (edge->coincidence && use_coincidence);
- if (!edge->validity && !local)
+ local = is_local(edge) ||
+ (is_coincidence(edge) && use_coincidence);
+ if (!is_validity(edge) && !local)
continue;
if (edge->src == edge->dst)
continue;
@@ -1867,8 +2029,9 @@ static int add_all_proximity_constraints
struct isl_sched_edge *edge= &graph->edge[i];
int local;
- local = edge->local || (edge->coincidence && use_coincidence);
- if (!edge->proximity && !local)
+ local = is_local(edge) ||
+ (is_coincidence(edge) && use_coincidence);
+ if (!is_proximity(edge) && !local)
continue;
if (edge->src == edge->dst &&
add_intra_proximity_constraints(graph, edge, 1, local) < 0)
@@ -1876,7 +2039,7 @@ static int add_all_proximity_constraints
if (edge->src != edge->dst &&
add_inter_proximity_constraints(graph, edge, 1, local) < 0)
return -1;
- if (edge->validity || local)
+ if (is_validity(edge) || local)
continue;
if (edge->src == edge->dst &&
add_intra_proximity_constraints(graph, edge, -1, 0) < 0)
@@ -1951,15 +2114,15 @@ static int node_update_cmap(struct isl_s
static int edge_multiplicity(struct isl_sched_edge *edge, int carry,
int use_coincidence)
{
- if (carry && !edge->validity && !edge->conditional_validity)
+ if (carry && !is_validity(edge) && !is_conditional_validity(edge))
return 0;
if (carry)
return 1;
- if (edge->proximity || edge->local)
+ if (is_proximity(edge) || is_local(edge))
return 2;
- if (use_coincidence && edge->coincidence)
+ if (use_coincidence && is_coincidence(edge))
return 2;
- if (edge->validity)
+ if (is_validity(edge))
return 1;
return 0;
}
@@ -2230,7 +2393,7 @@ static int check_conflict(int con, void
return 0;
for (i = 0; i < graph->n_edge; ++i) {
- if (!graph->edge[i].validity)
+ if (!is_validity(&graph->edge[i]))
continue;
if (graph->edge[i].src == graph->edge[i].dst)
continue;
@@ -2628,9 +2791,9 @@ static int unconditionalize_adjacent_val
int adjacent;
isl_union_map *validity;
- if (!graph->edge[i].conditional_validity)
+ if (!is_conditional_validity(&graph->edge[i]))
continue;
- if (graph->edge[i].validity)
+ if (is_validity(&graph->edge[i]))
continue;
validity = graph->edge[i].tagged_validity;
@@ -2642,7 +2805,7 @@ static int unconditionalize_adjacent_val
if (!adjacent)
continue;
- graph->edge[i].validity = 1;
+ set_validity(&graph->edge[i]);
}
isl_union_set_free(condition_source);
@@ -2680,9 +2843,9 @@ static int update_edges(isl_ctx *ctx, st
isl_union_set *uset;
isl_union_map *umap;
- if (!graph->edge[i].condition)
+ if (!is_condition(&graph->edge[i]))
continue;
- if (graph->edge[i].local)
+ if (is_local(&graph->edge[i]))
continue;
local = is_condition_false(&graph->edge[i]);
if (local < 0)
@@ -2776,7 +2939,7 @@ static __isl_give isl_union_set_list *ex
}
/* Return a list of two unions of universe domains, one for the SCCs up
- * to and including graph->src_scc and another for the other SCCS.
+ * to and including graph->src_scc and another for the other SCCs.
*/
static __isl_give isl_union_set_list *extract_split(isl_ctx *ctx,
struct isl_sched_graph *graph)
@@ -2866,7 +3029,7 @@ static int copy_edges(isl_ctx *ctx, stru
dst_src = graph_find_node(ctx, dst, edge->src->space);
dst_dst = graph_find_node(ctx, dst, edge->dst->space);
if (!dst_src || !dst_dst) {
- if (edge->validity || edge->conditional_validity)
+ if (is_validity(edge) || is_conditional_validity(edge))
isl_die(ctx, isl_error_internal,
"backward (conditional) validity edge",
return -1);
@@ -2882,12 +3045,7 @@ static int copy_edges(isl_ctx *ctx, stru
dst->edge[dst->n_edge].map = map;
dst->edge[dst->n_edge].tagged_condition = tagged_condition;
dst->edge[dst->n_edge].tagged_validity = tagged_validity;
- dst->edge[dst->n_edge].validity = edge->validity;
- dst->edge[dst->n_edge].proximity = edge->proximity;
- dst->edge[dst->n_edge].coincidence = edge->coincidence;
- dst->edge[dst->n_edge].condition = edge->condition;
- dst->edge[dst->n_edge].conditional_validity =
- edge->conditional_validity;
+ dst->edge[dst->n_edge].types = edge->types;
dst->n_edge++;
if (edge->tagged_condition && !tagged_condition)
@@ -2941,9 +3099,7 @@ static __isl_give isl_schedule_node *com
/* Compute a schedule for a subgraph of "graph". In particular, for
* the graph composed of nodes that satisfy node_pred and edges that
- * that satisfy edge_pred. The caller should precompute the number
- * of nodes and edges that satisfy these predicates and pass them along
- * as "n" and "n_edge".
+ * that satisfy edge_pred.
* If the subgraph is known to consist of a single component, then wcc should
* be set and then we call compute_schedule_wcc on the constructed subgraph.
* Otherwise, we call compute_schedule, which will check whether the subgraph
@@ -2954,14 +3110,21 @@ static __isl_give isl_schedule_node *com
*/
static __isl_give isl_schedule_node *compute_sub_schedule(
__isl_take isl_schedule_node *node, isl_ctx *ctx,
- struct isl_sched_graph *graph, int n, int n_edge,
+ struct isl_sched_graph *graph,
int (*node_pred)(struct isl_sched_node *node, int data),
int (*edge_pred)(struct isl_sched_edge *edge, int data),
int data, int wcc)
{
struct isl_sched_graph split = { 0 };
+ int i, n = 0, n_edge = 0;
int t;
+ for (i = 0; i < graph->n; ++i)
+ if (node_pred(&graph->node[i], data))
+ ++n;
+ for (i = 0; i < graph->n_edge; ++i)
+ if (edge_pred(&graph->edge[i], data))
+ ++n_edge;
if (graph_alloc(ctx, &split, n, n_edge) < 0)
goto error;
if (copy_nodes(&split, graph, node_pred, data) < 0)
@@ -3036,8 +3199,10 @@ static int reset_band(struct isl_sched_g
/* Split the current graph into two parts and compute a schedule for each
* part individually. In particular, one part consists of all SCCs up
* to and including graph->src_scc, while the other part contains the other
- * SCCS. The split is enforced by a sequence node inserted at position "node"
+ * SCCs. The split is enforced by a sequence node inserted at position "node"
* in the schedule tree. Return the updated schedule node.
+ * If either of these two parts consists of a sequence, then it is spliced
+ * into the sequence containing the two parts.
*
* The current band is reset. It would be possible to reuse
* the previously computed rows as the first rows in the next
@@ -3047,7 +3212,7 @@ static int reset_band(struct isl_sched_g
static __isl_give isl_schedule_node *compute_split_schedule(
__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
{
- int i, n, e1, e2;
+ int is_seq;
isl_ctx *ctx;
isl_union_set_list *filters;
@@ -3057,42 +3222,32 @@ static __isl_give isl_schedule_node *com
if (reset_band(graph) < 0)
return isl_schedule_node_free(node);
- n = 0;
- for (i = 0; i < graph->n; ++i) {
- struct isl_sched_node *node = &graph->node[i];
- int before = node->scc <= graph->src_scc;
-
- if (before)
- n++;
- }
-
- e1 = e2 = 0;
- for (i = 0; i < graph->n_edge; ++i) {
- if (graph->edge[i].dst->scc <= graph->src_scc)
- e1++;
- if (graph->edge[i].src->scc > graph->src_scc)
- e2++;
- }
-
next_band(graph);
ctx = isl_schedule_node_get_ctx(node);
filters = extract_split(ctx, graph);
node = isl_schedule_node_insert_sequence(node, filters);
- node = isl_schedule_node_child(node, 0);
+ node = isl_schedule_node_child(node, 1);
node = isl_schedule_node_child(node, 0);
- node = compute_sub_schedule(node, ctx, graph, n, e1,
- &node_scc_at_most, &edge_dst_scc_at_most,
- graph->src_scc, 0);
- node = isl_schedule_node_parent(node);
- node = isl_schedule_node_next_sibling(node);
- node = isl_schedule_node_child(node, 0);
- node = compute_sub_schedule(node, ctx, graph, graph->n - n, e2,
+ node = compute_sub_schedule(node, ctx, graph,
&node_scc_at_least, &edge_src_scc_at_least,
graph->src_scc + 1, 0);
+ is_seq = isl_schedule_node_get_type(node) == isl_schedule_node_sequence;
+ node = isl_schedule_node_parent(node);
+ node = isl_schedule_node_parent(node);
+ if (is_seq)
+ node = isl_schedule_node_sequence_splice_child(node, 1);
+ node = isl_schedule_node_child(node, 0);
+ node = isl_schedule_node_child(node, 0);
+ node = compute_sub_schedule(node, ctx, graph,
+ &node_scc_at_most, &edge_dst_scc_at_most,
+ graph->src_scc, 0);
+ is_seq = isl_schedule_node_get_type(node) == isl_schedule_node_sequence;
node = isl_schedule_node_parent(node);
node = isl_schedule_node_parent(node);
+ if (is_seq)
+ node = isl_schedule_node_sequence_splice_child(node, 0);
return node;
}
@@ -3303,7 +3458,7 @@ static int add_all_constraints(struct is
for (i = 0; i < graph->n_edge; ++i) {
struct isl_sched_edge *edge= &graph->edge[i];
- if (!edge->validity && !edge->conditional_validity)
+ if (!is_validity(edge) && !is_conditional_validity(edge))
continue;
for (j = 0; j < edge->map->n; ++j) {
@@ -3668,6 +3823,11 @@ static int is_any_trivial(struct isl_sch
/* Construct a schedule row for each node such that as many dependences
* as possible are carried and then continue with the next band.
*
+ * Note that despite the fact that the problem is solved using a rational
+ * solver, the solution is guaranteed to be integral.
+ * Specifically, the dependence distance lower bounds e_i (and therefore
+ * also their sum) are integers. See Lemma 5 of [1].
+ *
* If the computed schedule row turns out to be trivial on one or
* more nodes where it should not be trivial, then we throw it away
* and try again on each component separately.
@@ -3684,6 +3844,10 @@ static int is_any_trivial(struct isl_sch
* of the schedule tree and continue with the construction of the schedule.
* This insertion and the continued construction is performed by split_scaled
* after optionally checking for non-trivial common divisors.
+ *
+ * [1] P. Feautrier, Some Efficient Solutions to the Affine Scheduling
+ * Problem, Part II: Multi-Dimensional Time.
+ * In Intl. Journal of Parallel Programming, 1992.
*/
static __isl_give isl_schedule_node *carry_dependences(
__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
@@ -3802,8 +3966,8 @@ static int has_validity_edges(struct isl
return -1;
if (empty)
continue;
- if (graph->edge[i].validity ||
- graph->edge[i].conditional_validity)
+ if (is_validity(&graph->edge[i]) ||
+ is_conditional_validity(&graph->edge[i]))
return 1;
}
@@ -3846,8 +4010,8 @@ static void clear_local_edges(struct isl
int i;
for (i = 0; i < graph->n_edge; ++i)
- if (graph->edge[i].condition)
- graph->edge[i].local = 0;
+ if (is_condition(&graph->edge[i]))
+ clear_local(&graph->edge[i]);
}
/* Does "graph" have both condition and conditional validity edges?
@@ -3859,9 +4023,9 @@ static int need_condition_check(struct i
int any_conditional_validity = 0;
for (i = 0; i < graph->n_edge; ++i) {
- if (graph->edge[i].condition)
+ if (is_condition(&graph->edge[i]))
any_condition = 1;
- if (graph->edge[i].conditional_validity)
+ if (is_conditional_validity(&graph->edge[i]))
any_conditional_validity = 1;
}
@@ -3875,7 +4039,7 @@ static int has_any_coincidence(struct is
int i;
for (i = 0; i < graph->n_edge; ++i)
- if (graph->edge[i].coincidence)
+ if (is_coincidence(&graph->edge[i]))
return 1;
return 0;
@@ -3943,9 +4107,9 @@ static int has_adjacent_true_conditions(
int adjacent, local;
isl_union_map *condition;
- if (!graph->edge[i].condition)
+ if (!is_condition(&graph->edge[i]))
continue;
- if (graph->edge[i].local)
+ if (is_local(&graph->edge[i]))
continue;
condition = graph->edge[i].tagged_condition;
@@ -3958,7 +4122,7 @@ static int has_adjacent_true_conditions(
if (!adjacent)
continue;
- graph->edge[i].local = 1;
+ set_local(&graph->edge[i]);
local = is_condition_false(&graph->edge[i]);
if (local < 0)
@@ -3998,7 +4162,7 @@ static int has_violated_conditional_cons
isl_union_map *umap;
int violated;
- if (!graph->edge[i].conditional_validity)
+ if (!is_conditional_validity(&graph->edge[i]))
continue;
violated = is_violated(graph, i);
@@ -4182,8 +4346,7 @@ static __isl_give isl_schedule_node *com
__isl_take isl_schedule_node *node, struct isl_sched_graph *graph,
int wcc)
{
- int component, i;
- int n, n_edge;
+ int component;
isl_ctx *ctx;
isl_union_set_list *filters;
@@ -4198,19 +4361,9 @@ static __isl_give isl_schedule_node *com
node = isl_schedule_node_insert_sequence(node, filters);
for (component = 0; component < graph->scc; ++component) {
- n = 0;
- for (i = 0; i < graph->n; ++i)
- if (graph->node[i].scc == component)
- n++;
- n_edge = 0;
- for (i = 0; i < graph->n_edge; ++i)
- if (graph->edge[i].src->scc == component &&
- graph->edge[i].dst->scc == component)
- n_edge++;
-
node = isl_schedule_node_child(node, component);
node = isl_schedule_node_child(node, 0);
- node = compute_sub_schedule(node, ctx, graph, n, n_edge,
+ node = compute_sub_schedule(node, ctx, graph,
&node_scc_exactly,
&edge_scc_exactly, component, wcc);
node = isl_schedule_node_parent(node);
@@ -4267,12 +4420,6 @@ static __isl_give isl_schedule_node *com
* then the conditional validity dependences may be violated inside
* a tilable band, provided they have no adjacent non-local
* condition dependences.
- *
- * The context is included in the domain before the nodes of
- * the graphs are extracted in order to be able to exploit
- * any possible additional equalities.
- * However, the returned schedule contains the original domain
- * (before this intersection).
*/
__isl_give isl_schedule *isl_schedule_constraints_compute_schedule(
__isl_take isl_schedule_constraints *sc)
@@ -4282,65 +4429,29 @@ __isl_give isl_schedule *isl_schedule_co
isl_schedule *sched;
isl_schedule_node *node;
isl_union_set *domain;
- struct isl_extract_edge_data data;
- enum isl_edge_type i;
- int r;
sc = isl_schedule_constraints_align_params(sc);
- if (!sc)
- return NULL;
- graph.n = isl_union_set_n_set(sc->domain);
- if (graph.n == 0) {
- isl_union_set *domain = isl_union_set_copy(sc->domain);
- sched = isl_schedule_from_domain(domain);
- goto done;
- }
- if (graph_alloc(ctx, &graph, graph.n,
- isl_schedule_constraints_n_map(sc)) < 0)
- goto error;
- if (compute_max_row(&graph, sc) < 0)
- goto error;
- graph.root = 1;
- graph.n = 0;
- domain = isl_union_set_copy(sc->domain);
- domain = isl_union_set_intersect_params(domain,
- isl_set_copy(sc->context));
- r = isl_union_set_foreach_set(domain, &extract_node, &graph);
- isl_union_set_free(domain);
- if (r < 0)
- goto error;
- if (graph_init_table(ctx, &graph) < 0)
- goto error;
- for (i = isl_edge_first; i <= isl_edge_last; ++i)
- graph.max_edge[i] = isl_union_map_n_map(sc->constraint[i]);
- if (graph_init_edge_tables(ctx, &graph) < 0)
- goto error;
- graph.n_edge = 0;
- data.graph = &graph;
- for (i = isl_edge_first; i <= isl_edge_last; ++i) {
- data.type = i;
- if (isl_union_map_foreach_map(sc->constraint[i],
- &extract_edge, &data) < 0)
- goto error;
+ domain = isl_schedule_constraints_get_domain(sc);
+ if (isl_union_set_n_set(domain) == 0) {
+ isl_schedule_constraints_free(sc);
+ return isl_schedule_from_domain(domain);
}
- node = isl_schedule_node_from_domain(isl_union_set_copy(sc->domain));
+ if (graph_init(&graph, sc) < 0)
+ domain = isl_union_set_free(domain);
+
+ node = isl_schedule_node_from_domain(domain);
node = isl_schedule_node_child(node, 0);
if (graph.n > 0)
node = compute_schedule(node, &graph);
sched = isl_schedule_node_get_schedule(node);
isl_schedule_node_free(node);
-done:
graph_free(ctx, &graph);
isl_schedule_constraints_free(sc);
return sched;
-error:
- graph_free(ctx, &graph);
- isl_schedule_constraints_free(sc);
- return NULL;
}
/* Compute a schedule for the given union of domains that respects
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_space.c (original)
+++ polly/trunk/lib/External/isl/isl_space.c Fri Jan 15 09:54:45 2016
@@ -2281,6 +2281,45 @@ error:
return NULL;
}
+/* Can isl_space_range_curry be applied to "space"?
+ * That is, does it have a nested relation in its range,
+ * the domain of which is itself a nested relation?
+ */
+isl_bool isl_space_can_range_curry(__isl_keep isl_space *space)
+{
+ isl_bool can;
+
+ if (!space)
+ return isl_bool_error;
+ can = isl_space_range_is_wrapping(space);
+ if (can < 0 || !can)
+ return can;
+ return isl_space_can_curry(space->nested[1]);
+}
+
+/* Given a space A -> ((B -> C) -> D), return the corresponding space
+ * A -> (B -> (C -> D)).
+ */
+__isl_give isl_space *isl_space_range_curry(__isl_take isl_space *space)
+{
+ if (!space)
+ return NULL;
+
+ if (!isl_space_can_range_curry(space))
+ isl_die(isl_space_get_ctx(space), isl_error_invalid,
+ "space range cannot be curried",
+ return isl_space_free(space));
+
+ space = isl_space_cow(space);
+ if (!space)
+ return NULL;
+ space->nested[1] = isl_space_curry(space->nested[1]);
+ if (!space->nested[1])
+ return isl_space_free(space);
+
+ return space;
+}
+
/* Can we apply isl_space_uncurry to "space"?
* That is, does it have a nested relation in its range?
*/
Modified: polly/trunk/lib/External/isl/isl_tab.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_tab.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_tab.c (original)
+++ polly/trunk/lib/External/isl/isl_tab.c Fri Jan 15 09:54:45 2016
@@ -1883,6 +1883,7 @@ int isl_tab_add_ineq(struct isl_tab *tab
}
if (tab->cone) {
isl_int_init(cst);
+ isl_int_set_si(cst, 0);
isl_int_swap(ineq[0], cst);
}
r = isl_tab_add_row(tab, ineq);
@@ -2064,6 +2065,7 @@ int isl_tab_add_eq(struct isl_tab *tab,
if (tab->cone) {
isl_int_init(cst);
+ isl_int_set_si(cst, 0);
isl_int_swap(eq[0], cst);
}
r = isl_tab_add_row(tab, eq);
@@ -2363,6 +2365,7 @@ struct isl_tab *isl_tab_from_recession_c
tab->cone = 1;
isl_int_init(cst);
+ isl_int_set_si(cst, 0);
for (i = 0; i < bset->n_eq; ++i) {
isl_int_swap(bset->eq[i][offset], cst);
if (offset > 0) {
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_test.c (original)
+++ polly/trunk/lib/External/isl/isl_test.c Fri Jan 15 09:54:45 2016
@@ -119,8 +119,82 @@ static int test_parse_multi_val(isl_ctx
return mv ? 0 : -1;
}
+/* Pairs of binary relation representations that should represent
+ * the same binary relations.
+ */
+struct {
+ const char *map1;
+ const char *map2;
+} parse_map_equal_tests[] = {
+ { "{ [x,y] : [([x/2]+y)/3] >= 1 }",
+ "{ [x, y] : 2y >= 6 - x }" },
+ { "{ [x,y] : x <= min(y, 2*y+3) }",
+ "{ [x,y] : x <= y, 2*y + 3 }" },
+ { "{ [x,y] : x >= min(y, 2*y+3) }",
+ "{ [x, y] : (y <= x and y >= -3) or (2y <= -3 + x and y <= -4) }" },
+ { "[n] -> { [c1] : c1>=0 and c1<=floord(n-4,3) }",
+ "[n] -> { [c1] : c1 >= 0 and 3c1 <= -4 + n }" },
+ { "{ [i,j] -> [i] : i < j; [i,j] -> [j] : j <= i }",
+ "{ [i,j] -> [min(i,j)] }" },
+ { "{ [i,j] : i != j }",
+ "{ [i,j] : i < j or i > j }" },
+ { "{ [i,j] : (i+1)*2 >= j }",
+ "{ [i, j] : j <= 2 + 2i }" },
+ { "{ [i] -> [i > 0 ? 4 : 5] }",
+ "{ [i] -> [5] : i <= 0; [i] -> [4] : i >= 1 }" },
+ { "[N=2,M] -> { [i=[(M+N)/4]] }",
+ "[N, M] -> { [i] : N = 2 and 4i <= 2 + M and 4i >= -1 + M }" },
+ { "{ [x] : x >= 0 }",
+ "{ [x] : x-0 >= 0 }" },
+ { "{ [i] : ((i > 10)) }",
+ "{ [i] : i >= 11 }" },
+ { "{ [i] -> [0] }",
+ "{ [i] -> [0 * i] }" },
+ { "{ [a] -> [b] : (not false) }",
+ "{ [a] -> [b] : true }" },
+ { "{ [i] : i/2 <= 5 }",
+ "{ [i] : i <= 10 }" },
+ { "{Sym=[n] [i] : i <= n }",
+ "[n] -> { [i] : i <= n }" },
+ { "{ [*] }",
+ "{ [a] }" },
+ { "{ [i] : 2*floor(i/2) = i }",
+ "{ [i] : exists a : i = 2 a }" },
+ { "{ [a] -> [b] : a = 5 implies b = 5 }",
+ "{ [a] -> [b] : a != 5 or b = 5 }" },
+ { "{ [a] -> [a - 1 : a > 0] }",
+ "{ [a] -> [a - 1] : a > 0 }" },
+ { "{ [a] -> [a - 1 : a > 0; a : a <= 0] }",
+ "{ [a] -> [a - 1] : a > 0; [a] -> [a] : a <= 0 }" },
+ { "{ [a] -> [(a) * 2 : a >= 0; 0 : a < 0] }",
+ "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }" },
+ { "{ [a] -> [(a * 2) : a >= 0; 0 : a < 0] }",
+ "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }" },
+ { "{ [a] -> [(a * 2 : a >= 0); 0 : a < 0] }",
+ "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }" },
+ { "{ [a] -> [(a * 2 : a >= 0; 0 : a < 0)] }",
+ "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }" },
+ { "{ [a,b] -> [i,j] : a,b << i,j }",
+ "{ [a,b] -> [i,j] : a < i or (a = i and b < j) }" },
+ { "{ [a,b] -> [i,j] : a,b <<= i,j }",
+ "{ [a,b] -> [i,j] : a < i or (a = i and b <= j) }" },
+ { "{ [a,b] -> [i,j] : a,b >> i,j }",
+ "{ [a,b] -> [i,j] : a > i or (a = i and b > j) }" },
+ { "{ [a,b] -> [i,j] : a,b >>= i,j }",
+ "{ [a,b] -> [i,j] : a > i or (a = i and b >= j) }" },
+ { "{ [n] -> [i] : exists (a, b, c: 8b <= i - 32a and "
+ "8b >= -7 + i - 32 a and b >= 0 and b <= 3 and "
+ "8c < n - 32a and i < n and c >= 0 and "
+ "c <= 3 and c >= -4a) }",
+ "{ [n] -> [i] : 0 <= i < n }" },
+ { "{ [x] -> [] : exists (a, b: 0 <= a <= 1 and 0 <= b <= 3 and "
+ "2b <= x - 8a and 2b >= -1 + x - 8a) }",
+ "{ [x] -> [] : 0 <= x <= 15 }" },
+};
+
int test_parse(struct isl_ctx *ctx)
{
+ int i;
isl_map *map, *map2;
const char *str, *str2;
@@ -145,18 +219,12 @@ int test_parse(struct isl_ctx *ctx)
test_parse_map(ctx, "{ [p1, y1, y2] -> [2, y1, y2] : "
"p1 = 1 && (y1 <= y2 || y2 = 0) }");
- str = "{ [x,y] : [([x/2]+y)/3] >= 1 }";
- str2 = "{ [x, y] : 2y >= 6 - x }";
- if (test_parse_map_equal(ctx, str, str2) < 0)
- return -1;
-
- if (test_parse_map_equal(ctx, "{ [x,y] : x <= min(y, 2*y+3) }",
- "{ [x,y] : x <= y, 2*y + 3 }") < 0)
- return -1;
- str = "{ [x, y] : (y <= x and y >= -3) or (2y <= -3 + x and y <= -4) }";
- if (test_parse_map_equal(ctx, "{ [x,y] : x >= min(y, 2*y+3) }",
- str) < 0)
- return -1;
+ for (i = 0; i < ARRAY_SIZE(parse_map_equal_tests); ++i) {
+ str = parse_map_equal_tests[i].map1;
+ str2 = parse_map_equal_tests[i].map2;
+ if (test_parse_map_equal(ctx, str, str2) < 0)
+ return -1;
+ }
str = "{[new,old] -> [new+1-2*[(new+1)/2],old+1-2*[(old+1)/2]]}";
map = isl_map_read_from_str(ctx, str);
@@ -177,103 +245,11 @@ int test_parse(struct isl_ctx *ctx)
isl_map_free(map);
isl_map_free(map2);
- str = "[n] -> { [c1] : c1>=0 and c1<=floord(n-4,3) }";
- str2 = "[n] -> { [c1] : c1 >= 0 and 3c1 <= -4 + n }";
- if (test_parse_map_equal(ctx, str, str2) < 0)
- return -1;
-
- str = "{ [i,j] -> [i] : i < j; [i,j] -> [j] : j <= i }";
- str2 = "{ [i,j] -> [min(i,j)] }";
- if (test_parse_map_equal(ctx, str, str2) < 0)
- return -1;
-
- str = "{ [i,j] : i != j }";
- str2 = "{ [i,j] : i < j or i > j }";
- if (test_parse_map_equal(ctx, str, str2) < 0)
- return -1;
-
- str = "{ [i,j] : (i+1)*2 >= j }";
- str2 = "{ [i, j] : j <= 2 + 2i }";
- if (test_parse_map_equal(ctx, str, str2) < 0)
- return -1;
-
- str = "{ [i] -> [i > 0 ? 4 : 5] }";
- str2 = "{ [i] -> [5] : i <= 0; [i] -> [4] : i >= 1 }";
- if (test_parse_map_equal(ctx, str, str2) < 0)
- return -1;
-
- str = "[N=2,M] -> { [i=[(M+N)/4]] }";
- str2 = "[N, M] -> { [i] : N = 2 and 4i <= 2 + M and 4i >= -1 + M }";
- if (test_parse_map_equal(ctx, str, str2) < 0)
- return -1;
-
- str = "{ [x] : x >= 0 }";
- str2 = "{ [x] : x-0 >= 0 }";
- if (test_parse_map_equal(ctx, str, str2) < 0)
- return -1;
-
- str = "{ [i] : ((i > 10)) }";
- str2 = "{ [i] : i >= 11 }";
- if (test_parse_map_equal(ctx, str, str2) < 0)
- return -1;
-
- str = "{ [i] -> [0] }";
- str2 = "{ [i] -> [0 * i] }";
- if (test_parse_map_equal(ctx, str, str2) < 0)
- return -1;
-
test_parse_pwqp(ctx, "{ [i] -> i + [ (i + [i/3])/2 ] }");
test_parse_map(ctx, "{ S1[i] -> [([i/10]),i%10] : 0 <= i <= 45 }");
test_parse_pwaff(ctx, "{ [i] -> [i + 1] : i > 0; [a] -> [a] : a < 0 }");
test_parse_pwqp(ctx, "{ [x] -> ([(x)/2] * [(x)/3]) }");
- if (test_parse_map_equal(ctx, "{ [a] -> [b] : (not false) }",
- "{ [a] -> [b] : true }") < 0)
- return -1;
-
- if (test_parse_map_equal(ctx, "{ [i] : i/2 <= 5 }",
- "{ [i] : i <= 10 }") < 0)
- return -1;
-
- if (test_parse_map_equal(ctx, "{Sym=[n] [i] : i <= n }",
- "[n] -> { [i] : i <= n }") < 0)
- return -1;
-
- if (test_parse_map_equal(ctx, "{ [*] }", "{ [a] }") < 0)
- return -1;
-
- if (test_parse_map_equal(ctx, "{ [i] : 2*floor(i/2) = i }",
- "{ [i] : exists a : i = 2 a }") < 0)
- return -1;
-
- if (test_parse_map_equal(ctx, "{ [a] -> [b] : a = 5 implies b = 5 }",
- "{ [a] -> [b] : a != 5 or b = 5 }") < 0)
- return -1;
-
- if (test_parse_map_equal(ctx, "{ [a] -> [a - 1 : a > 0] }",
- "{ [a] -> [a - 1] : a > 0 }") < 0)
- return -1;
- if (test_parse_map_equal(ctx,
- "{ [a] -> [a - 1 : a > 0; a : a <= 0] }",
- "{ [a] -> [a - 1] : a > 0; [a] -> [a] : a <= 0 }") < 0)
- return -1;
- if (test_parse_map_equal(ctx,
- "{ [a] -> [(a) * 2 : a >= 0; 0 : a < 0] }",
- "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }") < 0)
- return -1;
- if (test_parse_map_equal(ctx,
- "{ [a] -> [(a * 2) : a >= 0; 0 : a < 0] }",
- "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }") < 0)
- return -1;
- if (test_parse_map_equal(ctx,
- "{ [a] -> [(a * 2 : a >= 0); 0 : a < 0] }",
- "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }") < 0)
- return -1;
- if (test_parse_map_equal(ctx,
- "{ [a] -> [(a * 2 : a >= 0; 0 : a < 0)] }",
- "{ [a] -> [2a] : a >= 0; [a] -> [0] : a < 0 }") < 0)
- return -1;
-
return 0;
}
@@ -1105,6 +1081,49 @@ int test_affine_hull(struct isl_ctx *ctx
return 0;
}
+/* Pairs of maps and the corresponding expected results of
+ * isl_map_plain_unshifted_simple_hull.
+ */
+struct {
+ const char *map;
+ const char *hull;
+} plain_unshifted_simple_hull_tests[] = {
+ { "{ [i] -> [j] : i >= 1 and j >= 1 or i >= 2 and j <= 10 }",
+ "{ [i] -> [j] : i >= 1 }" },
+ { "{ [n] -> [i,j,k] : (i mod 3 = 2 and j mod 4 = 2) or "
+ "(j mod 4 = 2 and k mod 6 = n) }",
+ "{ [n] -> [i,j,k] : j mod 4 = 2 }" },
+};
+
+/* Basic tests for isl_map_plain_unshifted_simple_hull.
+ */
+static int test_plain_unshifted_simple_hull(isl_ctx *ctx)
+{
+ int i;
+ isl_map *map;
+ isl_basic_map *hull, *expected;
+ isl_bool equal;
+
+ for (i = 0; i < ARRAY_SIZE(plain_unshifted_simple_hull_tests); ++i) {
+ const char *str;
+ str = plain_unshifted_simple_hull_tests[i].map;
+ map = isl_map_read_from_str(ctx, str);
+ str = plain_unshifted_simple_hull_tests[i].hull;
+ expected = isl_basic_map_read_from_str(ctx, str);
+ hull = isl_map_plain_unshifted_simple_hull(map);
+ equal = isl_basic_map_is_equal(hull, expected);
+ isl_basic_map_free(hull);
+ isl_basic_map_free(expected);
+ if (equal < 0)
+ return -1;
+ if (!equal)
+ isl_die(ctx, isl_error_unknown, "unexpected hull",
+ return -1);
+ }
+
+ return 0;
+}
+
static int test_simple_hull(struct isl_ctx *ctx)
{
const char *str;
@@ -1126,6 +1145,9 @@ static int test_simple_hull(struct isl_c
isl_die(ctx, isl_error_unknown, "Empty set should be detected",
return -1);
+ if (test_plain_unshifted_simple_hull(ctx) < 0)
+ return -1;
+
return 0;
}
@@ -1258,6 +1280,55 @@ void test_gist_case(struct isl_ctx *ctx,
fclose(input);
}
+/* Inputs to isl_map_plain_gist_basic_map, along with the expected output.
+ */
+struct {
+ const char *map;
+ const char *context;
+ const char *gist;
+} plain_gist_tests[] = {
+ { "{ [i] -> [j] : i >= 1 and j >= 1 or i >= 2 and j <= 10 }",
+ "{ [i] -> [j] : i >= 1 }",
+ "{ [i] -> [j] : j >= 1 or i >= 2 and j <= 10 }" },
+ { "{ [n] -> [i,j,k] : (i mod 3 = 2 and j mod 4 = 2) or "
+ "(j mod 4 = 2 and k mod 6 = n) }",
+ "{ [n] -> [i,j,k] : j mod 4 = 2 }",
+ "{ [n] -> [i,j,k] : (i mod 3 = 2) or (k mod 6 = n) }" },
+ { "{ [i] -> [j] : i > j and (exists a,b : i <= 2a + 5b <= 2) }",
+ "{ [i] -> [j] : i > j }",
+ "{ [i] -> [j] : exists a,b : i <= 2a + 5b <= 2 }" },
+};
+
+/* Basic tests for isl_map_plain_gist_basic_map.
+ */
+static int test_plain_gist(isl_ctx *ctx)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(plain_gist_tests); ++i) {
+ const char *str;
+ int equal;
+ isl_map *map, *gist;
+ isl_basic_map *context;
+
+ map = isl_map_read_from_str(ctx, plain_gist_tests[i].map);
+ str = plain_gist_tests[i].context;
+ context = isl_basic_map_read_from_str(ctx, str);
+ map = isl_map_plain_gist_basic_map(map, context);
+ gist = isl_map_read_from_str(ctx, plain_gist_tests[i].gist);
+ equal = isl_map_is_equal(map, gist);
+ isl_map_free(map);
+ isl_map_free(gist);
+ if (equal < 0)
+ return -1;
+ if (!equal)
+ isl_die(ctx, isl_error_unknown,
+ "incorrect gist result", return -1);
+ }
+
+ return 0;
+}
+
struct {
const char *set;
const char *context;
@@ -1397,6 +1468,9 @@ static int test_gist(struct isl_ctx *ctx
isl_map_free(map1); return -1);
isl_map_free(map1);
+ if (test_plain_gist(ctx) < 0)
+ return -1;
+
return 0;
}
@@ -1658,6 +1732,10 @@ struct {
"32e0 <= 31 + i0)) or "
"i0 >= 0 }" },
{ 1, "{ [a, b, c] : 2b = 1 + a and 2c = 2 + a; [0, 0, 0] }" },
+ { 1, "{ [a, a, b, c] : 32*floor((a)/32) = a and 2*floor((b)/2) = b and "
+ "2*floor((c)/2) = c and 0 <= a <= 192;"
+ "[224, 224, b, c] : 2*floor((b)/2) = b and 2*floor((c)/2) = c }"
+ },
};
/* A specialized coalescing test case that would result
@@ -1722,13 +1800,55 @@ static int test_coalesce(struct isl_ctx
return 0;
}
-static int test_closure(isl_ctx *ctx)
+/* Construct a representation of the graph on the right of Figure 1
+ * in "Computing the Transitive Closure of a Union of
+ * Affine Integer Tuple Relations".
+ */
+static __isl_give isl_map *cocoa_fig_1_right_graph(isl_ctx *ctx)
{
- const char *str;
isl_set *dom;
isl_map *up, *right;
+
+ dom = isl_set_read_from_str(ctx,
+ "{ [x,y] : x >= 0 and -2 x + 3 y >= 0 and x <= 3 and "
+ "2 x - 3 y + 3 >= 0 }");
+ right = isl_map_read_from_str(ctx,
+ "{ [x,y] -> [x2,y2] : x2 = x + 1 and y2 = y }");
+ up = isl_map_read_from_str(ctx,
+ "{ [x,y] -> [x2,y2] : x2 = x and y2 = y + 1 }");
+ right = isl_map_intersect_domain(right, isl_set_copy(dom));
+ right = isl_map_intersect_range(right, isl_set_copy(dom));
+ up = isl_map_intersect_domain(up, isl_set_copy(dom));
+ up = isl_map_intersect_range(up, dom);
+ return isl_map_union(up, right);
+}
+
+/* Construct a representation of the power of the graph
+ * on the right of Figure 1 in "Computing the Transitive Closure of
+ * a Union of Affine Integer Tuple Relations".
+ */
+static __isl_give isl_map *cocoa_fig_1_right_power(isl_ctx *ctx)
+{
+ return isl_map_read_from_str(ctx,
+ "{ [1] -> [[0,0] -> [0,1]]; [2] -> [[0,0] -> [1,1]]; "
+ " [1] -> [[0,1] -> [1,1]]; [1] -> [[2,2] -> [3,2]]; "
+ " [2] -> [[2,2] -> [3,3]]; [1] -> [[3,2] -> [3,3]] }");
+}
+
+/* Construct a representation of the transitive closure of the graph
+ * on the right of Figure 1 in "Computing the Transitive Closure of
+ * a Union of Affine Integer Tuple Relations".
+ */
+static __isl_give isl_map *cocoa_fig_1_right_tc(isl_ctx *ctx)
+{
+ return isl_set_unwrap(isl_map_range(cocoa_fig_1_right_power(ctx)));
+}
+
+static int test_closure(isl_ctx *ctx)
+{
+ const char *str;
isl_map *map, *map2;
- int exact;
+ int exact, equal;
/* COCOA example 1 */
map = isl_map_read_from_str(ctx,
@@ -1837,28 +1957,27 @@ static int test_closure(isl_ctx *ctx)
isl_map_free(map2);
isl_map_free(map);
- /* COCOA Fig.1 right */
- dom = isl_set_read_from_str(ctx,
- "{ [x,y] : x >= 0 and -2 x + 3 y >= 0 and x <= 3 and "
- "2 x - 3 y + 3 >= 0 }");
- right = isl_map_read_from_str(ctx,
- "{ [x,y] -> [x2,y2] : x2 = x + 1 and y2 = y }");
- up = isl_map_read_from_str(ctx,
- "{ [x,y] -> [x2,y2] : x2 = x and y2 = y + 1 }");
- right = isl_map_intersect_domain(right, isl_set_copy(dom));
- right = isl_map_intersect_range(right, isl_set_copy(dom));
- up = isl_map_intersect_domain(up, isl_set_copy(dom));
- up = isl_map_intersect_range(up, dom);
- map = isl_map_union(up, right);
+ map = cocoa_fig_1_right_graph(ctx);
map = isl_map_transitive_closure(map, &exact);
assert(exact);
- map2 = isl_map_read_from_str(ctx,
- "{ [0,0] -> [0,1]; [0,0] -> [1,1]; [0,1] -> [1,1]; "
- " [2,2] -> [3,2]; [2,2] -> [3,3]; [3,2] -> [3,3] }");
+ map2 = cocoa_fig_1_right_tc(ctx);
assert(isl_map_is_equal(map, map2));
isl_map_free(map2);
isl_map_free(map);
+ map = cocoa_fig_1_right_graph(ctx);
+ map = isl_map_power(map, &exact);
+ map2 = cocoa_fig_1_right_power(ctx);
+ equal = isl_map_is_equal(map, map2);
+ isl_map_free(map2);
+ isl_map_free(map);
+ if (equal < 0)
+ return -1;
+ if (!exact)
+ isl_die(ctx, isl_error_unknown, "power not exact", return -1);
+ if (!equal)
+ isl_die(ctx, isl_error_unknown, "unexpected power", return -1);
+
/* COCOA Theorem 1 counter example */
map = isl_map_read_from_str(ctx,
"{ [i,j] -> [i2,j2] : i = 0 and 0 <= j and j <= 1 and "
@@ -4834,6 +4953,9 @@ const char *set_conversion_tests[] = {
"[N] -> { [i,j] : exists a : i = 4 a and N - 1 <= i, 2j <= N }",
"[N] -> { [[i]->[j]] : exists a : i = 4 a and N - 1 <= i, 2j <= N }",
"[N] -> { [3*floor(N/2) + 5*floor(N/3)] }",
+ "[a, b] -> { [c, d] : (4*floor((-a + c)/4) = -a + c and "
+ "32*floor((-b + d)/32) = -b + d and 5 <= c <= 8 and "
+ "-3 + c <= d <= 28 + c) }",
};
/* Check that converting from isl_set to isl_pw_multi_aff and back
@@ -4866,32 +4988,41 @@ static int test_set_conversion(isl_ctx *
return 0;
}
+const char *conversion_tests[] = {
+ "{ [a, b, c, d] -> s0[a, b, e, f] : "
+ "exists (e0 = [(a - 2c)/3], e1 = [(-4 + b - 5d)/9], "
+ "e2 = [(-d + f)/9]: 3e0 = a - 2c and 9e1 = -4 + b - 5d and "
+ "9e2 = -d + f and f >= 0 and f <= 8 and 9e >= -5 - 2a and "
+ "9e <= -2 - 2a) }",
+ "{ [a, b] -> [c] : exists (e0 = floor((-a - b + c)/5): "
+ "5e0 = -a - b + c and c >= -a and c <= 4 - a) }",
+ "{ [a, b] -> [c] : exists d : 18 * d = -3 - a + 2c and 1 <= c <= 3 }",
+};
+
/* Check that converting from isl_map to isl_pw_multi_aff and back
* to isl_map produces the original isl_map.
*/
static int test_map_conversion(isl_ctx *ctx)
{
- const char *str;
+ int i;
isl_map *map1, *map2;
isl_pw_multi_aff *pma;
int equal;
- str = "{ [a, b, c, d] -> s0[a, b, e, f] : "
- "exists (e0 = [(a - 2c)/3], e1 = [(-4 + b - 5d)/9], "
- "e2 = [(-d + f)/9]: 3e0 = a - 2c and 9e1 = -4 + b - 5d and "
- "9e2 = -d + f and f >= 0 and f <= 8 and 9e >= -5 - 2a and "
- "9e <= -2 - 2a) }";
- map1 = isl_map_read_from_str(ctx, str);
- pma = isl_pw_multi_aff_from_map(isl_map_copy(map1));
- map2 = isl_map_from_pw_multi_aff(pma);
- equal = isl_map_is_equal(map1, map2);
- isl_map_free(map1);
- isl_map_free(map2);
+ for (i = 0; i < ARRAY_SIZE(conversion_tests); ++i) {
+ map1 = isl_map_read_from_str(ctx, conversion_tests[i]);
+ pma = isl_pw_multi_aff_from_map(isl_map_copy(map1));
+ map2 = isl_map_from_pw_multi_aff(pma);
+ equal = isl_map_is_equal(map1, map2);
+ isl_map_free(map1);
+ isl_map_free(map2);
- if (equal < 0)
- return -1;
- if (!equal)
- isl_die(ctx, isl_error_unknown, "bad conversion", return -1);
+ if (equal < 0)
+ return -1;
+ if (!equal)
+ isl_die(ctx, isl_error_unknown, "bad conversion",
+ return -1);
+ }
return 0;
}
Modified: polly/trunk/lib/External/isl/isl_transitive_closure.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_transitive_closure.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_transitive_closure.c (original)
+++ polly/trunk/lib/External/isl/isl_transitive_closure.c Fri Jan 15 09:54:45 2016
@@ -1608,7 +1608,7 @@ static __isl_give isl_map *floyd_warshal
floyd_warshall_iterate(grid, n, exact);
- app = isl_map_empty(isl_map_get_space(map));
+ app = isl_map_empty(isl_map_get_space(grid[0][0]));
for (i = 0; i < n; ++i) {
for (j = 0; j < n; ++j)
Modified: polly/trunk/lib/External/isl/isl_union_map.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_union_map.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_union_map.c (original)
+++ polly/trunk/lib/External/isl/isl_union_map.c Fri Jan 15 09:54:45 2016
@@ -2087,6 +2087,31 @@ __isl_give isl_union_map *isl_union_map_
return cond_un_op(umap, &domain_factor_range_entry);
}
+/* If "map" is of the form A -> [B -> C], then add A -> B to "res".
+ */
+static isl_stat range_factor_domain_entry(void **entry, void *user)
+{
+ isl_map *map = *entry;
+ isl_union_map **res = user;
+
+ if (!isl_map_range_is_wrapping(map))
+ return isl_stat_ok;
+
+ *res = isl_union_map_add_map(*res,
+ isl_map_range_factor_domain(isl_map_copy(map)));
+
+ return *res ? isl_stat_ok : isl_stat_error;
+}
+
+/* For each map in "umap" of the form A -> [B -> C],
+ * construct the map A -> B and collect the results.
+ */
+__isl_give isl_union_map *isl_union_map_range_factor_domain(
+ __isl_take isl_union_map *umap)
+{
+ return cond_un_op(umap, &range_factor_domain_entry);
+}
+
/* If "map" is of the form A -> [B -> C], then add A -> C to "res".
*/
static isl_stat range_factor_range_entry(void **entry, void *user)
@@ -2419,6 +2444,14 @@ __isl_give isl_basic_set *isl_union_set_
return (isl_basic_set *)isl_union_map_sample(uset);
}
+/* Return an element in "uset" in the form of an isl_point.
+ * Return a void isl_point if "uset" is empty.
+ */
+__isl_give isl_point *isl_union_set_sample_point(__isl_take isl_union_set *uset)
+{
+ return isl_basic_set_sample_point(isl_union_set_sample(uset));
+}
+
struct isl_forall_data {
isl_bool res;
isl_bool (*fn)(__isl_keep isl_map *map);
@@ -2930,6 +2963,32 @@ __isl_give isl_union_map *isl_union_map_
return cond_un_op(umap, &curry_entry);
}
+/* If *entry is of the form A -> ((B -> C) -> D), then apply
+ * isl_map_range_curry to it and add the result to *res.
+ */
+static isl_stat range_curry_entry(void **entry, void *user)
+{
+ isl_map *map = *entry;
+ isl_union_map **res = user;
+
+ if (!isl_map_can_range_curry(map))
+ return isl_stat_ok;
+
+ map = isl_map_range_curry(isl_map_copy(map));
+ *res = isl_union_map_add_map(*res, map);
+
+ return isl_stat_ok;
+}
+
+/* Given a union map, take the maps of the form A -> ((B -> C) -> D) and
+ * return the union of the corresponding maps A -> (B -> (C -> D)).
+ */
+__isl_give isl_union_map *isl_union_map_range_curry(
+ __isl_take isl_union_map *umap)
+{
+ return cond_un_op(umap, &range_curry_entry);
+}
+
static isl_stat lift_entry(void **entry, void *user)
{
isl_set *set = *entry;
Modified: polly/trunk/lib/External/isl/isl_union_templ.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_union_templ.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_union_templ.c (original)
+++ polly/trunk/lib/External/isl/isl_union_templ.c Fri Jan 15 09:54:45 2016
@@ -220,8 +220,11 @@ static __isl_give UNION *FN(UNION,alloc_
__isl_take isl_space *space)
{
if (!u)
- space = isl_space_free(space);
+ goto error;
return FN(UNION,alloc)(space, u->type, u->table.n);
+error:
+ isl_space_free(space);
+ return NULL;
}
#else
/* Allocate a UNION with the same size as "u" and with space "space".
@@ -230,8 +233,11 @@ static __isl_give UNION *FN(UNION,alloc_
__isl_take isl_space *space)
{
if (!u)
- space = isl_space_free(space);
+ goto error;
return FN(UNION,alloc)(space, u->table.n);
+error:
+ isl_space_free(space);
+ return NULL;
}
#endif
Modified: polly/trunk/lib/External/isl/print_templ.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/print_templ.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/print_templ.c (original)
+++ polly/trunk/lib/External/isl/print_templ.c Fri Jan 15 09:54:45 2016
@@ -1,3 +1,5 @@
+#include <isl_printer_private.h>
+
#define xCAT(A,B) A ## B
#define CAT(A,B) xCAT(A,B)
#undef TYPE
@@ -12,6 +14,7 @@ void FN(TYPE,dump)(__isl_keep TYPE *obj)
if (!obj)
return;
p = isl_printer_to_file(FN(TYPE,get_ctx)(obj), stderr);
+ p = isl_printer_set_dump(p, 1);
p = FN(isl_printer_print,BASE)(p, obj);
p = isl_printer_end_line(p);
isl_printer_free(p);
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/cloog/dealII.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/cloog/dealII.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/cloog/dealII.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/cloog/dealII.c Fri Jan 15 09:54:45 2016
@@ -1,32 +1,18 @@
{
- if (T_67 == 0 && T_66 <= -1) {
- S1(0);
- } else if (T_2 >= 1 && T_67 >= 1 && T_66 <= -1) {
- S1(0);
- } else if (T_2 >= 1 && T_67 >= 1 && T_66 >= 0) {
- S1(0);
- S2(0);
- }
- for (int c0 = 1; c0 <= min(min(T_2 - 1, T_67 - 1), T_66); c0 += 1) {
+ for (int c0 = 0; c0 <= min(min(T_2 - 1, T_67 - 1), T_66); c0 += 1) {
S1(c0);
S2(c0);
}
- for (int c0 = max(1, T_66 + 1); c0 < min(T_2, T_67); c0 += 1)
+ for (int c0 = max(0, T_66 + 1); c0 < min(T_2, T_67); c0 += 1)
S1(c0);
- if (T_2 >= 1 && T_67 == 0 && T_66 >= 0) {
- S1(0);
- S2(0);
- }
- for (int c0 = max(1, T_67); c0 <= min(T_2 - 1, T_66); c0 += 1) {
+ for (int c0 = T_67; c0 <= min(T_2 - 1, T_66); c0 += 1) {
S1(c0);
S2(c0);
}
- for (int c0 = max(max(1, T_67), T_66 + 1); c0 < T_2; c0 += 1)
+ for (int c0 = max(T_67, T_66 + 1); c0 < T_2; c0 += 1)
S1(c0);
- if (T_2 == 0 && T_67 >= 1 && T_66 >= 0)
- S2(0);
- for (int c0 = max(1, T_2); c0 <= min(T_67 - 1, T_66); c0 += 1)
+ for (int c0 = T_2; c0 <= min(T_67 - 1, T_66); c0 += 1)
S2(c0);
- if (T_2 == 0 && T_67 == 0 && T_66 >= 0)
+ if (T_2 == 0 && T_67 == 0)
S1(0);
}
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=257898&r1=257897&r2=257898&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 Fri Jan 15 09:54:45 2016
@@ -85,17 +85,10 @@
for (int c2 = max(c1 + 24, -2 * c1 + 30); c2 <= c1 - (3 * c0 + 17) / 14 + 56; c2 += 1)
S1(c0, c1, c2);
}
- if (c0 >= 70 && c0 % 14 >= 9) {
+ if (c0 >= 70 && c0 % 14 >= 9)
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 = -((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) {
+ for (int c1 = c0 / 14 - 5; c1 < 0; c1 += 1) {
if (7 * c1 + 114 >= 2 * c0)
S7(c0, c1, 6);
for (int c2 = max(8, c1 - (6 * c0 + 77) / 77 + 13); c2 <= c1 - (6 * c0 + 91) / 77 + 15; c2 += 1)
@@ -104,21 +97,21 @@
S1(c0, c1, c2);
}
for (int c1 = max(0, (c0 + 5) / 14 - 5); c1 < c0 / 14 - 2; c1 += 1) {
- for (int c2 = max(c1, -2 * c1 + 6); c2 <= min(min(-2 * c1 + 24, c1 - (6 * c0 + 91) / 77 + 15), (2 * c0 - 7 * c1 - 10) / 21 + 1); c2 += 1)
+ for (int c2 = max(c1, -2 * c1 + 6); c2 <= min(c1 + 5, -2 * c1 + 24); c2 += 1)
+ S9(c0, c1, c2);
+ for (int c2 = c1 + 6; c2 <= min((2 * c1 + 1) / 5 + 7, (2 * c0 - 7 * c1 - 10) / 21 + 1); c2 += 1)
S9(c0, c1, c2);
- if (c1 >= 1 && c1 <= 5 && 14 * c1 + 46 >= c0)
- S9(c0, c1, c1 + 5);
for (int c2 = max(c1 + 6, (2 * c0 - 7 * c1 - 10) / 21 + 2); c2 <= (2 * c1 + 1) / 5 + 7; c2 += 1) {
S7(c0, c1, c2);
S9(c0, c1, c2);
}
- if (c1 <= 3 && 7 * c1 + 21 * ((2 * c1 + 41) / 5) >= 2 * c0 + 12)
+ if (c1 <= 3)
S9(c0, c1, (2 * c1 + 1) / 5 + 8);
for (int c2 = (2 * c1 + 1) / 5 + 9; c2 <= c1 - (6 * c0 + 91) / 77 + 15; c2 += 1) {
S6(c0, c1, c2);
S9(c0, c1, c2);
}
- for (int c2 = c1 - (6 * c0 + 91) / 77 + 16; c2 <= -2 * c1 + 24; c2 += 1)
+ for (int c2 = max(max(c1 + 6, c1 - (6 * c0 + 91) / 77 + 16), (2 * c1 + 1) / 5 + 9); c2 <= -2 * c1 + 24; c2 += 1)
S9(c0, c1, c2);
for (int c2 = max(c1, -2 * c1 + 30); c2 <= min(c1 + 24, c1 - (3 * c0 + 17) / 14 + 47); c2 += 1)
S8(c0, c1, c2);
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/cloog/jacobi-shared.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/cloog/jacobi-shared.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/cloog/jacobi-shared.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/cloog/jacobi-shared.c Fri Jan 15 09:54:45 2016
@@ -1,3 +1,3 @@
if (((t1 + 31) % 32) + g2 >= 2 && N >= ((t1 + 31) % 32) + g2 + 2 && (h0 - 1) % 2 == 0)
for (int c0 = max(((t0 + 15) % 16) + 1, ((g1 + t0 + 13) % 16) - g1 + 3); c0 <= min(32, N - g1 - 1); c0 += 16)
- S1(g1 + c0 - 1, ((t1 + 31) % 32) + g2);
+ S1(g1 + c0 - 1, -((g2 - t1 + 32) % 32) + g2 + 31);
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/cloog/reservoir-liu-zhuge1.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/cloog/reservoir-liu-zhuge1.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/cloog/reservoir-liu-zhuge1.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/cloog/reservoir-liu-zhuge1.c Fri Jan 15 09:54:45 2016
@@ -1,7 +1,7 @@
if (M >= 0 && N >= 0)
for (int c0 = -4; c0 <= 3 * M + N; c0 += 1) {
if (c0 >= 0 && 3 * M + 1 >= c0 && (c0 + 1) % 3 >= 1 && N + 1 >= (c0 + 1) % 3)
- S2((c0 + 1) / 3, ((c0 + 1) % 3) - 1);
+ S2((c0 + 3) / 3 - 1, c0 % 3);
for (int c1 = max(-3 * M + c0 - 2, (c0 + 4) % 3); c1 <= min(min(N - 2, c0 - 2), -3 * M + c0 + 3); c1 += 3)
S2((c0 - c1 - 2) / 3, c1 + 2);
for (int c1 = max(-3 * M + c0 + 4, (c0 + 4) % 3); c1 < min(N - 1, c0 - 1); c1 += 3) {
@@ -9,7 +9,7 @@ if (M >= 0 && N >= 0)
S2((c0 - c1 - 2) / 3, c1 + 2);
}
if (3 * M + N >= c0 + 4 && c0 >= N + 1 && ((-N + c0) % 3) + N >= 2 && (-N + c0) % 3 >= 1)
- S1((-N + c0 + 3) / 3 + 1, ((-N + c0) % 3) + N - 2);
+ S1((-N + c0 - 1) / 3 + 2, ((-N + c0 - 1) % 3) + N - 1);
for (int c1 = max(max(c0 + 1, -3 * M + c0 + 4), (c0 + 4) % 3); c1 <= min(N, c0 + 4); c1 += 3)
S1((c0 - c1 + 4) / 3, c1);
for (int c1 = max(-3 * M + c0, (c0 + 6) % 3); c1 <= min(N, c0); c1 += 3)
Modified: 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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/isolate7.c Fri Jan 15 09:54:45 2016
@@ -14,9 +14,9 @@
}
for (int c1 = 0; c1 < n; c1 += 32) {
if (n >= c1 + 32) {
- for (int c2 = 0; c2 < n % 32; c2 += 1)
+ for (int c2 = 0; c2 < (n + 32) % 32; c2 += 1)
for (int c3 = 0; c3 <= 31; c3 += 1)
- S_1(-((n - 1) % 32) + n + c2 - 1, c1 + c3);
+ S_1(-((n + 32) % 32) + n + c2, c1 + c3);
} else
for (int c2 = 0; c2 < n - c1; c2 += 1) {
for (int c3 = 0; c3 < n - c1; c3 += 1)
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/omega/dagstuhl1-1.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/omega/dagstuhl1-1.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/omega/dagstuhl1-1.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/omega/dagstuhl1-1.c Fri Jan 15 09:54:45 2016
@@ -1,2 +1,2 @@
for (int c0 = 0; c0 <= 99; c0 += 1)
- s0(c0, c0 % 10, (c0 + 10) / 10 - 1);
+ s0(c0, c0 % 10, c0 / 10);
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/omega/lefur03-0.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/omega/lefur03-0.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/omega/lefur03-0.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/omega/lefur03-0.c Fri Jan 15 09:54:45 2016
@@ -1,5 +1,5 @@
for (int c0 = 0; c0 <= 3; c0 += 1)
- for (int c1 = max(2 * c0 - 3, c0 / 2); c1 <= min(3, c0 + 1); c1 += 1)
+ for (int c1 = max(0, 2 * c0 - 3); c1 <= min(3, c0 + c0 / 2 + 1); c1 += 1)
for (int c2 = c0; c2 <= min(min(3, 2 * c0 - c1 + 1), 3 * c1 + 2); c2 += 1)
for (int c3 = max(max(max(0, c1 - (-c1 + 3) / 3), c0 - (-c2 + 3) / 3), c2 + floord(3 * c1 - c2 - 1, 6)); c3 <= min(3, c0 + 1); c3 += 1)
for (int c4 = max(max(max(max(-200 * c1 + 400 * c3 - 199, 250 * c3 + 1), 667 * c0 - 333 * c1 - (c0 + c1 + 3) / 3 - 332), 333 * c1 + c1 / 3), 333 * c2 + (c2 + 1) / 3); c4 <= min(min(min(min(1000, 500 * c0 + 499), -200 * c1 + 400 * c3 + 400), 333 * c2 - (-c2 + 3) / 3 + 333), 333 * c3 - (-c3 + 3) / 3 + 334); c4 += 1)
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/omega/lefur04-0.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/omega/lefur04-0.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/omega/lefur04-0.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/omega/lefur04-0.c Fri Jan 15 09:54:45 2016
@@ -1,8 +1,8 @@
for (int c0 = 0; c0 <= 3; c0 += 1)
- for (int c1 = max(2 * c0 - 3, c0 / 2); c1 <= min(3, c0 + 1); c1 += 1)
- for (int c2 = c0; c2 <= min(min(3, 2 * c0 - c1 + 1), 3 * c1 + 2); c2 += 1)
- for (int c3 = max(max(max(c1 - (-c1 + 3) / 3, c0 - (-c2 + 3) / 3), c2 - (c2 + 2) / 3), c2 + floord(3 * c1 - c2 - 1, 6)); c3 <= min(3, c0 + c2 / 3 + 1); c3 += 1)
- for (int c5 = max(max(max(max(0, 2 * c3 - 4), c2 - (c2 + 3) / 3), c3 - (c3 + 3) / 3), c1 - (c1 - 2 * c3 + 5) / 5); c5 <= min(min(c1 + 1, c3), -c2 + 2 * c3 - (c2 + 3) / 3 + 2); c5 += 1)
+ for (int c1 = max(0, 2 * c0 - 3); c1 <= min(c0 + 1, -c0 + 6); c1 += 1)
+ for (int c2 = c0; c2 <= min(min(3, 2 * c0 - c1 + 1), c0 + c0 / 2 + 1); c2 += 1)
+ for (int c3 = max(max(max(0, c1 - (-c1 + 3) / 3), c0 - (-c2 + 3) / 3), c2 + floord(3 * c1 - c2 - 1, 6)); c3 <= min(3, c0 + c2 / 3 + 1); c3 += 1)
+ for (int c5 = max(max(max(max(0, 2 * c3 - 4), c1 - (-c1 + 3) / 3), c2 - (c2 + 3) / 3), c3 - (c3 + 3) / 3); c5 <= min(min(c1 + 1, c3), -c2 + 2 * c3 - (c2 + 3) / 3 + 2); c5 += 1)
for (int c6 = max(max(max(max(max(-200 * c1 + 400 * c3 - 199, 250 * c3 + 1), 1000 * c0 - 500 * c5 - 501), 667 * c0 - 333 * c1 - (c0 + c1 + 3) / 3 - 332), 333 * c1 + c1 / 3), 333 * c2 + (c2 + 1) / 3); c6 <= min(min(min(min(min(min(1000, 500 * c0 + 499), -200 * c1 + 400 * c3 + 400), 500 * c5 + 501), 1000 * c0 - 500 * c5 + 997), 333 * c2 - (-c2 + 3) / 3 + 333), 333 * c3 - (-c3 + 3) / 3 + 334); c6 += 1)
for (int c7 = max(max(max(max(500 * c5 + 2, c6), 1000 * c0 - c6), 1000 * c3 - 2 * c6 + 2), 500 * c1 + (c6 + 1) / 2); c7 <= min(min(min(min(500 * c5 + 501, 2 * c6 + 1), 1000 * c0 - c6 + 999), 1000 * c3 - 2 * c6 + 1001), 500 * c1 + (c6 + 1) / 2 + 499); c7 += 1)
s0(c0, c1, c2, c3, c2 / 3, c5, c6, c7);
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/omega/p.delft2-0.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/omega/p.delft2-0.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/omega/p.delft2-0.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/omega/p.delft2-0.c Fri Jan 15 09:54:45 2016
@@ -4,7 +4,7 @@ if (P1 >= 0 && P1 <= 3 && P2 >= 0 && P2
for (int c3 = 0; c3 <= 7; c3 += 1)
if ((5 * P2 + 2 * c3) % 9 <= 3) {
if (P1 >= 1 && c0 + 1 == P1 && (5 * P1 + 2 * c2) % 9 <= 2) {
- s0(P1 - 1, P2, c2, c3, ((5 * P1 + 2 * c2) % 9) + 1, (-4 * P2 + 2 * c3 + 9) % 9);
+ s0(P1 - 1, P2, c2, c3, ((5 * P1 + 2 * c2 + 9) % 9) + 1, -4 * P2 + 2 * c3 - 9 * floord(-4 * P2 + 2 * c3, 9));
} else if (P1 == 0 && c0 == 3 && c2 % 4 == 0)
- s0(3, P2, c2, c3, (-c2 / 4) + 3, (-4 * P2 + 2 * c3 + 9) % 9);
+ s0(3, P2, c2, c3, (-c2 / 4) + 3, -4 * P2 + 2 * c3 - 9 * floord(-4 * P2 + 2 * c3, 9));
}
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/omega/ts1d-check0-0.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/omega/ts1d-check0-0.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/omega/ts1d-check0-0.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/omega/ts1d-check0-0.c Fri Jan 15 09:54:45 2016
@@ -8,6 +8,6 @@
s2(2, 1000 * c1 + c3 + 1, 0, -1000 * c1 + c2 - c3 - 1, 1);
}
if (2 * T >= c2 + 1 && 1000 * c1 + 999 >= c2)
- s1(2, -(c2 % 2) + c2, 0, c2 % 2, 1);
+ s1(2, ((c2 + 1) % 2) + c2 - 1, 0, -((c2 + 1) % 2) + 1, 1);
}
}
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/pldi2012/figure8_b.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/pldi2012/figure8_b.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/pldi2012/figure8_b.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/pldi2012/figure8_b.c Fri Jan 15 09:54:45 2016
@@ -3,6 +3,6 @@
s1(c0);
s0(c0 + 2);
}
- if (n >= 2 && n % 4 >= 2)
+ if (n >= 1 && n % 4 >= 2)
s1(-(n % 4) + n + 2);
}
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/redundant.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/redundant.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/redundant.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/redundant.c Fri Jan 15 09:54:45 2016
@@ -1,19 +1,18 @@
-for (int c0 = 0; c0 <= 2; c0 += 1)
- for (int c1 = max(0, b0 - 4 * c0 - 1); c1 <= 1; c1 += 1) {
- if (b0 >= 1 && 4 * c0 + c1 >= 1)
- for (int c2 = 1; c2 <= 2; c2 += 1) {
- if (c2 == 2) {
+for (int c0 = 0; c0 <= 2; c0 += 1) {
+ if (b0 <= 1) {
+ for (int c1 = 0; c1 <= 1; c1 += 1) {
+ if (b0 == 1 && 4 * c0 + c1 >= 1)
+ for (int c2 = 1; c2 <= 2; c2 += 1)
for (int c3 = 1; c3 <= 14; c3 += 1)
- write(c0, c1, 8 * b0 - 3, c3);
- } else if (c1 == 1) {
+ write(c0, c1, c2 + 3, c3);
+ for (int c2 = max(max(3, -8 * b0 + 6), 8 * c0 - 12); c2 <= min(7, 8 * c0 + 6); c2 += 1)
+ if (4 * c0 + c1 >= 2 * floord(2 * c1 + c2 - 5, 4) + 1 && 2 * ((2 * c1 + c2 - 1) / 4) + 7 >= 4 * c0 + c1 && 2 * c1 + c2 >= 4 * ((2 * c1 + c2 - 1) / 4) + 2 && ((-2 * c1 - c2 + 8) % 4) + 2 * c2 <= 14)
for (int c3 = 1; c3 <= 14; c3 += 1)
- write(c0, 1, 8 * b0 - 4, c3);
- } else
- for (int c3 = 1; c3 <= 14; c3 += 1)
- write(c0, 0, 8 * b0 - 4, c3);
- }
- for (int c2 = max(max(3, -8 * b0 + 6), 8 * c0 - 12); c2 <= min(min(7, -8 * b0 + 17), 8 * c0 + 6); c2 += 1)
- if (4 * c0 + c1 >= 2 * floord(2 * c1 + c2 - 5, 4) + 1 && 2 * ((2 * c1 + c2 - 1) / 4) + 7 >= 4 * c0 + c1 && 2 * c1 + c2 >= 4 * ((2 * c1 + c2 - 1) / 4) + 2 && ((-2 * c1 - c2 + 8) % 4) + 2 * c2 <= 14)
+ write(c0, c1, 8 * b0 + c2 - 5, c3);
+ }
+ } else
+ for (int c1 = max(0, -4 * c0 + 1); c1 <= 1; c1 += 1)
+ for (int c2 = 1; c2 <= 2; c2 += 1)
for (int c3 = 1; c3 <= 14; c3 += 1)
- write(c0, c1, 8 * b0 + c2 - 5, c3);
- }
+ write(c0, c1, c2 + 11, c3);
+}
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/separate2.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/separate2.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/separate2.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/separate2.c Fri Jan 15 09:54:45 2016
@@ -1,9 +1,8 @@
-if ((length - 1) % 16 <= 14)
- for (int c0 = 0; c0 <= 1; c0 += 1)
- for (int c5 = 0; c5 <= 31; c5 += 1)
- for (int c6 = max(0, 2 * ((length - 1) % 16) + 2 * c5 - 60); c6 <= 30; c6 += 1) {
- if (2 * length + c6 >= 2 * ((length - 1) % 16) + 4 && 2 * ((length - 1) % 16) >= c6 && 2 * ((length - 1) % 16) + 2 * c5 >= c6 && c6 + 62 >= 2 * ((length - 1) % 16) + 2 * c5 && 2 * ((length - 1) % 16) + 2 * c5 == 2 * ((length - 1) % 32) + c6 && (2 * c5 - c6) % 32 == 0)
- S_3(c0, 0, (c6 / 2) - ((length - 1) % 16) + length - 1);
- if (length <= 15 && length >= c5 + 1 && c6 >= 1 && length >= c6)
- S_0(c0, c5, c6 - 1);
- }
+for (int c0 = 0; c0 <= 1; c0 += 1)
+ for (int c5 = 0; c5 <= 31; c5 += 1)
+ for (int c6 = max(0, 2 * (length % 16) + 2 * c5 - 62); c6 <= 30; c6 += 1) {
+ if (2 * length + c6 >= 2 * (length % 16) + 2 && c6 + 62 >= 2 * (length % 16) + 2 * c5 && 2 * (length % 16) >= c6 + 2 && 2 * (length % 16) + 2 * c5 >= c6 && 2 * (length % 32) + c6 == 2 * (length % 16) + 2 * c5 && (2 * c5 - c6) % 32 == 0)
+ S_3(c0, 0, (c6 / 2) - (length % 16) + length);
+ if (length <= 15 && length >= c5 + 1 && c6 >= 1 && length >= c6)
+ S_0(c0, c5, c6 - 1);
+ }
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/separation_class2.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/separation_class2.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/separation_class2.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/separation_class2.c Fri Jan 15 09:54:45 2016
@@ -6,10 +6,10 @@
A(c0 + c2, c1 + c3);
for (int c2 = 0; c2 <= 7; c2 += 1)
for (int c3 = 0; c3 < n % 8; c3 += 1)
- A(c0 + c2, -((n - 1) % 8) + n + c3 - 1);
+ A(c0 + c2, -(n % 8) + n + c3);
}
for (int c1 = 0; c1 < n; c1 += 8)
for (int c2 = 0; c2 < n % 8; c2 += 1)
for (int c3 = 0; c3 <= min(7, n - c1 - 1); c3 += 1)
- A(-((n - 1) % 8) + n + c2 - 1, c1 + c3);
+ A(-(n % 8) + n + c2, c1 + c3);
}
Modified: polly/trunk/lib/External/isl/test_inputs/codegen/unroll3.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/test_inputs/codegen/unroll3.c?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/unroll3.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/unroll3.c Fri Jan 15 09:54:45 2016
@@ -1,2 +1,2 @@
if ((t1 + 121) % 128 <= 123)
- write_shared_A(((t1 + 125) % 128) - 3);
+ write_shared_A(((t1 + 121) % 128) + 1);
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=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/test_inputs/codegen/unroll4.c (original)
+++ polly/trunk/lib/External/isl/test_inputs/codegen/unroll4.c Fri Jan 15 09:54:45 2016
@@ -2,21 +2,15 @@
write_shared_A(3, ((t1 + 3) % 4) + 1, ((t2 + 31) % 32) + 1);
if (t2 >= 1 && t2 <= 2 && t1 % 3 == 0)
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 || t2 >= ((t1 + 3) % 4) + ((t2 + 1) % 2) + 2)
- write_shared_A(3, ((t1 + 3) % 4) + 5, c3);
- }
+ if ((t1 >= 1 && t1 <= 2 && t2 >= 3 && t2 <= 4) || ((-((t1 + 3) % 4) + t2 + 30) % 32) + t1 >= -4 * ((-t1 + 4) / 4) + 4)
+ write_shared_A(3, ((t1 + 3) % 4) + 5, -((((t1 + 3) % 4) - t2 + 33) % 32) + t1 + 4 * ((-t1 + 4) / 4) + 32);
if (t1 >= 1 && t2 >= t1 + 1 && t2 <= 4)
write_shared_A(3, t1 + 4, t2 + 32);
write_shared_A(4, ((t1 + 3) % 4) + 1, ((t2 + 31) % 32) + 1);
if (t2 >= 1 && t2 <= 2 && t1 % 3 == 0)
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 || t2 >= ((t1 + 3) % 4) + ((t2 + 1) % 2) + 2)
- write_shared_A(4, ((t1 + 3) % 4) + 5, c3);
- }
+ if ((t1 >= 1 && t1 <= 2 && t2 >= 3 && t2 <= 4) || ((-((t1 + 3) % 4) + t2 + 30) % 32) + t1 >= -4 * ((-t1 + 4) / 4) + 4)
+ write_shared_A(4, ((t1 + 3) % 4) + 5, -((((t1 + 3) % 4) - t2 + 33) % 32) + t1 + 4 * ((-t1 + 4) / 4) + 32);
if (t1 >= 1 && t2 >= t1 + 1 && t2 <= 4)
write_shared_A(4, t1 + 4, t2 + 32);
}
Modified: polly/trunk/test/DependenceInfo/computeout.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/computeout.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/computeout.ll (original)
+++ polly/trunk/test/DependenceInfo/computeout.ll Fri Jan 15 09:54:45 2016
@@ -55,7 +55,7 @@ exit.3:
; VALUE-NEXT: WAR dependences:
; VALUE-NEXT: { }
; VALUE-NEXT: WAW dependences:
-; VALUE-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0; Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 10 }
+; VALUE-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : 0 <= i0 <= 9; Stmt_S2[i0] -> Stmt_S3[i0] : 0 <= i0 <= 9; Stmt_S1[i0] -> Stmt_S3[i0] : 10 <= i0 <= 99 }
; TIMEOUT: RAW dependences:
; TIMEOUT-NEXT: n/a
Modified: polly/trunk/test/DependenceInfo/do_pluto_matmult.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/do_pluto_matmult.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/do_pluto_matmult.ll (original)
+++ polly/trunk/test/DependenceInfo/do_pluto_matmult.ll Fri Jan 15 09:54:45 2016
@@ -65,15 +65,15 @@ do.end45:
}
; VALUE: RAW dependences:
-; VALUE-NEXT: { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, 1 + i2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 <= 34 and i2 >= 0 }
+; VALUE-NEXT: { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, 1 + i2] : 0 <= i0 <= 35 and 0 <= i1 <= 35 and 0 <= i2 <= 34 }
; VALUE-NEXT: WAR dependences:
; VALUE-NEXT: { }
; VALUE-NEXT: WAW dependences:
-; VALUE-NEXT: { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, 1 + i2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 <= 34 and i2 >= 0 }
+; VALUE-NEXT: { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, 1 + i2] : 0 <= i0 <= 35 and 0 <= i1 <= 35 and 0 <= i2 <= 34 }
; MEMORY: RAW dependences:
-; MEMORY-NEXT: { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, o2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 >= 0 and o2 >= 1 + i2 and o2 <= 35 and o2 >= 0 }
+; MEMORY-NEXT: { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, o2] : 0 <= i0 <= 35 and 0 <= i1 <= 35 and i2 >= 0 and i2 < o2 <= 35 }
; MEMORY-NEXT: WAR dependences:
-; MEMORY-NEXT: { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, o2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 >= 0 and o2 >= 1 + i2 and o2 <= 35 and o2 >= 0 }
+; MEMORY-NEXT: { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, o2] : 0 <= i0 <= 35 and 0 <= i1 <= 35 and i2 >= 0 and i2 < o2 <= 35 }
; MEMORY-NEXT: WAW dependences:
-; MEMORY-NEXT: { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, o2] : i0 <= 35 and i0 >= 0 and i1 <= 35 and i1 >= 0 and i2 >= 0 and o2 >= 1 + i2 and o2 <= 35 and o2 >= 0 }
+; MEMORY-NEXT: { Stmt_do_body2[i0, i1, i2] -> Stmt_do_body2[i0, i1, o2] : 0 <= i0 <= 35 and 0 <= i1 <= 35 and i2 >= 0 and i2 < o2 <= 35 }
Modified: polly/trunk/test/DependenceInfo/reduction_complex_location.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_complex_location.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_complex_location.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_complex_location.ll Fri Jan 15 09:54:45 2016
@@ -7,7 +7,7 @@
; CHECK-NEXT: WAW dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[2 + i0, -1 + i1] : i0 <= 97 and i0 >= 0 and i1 <= 99 and i1 >= 1 }
+; CHECK-NEXT: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[2 + i0, -1 + i1] : 0 <= i0 <= 97 and 0 < i1 <= 99 }
;
; void f(int *sum) {
; for (int i = 0; i < 100; i++)
Modified: polly/trunk/test/DependenceInfo/reduction_dependences_equal_non_reduction_dependences.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_dependences_equal_non_reduction_dependences.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_dependences_equal_non_reduction_dependences.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_dependences_equal_non_reduction_dependences.ll Fri Jan 15 09:54:45 2016
@@ -4,13 +4,13 @@
; accesses to the array A. We need to ensure we keep the dependences of A.
;
; CHECK: RAW dependences:
-; CHECK-NEXT: { Stmt_for_body[i0] -> Stmt_for_body[1 + i0] : i0 >= 0 and i0 <= 1022 }
+; CHECK-NEXT: { Stmt_for_body[i0] -> Stmt_for_body[1 + i0] : 0 <= i0 <= 1022 }
; CHECK-NEXT: WAR dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: WAW dependences:
-; CHECK-NEXT: { Stmt_for_body[i0] -> Stmt_for_body[1 + i0] : i0 <= 1022 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_for_body[i0] -> Stmt_for_body[1 + i0] : 0 <= i0 <= 1022 }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_for_body[i0] -> Stmt_for_body[1 + i0] : i0 <= 1022 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_for_body[i0] -> Stmt_for_body[1 + i0] : 0 <= i0 <= 1022 }
;
;
; void AandSum(int *restrict sum, int *restrict A) {
Modified: polly/trunk/test/DependenceInfo/reduction_mixed_reduction_and_non_reduction_dependences.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_mixed_reduction_and_non_reduction_dependences.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_mixed_reduction_and_non_reduction_dependences.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_mixed_reduction_and_non_reduction_dependences.ll Fri Jan 15 09:54:45 2016
@@ -1,13 +1,13 @@
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
;
; CHECK: RAW dependences:
-; CHECK-NEXT: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0 + i1, o1] : i1 <= 1023 - i0 and i1 >= 0 and i1 <= 1 and i0 >= 0 and o1 <= 511 and o1 >= 1 }
+; CHECK-NEXT: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0 + i1, o1] : i0 >= 0 and 0 <= i1 <= 1023 - i0 and i1 <= 1 and 0 < o1 <= 511 }
; CHECK-NEXT: WAR dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: WAW dependences:
-; CHECK-NEXT: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[1 + i0, -1 + i1] : i0 <= 1022 and i0 >= 0 and i1 <= 511 and i1 >= 2; Stmt_for_body3[i0, 2] -> Stmt_for_body3[2 + i0, 0] : i0 <= 1021 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[1 + i0, -1 + i1] : 0 <= i0 <= 1022 and 2 <= i1 <= 511; Stmt_for_body3[i0, 2] -> Stmt_for_body3[2 + i0, 0] : 0 <= i0 <= 1021 }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_for_body3[i0, 1] -> Stmt_for_body3[1 + i0, 0] : i0 <= 1022 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_for_body3[i0, 1] -> Stmt_for_body3[1 + i0, 0] : 0 <= i0 <= 1022 }
;
; void f(int *sum) {
; for (int i = 0; i < 1024; i++)
Modified: polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum.ll Fri Jan 15 09:54:45 2016
@@ -3,7 +3,7 @@
; Verify that only the inner reduction like accesses cause reduction dependences
;
; CHECK: Reduction dependences:
-; CHECK-NEXT: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0 }
+; CHECK-NEXT: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : 0 <= i0 <= 99 and 0 <= i1 <= 98 }
;
; void f(int * restrict A, int * restrict sum) {
; int i, j, k;
Modified: polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum_2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum_2.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum_2.ll Fri Jan 15 09:54:45 2016
@@ -7,7 +7,7 @@
; CHECK-NEXT: WAW dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0; Stmt_for_body3[i0, 99] -> Stmt_for_body3[1 + i0, 0] : i0 <= 98 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : 0 <= i0 <= 99 and 0 <= i1 <= 98; Stmt_for_body3[i0, 99] -> Stmt_for_body3[1 + i0, 0] : 0 <= i0 <= 98 }
;
; int f(int * restrict A, int * restrict sum) {
; int i, j, k;
Modified: polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum_3.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum_3.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum_3.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_multiple_loops_array_sum_3.ll Fri Jan 15 09:54:45 2016
@@ -1,7 +1,7 @@
; RUN: opt %loadPolly -polly-dependences -analyze -basicaa < %s | FileCheck %s
;
; CHECK: Reduction dependences:
-; CHECK-NEXT: { Stmt_for_inc[i0, i1] -> Stmt_for_inc[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0 }
+; CHECK-NEXT: { Stmt_for_inc[i0, i1] -> Stmt_for_inc[i0, 1 + i1] : 0 <= i0 <= 99 and 0 <= i1 <= 98 }
;
; int f(int * __restrict__ A) {
; int i, j, sum = 0;
Modified: polly/trunk/test/DependenceInfo/reduction_multiple_reductions.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_multiple_reductions.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_multiple_reductions.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_multiple_reductions.ll Fri Jan 15 09:54:45 2016
@@ -9,7 +9,7 @@
; CHECK-NEXT: WAW dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_if_else[i0] -> Stmt_if_else[1 + i0] : i0 <= 1022 and i0 >= 512; Stmt_if_then[i0] -> Stmt_if_then[1 + i0] : i0 <= 510 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_if_else[i0] -> Stmt_if_else[1 + i0] : 512 <= i0 <= 1022; Stmt_if_then[i0] -> Stmt_if_then[1 + i0] : 0 <= i0 <= 510 }
;
; void f(int *restrict sum, int *restrict prod) {
; for (int i = 0; i < 1024; i++)
Modified: polly/trunk/test/DependenceInfo/reduction_multiple_reductions_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_multiple_reductions_2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_multiple_reductions_2.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_multiple_reductions_2.ll Fri Jan 15 09:54:45 2016
@@ -10,13 +10,13 @@
; Stmt_S1[i0, i1] -> Stmt_S2[i0, 0]
;
; CHECK: RAW dependences:
-; CHECK-NEXT: { Stmt_S0[i0] -> Stmt_S1[i0, o1] : i0 <= 1023 and i0 >= 0 and o1 <= 1023 and o1 >= 0; Stmt_S2[i0, i1] -> Stmt_S3[i0] : i0 <= 1023 and i0 >= 0 and i1 <= 1023 and i1 >= 0; Stmt_S3[i0] -> Stmt_S0[1 + i0] : i0 <= 1022 and i0 >= 0; Stmt_S1[i0, 1023] -> Stmt_S2[i0, o1] : i0 <= 1023 and i0 >= 0 and o1 <= 1023 and o1 >= 0; Stmt_S1[i0, i1] -> Stmt_S2[i0, 0] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0 }
+; CHECK-NEXT: { Stmt_S0[i0] -> Stmt_S1[i0, o1] : 0 <= i0 <= 1023 and 0 <= o1 <= 1023; Stmt_S2[i0, i1] -> Stmt_S3[i0] : 0 <= i0 <= 1023 and 0 <= i1 <= 1023; Stmt_S3[i0] -> Stmt_S0[1 + i0] : 0 <= i0 <= 1022; Stmt_S1[i0, 1023] -> Stmt_S2[i0, o1] : 0 <= i0 <= 1023 and 0 <= o1 <= 1023; Stmt_S1[i0, i1] -> Stmt_S2[i0, 0] : 0 <= i0 <= 1023 and 0 <= i1 <= 1022 }
; CHECK-NEXT: WAR dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: WAW dependences:
-; CHECK-NEXT: { Stmt_S0[i0] -> Stmt_S1[i0, o1] : i0 <= 1023 and i0 >= 0 and o1 <= 1023 and o1 >= 0; Stmt_S2[i0, i1] -> Stmt_S3[i0] : i0 <= 1023 and i0 >= 0 and i1 <= 1023 and i1 >= 0; Stmt_S3[i0] -> Stmt_S0[1 + i0] : i0 <= 1022 and i0 >= 0; Stmt_S1[i0, 1023] -> Stmt_S2[i0, o1] : i0 <= 1023 and i0 >= 0 and o1 <= 1023 and o1 >= 0; Stmt_S1[i0, i1] -> Stmt_S2[i0, 0] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0 }
+; CHECK-NEXT: { Stmt_S0[i0] -> Stmt_S1[i0, o1] : 0 <= i0 <= 1023 and 0 <= o1 <= 1023; Stmt_S2[i0, i1] -> Stmt_S3[i0] : 0 <= i0 <= 1023 and 0 <= i1 <= 1023; Stmt_S3[i0] -> Stmt_S0[1 + i0] : 0 <= i0 <= 1022; Stmt_S1[i0, 1023] -> Stmt_S2[i0, o1] : 0 <= i0 <= 1023 and 0 <= o1 <= 1023; Stmt_S1[i0, i1] -> Stmt_S2[i0, 0] : 0 <= i0 <= 1023 and 0 <= i1 <= 1022 }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_S1[i0, i1] -> Stmt_S1[i0, 1 + i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0; Stmt_S2[i0, i1] -> Stmt_S2[i0, 1 + i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0 }
+; CHECK-NEXT: { Stmt_S1[i0, i1] -> Stmt_S1[i0, 1 + i1] : 0 <= i0 <= 1023 and 0 <= i1 <= 1022; Stmt_S2[i0, i1] -> Stmt_S2[i0, 1 + i1] : 0 <= i0 <= 1023 and 0 <= i1 <= 1022 }
;
; void f(int *restrict red) {
; for (int j = 0; j < 1024; j++) {
Modified: polly/trunk/test/DependenceInfo/reduction_partially_escaping_intermediate_in_other_stmt.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_partially_escaping_intermediate_in_other_stmt.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_partially_escaping_intermediate_in_other_stmt.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_partially_escaping_intermediate_in_other_stmt.ll Fri Jan 15 09:54:45 2016
@@ -1,7 +1,7 @@
; RUN: opt %loadPolly -polly-dependences -analyze -basicaa < %s | FileCheck %s
;
; CHECK: Reduction dependences:
-; CHECK-NEXT: [N] -> { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1022 and i1 >= 0 and i1 >= 1024 - N + i0 }
+; CHECK-NEXT: [N] -> { Stmt_for_body3[i0, i1] -> Stmt_for_body3[i0, 1 + i1] : 0 <= i0 <= 1023 and i1 >= 0 and 1024 - N + i0 <= i1 <= 1022 }
;
; void f(int N, int * restrict sums, int * restrict escape) {
; for (int i = 0; i < 1024; i++) {
Modified: polly/trunk/test/DependenceInfo/reduction_privatization_deps.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_privatization_deps.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_privatization_deps.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_privatization_deps.ll Fri Jan 15 09:54:45 2016
@@ -1,13 +1,13 @@
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
;
; CHECK: RAW dependences:
-; CHECK-NEXT: { Stmt_S0[i0] -> Stmt_S1[o0, i0 - o0] : i0 <= 1023 and o0 >= 0 and o0 <= i0; Stmt_S1[i0, i1] -> Stmt_S2[-1 + i0 + i1] : i1 <= 1023 and i1 >= 0 and i1 >= 1 - i0 and i0 >= 0 and i0 <= 1023 and i1 <= 1024 - i0 }
+; CHECK-NEXT: { Stmt_S0[i0] -> Stmt_S1[o0, i0 - o0] : i0 <= 1023 and 0 <= o0 <= i0; Stmt_S1[i0, i1] -> Stmt_S2[-1 + i0 + i1] : 0 <= i0 <= 1023 and i1 >= 0 and -i0 < i1 <= 1024 - i0 and i1 <= 1023 }
; CHECK-NEXT: WAR dependences:
-; CHECK-NEXT: { Stmt_S2[i0] -> Stmt_S2[1 + i0] : i0 <= 1022 and i0 >= 0; Stmt_S1[i0, i1] -> Stmt_S2[i0 + i1] : i1 <= 1023 - i0 and i1 >= 0 and i1 >= 1 - i0 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_S2[i0] -> Stmt_S2[1 + i0] : 0 <= i0 <= 1022; Stmt_S1[i0, i1] -> Stmt_S2[i0 + i1] : i0 >= 0 and i1 >= 0 and -i0 < i1 <= 1023 - i0 }
; CHECK-NEXT: WAW dependences:
-; CHECK-NEXT: { Stmt_S0[i0] -> Stmt_S1[o0, i0 - o0] : i0 <= 1023 and o0 >= 0 and o0 <= i0; Stmt_S1[0, 0] -> Stmt_S2[0] }
+; CHECK-NEXT: { Stmt_S0[i0] -> Stmt_S1[o0, i0 - o0] : i0 <= 1023 and 0 <= o0 <= i0; Stmt_S1[0, 0] -> Stmt_S2[0] }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_S1[i0, i1] -> Stmt_S1[1 + i0, -1 + i1] : i0 <= 1022 and i0 >= 0 and i1 <= 1023 and i1 >= 1 }
+; CHECK-NEXT: { Stmt_S1[i0, i1] -> Stmt_S1[1 + i0, -1 + i1] : 0 <= i0 <= 1022 and 0 < i1 <= 1023 }
;
; void f(int *sum) {
; for (int i = 0; i < 1024; i++)
Modified: polly/trunk/test/DependenceInfo/reduction_privatization_deps_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_privatization_deps_2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_privatization_deps_2.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_privatization_deps_2.ll Fri Jan 15 09:54:45 2016
@@ -4,13 +4,13 @@
; textually earlier one, but the dependences still go forward in time.
;
; CHECK: RAW dependences:
-; CHECK-NEXT: { Stmt_S3[i0] -> Stmt_S2[1 + i0, o1] : i0 <= 97 and i0 >= 0 and o1 <= 99 and o1 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 98 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_S3[i0] -> Stmt_S2[1 + i0, o1] : 0 <= i0 <= 97 and 0 <= o1 <= 99; Stmt_S1[i0] -> Stmt_S3[i0] : 0 <= i0 <= 98 }
; CHECK-NEXT: WAR dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: WAW dependences:
-; CHECK-NEXT: { Stmt_S3[i0] -> Stmt_S2[1 + i0, o1] : i0 <= 97 and i0 >= 0 and o1 <= 99 and o1 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 98 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_S3[i0] -> Stmt_S2[1 + i0, o1] : 0 <= i0 <= 97 and 0 <= o1 <= 99; Stmt_S1[i0] -> Stmt_S3[i0] : 0 <= i0 <= 98 }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S2[i0, 1 + i1] : i0 <= 98 and i0 >= 0 and i1 <= 98 and i1 >= 0 }
+; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S2[i0, 1 + i1] : 0 <= i0 <= 98 and 0 <= i1 <= 98 }
;
; void f(int *sum) {
; int i, j;
Modified: polly/trunk/test/DependenceInfo/reduction_privatization_deps_3.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_privatization_deps_3.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_privatization_deps_3.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_privatization_deps_3.ll Fri Jan 15 09:54:45 2016
@@ -1,13 +1,13 @@
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
;
; CHECK: RAW dependences:
-; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S3[o0] : o0 <= 1 and i1 <= 1 - i0 and o0 <= 1 + i0 - i1 and o0 >= 1 - i1; Stmt_S3[i0] -> Stmt_S2[o0, 1 - i0] : i0 <= 1 and i0 >= 0 and o0 >= 1 + i0 and o0 <= 98; Stmt_S1[i0] -> Stmt_S3[2 + i0] : i0 <= 96 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S3[o0] : i1 <= 1 - i0 and -i1 < o0 <= 1 and o0 <= 1 + i0 - i1; Stmt_S3[i0] -> Stmt_S2[o0, 1 - i0] : 0 <= i0 <= 1 and i0 < o0 <= 98; Stmt_S1[i0] -> Stmt_S3[2 + i0] : 0 <= i0 <= 96 }
; CHECK-NEXT: WAR dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: WAW dependences:
-; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S3[o0] : o0 <= 1 and i1 <= 1 - i0 and o0 <= 1 + i0 - i1 and o0 >= 1 - i1; Stmt_S3[i0] -> Stmt_S2[o0, 1 - i0] : i0 <= 1 and i0 >= 0 and o0 >= 1 + i0 and o0 <= 98; Stmt_S1[i0] -> Stmt_S3[2 + i0] : i0 <= 96 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S3[o0] : i1 <= 1 - i0 and -i1 < o0 <= 1 and o0 <= 1 + i0 - i1; Stmt_S3[i0] -> Stmt_S2[o0, 1 - i0] : 0 <= i0 <= 1 and i0 < o0 <= 98; Stmt_S1[i0] -> Stmt_S3[2 + i0] : 0 <= i0 <= 96 }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S2[1 + i0, i1] : i0 <= 97 and i0 >= 0 and i1 <= 98 - i0 and i1 >= 0 and i1 >= 2 - i0; Stmt_S2[0, 0] -> Stmt_S2[1, 0] }
+; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S2[1 + i0, i1] : 0 <= i0 <= 97 and i1 >= 0 and 2 - i0 <= i1 <= 98 - i0; Stmt_S2[0, 0] -> Stmt_S2[1, 0] }
;
; void f(int *sum) {
; int i, j;
Modified: polly/trunk/test/DependenceInfo/reduction_privatization_deps_4.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_privatization_deps_4.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_privatization_deps_4.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_privatization_deps_4.ll Fri Jan 15 09:54:45 2016
@@ -1,13 +1,13 @@
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
;
; CHECK: RAW dependences:
-; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S1[i1] : i0 >= 0 and i1 >= 1 + i0 and i1 <= 98; Stmt_S1[i0] -> Stmt_S2[i0, i0] : i0 <= 98 and i0 >= 0; Stmt_S2[i0, i0] -> Stmt_S3[i0] : i0 <= 98 and i0 >= 0; Stmt_S3[i0] -> Stmt_S2[o0, i0] : i0 >= 0 and o0 >= 1 + i0 and o0 <= 98 }
+; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S1[i1] : i0 >= 0 and i0 < i1 <= 98; Stmt_S1[i0] -> Stmt_S2[i0, i0] : 0 <= i0 <= 98; Stmt_S2[i0, i0] -> Stmt_S3[i0] : 0 <= i0 <= 98; Stmt_S3[i0] -> Stmt_S2[o0, i0] : i0 >= 0 and i0 < o0 <= 98 }
; CHECK-NEXT: WAR dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: WAW dependences:
-; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S1[i1] : i0 >= 0 and i1 >= 1 + i0 and i1 <= 98; Stmt_S1[i0] -> Stmt_S2[i0, i0] : i0 <= 98 and i0 >= 0; Stmt_S2[i0, i0] -> Stmt_S3[i0] : i0 <= 98 and i0 >= 0; Stmt_S3[i0] -> Stmt_S2[o0, i0] : i0 >= 0 and o0 >= 1 + i0 and o0 <= 98 }
+; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S1[i1] : i0 >= 0 and i0 < i1 <= 98; Stmt_S1[i0] -> Stmt_S2[i0, i0] : 0 <= i0 <= 98; Stmt_S2[i0, i0] -> Stmt_S3[i0] : 0 <= i0 <= 98; Stmt_S3[i0] -> Stmt_S2[o0, i0] : i0 >= 0 and i0 < o0 <= 98 }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S2[1 + i0, i1] : (i0 >= 0 and i1 >= 2 + i0 and i1 <= 99) or (i0 <= 97 and i1 >= 0 and i1 <= -1 + i0) }
+; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S2[1 + i0, i1] : (i0 >= 0 and 2 + i0 <= i1 <= 99) or (i0 <= 97 and 0 <= i1 < i0) }
;
; void f(int *sum) {
; for (int i = 0; i < 99; i++) {
Modified: polly/trunk/test/DependenceInfo/reduction_privatization_deps_5.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_privatization_deps_5.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_privatization_deps_5.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_privatization_deps_5.ll Fri Jan 15 09:54:45 2016
@@ -1,13 +1,13 @@
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
;
; CHECK: RAW dependences:
-; CHECK-NEXT: { Stmt_S2[i0, 0] -> Stmt_S1[1 + i0, 0] : i0 <= 97 and i0 >= 0; Stmt_S1[i0, 0] -> Stmt_S2[i0, 0] : i0 <= 98 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_S2[i0, 0] -> Stmt_S1[1 + i0, 0] : 0 <= i0 <= 97; Stmt_S1[i0, 0] -> Stmt_S2[i0, 0] : 0 <= i0 <= 98 }
; CHECK-NEXT: WAR dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: WAW dependences:
-; CHECK-NEXT: { Stmt_S2[i0, 0] -> Stmt_S1[1 + i0, 0] : i0 <= 97 and i0 >= 0; Stmt_S1[i0, 0] -> Stmt_S2[i0, 0] : i0 <= 98 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_S2[i0, 0] -> Stmt_S1[1 + i0, 0] : 0 <= i0 <= 97; Stmt_S1[i0, 0] -> Stmt_S2[i0, 0] : 0 <= i0 <= 98 }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S2[1 + i0, i1] : i0 <= 97 and i0 >= 0 and i1 <= 99 and i1 >= 1 }
+; CHECK-NEXT: { Stmt_S2[i0, i1] -> Stmt_S2[1 + i0, i1] : 0 <= i0 <= 97 and 0 < i1 <= 99 }
;
; void f(int *sum) {
; for (int i = 0; i < 99; i++) {
Modified: polly/trunk/test/DependenceInfo/reduction_simple_iv.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_simple_iv.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_simple_iv.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_simple_iv.ll Fri Jan 15 09:54:45 2016
@@ -7,7 +7,7 @@
; CHECK-NEXT: WAW dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : i0 <= 99 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : 0 <= i0 <= 99 }
;
; void f(int* sum) {
; for (int i = 0; i <= 100; i++)
Modified: polly/trunk/test/DependenceInfo/reduction_simple_iv_debug_wrapped_dependences.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_simple_iv_debug_wrapped_dependences.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_simple_iv_debug_wrapped_dependences.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_simple_iv_debug_wrapped_dependences.ll Fri Jan 15 09:54:45 2016
@@ -2,17 +2,17 @@
;
; REQUIRES: asserts
;
-; CHECK: Read: { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> MemRef_sum[0] : i0 <= 100 and i0 >= 0 }
-; CHECK-NEXT: Write: { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> MemRef_sum[0] : i0 <= 100 and i0 >= 0 }
+; CHECK: Read: { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> MemRef_sum[0] : 0 <= i0 <= 100 }
+; CHECK-NEXT: Write: { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> MemRef_sum[0] : 0 <= i0 <= 100 }
; CHECK-NEXT: MayWrite: { }
;
; CHECK: Wrapped Dependences:
; CHECK-NEXT: RAW dependences:
-; CHECK-NEXT: { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> [Stmt_for_cond[1 + i0] -> MemRef_sum[0{{\]\]}} : i0 <= 99 and i0 >= 0 }
+; CHECK-NEXT: { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> [Stmt_for_cond[1 + i0] -> MemRef_sum[0{{\]\]}} : 0 <= i0 <= 99 }
; CHECK-NEXT: WAR dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: WAW dependences:
-; CHECK-NEXT: { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> [Stmt_for_cond[1 + i0] -> MemRef_sum[0{{\]\]}} : i0 <= 99 and i0 >= 0 }
+; CHECK-NEXT: { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> [Stmt_for_cond[1 + i0] -> MemRef_sum[0{{\]\]}} : 0 <= i0 <= 99 }
; CHECK-NEXT: Reduction dependences:
; CHECK-NEXT: n/a
;
@@ -24,7 +24,7 @@
; CHECK-NEXT: WAW dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> [Stmt_for_cond[1 + i0] -> MemRef_sum[0{{\]\]}} : i0 <= 99 and i0 >= 0 }
+; CHECK-NEXT: { [Stmt_for_cond[i0] -> MemRef_sum[0{{\]\]}} -> [Stmt_for_cond[1 + i0] -> MemRef_sum[0{{\]\]}} : 0 <= i0 <= 99 }
;
; CHECK: Zipped Dependences:
; CHECK-NEXT: RAW dependences:
@@ -34,7 +34,7 @@
; CHECK-NEXT: WAW dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { [Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0{{\]\]}} -> [MemRef_sum[0] -> MemRef_sum[0{{\]\]}} : i0 <= 99 and i0 >= 0 }
+; CHECK-NEXT: { [Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0{{\]\]}} -> [MemRef_sum[0] -> MemRef_sum[0{{\]\]}} : 0 <= i0 <= 99 }
;
; CHECK: Unwrapped Dependences:
; CHECK-NEXT: RAW dependences:
@@ -44,7 +44,7 @@
; CHECK-NEXT: WAW dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : i0 <= 99 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : 0 <= i0 <= 99 }
;
; CHECK: RAW dependences:
; CHECK-NEXT: { }
@@ -53,7 +53,7 @@
; CHECK-NEXT: WAW dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : i0 <= 99 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : 0 <= i0 <= 99 }
;
; CHECK: RAW dependences:
; CHECK-NEXT: { }
@@ -62,7 +62,7 @@
; CHECK-NEXT: WAW dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : i0 <= 99 and i0 >= 0 }
+; CHECK-NEXT: { Stmt_for_cond[i0] -> Stmt_for_cond[1 + i0] : 0 <= i0 <= 99 }
;
; void f(int* sum) {
; for (int i = 0; i <= 100; i++)
Modified: polly/trunk/test/DependenceInfo/reduction_simple_privatization_deps_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_simple_privatization_deps_2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_simple_privatization_deps_2.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_simple_privatization_deps_2.ll Fri Jan 15 09:54:45 2016
@@ -1,13 +1,13 @@
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
;
; CHECK: RAW dependences:
-; CHECK-NEXT: { Stmt_S2[i0] -> Stmt_S0[1 + i0] : i0 <= 98 and i0 >= 0; Stmt_S0[i0] -> Stmt_S1[i0, o1] : i0 <= 99 and i0 >= 0 and o1 <= 99 and o1 >= 0; Stmt_S1[i0, i1] -> Stmt_S2[i0] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 }
+; CHECK-NEXT: { Stmt_S2[i0] -> Stmt_S0[1 + i0] : 0 <= i0 <= 98; Stmt_S0[i0] -> Stmt_S1[i0, o1] : 0 <= i0 <= 99 and 0 <= o1 <= 99; Stmt_S1[i0, i1] -> Stmt_S2[i0] : 0 <= i0 <= 99 and 0 <= i1 <= 99 }
; CHECK-NEXT: WAR dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: WAW dependences:
-; CHECK-NEXT: { Stmt_S2[i0] -> Stmt_S0[1 + i0] : i0 <= 98 and i0 >= 0; Stmt_S0[i0] -> Stmt_S1[i0, o1] : i0 <= 99 and i0 >= 0 and o1 <= 99 and o1 >= 0; Stmt_S1[i0, i1] -> Stmt_S2[i0] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 }
+; CHECK-NEXT: { Stmt_S2[i0] -> Stmt_S0[1 + i0] : 0 <= i0 <= 98; Stmt_S0[i0] -> Stmt_S1[i0, o1] : 0 <= i0 <= 99 and 0 <= o1 <= 99; Stmt_S1[i0, i1] -> Stmt_S2[i0] : 0 <= i0 <= 99 and 0 <= i1 <= 99 }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_S1[i0, i1] -> Stmt_S1[i0, 1 + i1] : i0 <= 99 and i0 >= 0 and i1 <= 98 and i1 >= 0 }
+; CHECK-NEXT: { Stmt_S1[i0, i1] -> Stmt_S1[i0, 1 + i1] : 0 <= i0 <= 99 and 0 <= i1 <= 98 }
;
; void f(int *sum) {
; for (int i = 0; i < 100; i++) {
Modified: polly/trunk/test/DependenceInfo/reduction_simple_privatization_deps_w_parameter.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_simple_privatization_deps_w_parameter.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_simple_privatization_deps_w_parameter.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_simple_privatization_deps_w_parameter.ll Fri Jan 15 09:54:45 2016
@@ -1,13 +1,13 @@
; RUN: opt %loadPolly -polly-dependences -analyze < %s | FileCheck %s
;
; CHECK: RAW dependences:
-; CHECK-NEXT: [N] -> { Stmt_S0[] -> Stmt_S1[o0] : N >= 11 and o0 <= 1023 and o0 >= 0; Stmt_S1[i0] -> Stmt_S2[] : N >= 11 and i0 <= 1023 and i0 >= 0 }
+; CHECK-NEXT: [N] -> { Stmt_S0[] -> Stmt_S1[o0] : N >= 11 and 0 <= o0 <= 1023; Stmt_S1[i0] -> Stmt_S2[] : N >= 11 and 0 <= i0 <= 1023 }
; CHECK-NEXT: WAR dependences:
; CHECK-NEXT: [N] -> { }
; CHECK-NEXT: WAW dependences:
-; CHECK-NEXT: [N] -> { Stmt_S0[] -> Stmt_S1[o0] : N >= 11 and o0 <= 1023 and o0 >= 0; Stmt_S1[i0] -> Stmt_S2[] : N >= 11 and i0 <= 1023 and i0 >= 0 }
+; CHECK-NEXT: [N] -> { Stmt_S0[] -> Stmt_S1[o0] : N >= 11 and 0 <= o0 <= 1023; Stmt_S1[i0] -> Stmt_S2[] : N >= 11 and 0 <= i0 <= 1023 }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: [N] -> { Stmt_S1[i0] -> Stmt_S1[1 + i0] : N >= 11 and i0 <= 1022 and i0 >= 0 }
+; CHECK-NEXT: [N] -> { Stmt_S1[i0] -> Stmt_S1[1 + i0] : N >= 11 and 0 <= i0 <= 1022 }
;
; void f(int *sum, int N) {
; if (N >= 10) {
Modified: polly/trunk/test/DependenceInfo/reduction_two_reductions_different_rloops.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/reduction_two_reductions_different_rloops.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/reduction_two_reductions_different_rloops.ll (original)
+++ polly/trunk/test/DependenceInfo/reduction_two_reductions_different_rloops.ll Fri Jan 15 09:54:45 2016
@@ -7,7 +7,7 @@
; CHECK-NEXT: WAW dependences:
; CHECK-NEXT: { }
; CHECK-NEXT: Reduction dependences:
-; CHECK-NEXT: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[o0, 1 + i0 + i1 - o0] : o0 <= 1 + i0 and o0 >= i0 and o0 <= 1023 and i0 >= 0 and i1 >= 0 and o0 >= -1022 + i0 + i1 }
+; CHECK-NEXT: { Stmt_for_body3[i0, i1] -> Stmt_for_body3[o0, 1 + i0 + i1 - o0] : i0 >= 0 and i1 >= 0 and o0 >= -1022 + i0 + i1 and i0 <= o0 <= 1023 and o0 <= 1 + i0 }
;
; void f(int *restrict A, int *restrict B, int *restrict Values) {
; for (int i = 0; i < 1024; i++) {
Modified: polly/trunk/test/DependenceInfo/sequential_loops.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/DependenceInfo/sequential_loops.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/DependenceInfo/sequential_loops.ll (original)
+++ polly/trunk/test/DependenceInfo/sequential_loops.ll Fri Jan 15 09:54:45 2016
@@ -7,27 +7,27 @@
; VALUE-NEXT: WAR dependences:
; VALUE-NEXT: { }
; VALUE-NEXT: WAW dependences:
-; VALUE-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0; Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 10 }
+; VALUE-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : 0 <= i0 <= 9; Stmt_S2[i0] -> Stmt_S3[i0] : 0 <= i0 <= 9; Stmt_S1[i0] -> Stmt_S3[i0] : 10 <= i0 <= 99 }
;
; VALUE-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.3' in function 'read_after_writes':
; VALUE-NEXT: RAW dependences:
-; VALUE-NEXT: { Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 10 }
+; VALUE-NEXT: { Stmt_S2[i0] -> Stmt_S3[i0] : 0 <= i0 <= 9; Stmt_S1[i0] -> Stmt_S3[i0] : 10 <= i0 <= 99 }
; VALUE-NEXT: WAR dependences:
; VALUE-NEXT: { }
; VALUE-NEXT: WAW dependences:
-; VALUE-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0 }
+; VALUE-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : 0 <= i0 <= 9 }
;
; VALUE-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.3' in function 'write_after_read':
; VALUE-NEXT: RAW dependences:
; VALUE-NEXT: { }
; VALUE-NEXT: WAR dependences:
-; VALUE-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 10 }
+; VALUE-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : 0 <= i0 <= 9; Stmt_S1[i0] -> Stmt_S3[i0] : 10 <= i0 <= 99 }
; VALUE-NEXT: WAW dependences:
-; VALUE-NEXT: { Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0 }
+; VALUE-NEXT: { Stmt_S2[i0] -> Stmt_S3[i0] : 0 <= i0 <= 9 }
;
; VALUE-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.2' in function 'parametric_offset':
; VALUE-NEXT: RAW dependences:
-; VALUE-NEXT: [p] -> { Stmt_S1[i0] -> Stmt_S2[-p + i0] : i0 <= 9 + p and i0 >= p and i0 <= 99 and i0 >= 0 }
+; VALUE-NEXT: [p] -> { Stmt_S1[i0] -> Stmt_S2[-p + i0] : i0 >= p and 0 <= i0 <= 99 and i0 <= 9 + p }
; VALUE-NEXT: WAR dependences:
; VALUE-NEXT: [p] -> { }
; VALUE-NEXT: WAW dependences:
@@ -39,27 +39,27 @@
; MEMORY-NEXT: WAR dependences:
; MEMORY-NEXT: { }
; MEMORY-NEXT: WAW dependences:
-; MEMORY-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0; Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 0 }
+; MEMORY-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : 0 <= i0 <= 9; Stmt_S2[i0] -> Stmt_S3[i0] : 0 <= i0 <= 9; Stmt_S1[i0] -> Stmt_S3[i0] : 0 <= i0 <= 99 }
;
; MEMORY-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.3' in function 'read_after_writes':
; MEMORY-NEXT: RAW dependences:
-; MEMORY-NEXT: { Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 0 }
+; MEMORY-NEXT: { Stmt_S2[i0] -> Stmt_S3[i0] : 0 <= i0 <= 9; Stmt_S1[i0] -> Stmt_S3[i0] : 0 <= i0 <= 99 }
; MEMORY-NEXT: WAR dependences:
; MEMORY-NEXT: { }
; MEMORY-NEXT: WAW dependences:
-; MEMORY-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0 }
+; MEMORY-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : 0 <= i0 <= 9 }
;
; MEMORY-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.3' in function 'write_after_read':
; MEMORY-NEXT: RAW dependences:
; MEMORY-NEXT: { }
; MEMORY-NEXT: WAR dependences:
-; MEMORY-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : i0 <= 9 and i0 >= 0; Stmt_S1[i0] -> Stmt_S3[i0] : i0 <= 99 and i0 >= 0 }
+; MEMORY-NEXT: { Stmt_S1[i0] -> Stmt_S2[i0] : 0 <= i0 <= 9; Stmt_S1[i0] -> Stmt_S3[i0] : 0 <= i0 <= 99 }
; MEMORY-NEXT: WAW dependences:
-; MEMORY-NEXT: { Stmt_S2[i0] -> Stmt_S3[i0] : i0 <= 9 and i0 >= 0 }
+; MEMORY-NEXT: { Stmt_S2[i0] -> Stmt_S3[i0] : 0 <= i0 <= 9 }
;
; MEMORY-LABEL: Printing analysis 'Polly - Calculate dependences' for region: 'S1 => exit.2' in function 'parametric_offset':
; MEMORY-NEXT: RAW dependences:
-; MEMORY-NEXT: [p] -> { Stmt_S1[i0] -> Stmt_S2[-p + i0] : i0 >= p and i0 <= 99 and i0 >= 0 and i0 <= 9 + p }
+; MEMORY-NEXT: [p] -> { Stmt_S1[i0] -> Stmt_S2[-p + i0] : i0 >= p and 0 <= i0 <= 99 and i0 <= 9 + p }
; MEMORY-NEXT: WAR dependences:
; MEMORY-NEXT: [p] -> { }
; MEMORY-NEXT: WAW dependences:
Modified: polly/trunk/test/Isl/CodeGen/exprModDiv.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Isl/CodeGen/exprModDiv.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/Isl/CodeGen/exprModDiv.ll (original)
+++ polly/trunk/test/Isl/CodeGen/exprModDiv.ll Fri Jan 15 09:54:45 2016
@@ -32,17 +32,14 @@
; #define floord(n,d) ((n < 0) ? (n - d + 1) : n) / d
; A[p + 127 * floord(-p - 1, 127) + 127]
-; CHECK: %17 = sub nsw i64 0, %p
-; CHECK: %18 = sub nsw i64 %17, 1
-; CHECK: %pexp.fdiv_q.0 = sub i64 %18, 127
+; CHECK: %pexp.fdiv_q.0 = sub i64 %p, 127
; CHECK: %pexp.fdiv_q.1 = add i64 %pexp.fdiv_q.0, 1
-; CHECK: %pexp.fdiv_q.2 = icmp slt i64 %18, 0
-; CHECK: %pexp.fdiv_q.3 = select i1 %pexp.fdiv_q.2, i64 %pexp.fdiv_q.1, i64 %18
+; CHECK: %pexp.fdiv_q.2 = icmp slt i64 %p, 0
+; CHECK: %pexp.fdiv_q.3 = select i1 %pexp.fdiv_q.2, i64 %pexp.fdiv_q.1, i64 %p
; CHECK: %pexp.fdiv_q.4 = sdiv i64 %pexp.fdiv_q.3, 127
-; CHECK: %19 = mul nsw i64 127, %pexp.fdiv_q.4
-; CHECK: %20 = add nsw i64 %p, %19
-; CHECK: %21 = add nsw i64 %20, 127
-; CHECK: %polly.access.A8 = getelementptr float, float* %A, i64 %21
+; CHECK: %17 = mul nsw i64 127, %pexp.fdiv_q.4
+; CHECK: %18 = sub nsw i64 %p, %17
+; CHECK: %polly.access.A8 = getelementptr float, float* %A, i64 %18
; A[p / 127]
; CHECK: %pexp.div = sdiv exact i64 %p, 127
@@ -58,13 +55,10 @@
; #define floord(n,d) ((n < 0) ? (n - d + 1) : n) / d
; A[p + 128 * floord(-p - 1, 128) + 128]
-; POW2: %17 = sub nsw i64 0, %p
-; POW2: %18 = sub nsw i64 %17, 1
-; POW2: %polly.fdiv_q.shr = ashr i64 %18, 7
-; POW2: %19 = mul nsw i64 128, %polly.fdiv_q.shr
-; POW2: %20 = add nsw i64 %p, %19
-; POW2: %21 = add nsw i64 %20, 128
-; POW2: %polly.access.A8 = getelementptr float, float* %A, i64 %21
+; POW2: %polly.fdiv_q.shr = ashr i64 %p, 7
+; POW2: %17 = mul nsw i64 128, %polly.fdiv_q.shr
+; POW2: %18 = sub nsw i64 %p, %17
+; POW2: %polly.access.A8 = getelementptr float, float* %A, i64 %18
; A[p / 128]
; POW2: %pexp.div = sdiv exact i64 %p, 128
Modified: polly/trunk/test/Isl/CodeGen/inner_scev_sdiv_in_lb.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Isl/CodeGen/inner_scev_sdiv_in_lb.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/Isl/CodeGen/inner_scev_sdiv_in_lb.ll (original)
+++ polly/trunk/test/Isl/CodeGen/inner_scev_sdiv_in_lb.ll Fri Jan 15 09:54:45 2016
@@ -3,7 +3,7 @@
; RUN: opt %loadPolly \
; RUN: -S -polly-codegen < %s | FileCheck %s --check-prefix=CODEGEN
;
-; CHECK: [N] -> { Stmt_bb11[i0, i1] : i0 <= -1 + N and i1 >= 0 and 3i1 <= -3 + i0 };
+; CHECK: [N] -> { Stmt_bb11[i0, i1] : i0 < N and i1 >= 0 and 3i1 <= -3 + i0 };
; CODEGEN: polly
;
; void f(int *A, int N) {
Modified: polly/trunk/test/Isl/CodeGen/invariant_load_escaping_second_scop.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/Isl/CodeGen/invariant_load_escaping_second_scop.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/Isl/CodeGen/invariant_load_escaping_second_scop.ll (original)
+++ polly/trunk/test/Isl/CodeGen/invariant_load_escaping_second_scop.ll Fri Jan 15 09:54:45 2016
@@ -18,8 +18,8 @@
; } while (i++ < x / 2);
; }
;
-; CHECK: polly.start:
-; CHECK-NEXT: sext i32 %tmp.merge to i64
+; CHECK: polly.stmt.stmt.P:
+; CHECK: sext i32 %tmp.merge to i64
;
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
Modified: polly/trunk/test/ScheduleOptimizer/full_partial_tile_separation.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScheduleOptimizer/full_partial_tile_separation.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScheduleOptimizer/full_partial_tile_separation.ll (original)
+++ polly/trunk/test/ScheduleOptimizer/full_partial_tile_separation.ll Fri Jan 15 09:54:45 2016
@@ -15,7 +15,7 @@
; CHECK-NEXT: for (int c5 = 0; c5 <= min(31, nk - 32 * c2 - 1); c5 += 1)
; CHECK-NEXT: #pragma simd
; CHECK-NEXT: for (int c6 = 0; c6 < nj % 4; c6 += 1)
-; CHECK-NEXT: Stmt_for_body_6(32 * c0 + c3, -((nj - 1) % 4) + nj + c6 - 1, 32 * c2 + c5);
+; CHECK-NEXT: Stmt_for_body_6(32 * c0 + c3, -(nj % 4) + nj + c6, 32 * c2 + c5);
; CHECK-NEXT: }
; CHECK-NEXT: }
Modified: polly/trunk/test/ScopInfo/20111108-Parameter-not-detected.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/20111108-Parameter-not-detected.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/20111108-Parameter-not-detected.ll (original)
+++ polly/trunk/test/ScopInfo/20111108-Parameter-not-detected.ll Fri Jan 15 09:54:45 2016
@@ -55,7 +55,7 @@ for.end7:
; CHECK: Statements {
; CHECK-NEXT: Stmt_if_then
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [p_0] -> { Stmt_if_then[i0] : i0 <= 1022 and i0 >= 0 and i0 >= 999 - p_0 };
+; CHECK-NEXT: [p_0] -> { Stmt_if_then[i0] : i0 >= 0 and 999 - p_0 <= i0 <= 1022 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [p_0] -> { Stmt_if_then[i0] -> [0, i0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/NonAffine/div_backedge.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/div_backedge.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/div_backedge.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/div_backedge.ll Fri Jan 15 09:54:45 2016
@@ -9,7 +9,7 @@
; }
;
; CHECK: Domain :=
-; CHECK: { Stmt_for_body[i0] : i0 <= 27 and i0 >= 0 };
+; CHECK: { Stmt_for_body[i0] : 0 <= i0 <= 27 };
;
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
Modified: polly/trunk/test/ScopInfo/NonAffine/div_domain.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/div_domain.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/div_domain.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/div_domain.ll Fri Jan 15 09:54:45 2016
@@ -11,7 +11,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_for_body[i0] : i0 <= 15 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_for_body[i0] : 0 <= i0 <= 15 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_for_body[i0] -> [i0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -20,7 +20,7 @@
; CHECK-NEXT: { Stmt_for_body[i0] -> MemRef_A[i0] };
; CHECK-NEXT: Stmt_if_then
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_if_then[i0] : i0 <= 7 and i0 >= 6 };
+; CHECK-NEXT: { Stmt_if_then[i0] : 6 <= i0 <= 7 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_if_then[i0] -> [i0, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/NonAffine/modulo_backedge.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/modulo_backedge.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/modulo_backedge.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/modulo_backedge.ll Fri Jan 15 09:54:45 2016
@@ -1,7 +1,7 @@
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
;
; CHECK: Domain :=
-; CHECK: { Stmt_for_body[i0] : i0 <= 6 and i0 >= 0 };
+; CHECK: { Stmt_for_body[i0] : 0 <= i0 <= 6 };
;
; void foo(float *A) {
; for (long i = 1;; i++) {
Modified: polly/trunk/test/ScopInfo/NonAffine/modulo_domain.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/modulo_domain.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/modulo_domain.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/modulo_domain.ll Fri Jan 15 09:54:45 2016
@@ -6,7 +6,7 @@
; whole loop body.
;
; CHECK: Domain :=
-; CHECK: { Stmt_for_body[i0] : i0 <= 15 and i0 >= 0 };
+; CHECK: { Stmt_for_body[i0] : 0 <= i0 <= 15 };
;
; void foo(float *A) {
; for (long i = 0; i < 16; i++) {
Modified: polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_1.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_1.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_1.ll Fri Jan 15 09:54:45 2016
@@ -31,15 +31,15 @@
; SCALAR-NEXT: Statements {
; SCALAR-NEXT: Stmt_bb3__TO__bb11
; SCALAR-NEXT: Domain :=
-; SCALAR-NEXT: { Stmt_bb3__TO__bb11[i0] : i0 <= 1023 and i0 >= 0 };
+; SCALAR-NEXT: { Stmt_bb3__TO__bb11[i0] : 0 <= i0 <= 1023 };
; SCALAR-NEXT: Schedule :=
; SCALAR-NEXT: { Stmt_bb3__TO__bb11[i0] -> [i0] };
; SCALAR-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; SCALAR-NEXT: { Stmt_bb3__TO__bb11[i0] -> MemRef_C[i0] };
; SCALAR-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
-; SCALAR-NEXT: { Stmt_bb3__TO__bb11[i0] -> MemRef_A[o0] : o0 <= 2147483645 and o0 >= -2147483648 };
+; SCALAR-NEXT: { Stmt_bb3__TO__bb11[i0] -> MemRef_A[o0] : -2147483648 <= o0 <= 2147483645 };
; SCALAR-NEXT: MayWriteAccess := [Reduction Type: +] [Scalar: 0]
-; SCALAR-NEXT: { Stmt_bb3__TO__bb11[i0] -> MemRef_A[o0] : o0 <= 2147483645 and o0 >= -2147483648 };
+; SCALAR-NEXT: { Stmt_bb3__TO__bb11[i0] -> MemRef_A[o0] : -2147483648 <= o0 <= 2147483645 };
; SCALAR-NEXT: }
; PROFIT-NOT: Statements
Modified: polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_2.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_2.ll Fri Jan 15 09:54:45 2016
@@ -21,7 +21,7 @@
; INNERMOST-NEXT: Invariant Accesses: {
; INNERMOST-NEXT: }
; INNERMOST-NEXT: Context:
-; INNERMOST-NEXT: [p_0, p_1, p_2, p_3] -> { : p_0 >= 0 and p_0 <= 1048576 and p_1 >= 0 and p_1 <= 4096 and p_2 >= 0 and p_2 <= 4096 and p_3 >= 0 and p_3 <= 4194304 }
+; INNERMOST-NEXT: [p_0, p_1, p_2, p_3] -> { : 0 <= p_0 <= 1048576 and 0 <= p_1 <= 4096 and 0 <= p_2 <= 4096 and 0 <= p_3 <= 4194304 }
; INNERMOST-NEXT: Assumed Context:
; INNERMOST-NEXT: [p_0, p_1, p_2, p_3] -> { : }
; INNERMOST-NEXT: Boundary Context:
@@ -45,7 +45,7 @@
; INNERMOST-NEXT: Statements {
; INNERMOST-NEXT: Stmt_bb16
; INNERMOST-NEXT: Domain :=
-; INNERMOST-NEXT: [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] : i0 <= 1023 - p_0 and i0 >= 0 };
+; INNERMOST-NEXT: [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] : 0 <= i0 <= 1023 - p_0 };
; INNERMOST-NEXT: Schedule :=
; INNERMOST-NEXT: [p_0, p_1, p_2, p_3] -> { Stmt_bb16[i0] -> [0, i0] };
; INNERMOST-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -89,7 +89,7 @@
; ALL-NEXT: Statements {
; ALL-NEXT: Stmt_bb15__TO__bb25
; ALL-NEXT: Domain :=
-; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1023 and i1 >= 0 };
+; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] : 0 <= i0 <= 1023 and 0 <= i1 <= 1023 };
; ALL-NEXT: Schedule :=
; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] -> [i0, i1] };
; ALL-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -97,9 +97,9 @@
; ALL-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[i1] };
; ALL-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : o0 <= 2305843009213693949 and o0 >= 0 };
+; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : 0 <= o0 <= 2305843009213693949 };
; ALL-NEXT: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
-; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : o0 <= 2305843009213693949 and o0 >= 0 };
+; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : 0 <= o0 <= 2305843009213693949 };
; ALL-NEXT: }
;
; void f(int *A) {
Modified: polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_3.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_3.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_3.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_3.ll Fri Jan 15 09:54:45 2016
@@ -20,7 +20,7 @@
; INNERMOST-NEXT: Invariant Accesses: {
; INNERMOST-NEXT: }
; INNERMOST-NEXT: Context:
-; INNERMOST-NEXT: [p_0, p_1, p_2] -> { : p_0 >= 0 and p_0 <= 2147483647 and p_1 >= 0 and p_1 <= 4096 and p_2 >= 0 and p_2 <= 4096 }
+; INNERMOST-NEXT: [p_0, p_1, p_2] -> { : 0 <= p_0 <= 2147483647 and 0 <= p_1 <= 4096 and 0 <= p_2 <= 4096 }
; INNERMOST-NEXT: Assumed Context:
; INNERMOST-NEXT: [p_0, p_1, p_2] -> { : }
; INNERMOST-NEXT: Boundary Context:
@@ -43,7 +43,7 @@
; INNERMOST-NEXT: Statements {
; INNERMOST-NEXT: Stmt_bb16
; INNERMOST-NEXT: Domain :=
-; INNERMOST-NEXT: [p_0, p_1, p_2] -> { Stmt_bb16[i0] : i0 >= 0 and i0 <= -1 + p_0 };
+; INNERMOST-NEXT: [p_0, p_1, p_2] -> { Stmt_bb16[i0] : 0 <= i0 < p_0 };
; INNERMOST-NEXT: Schedule :=
; INNERMOST-NEXT: [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> [0, i0] };
; INNERMOST-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -87,7 +87,7 @@
; ALL-NEXT: Statements {
; ALL-NEXT: Stmt_bb15__TO__bb25
; ALL-NEXT: Domain :=
-; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] : i0 <= 1023 and i0 >= 0 and i1 <= 1023 and i1 >= 0 };
+; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] : 0 <= i0 <= 1023 and 0 <= i1 <= 1023 };
; ALL-NEXT: Schedule :=
; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] -> [i0, i1] };
; ALL-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -95,9 +95,9 @@
; ALL-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[i1] };
; ALL-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : o0 <= 4294967293 and o0 >= 0 };
+; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : 0 <= o0 <= 4294967293 };
; ALL-NEXT: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
-; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : o0 <= 4294967293 and o0 >= 0 };
+; ALL-NEXT: { Stmt_bb15__TO__bb25[i0, i1] -> MemRef_A[o0] : 0 <= o0 <= 4294967293 };
; ALL-NEXT: }
;
; void f(int *A) {
Modified: polly/trunk/test/ScopInfo/NonAffine/non_affine_access_with_range_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non_affine_access_with_range_2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non_affine_access_with_range_2.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non_affine_access_with_range_2.ll Fri Jan 15 09:54:45 2016
@@ -9,13 +9,13 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb7
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb7[i0, i1] : i0 <= 127 and i0 >= 0 and i1 <= 15 and i1 >= 0 };
+; CHECK-NEXT: { Stmt_bb7[i0, i1] : 0 <= i0 <= 127 and 0 <= i1 <= 15 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb7[i0, i1] -> [i0, i1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
-; CHECK-NEXT: { Stmt_bb7[i0, i1] -> MemRef_A[o0] : o0 <= 2046 and o0 >= 0 };
+; CHECK-NEXT: { Stmt_bb7[i0, i1] -> MemRef_A[o0] : 0 <= o0 <= 2046 };
; CHECK-NEXT: MayWriteAccess := [Reduction Type: +] [Scalar: 0]
-; CHECK-NEXT: { Stmt_bb7[i0, i1] -> MemRef_A[o0] : o0 <= 2046 and o0 >= 0 };
+; CHECK-NEXT: { Stmt_bb7[i0, i1] -> MemRef_A[o0] : 0 <= o0 <= 2046 };
; CHECK-NEXT: }
;
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
Modified: polly/trunk/test/ScopInfo/NonAffine/non_affine_but_sdiv.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non_affine_but_sdiv.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non_affine_but_sdiv.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non_affine_but_sdiv.ll Fri Jan 15 09:54:45 2016
@@ -3,13 +3,13 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_for_body[i0] : i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [N] -> { Stmt_for_body[i0] : 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_for_body[i0] -> [i0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [N] -> { Stmt_for_body[i0] -> MemRef_A[o0] : 5o0 >= -4 + N + 5i0 and 5o0 <= N + 5i0 };
+; CHECK-NEXT: [N] -> { Stmt_for_body[i0] -> MemRef_A[o0] : -4 + N + 5i0 <= 5o0 <= N + 5i0 };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [N] -> { Stmt_for_body[i0] -> MemRef_A[o0] : 5o0 <= 4 - N + 5i0 and 5o0 >= -N + 5i0 };
+; CHECK-NEXT: [N] -> { Stmt_for_body[i0] -> MemRef_A[o0] : -N + 5i0 <= 5o0 <= 4 - N + 5i0 };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [N] -> { Stmt_for_body[i0] -> MemRef_A[i0] };
; CHECK-NEXT: }
Modified: polly/trunk/test/ScopInfo/NonAffine/non_affine_but_srem.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non_affine_but_srem.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non_affine_but_srem.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non_affine_but_srem.ll Fri Jan 15 09:54:45 2016
@@ -15,25 +15,25 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb2
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [n] -> { Stmt_bb2[i0] : i0 <= 99 and i0 >= 0 };
+; CHECK-NEXT: [n] -> { Stmt_bb2[i0] : 0 <= i0 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [n] -> { Stmt_bb2[i0] -> [i0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] : exists (e0 = floor((-n + o0)/42): 42e0 = -n + o0 and o0 <= 41 and o0 >= 0) };
+; CHECK-NEXT: [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] : 42*floor((-n + o0)/42) = -n + o0 and 0 <= o0 <= 41 };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] : exists (e0 = floor((-n + o0)/42): 42e0 = -n + o0 and o0 <= 41 and o0 >= 0) };
+; CHECK-NEXT: [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] : 42*floor((-n + o0)/42) = -n + o0 and 0 <= o0 <= 41 };
; CHECK-NEXT: }
;
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb2
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [n] -> { Stmt_bb2[i0] : i0 <= 99 and i0 >= 0 };
+; CHECK-NEXT: [n] -> { Stmt_bb2[i0] : 0 <= i0 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [n] -> { Stmt_bb2[i0] -> [i0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] : exists (e0 = floor((-n + o0)/42): 42e0 = -n + o0 and o0 <= 41 and o0 >= 0) };
+; CHECK-NEXT: [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] : 42*floor((-n + o0)/42) = -n + o0 and 0 <= o0 <= 41 };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] : exists (e0 = floor((-n + o0)/42): 42e0 = -n + o0 and o0 <= 41 and o0 >= 0) };
+; CHECK-NEXT: [n] -> { Stmt_bb2[i0] -> MemRef_A[o0] : 42*floor((-n + o0)/42) = -n + o0 and 0 <= o0 <= 41 };
; CHECK-NEXT: }
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
Modified: polly/trunk/test/ScopInfo/NonAffine/non_affine_conditional_surrounding_affine_loop.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non_affine_conditional_surrounding_affine_loop.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non_affine_conditional_surrounding_affine_loop.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non_affine_conditional_surrounding_affine_loop.ll Fri Jan 15 09:54:45 2016
@@ -42,15 +42,15 @@
; ALL-NEXT: Statements {
; ALL-NEXT: Stmt_bb4__TO__bb17
; ALL-NEXT: Domain :=
-; ALL-NEXT: { Stmt_bb4__TO__bb17[i0] : i0 <= 1023 and i0 >= 0 };
+; ALL-NEXT: { Stmt_bb4__TO__bb17[i0] : 0 <= i0 <= 1023 };
; ALL-NEXT: Schedule :=
; ALL-NEXT: { Stmt_bb4__TO__bb17[i0] -> [i0] };
; ALL-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; ALL-NEXT: { Stmt_bb4__TO__bb17[i0] -> MemRef_A[i0] };
; ALL-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; ALL-NEXT: { Stmt_bb4__TO__bb17[i0] -> MemRef_A[o0] : o0 <= 2147483645 and o0 >= 0 };
+; ALL-NEXT: { Stmt_bb4__TO__bb17[i0] -> MemRef_A[o0] : 0 <= o0 <= 2147483645 };
; ALL-NEXT: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
-; ALL-NEXT: { Stmt_bb4__TO__bb17[i0] -> MemRef_A[o0] : o0 <= 2147483645 and o0 >= 0 };
+; ALL-NEXT: { Stmt_bb4__TO__bb17[i0] -> MemRef_A[o0] : 0 <= o0 <= 2147483645 };
; ALL-NEXT: }
;
; void f(int *A, int N) {
Modified: polly/trunk/test/ScopInfo/NonAffine/non_affine_conditional_surrounding_non_affine_loop.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non_affine_conditional_surrounding_non_affine_loop.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non_affine_conditional_surrounding_non_affine_loop.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non_affine_conditional_surrounding_non_affine_loop.ll Fri Jan 15 09:54:45 2016
@@ -46,15 +46,15 @@
; ALL-NEXT: Statements {
; ALL-NEXT: Stmt_bb4__TO__bb18
; ALL-NEXT: Domain :=
-; ALL-NEXT: { Stmt_bb4__TO__bb18[i0] : i0 <= 1023 and i0 >= 0 };
+; ALL-NEXT: { Stmt_bb4__TO__bb18[i0] : 0 <= i0 <= 1023 };
; ALL-NEXT: Schedule :=
; ALL-NEXT: { Stmt_bb4__TO__bb18[i0] -> [i0] };
; ALL-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; ALL-NEXT: { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
; ALL-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; ALL-NEXT: { Stmt_bb4__TO__bb18[i0] -> MemRef_A[o0] : o0 <= 2199023254526 and o0 >= 0 };
+; ALL-NEXT: { Stmt_bb4__TO__bb18[i0] -> MemRef_A[o0] : 0 <= o0 <= 2199023254526 };
; ALL-NEXT: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
-; ALL-NEXT: { Stmt_bb4__TO__bb18[i0] -> MemRef_A[o0] : o0 <= 2199023254526 and o0 >= 0 };
+; ALL-NEXT: { Stmt_bb4__TO__bb18[i0] -> MemRef_A[o0] : 0 <= o0 <= 2199023254526 };
; ALL-NEXT: }
;
; PROFIT-NOT: Statements
Modified: polly/trunk/test/ScopInfo/NonAffine/non_affine_float_compare.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non_affine_float_compare.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non_affine_float_compare.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non_affine_float_compare.ll Fri Jan 15 09:54:45 2016
@@ -29,7 +29,7 @@
; CHECK-NEXT: Statements {
; CHECK-NEXT: Stmt_bb2__TO__bb12
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb2__TO__bb12[i0] : i0 <= 1023 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb2__TO__bb12[i0] : 0 <= i0 <= 1023 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb2__TO__bb12[i0] -> [i0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_condition.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_condition.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_condition.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_condition.ll Fri Jan 15 09:54:45 2016
@@ -45,7 +45,7 @@
; CHECK-NEXT: Statements {
; CHECK-NEXT: Stmt_bb3__TO__bb10
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb3__TO__bb10[i0] : i0 <= 1023 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb3__TO__bb10[i0] : 0 <= i0 <= 1023 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb3__TO__bb10[i0] -> [i0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll Fri Jan 15 09:54:45 2016
@@ -15,7 +15,7 @@
; CHECK-NEXT: Invariant Accesses: {
; CHECK-NEXT: }
; CHECK-NEXT: Context:
-; CHECK-NEXT: [N] -> { : N >= -2147483648 and N <= 2147483647 }
+; CHECK-NEXT: [N] -> { : -2147483648 <= N <= 2147483647 }
; CHECK-NEXT: Assumed Context:
; CHECK-NEXT: [N] -> { : }
; CHECK-NEXT: Boundary Context:
@@ -42,16 +42,16 @@
; CHECK-NEXT: Statements {
; CHECK-NEXT: Stmt_bb2
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_bb2[i0] : i0 >= 0 and i0 <= N; Stmt_bb2[0] : N <= -1 };
+; CHECK-NEXT: [N] -> { Stmt_bb2[i0] : 0 <= i0 <= N; Stmt_bb2[0] : N < 0 };
; CHECK-NEXT: Schedule :=
-; CHECK-NEXT: [N] -> { Stmt_bb2[i0] -> [i0, 0] : i0 <= N; Stmt_bb2[0] -> [0, 0] : N <= -1 };
+; CHECK-NEXT: [N] -> { Stmt_bb2[i0] -> [i0, 0] : i0 <= N; Stmt_bb2[0] -> [0, 0] : N < 0 };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: [N] -> { Stmt_bb2[i0] -> MemRef_j_0__phi[] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: [N] -> { Stmt_bb2[i0] -> MemRef_j_0[] };
; CHECK-NEXT: Stmt_bb4__TO__bb18
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_bb4__TO__bb18[i0] : i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [N] -> { Stmt_bb4__TO__bb18[i0] : 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_bb4__TO__bb18[i0] -> [i0, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -70,7 +70,7 @@
; CHECK-NEXT: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_2__phi[] };
; CHECK-NEXT: Stmt_bb18
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_bb18[i0] : i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [N] -> { Stmt_bb18[i0] : 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_bb18[i0] -> [i0, 2] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -78,12 +78,12 @@
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: [N] -> { Stmt_bb18[i0] -> MemRef_j_2__phi[] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [N] -> { Stmt_bb18[i0] -> MemRef_A[o0] : o0 >= -2147483648 and o0 <= 2147483645 };
+; CHECK-NEXT: [N] -> { Stmt_bb18[i0] -> MemRef_A[o0] : -2147483648 <= o0 <= 2147483645 };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [N] -> { Stmt_bb18[i0] -> MemRef_A[i0] };
; CHECK-NEXT: Stmt_bb23
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_bb23[i0] : i0 <= -1 + N and i0 >= 0 };
+; CHECK-NEXT: [N] -> { Stmt_bb23[i0] : 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_bb23[i0] -> [i0, 3] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/NonAffine/non_affine_parametric_loop.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/NonAffine/non_affine_parametric_loop.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/NonAffine/non_affine_parametric_loop.ll (original)
+++ polly/trunk/test/ScopInfo/NonAffine/non_affine_parametric_loop.ll Fri Jan 15 09:54:45 2016
@@ -29,11 +29,11 @@ for.end:
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [n] -> { Stmt_for_body[i0] : i0 >= 0 and i0 <= -1 + n };
+; CHECK-NEXT: [n] -> { Stmt_for_body[i0] : 0 <= i0 < n };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [n] -> { Stmt_for_body[i0] -> [i0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [n] -> { Stmt_for_body[i0] -> MemRef_INDEX[i0] };
; CHECK-NEXT: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [n] -> { Stmt_for_body[i0] -> MemRef_A[o0] : o0 >= -1152921504606846976 and o0 <= 1152921504606846973 };
+; CHECK-NEXT: [n] -> { Stmt_for_body[i0] -> MemRef_A[o0] : -1152921504606846976 <= o0 <= 1152921504606846973 };
; CHECK-NEXT: }
Modified: polly/trunk/test/ScopInfo/assume_gep_bounds_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/assume_gep_bounds_2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/assume_gep_bounds_2.ll (original)
+++ polly/trunk/test/ScopInfo/assume_gep_bounds_2.ll Fri Jan 15 09:54:45 2016
@@ -16,7 +16,7 @@
; accessed. In this case the value of m does not matter.
; CHECK: Assumed Context:
-; CHECK-NEXT: [n, m, p] -> { : (n <= 0 and p <= 20) or (n >= 1 and m <= 20 and p <= 20) }
+; CHECK-NEXT: [n, m, p] -> { : p <= 20 and (n <= 0 or (n > 0 and m <= 20)) }
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
Modified: polly/trunk/test/ScopInfo/cfg_consequences.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/cfg_consequences.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/cfg_consequences.ll (original)
+++ polly/trunk/test/ScopInfo/cfg_consequences.ll Fri Jan 15 09:54:45 2016
@@ -53,9 +53,9 @@
; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_BC[] -> MemRef_A[0] };
; CHECK-NEXT: Stmt_S_BC
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_BC[] : bool_cond <= -1 or bool_cond >= 1 };
+; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_BC[] : bool_cond < 0 or bool_cond > 0 };
; CHECK-NEXT: Schedule :=
-; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_BC[] -> [1] : bool_cond <= -1 or bool_cond >= 1 };
+; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_BC[] -> [1] : bool_cond < 0 or bool_cond > 0 };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_BC[] -> MemRef_A[0] };
; CHECK-NEXT: Stmt_M_BC
@@ -95,7 +95,7 @@
; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SLT[] -> MemRef_A[0] };
; CHECK-NEXT: Stmt_S_SLT
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SLT[] : rhs >= 1 + lhs };
+; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SLT[] : rhs > lhs };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SLT[] -> [7] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -137,7 +137,7 @@
; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SGT[] -> MemRef_A[0] };
; CHECK-NEXT: Stmt_S_SGT
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SGT[] : rhs <= -1 + lhs };
+; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SGT[] : rhs < lhs };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SGT[] -> [13] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -200,9 +200,9 @@
; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_NEQ[] -> MemRef_A[0] };
; CHECK-NEXT: Stmt_S_NEQ
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] : rhs >= 1 + lhs or rhs <= -1 + lhs };
+; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] : rhs > lhs or rhs < lhs };
; CHECK-NEXT: Schedule :=
-; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] -> [22] : rhs >= 1 + lhs or rhs <= -1 + lhs };
+; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] -> [22] : rhs > lhs or rhs < lhs };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] -> MemRef_A[0] };
; CHECK-NEXT: Stmt_M_NEQ
Modified: polly/trunk/test/ScopInfo/complex-loop-nesting.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/complex-loop-nesting.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/complex-loop-nesting.ll (original)
+++ polly/trunk/test/ScopInfo/complex-loop-nesting.ll Fri Jan 15 09:54:45 2016
@@ -3,7 +3,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_body_outer
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_for_body_outer[i0] : i0 <= 257 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_for_body_outer[i0] : 0 <= i0 <= 257 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_for_body_outer[i0] -> [i0, 0, 0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -12,7 +12,7 @@
; CHECK-NEXT: { Stmt_for_body_outer[i0] -> MemRef_A[i0] };
; CHECK-NEXT: Stmt_for_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_for_body[257, i1] : i1 <= 1025 and i1 >= 0; Stmt_for_body[i0, 0] : i0 <= 256 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_for_body[257, i1] : 0 <= i1 <= 1025; Stmt_for_body[i0, 0] : 0 <= i0 <= 256 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_for_body[257, i1] -> [257, 1, i1, 0]; Stmt_for_body[i0, 0] -> [i0, 1, 0, 0] : i0 <= 256 };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -21,7 +21,7 @@
; CHECK-NEXT: { Stmt_for_body[i0, i1] -> MemRef_A[i1] };
; CHECK-NEXT: Stmt_for_inc
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_for_inc[257, i1] : i1 <= 1025 and i1 >= 0 };
+; CHECK-NEXT: { Stmt_for_inc[257, i1] : 0 <= i1 <= 1025 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_for_inc[i0, i1] -> [257, 1, i1, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/cond_constant_in_loop.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/cond_constant_in_loop.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/cond_constant_in_loop.ll (original)
+++ polly/trunk/test/ScopInfo/cond_constant_in_loop.ll Fri Jan 15 09:54:45 2016
@@ -45,5 +45,5 @@ return:
; CHECK: Stmt_bb1
; CHECK: Domain :=
-; CHECK: [M] -> { Stmt_bb1[i0] : i0 >= 0 and i0 <= -1 + M };
+; CHECK: [M] -> { Stmt_bb1[i0] : 0 <= i0 < M };
; CHECK-NOT: Stmt_bb2
Modified: polly/trunk/test/ScopInfo/eager-binary-and-or-conditions.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/eager-binary-and-or-conditions.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/eager-binary-and-or-conditions.ll (original)
+++ polly/trunk/test/ScopInfo/eager-binary-and-or-conditions.ll Fri Jan 15 09:54:45 2016
@@ -20,9 +20,9 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_if_then
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [n, m] -> { Stmt_if_then[i0] : (i0 <= 99 and i0 >= 0 and i0 <= -1 + m) or (i0 <= 99 and i0 >= 0 and i0 <= -1 + n) };
+; CHECK-NEXT: [n, m] -> { Stmt_if_then[i0] : 0 <= i0 <= 99 and (i0 < m or i0 < n) };
; CHECK-NEXT: Schedule :=
-; CHECK-NEXT: [n, m] -> { Stmt_if_then[i0] -> [i0] : i0 <= -1 + m or i0 <= -1 + n };
+; CHECK-NEXT: [n, m] -> { Stmt_if_then[i0] -> [i0] : i0 < m or i0 < n };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [n, m] -> { Stmt_if_then[i0] -> MemRef_A[i0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -34,7 +34,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_if_then
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [n, m] -> { Stmt_if_then[i0] : i0 <= 99 and i0 >= 0 and i0 <= -1 + m and i0 <= -1 + n };
+; CHECK-NEXT: [n, m] -> { Stmt_if_then[i0] : 0 <= i0 <= 99 and i0 < m and i0 < n };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [n, m] -> { Stmt_if_then[i0] -> [i0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/exit_phi_accesses-2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/exit_phi_accesses-2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/exit_phi_accesses-2.ll (original)
+++ polly/trunk/test/ScopInfo/exit_phi_accesses-2.ll Fri Jan 15 09:54:45 2016
@@ -5,7 +5,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_body[i0] : i0 <= 100 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_body[i0] : 0 <= i0 <= 100 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_body[i0] -> [i0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/exit_phi_accesses.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/exit_phi_accesses.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/exit_phi_accesses.ll (original)
+++ polly/trunk/test/ScopInfo/exit_phi_accesses.ll Fri Jan 15 09:54:45 2016
@@ -16,7 +16,7 @@
; CHECK-NEXT: { Stmt_header[] -> MemRef_phi[] };
; CHECK-NEXT: Stmt_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_body[i0] : i0 <= 100 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_body[i0] : 0 <= i0 <= 100 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_body[i0] -> [1, i0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/intra-non-affine-stmt-phi-node.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/intra-non-affine-stmt-phi-node.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/intra-non-affine-stmt-phi-node.ll (original)
+++ polly/trunk/test/ScopInfo/intra-non-affine-stmt-phi-node.ll Fri Jan 15 09:54:45 2016
@@ -4,7 +4,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_loop__TO__backedge
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_loop__TO__backedge[i0] : i0 <= 100 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_loop__TO__backedge[i0] : 0 <= i0 <= 100 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_loop__TO__backedge[i0] -> [i0, 0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -15,7 +15,7 @@
; CHECK-NEXT: { Stmt_loop__TO__backedge[i0] -> MemRef_merge__phi[] };
; CHECK-NEXT: Stmt_backedge
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_backedge[i0] : i0 <= 100 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_backedge[i0] : 0 <= i0 <= 100 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_backedge[i0] -> [i0, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/intra_and_inter_bb_scalar_dep.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/intra_and_inter_bb_scalar_dep.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/intra_and_inter_bb_scalar_dep.ll (original)
+++ polly/trunk/test/ScopInfo/intra_and_inter_bb_scalar_dep.ll Fri Jan 15 09:54:45 2016
@@ -15,13 +15,13 @@
; CHECK: Invariant Accesses: {
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [N] -> { Stmt_for_j[i0, i1] -> MemRef_init_ptr[0] };
-; CHECK-NEXT: Execution Context: [N] -> { : N <= -1 or N >= 1 }
+; CHECK-NEXT: Execution Context: [N] -> { : N < 0 or N > 0 }
; CHECK-NEXT: }
;
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_j
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_for_j[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
+; CHECK-NEXT: [N] -> { Stmt_for_j[i0, i1] : 0 <= i0 < N and 0 <= i1 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/invariant-loads-leave-read-only-statements.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/invariant-loads-leave-read-only-statements.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/invariant-loads-leave-read-only-statements.ll (original)
+++ polly/trunk/test/ScopInfo/invariant-loads-leave-read-only-statements.ll Fri Jan 15 09:54:45 2016
@@ -13,7 +13,7 @@
; CHECK-NEXT: [p_0, p_1, p_2] -> { Stmt_top_split[] -> MemRef_26[] };
; CHECK-NEXT: Stmt_L_4
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] : i0 >= 0 and i0 <= -1 + p_0 and i1 >= 0 and i1 <= -1 + p_0 and i2 >= 0 and i2 <= -1 + p_0 };
+; CHECK-NEXT: [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] : 0 <= i0 < p_0 and 0 <= i1 < p_0 and 0 <= i2 < p_0 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [p_0, p_1, p_2] -> { Stmt_L_4[i0, i1, i2] -> [1, i0, i1, i2] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_escaping.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_escaping.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_escaping.ll (original)
+++ polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_escaping.ll Fri Jan 15 09:54:45 2016
@@ -30,7 +30,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_do_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_do_body[i0] : i0 <= 1000 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_do_body[i0] : 0 <= i0 <= 1000 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_do_body[i0] -> [i0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_same_pointer.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_same_pointer.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_same_pointer.ll (original)
+++ polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_same_pointer.ll Fri Jan 15 09:54:45 2016
@@ -16,7 +16,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_for_body[i0] : i0 <= 999 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_for_body[i0] : 0 <= i0 <= 999 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_for_body[i0] -> [i0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_same_pointer_escaping.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_same_pointer_escaping.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_same_pointer_escaping.ll (original)
+++ polly/trunk/test/ScopInfo/invariant_load_access_classes_different_base_type_same_pointer_escaping.ll Fri Jan 15 09:54:45 2016
@@ -21,7 +21,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_do_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_do_body[i0] : i0 <= 100 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_do_body[i0] : 0 <= i0 <= 100 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_do_body[i0] -> [i0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/invariant_loads_complicated_dependences.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/invariant_loads_complicated_dependences.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/invariant_loads_complicated_dependences.ll (original)
+++ polly/trunk/test/ScopInfo/invariant_loads_complicated_dependences.ll Fri Jan 15 09:54:45 2016
@@ -9,7 +9,7 @@
; CHECK-NEXT: Execution Context: [LB, UB] -> { : }
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [LB, UB] -> { Stmt_if_then[i0, i1] -> MemRef_V[0] };
-; CHECK-NEXT: Execution Context: [LB, UB] -> { : (UB >= 1 + LB and UB >= 6) or LB >= 6 }
+; CHECK-NEXT: Execution Context: [LB, UB] -> { : (UB > LB and UB >= 6) or LB >= 6 }
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [LB, UB] -> { Stmt_if_else[i0, i1] -> MemRef_U[0] };
; CHECK-NEXT: Execution Context: [LB, UB] -> { : LB <= 5 }
Modified: polly/trunk/test/ScopInfo/invariant_loop_bounds.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/invariant_loop_bounds.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/invariant_loop_bounds.ll (original)
+++ polly/trunk/test/ScopInfo/invariant_loop_bounds.ll Fri Jan 15 09:54:45 2016
@@ -6,10 +6,10 @@
; CHECK-NEXT: Execution Context: [bounds2, bounds1, bounds0] -> { : }
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [bounds2, bounds1, bounds0] -> { Stmt_for_cond_1[i0, i1] -> MemRef_bounds[1] };
-; CHECK-NEXT: Execution Context: [bounds2, bounds1, bounds0] -> { : bounds2 >= 1 }
+; CHECK-NEXT: Execution Context: [bounds2, bounds1, bounds0] -> { : bounds2 > 0 }
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [bounds2, bounds1, bounds0] -> { Stmt_for_cond_4[i0, i1, i2] -> MemRef_bounds[0] };
-; CHECK-NEXT: Execution Context: [bounds2, bounds1, bounds0] -> { : bounds1 >= 1 and bounds2 >= 1 }
+; CHECK-NEXT: Execution Context: [bounds2, bounds1, bounds0] -> { : bounds2 > 0 and bounds1 > 0 }
; CHECK-NEXT: }
;
; CHECK: p0: %bounds2
@@ -19,7 +19,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_body_6
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [bounds2, bounds1, bounds0] -> { Stmt_for_body_6[i0, i1, i2] : i0 >= 0 and i0 <= -1 + bounds2 and i1 >= 0 and i1 <= -1 + bounds1 and i2 >= 0 and i2 <= -1 + bounds0 };
+; CHECK-NEXT: [bounds2, bounds1, bounds0] -> { Stmt_for_body_6[i0, i1, i2] : 0 <= i0 < bounds2 and 0 <= i1 < bounds1 and 0 <= i2 < bounds0 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [bounds2, bounds1, bounds0] -> { Stmt_for_body_6[i0, i1, i2] -> [i0, i1, i2] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/invariant_same_loop_bound_multiple_times-1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/invariant_same_loop_bound_multiple_times-1.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/invariant_same_loop_bound_multiple_times-1.ll (original)
+++ polly/trunk/test/ScopInfo/invariant_same_loop_bound_multiple_times-1.ll Fri Jan 15 09:54:45 2016
@@ -17,7 +17,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_body_6
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [bounds0l0] -> { Stmt_for_body_6[i0, i1, i2] : i0 >= 0 and i0 <= -1 + bounds0l0 and i1 >= 0 and i1 <= -1 + bounds0l0 and i2 >= 0 and i2 <= -1 + bounds0l0 };
+; CHECK-NEXT: [bounds0l0] -> { Stmt_for_body_6[i0, i1, i2] : 0 <= i0 < bounds0l0 and 0 <= i1 < bounds0l0 and 0 <= i2 < bounds0l0 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [bounds0l0] -> { Stmt_for_body_6[i0, i1, i2] -> [i0, i1, i2] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/invariant_same_loop_bound_multiple_times-2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/invariant_same_loop_bound_multiple_times-2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/invariant_same_loop_bound_multiple_times-2.ll (original)
+++ polly/trunk/test/ScopInfo/invariant_same_loop_bound_multiple_times-2.ll Fri Jan 15 09:54:45 2016
@@ -18,7 +18,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_body_6
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [bounds0l0, p] -> { Stmt_for_body_6[i0, i1, i2] : p = 0 and i0 >= 0 and i0 <= -1 + bounds0l0 and i1 >= 0 and i1 <= -1 + bounds0l0 and i2 >= 0 and i2 <= -1 + bounds0l0 };
+; CHECK-NEXT: [bounds0l0, p] -> { Stmt_for_body_6[i0, i1, i2] : p = 0 and 0 <= i0 < bounds0l0 and 0 <= i1 < bounds0l0 and 0 <= i2 < bounds0l0 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [bounds0l0, p] -> { Stmt_for_body_6[i0, i1, i2] -> [i0, i1, i2] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/isl_trip_count_01.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/isl_trip_count_01.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/isl_trip_count_01.ll (original)
+++ polly/trunk/test/ScopInfo/isl_trip_count_01.ll Fri Jan 15 09:54:45 2016
@@ -1,6 +1,6 @@
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
;
-; CHECK: [M, N] -> { Stmt_while_body[i0] : i0 >= 0 and 4i0 <= -M + N; Stmt_while_body[0] : N <= -1 + M }
+; CHECK: [M, N] -> { Stmt_while_body[i0] : i0 > 0 and 4i0 <= -M + N; Stmt_while_body[0] };
;
; void f(int *A, int N, int M) {
; int i = 0;
Modified: polly/trunk/test/ScopInfo/isl_trip_count_03.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/isl_trip_count_03.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/isl_trip_count_03.ll (original)
+++ polly/trunk/test/ScopInfo/isl_trip_count_03.ll Fri Jan 15 09:54:45 2016
@@ -5,7 +5,7 @@
; loop bounds. However, the new domain generation will detect the SCoP.
; CHECK: Context:
-; CHECK-NEXT: [n] -> { : n <= 2147483647 and n >= -2147483648 }
+; CHECK-NEXT: [n] -> { : -2147483648 <= n <= 2147483647 }
;
; CHECK: p0: %n
;
Modified: polly/trunk/test/ScopInfo/isl_trip_count_multiple_exiting_blocks.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/isl_trip_count_multiple_exiting_blocks.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/isl_trip_count_multiple_exiting_blocks.ll (original)
+++ polly/trunk/test/ScopInfo/isl_trip_count_multiple_exiting_blocks.ll Fri Jan 15 09:54:45 2016
@@ -1,7 +1,7 @@
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
;
; CHECK: Domain :=
-; CHECK: { Stmt_if_end[i0] : i0 <= 1024 and i0 >= 0 };
+; CHECK: { Stmt_if_end[i0] : 0 <= i0 <= 1024 };
;
; void f(int *A) {
; int i = 0;
Modified: polly/trunk/test/ScopInfo/long-sequence-of-error-blocks.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/long-sequence-of-error-blocks.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/long-sequence-of-error-blocks.ll (original)
+++ polly/trunk/test/ScopInfo/long-sequence-of-error-blocks.ll Fri Jan 15 09:54:45 2016
@@ -13,7 +13,7 @@ target triple = "x86_64-unknown-linux-gn
; iteration spaces are not overly complicated.
; CHECK: Assumed Context:
-; CHECK-NEXT: [tmp17, tmp21, tmp27, tmp31] -> { : (tmp17 = 0 and tmp27 >= 4) or (tmp17 = 0 and tmp27 <= 2) or (tmp21 = 0 and tmp17 <= -1 and tmp27 >= 4) or (tmp21 = 0 and tmp17 <= -1 and tmp27 <= 2) or (tmp21 = 0 and tmp17 >= 1 and tmp27 >= 4) or (tmp21 = 0 and tmp17 >= 1 and tmp27 <= 2) or (tmp17 = 0 and tmp27 = 3 and tmp31 >= 144) or (tmp21 = 0 and tmp27 = 3 and tmp17 <= -1 and tmp31 >= 144) or (tmp21 = 0 and tmp27 = 3 and tmp17 >= 1 and tmp31 >= 144) }
+; CHECK-NEXT: [tmp17, tmp21, tmp27, tmp31] -> { : (tmp17 = 0 and tmp27 >= 4) or (tmp17 = 0 and tmp27 <= 2) or (tmp21 = 0 and tmp17 < 0 and tmp27 >= 4) or (tmp21 = 0 and tmp17 < 0 and tmp27 <= 2) or (tmp21 = 0 and tmp17 > 0 and tmp27 >= 4) or (tmp21 = 0 and tmp17 > 0 and tmp27 <= 2) or (tmp17 = 0 and tmp27 = 3 and tmp31 >= 144) or (tmp21 = 0 and tmp27 = 3 and tmp17 < 0 and tmp31 >= 144) or (tmp21 = 0 and tmp27 = 3 and tmp17 > 0 and tmp31 >= 144) }
;
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb15
@@ -25,9 +25,9 @@ target triple = "x86_64-unknown-linux-gn
; CHECK-NEXT: [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb15[] -> MemRef_A[0] };
; CHECK-NEXT: Stmt_bb19
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb19[] : tmp17 <= -1 or tmp17 >= 1 };
+; CHECK-NEXT: [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb19[] : tmp17 < 0 or tmp17 > 0 };
; CHECK-NEXT: Schedule :=
-; CHECK-NEXT: [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb19[] -> [1] : tmp17 <= -1 or tmp17 >= 1 };
+; CHECK-NEXT: [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb19[] -> [1] : tmp17 < 0 or tmp17 > 0 };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [tmp17, tmp21, tmp27, tmp31] -> { Stmt_bb19[] -> MemRef_A[0] };
; CHECK-NEXT: Stmt_bb24
Modified: polly/trunk/test/ScopInfo/loop_affine_bound_0.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/loop_affine_bound_0.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/loop_affine_bound_0.ll (original)
+++ polly/trunk/test/ScopInfo/loop_affine_bound_0.ll Fri Jan 15 09:54:45 2016
@@ -57,7 +57,7 @@ return:
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb1
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, M] -> { Stmt_bb1[i0, i1] : i0 >= 0 and i0 <= 2 + 4N + 7M and i1 >= 0 and i1 <= 1 + 5N };
+; CHECK-NEXT: [N, M] -> { Stmt_bb1[i0, i1] : 0 <= i0 <= 2 + 4N + 7M and 0 <= i1 <= 1 + 5N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, M] -> { Stmt_bb1[i0, i1] -> [i0, i1] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/loop_affine_bound_1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/loop_affine_bound_1.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/loop_affine_bound_1.ll (original)
+++ polly/trunk/test/ScopInfo/loop_affine_bound_1.ll Fri Jan 15 09:54:45 2016
@@ -56,7 +56,7 @@ return:
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb1
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, M] -> { Stmt_bb1[i0, i1] : i0 >= 0 and i0 <= 2 + 4N + 7M and i1 >= 0 and i1 <= 1 + 5N - i0; Stmt_bb1[0, i1] : 7M <= -3 - 4N and i1 >= 0 and i1 <= 1 + 5N };
+; CHECK-NEXT: [N, M] -> { Stmt_bb1[i0, i1] : 0 <= i0 <= 2 + 4N + 7M and 0 <= i1 <= 1 + 5N - i0; Stmt_bb1[0, i1] : 7M <= -3 - 4N and 0 <= i1 <= 1 + 5N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, M] -> { Stmt_bb1[i0, i1] -> [i0, i1] : i0 <= 2 + 4N + 7M; Stmt_bb1[0, i1] -> [0, i1] : 7M <= -3 - 4N };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/loop_affine_bound_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/loop_affine_bound_2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/loop_affine_bound_2.ll (original)
+++ polly/trunk/test/ScopInfo/loop_affine_bound_2.ll Fri Jan 15 09:54:45 2016
@@ -67,7 +67,7 @@ return:
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb1
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, M] -> { Stmt_bb1[i0, i1] : i0 >= 0 and i0 <= 2 + 4N + 7M and i1 <= 10 + 5N - 6M - 4i0 and i1 >= 0 };
+; CHECK-NEXT: [N, M] -> { Stmt_bb1[i0, i1] : 0 <= i0 <= 2 + 4N + 7M and 0 <= i1 <= 10 + 5N - 6M - 4i0 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, M] -> { Stmt_bb1[i0, i1] -> [i0, i1] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/loop_carry.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/loop_carry.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/loop_carry.ll (original)
+++ polly/trunk/test/ScopInfo/loop_carry.ll Fri Jan 15 09:54:45 2016
@@ -49,7 +49,7 @@ bb2:
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [n] -> { Stmt_bb[i0] : i0 >= 0 and i0 <= -2 + n };
+; CHECK-NEXT: [n] -> { Stmt_bb[i0] : 0 <= i0 <= -2 + n };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [n] -> { Stmt_bb[i0] -> [i0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/many-scalar-dependences.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/many-scalar-dependences.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/many-scalar-dependences.ll (original)
+++ polly/trunk/test/ScopInfo/many-scalar-dependences.ll Fri Jan 15 09:54:45 2016
@@ -22,7 +22,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb5
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb5[i0] : i0 <= 100 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb5[i0] : 0 <= i0 <= 100 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb5[i0] -> [i0, 0, 0, 0, 0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -31,7 +31,7 @@
; CHECK-NEXT: { Stmt_bb5[i0] -> MemRef_x_0[] };
; CHECK-NEXT: Stmt_bb6
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb6[i0] : i0 <= 99 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb6[i0] : 0 <= i0 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb6[i0] -> [i0, 1, 0, 0, 0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -40,7 +40,7 @@
; CHECK-NEXT: { Stmt_bb6[i0] -> MemRef_x_1__phi[] };
; CHECK-NEXT: Stmt_bb7
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb7[i0, i1] : i0 <= 99 and i0 >= 0 and i1 <= 100 and i1 >= 0 };
+; CHECK-NEXT: { Stmt_bb7[i0, i1] : 0 <= i0 <= 99 and 0 <= i1 <= 100 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb7[i0, i1] -> [i0, 2, i1, 0, 0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -51,7 +51,7 @@
; CHECK-NEXT: { Stmt_bb7[i0, i1] -> MemRef_x_1_lcssa__phi[] };
; CHECK-NEXT: Stmt_bb8
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb8[i0, i1] : i1 <= 99 and i0 <= 99 and i0 >= 0 and i1 >= 0 };
+; CHECK-NEXT: { Stmt_bb8[i0, i1] : 0 <= i0 <= 99 and 0 <= i1 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb8[i0, i1] -> [i0, 2, i1, 1, 0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -60,7 +60,7 @@
; CHECK-NEXT: { Stmt_bb8[i0, i1] -> MemRef_x_2__phi[] };
; CHECK-NEXT: Stmt_bb9
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb9[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 and i2 <= 100 and i2 >= 0 };
+; CHECK-NEXT: { Stmt_bb9[i0, i1, i2] : 0 <= i0 <= 99 and 0 <= i1 <= 99 and 0 <= i2 <= 100 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb9[i0, i1, i2] -> [i0, 2, i1, 2, i2, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -71,7 +71,7 @@
; CHECK-NEXT: { Stmt_bb9[i0, i1, i2] -> MemRef_x_2_lcssa__phi[] };
; CHECK-NEXT: Stmt_bb10
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb10[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 and i2 <= 99 and i2 >= 0 };
+; CHECK-NEXT: { Stmt_bb10[i0, i1, i2] : 0 <= i0 <= 99 and 0 <= i1 <= 99 and 0 <= i2 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb10[i0, i1, i2] -> [i0, 2, i1, 2, i2, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -80,14 +80,14 @@
; CHECK-NEXT: { Stmt_bb10[i0, i1, i2] -> MemRef_x_3__phi[] };
; CHECK-NEXT: Stmt_bb11
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb11[i0, i1, 0] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 };
+; CHECK-NEXT: { Stmt_bb11[i0, i1, 0] : 0 <= i0 <= 99 and 0 <= i1 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb11[i0, i1, i2] -> [i0, 2, i1, 2, 0, 2] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: { Stmt_bb11[i0, i1, i2] -> MemRef_x_3__phi[] };
; CHECK-NEXT: Stmt_bb12
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb12[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 and i2 <= 99 and i2 >= 0 };
+; CHECK-NEXT: { Stmt_bb12[i0, i1, i2] : 0 <= i0 <= 99 and 0 <= i1 <= 99 and 0 <= i2 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb12[i0, i1, i2] -> [i0, 2, i1, 2, i2, 3] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -100,7 +100,7 @@
; CHECK-NEXT: { Stmt_bb12[i0, i1, i2] -> MemRef_a[i0, i1] };
; CHECK-NEXT: Stmt_bb16
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb16[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 and i2 <= 99 and i2 >= 0 };
+; CHECK-NEXT: { Stmt_bb16[i0, i1, i2] : 0 <= i0 <= 99 and 0 <= i1 <= 99 and 0 <= i2 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb16[i0, i1, i2] -> [i0, 2, i1, 2, i2, 4] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -109,7 +109,7 @@
; CHECK-NEXT: { Stmt_bb16[i0, i1, i2] -> MemRef_x_3[] };
; CHECK-NEXT: Stmt_bb19
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb19[i0, i1] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 };
+; CHECK-NEXT: { Stmt_bb19[i0, i1] : 0 <= i0 <= 99 and 0 <= i1 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb19[i0, i1] -> [i0, 2, i1, 3, 0, 0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -118,7 +118,7 @@
; CHECK-NEXT: { Stmt_bb19[i0, i1] -> MemRef_x_2_lcssa__phi[] };
; CHECK-NEXT: Stmt_bb20
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb20[i0, i1] : i0 <= 99 and i0 >= 0 and i1 <= 99 and i1 >= 0 };
+; CHECK-NEXT: { Stmt_bb20[i0, i1] : 0 <= i0 <= 99 and 0 <= i1 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb20[i0, i1] -> [i0, 2, i1, 4, 0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -127,7 +127,7 @@
; CHECK-NEXT: { Stmt_bb20[i0, i1] -> MemRef_x_1__phi[] };
; CHECK-NEXT: Stmt_bb21
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb21[i0] : i0 <= 99 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb21[i0] : 0 <= i0 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb21[i0] -> [i0, 3, 0, 0, 0, 0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -136,7 +136,7 @@
; CHECK-NEXT: { Stmt_bb21[i0] -> MemRef_x_1_lcssa__phi[] };
; CHECK-NEXT: Stmt_bb22
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb22[i0] : i0 <= 99 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb22[i0] : 0 <= i0 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb22[i0] -> [i0, 4, 0, 0, 0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/multidim_2d_outer_parametric_offset.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_2d_outer_parametric_offset.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_2d_outer_parametric_offset.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_2d_outer_parametric_offset.ll Fri Jan 15 09:54:45 2016
@@ -18,7 +18,7 @@ target datalayout = "e-p:64:64:64-i1:8:8
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_j
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [m, p] -> { Stmt_for_j[i0, i1] : i0 <= 99 and i0 >= 0 and i1 >= 0 and i1 <= -1 + m };
+; CHECK-NEXT: [m, p] -> { Stmt_for_j[i0, i1] : 0 <= i0 <= 99 and 0 <= i1 < m };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [m, p] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/multidim_2d_parametric_array_static_loop_bounds.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_2d_parametric_array_static_loop_bounds.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_2d_parametric_array_static_loop_bounds.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_2d_parametric_array_static_loop_bounds.ll Fri Jan 15 09:54:45 2016
@@ -16,7 +16,7 @@ target datalayout = "e-p:64:64:64-i1:8:8
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_j
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [m] -> { Stmt_for_j[i0, i1] : i0 <= 99 and i0 >= 0 and i1 <= 149 and i1 >= 0 };
+; CHECK-NEXT: [m] -> { Stmt_for_j[i0, i1] : 0 <= i0 <= 99 and 0 <= i1 <= 149 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [m] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/multidim_3d_parametric_array_static_loop_bounds.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_3d_parametric_array_static_loop_bounds.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_3d_parametric_array_static_loop_bounds.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_3d_parametric_array_static_loop_bounds.ll Fri Jan 15 09:54:45 2016
@@ -18,7 +18,7 @@ target datalayout = "e-p:64:64:64-i1:8:8
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_k
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [m, o] -> { Stmt_for_k[i0, i1, i2] : i0 <= 99 and i0 >= 0 and i1 <= 149 and i1 >= 0 and i2 <= 199 and i2 >= 0 };
+; CHECK-NEXT: [m, o] -> { Stmt_for_k[i0, i1, i2] : 0 <= i0 <= 99 and 0 <= i1 <= 149 and 0 <= i2 <= 199 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [m, o] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/multidim_fixedsize_different_dimensionality.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_fixedsize_different_dimensionality.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_fixedsize_different_dimensionality.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_fixedsize_different_dimensionality.ll Fri Jan 15 09:54:45 2016
@@ -29,7 +29,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb7
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb7[i0, i1] : i0 <= 399 and i0 >= 0 and i1 <= 399 and i1 >= 0 };
+; CHECK-NEXT: { Stmt_bb7[i0, i1] : 0 <= i0 <= 399 and 0 <= i1 <= 399 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb7[i0, i1] -> [0, i0, i1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -49,7 +49,7 @@
; CHECK-NEXT: { Stmt_bb17[] -> MemRef_A[0, 0] };
; CHECK-NEXT: Stmt_bb26
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb26[i0, i1] : i0 <= 399 and i0 >= 0 and i1 <= 399 and i1 >= 0 };
+; CHECK-NEXT: { Stmt_bb26[i0, i1] : 0 <= i0 <= 399 and 0 <= i1 <= 399 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb26[i0, i1] -> [2, i0, i1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -61,7 +61,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb7
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb7[i0, i1] : i0 <= 399 and i0 >= 0 and i1 <= 399 and i1 >= 0 };
+; CHECK-NEXT: { Stmt_bb7[i0, i1] : 0 <= i0 <= 399 and 0 <= i1 <= 399 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb7[i0, i1] -> [0, i0, i1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -81,7 +81,7 @@
; CHECK-NEXT: { Stmt_bb17[] -> MemRef_A[0, 0] };
; CHECK-NEXT: Stmt_bb26
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb26[i0, i1] : i0 <= 399 and i0 >= 0 and i1 <= 399 and i1 >= 0 };
+; CHECK-NEXT: { Stmt_bb26[i0, i1] : 0 <= i0 <= 399 and 0 <= i1 <= 399 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb26[i0, i1] -> [2, i0, i1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/multidim_fortran_2d_params.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_fortran_2d_params.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_fortran_2d_params.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_fortran_2d_params.ll Fri Jan 15 09:54:45 2016
@@ -15,7 +15,7 @@
; end do
; end subroutine
-; CHECK: [tmp9, nj_loaded2, tmp20, tmp19] -> { Stmt_bb17[i0, i1] -> MemRef_a[-1 + tmp20 + i0, nj_loaded2 + tmp19 + i1] : i1 <= -1 - tmp19; Stmt_bb17[i0, i1] -> MemRef_a[tmp20 + i0, tmp19 + i1] : i1 >= -tmp19 };
+; CHECK: [tmp9, nj_loaded2, tmp20, tmp19] -> { Stmt_bb17[i0, i1] -> MemRef_a[-1 + tmp20 + i0, nj_loaded2 + tmp19 + i1] : i1 < -tmp19; Stmt_bb17[i0, i1] -> MemRef_a[tmp20 + i0, tmp19 + i1] : i1 >= -tmp19 };
target datalayout = "e-p:64:64:64-S128-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f16:16:16-f32:32:32-f64:64:64-f128:128:128-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
Modified: polly/trunk/test/ScopInfo/multidim_fortran_srem.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_fortran_srem.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_fortran_srem.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_fortran_srem.ll Fri Jan 15 09:54:45 2016
@@ -4,7 +4,7 @@ target datalayout = "e-p:64:64:64-S128-i
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb188
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb188[i0] : i0 >= 0 and i0 <= -3 + tmp183 };
+; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb188[i0] : 0 <= i0 <= -3 + tmp183 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb188[i0] -> [i0, 0, 0, 0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -13,7 +13,7 @@ target datalayout = "e-p:64:64:64-S128-i
; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb188[i0] -> MemRef_tmp194[] };
; CHECK-NEXT: Stmt_bb203
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] : i0 >= 0 and i0 <= -3 + tmp183 and i1 >= 0 and i1 <= -3 + tmp180 and i2 >= 0 and i2 <= -3 + tmp177 };
+; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] : 0 <= i0 <= -3 + tmp183 and 0 <= i1 <= -3 + tmp180 and 0 <= i2 <= -3 + tmp177 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> [i0, 1, i1, i2] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -21,9 +21,9 @@ target datalayout = "e-p:64:64:64-S128-i
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_tmp194[] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_tmp173[o0, 1 + i1, 1 + i2] : exists (e0 = floor((-i0 + o0)/3): 3e0 = -i0 + o0 and o0 <= 2 and o0 >= 0) };
+; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_tmp173[o0, 1 + i1, 1 + i2] : 3*floor((-i0 + o0)/3) = -i0 + o0 and 0 <= o0 <= 2 };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_tmp173[o0, 1 + i1, 1 + i2] : exists (e0 = floor((-2 - i0 + o0)/3): 3e0 = -2 - i0 + o0 and o0 <= 2 and o0 >= 0) };
+; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_tmp173[o0, 1 + i1, 1 + i2] : 3*floor((-2 - i0 + o0)/3) = -2 - i0 + o0 and 0 <= o0 <= 2 };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
; CHECK-NEXT: [tmp180, tmp177, tmp183, tmp162, tmp157, tmp150, tmp146, tmp140, tmp] -> { Stmt_bb203[i0, i1, i2] -> MemRef_arg56[1 + i0, 1 + i1, 1 + i2] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/multidim_ivs_and_integer_offsets_3d.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_ivs_and_integer_offsets_3d.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_ivs_and_integer_offsets_3d.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_ivs_and_integer_offsets_3d.ll Fri Jan 15 09:54:45 2016
@@ -20,7 +20,7 @@ target datalayout = "e-p:64:64:64-i1:8:8
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_k
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [o, m, n] -> { Stmt_for_k[i0, i1, i2] : i0 >= 0 and i0 <= -4 + n and i1 >= 0 and i1 <= -5 + m and i2 >= 0 and i2 <= -8 + o };
+; CHECK-NEXT: [o, m, n] -> { Stmt_for_k[i0, i1, i2] : 0 <= i0 <= -4 + n and 0 <= i1 <= -5 + m and 0 <= i2 <= -8 + o };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/multidim_ivs_and_parameteric_offsets_3d.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_ivs_and_parameteric_offsets_3d.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_ivs_and_parameteric_offsets_3d.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_ivs_and_parameteric_offsets_3d.ll Fri Jan 15 09:54:45 2016
@@ -14,7 +14,7 @@ target datalayout = "e-p:64:64:64-i1:8:8
; (8 * %o)}<%for.j>,+,8}<%for.k>
; CHECK: Assumed Context:
-; CHECK-NEXT: [o, m, n, p, q, r] -> { : (q <= 0 and q >= 1 - m and r <= -1 and r >= 1 - o) or (r = 0 and q <= 0 and q >= -m) or (r = -o and q <= 1 and q >= 1 - m) }
+; CHECK-NEXT: [o, m, n, p, q, r] -> { : -m <= q <= 1 and ((-m < q <= 0 and -o < r < 0) or (r = 0 and q <= 0) or (r = -o and q > -m)) }
;
; CHECK: p0: %o
; CHECK-NEXT: p1: %m
@@ -27,11 +27,11 @@ target datalayout = "e-p:64:64:64-i1:8:8
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_k
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [o, m, n, p, q, r] -> { Stmt_for_k[i0, i1, i2] : i0 >= 0 and i0 <= -1 + n and i1 >= 0 and i1 <= -1 + m and i2 >= 0 and i2 <= -1 + o };
+; CHECK-NEXT: [o, m, n, p, q, r] -> { Stmt_for_k[i0, i1, i2] : 0 <= i0 < n and 0 <= i1 < m and 0 <= i2 < o };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [o, m, n, p, q, r] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [o, m, n, p, q, r] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[-1 + p + i0, -1 + m + q + i1, o + r + i2] : i1 <= -q and i2 <= -1 - r; Stmt_for_k[i0, i1, i2] -> MemRef_A[p + i0, -1 + q + i1, o + r + i2] : i1 >= 1 - q and i2 <= -1 - r; Stmt_for_k[i0, i1, i2] -> MemRef_A[-1 + p + i0, m + q + i1, r + i2] : i1 <= -1 - q and i2 >= -r; Stmt_for_k[i0, i1, i2] -> MemRef_A[p + i0, q + i1, r + i2] : i1 >= -q and i2 >= -r };
+; CHECK-NEXT: [o, m, n, p, q, r] -> { Stmt_for_k[i0, i1, i2] -> MemRef_A[-1 + p + i0, -1 + m + q + i1, o + r + i2] : i1 <= -q and i2 < -r; Stmt_for_k[i0, i1, i2] -> MemRef_A[p + i0, -1 + q + i1, o + r + i2] : i1 > -q and i2 < -r; Stmt_for_k[i0, i1, i2] -> MemRef_A[-1 + p + i0, m + q + i1, r + i2] : i1 < -q and i2 >= -r; Stmt_for_k[i0, i1, i2] -> MemRef_A[p + i0, q + i1, r + i2] : i1 >= -q and i2 >= -r };
; CHECK-NEXT: }
define void @foo(i64 %n, i64 %m, i64 %o, double* %A, i64 %p, i64 %q, i64 %r) {
Modified: polly/trunk/test/ScopInfo/multidim_nested_start_integer.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_nested_start_integer.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_nested_start_integer.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_nested_start_integer.ll Fri Jan 15 09:54:45 2016
@@ -19,7 +19,7 @@ target datalayout = "e-p:64:64:64-i1:8:8
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_k
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [o, m, n] -> { Stmt_for_k[i0, i1, i2] : i0 >= 0 and i0 <= -4 + n and i1 >= 0 and i1 <= -5 + m and i2 >= 0 and i2 <= -8 + o };
+; CHECK-NEXT: [o, m, n] -> { Stmt_for_k[i0, i1, i2] : 0 <= i0 <= -4 + n and 0 <= i1 <= -5 + m and 0 <= i2 <= -8 + o };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/multidim_only_ivs_2d.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_only_ivs_2d.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_only_ivs_2d.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_only_ivs_2d.ll Fri Jan 15 09:54:45 2016
@@ -19,7 +19,7 @@ target datalayout = "e-p:64:64:64-i1:8:8
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_j
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [m, n] -> { Stmt_for_j[i0, i1] : i0 >= 0 and i0 <= -1 + n and i1 >= 0 and i1 <= -1 + m };
+; CHECK-NEXT: [m, n] -> { Stmt_for_j[i0, i1] : 0 <= i0 < n and 0 <= i1 < m };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [m, n] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/multidim_only_ivs_3d.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_only_ivs_3d.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_only_ivs_3d.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_only_ivs_3d.ll Fri Jan 15 09:54:45 2016
@@ -20,7 +20,7 @@ target datalayout = "e-p:64:64:64-i1:8:8
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_k
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [o, m, n] -> { Stmt_for_k[i0, i1, i2] : i0 >= 0 and i0 <= -1 + n and i1 >= 0 and i1 <= -1 + m and i2 >= 0 and i2 <= -1 + o };
+; CHECK-NEXT: [o, m, n] -> { Stmt_for_k[i0, i1, i2] : 0 <= i0 < n and 0 <= i1 < m and 0 <= i2 < o };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [o, m, n] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/multidim_only_ivs_3d_cast.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_only_ivs_3d_cast.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_only_ivs_3d_cast.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_only_ivs_3d_cast.ll Fri Jan 15 09:54:45 2016
@@ -33,7 +33,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_k
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [o, m, n, p_3, p_4] -> { Stmt_for_k[i0, i1, i2] : i0 >= 0 and i0 <= -1 + n and i1 >= 0 and i1 <= -1 + m and i2 >= 0 and i2 <= -1 + o };
+; CHECK-NEXT: [o, m, n, p_3, p_4] -> { Stmt_for_k[i0, i1, i2] : 0 <= i0 < n and 0 <= i1 < m and 0 <= i2 < o };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [o, m, n, p_3, p_4] -> { Stmt_for_k[i0, i1, i2] -> [i0, i1, i2] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/multidim_only_ivs_3d_reverse.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_only_ivs_3d_reverse.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_only_ivs_3d_reverse.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_only_ivs_3d_reverse.ll Fri Jan 15 09:54:45 2016
@@ -25,7 +25,7 @@ target datalayout = "e-p:64:64:64-i1:8:8
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_j
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [m, o, n] -> { Stmt_for_j[i0, i1, i2] : i0 >= 0 and i0 <= -1 + n and i1 >= 0 and i1 <= -1 + o and i2 >= 0 and i2 <= -1 + m };
+; CHECK-NEXT: [m, o, n] -> { Stmt_for_j[i0, i1, i2] : 0 <= i0 < n and 0 <= i1 < o and 0 <= i2 < m };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [m, o, n] -> { Stmt_for_j[i0, i1, i2] -> [i0, i1, i2] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/multidim_single_and_multidim_array.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_single_and_multidim_array.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_single_and_multidim_array.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_single_and_multidim_array.ll Fri Jan 15 09:54:45 2016
@@ -25,14 +25,14 @@ target datalayout = "e-m:e-i64:64-f80:12
; NONAFFINE: Statements {
; NONAFFINE-NEXT: Stmt_for_i_1
; NONAFFINE-NEXT: Domain :=
-; NONAFFINE-NEXT: [n, p_1] -> { Stmt_for_i_1[i0] : i0 >= 0 and i0 <= -1 + n };
+; NONAFFINE-NEXT: [n, p_1] -> { Stmt_for_i_1[i0] : 0 <= i0 < n };
; NONAFFINE-NEXT: Schedule :=
; NONAFFINE-NEXT: [n, p_1] -> { Stmt_for_i_1[i0] -> [0, i0] };
; NONAFFINE-NEXT: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
-; NONAFFINE-NEXT: [n, p_1] -> { Stmt_for_i_1[i0] -> MemRef_X[o0] : o0 >= -2305843009213693952 and o0 <= 2305843009213693949 };
+; NONAFFINE-NEXT: [n, p_1] -> { Stmt_for_i_1[i0] -> MemRef_X[o0] : -2305843009213693952 <= o0 <= 2305843009213693949 };
; NONAFFINE-NEXT: Stmt_for_i_2
; NONAFFINE-NEXT: Domain :=
-; NONAFFINE-NEXT: [n, p_1] -> { Stmt_for_i_2[i0] : i0 >= 0 and i0 <= -1 + n };
+; NONAFFINE-NEXT: [n, p_1] -> { Stmt_for_i_2[i0] : 0 <= i0 < n };
; NONAFFINE-NEXT: Schedule :=
; NONAFFINE-NEXT: [n, p_1] -> { Stmt_for_i_2[i0] -> [1, i0] };
; NONAFFINE-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -42,14 +42,14 @@ target datalayout = "e-m:e-i64:64-f80:12
; DELIN: Statements {
; DELIN-NEXT: Stmt_for_i_1
; DELIN-NEXT: Domain :=
-; DELIN-NEXT: [n] -> { Stmt_for_i_1[i0] : i0 >= 0 and i0 <= -1 + n };
+; DELIN-NEXT: [n] -> { Stmt_for_i_1[i0] : 0 <= i0 < n };
; DELIN-NEXT: Schedule :=
; DELIN-NEXT: [n] -> { Stmt_for_i_1[i0] -> [0, i0] };
; DELIN-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
; DELIN-NEXT: [n] -> { Stmt_for_i_1[i0] -> MemRef_X[i0, 0] };
; DELIN-NEXT: Stmt_for_i_2
; DELIN-NEXT: Domain :=
-; DELIN-NEXT: [n] -> { Stmt_for_i_2[i0] : i0 >= 0 and i0 <= -1 + n };
+; DELIN-NEXT: [n] -> { Stmt_for_i_2[i0] : 0 <= i0 < n };
; DELIN-NEXT: Schedule :=
; DELIN-NEXT: [n] -> { Stmt_for_i_2[i0] -> [1, i0] };
; DELIN-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/multidim_srem.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multidim_srem.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multidim_srem.ll (original)
+++ polly/trunk/test/ScopInfo/multidim_srem.ll Fri Jan 15 09:54:45 2016
@@ -10,13 +10,13 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_body_8
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [n] -> { Stmt_for_body_8[i0, i1, i2] : i0 <= 199 and i0 >= 0 and i1 >= 0 and i1 <= -1 + n and i2 >= 0 and i2 <= -1 + n };
+; CHECK-NEXT: [n] -> { Stmt_for_body_8[i0, i1, i2] : 0 <= i0 <= 199 and 0 <= i1 < n and 0 <= i2 < n };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [n] -> { Stmt_for_body_8[i0, i1, i2] -> [i0, i1, i2] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [n] -> { Stmt_for_body_8[i0, i1, i2] -> MemRef_A[o0, i1, i2] : exists (e0 = floor((-i0 + o0)/2): 2e0 = -i0 + o0 and o0 <= 1 and o0 >= 0) };
+; CHECK-NEXT: [n] -> { Stmt_for_body_8[i0, i1, i2] -> MemRef_A[o0, i1, i2] : 2*floor((-i0 + o0)/2) = -i0 + o0 and 0 <= o0 <= 1 };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [n] -> { Stmt_for_body_8[i0, i1, i2] -> MemRef_A[o0, i1, i2] : exists (e0 = floor((-i0 + o0)/2): 2e0 = -i0 + o0 and o0 <= 1 and o0 >= 0) };
+; CHECK-NEXT: [n] -> { Stmt_for_body_8[i0, i1, i2] -> MemRef_A[o0, i1, i2] : 2*floor((-i0 + o0)/2) = -i0 + o0 and 0 <= o0 <= 1 };
; CHECK-NEXT: }
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
Modified: polly/trunk/test/ScopInfo/multiple-binary-or-conditions.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multiple-binary-or-conditions.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multiple-binary-or-conditions.ll (original)
+++ polly/trunk/test/ScopInfo/multiple-binary-or-conditions.ll Fri Jan 15 09:54:45 2016
@@ -11,7 +11,7 @@
; CHECK: Function: or
; CHECK: Stmt_if_then
; CHECK: Domain :=
-; CHECK: [n, m, p] -> { Stmt_if_then[i0] : (i0 >= 1 + p and i0 <= 99 and i0 >= 0) or (i0 <= 99 and i0 >= 0 and i0 <= -1 + m) or (i0 <= 99 and i0 >= 0 and i0 <= -1 + n) };
+; CHECK: [n, m, p] -> { Stmt_if_then[i0] : 0 <= i0 <= 99 and (i0 > p or i0 < m or i0 < n) };
;
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
Modified: polly/trunk/test/ScopInfo/multiple_exiting_blocks.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multiple_exiting_blocks.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multiple_exiting_blocks.ll (original)
+++ polly/trunk/test/ScopInfo/multiple_exiting_blocks.ll Fri Jan 15 09:54:45 2016
@@ -1,7 +1,7 @@
; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s
;
; CHECK: Domain :=
-; CHECK: [N, P, Q] -> { Stmt_if_end[i0] : (i0 >= 0 and i0 <= 1 + Q and i0 <= -1 + P and i0 <= -1 + N) or (P <= -1 and i0 >= 2 + P and i0 >= 0 and i0 <= 1 + Q and i0 <= -1 + N); Stmt_if_end[0] : (N >= 1 and P <= -2 and Q <= -2) or (N >= 1 and P >= 1 and Q <= -2) or (P = -1 and N >= 1) }
+; CHECK: [N, P, Q] -> { Stmt_if_end[i0] : 0 <= i0 <= 1 + Q and i0 < N and (i0 < P or (P < 0 and i0 >= 2 + P)); Stmt_if_end[0] : N > 0 and ((P <= -2 and Q <= -2) or (P > 0 and Q <= -2) or P = -1) };
;
; void f(int *A, int N, int P, int Q) {
; for (int i = 0; i < N; i++) {
Modified: polly/trunk/test/ScopInfo/multiple_exiting_blocks_two_loop.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multiple_exiting_blocks_two_loop.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multiple_exiting_blocks_two_loop.ll (original)
+++ polly/trunk/test/ScopInfo/multiple_exiting_blocks_two_loop.ll Fri Jan 15 09:54:45 2016
@@ -17,7 +17,7 @@
; }
;
; CHECK: Domain :=
-; CHECK: [n] -> { Stmt_if_end_7[i0, i1] : i0 >= 0 and i1 <= 99 - i0 and i1 >= 0 and i1 <= -1 + n - i0 };
+; CHECK: [n] -> { Stmt_if_end_7[i0, i1] : i0 >= 0 and 0 <= i1 <= 99 - i0 and i1 < n - i0 };
;
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
Modified: polly/trunk/test/ScopInfo/multiple_latch_blocks.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/multiple_latch_blocks.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/multiple_latch_blocks.ll (original)
+++ polly/trunk/test/ScopInfo/multiple_latch_blocks.ll Fri Jan 15 09:54:45 2016
@@ -1,7 +1,7 @@
; RUN: opt %loadPolly -analyze -polly-scops < %s | FileCheck %s
;
; CHECK: Domain :=
-; CHECK: [N, P] -> { Stmt_if_end[i0] : (i0 >= 1 + P and i0 >= 0 and i0 <= -1 + N) or (i0 >= 0 and i0 <= -1 + P and i0 <= -1 + N) };
+; CHECK: [N, P] -> { Stmt_if_end[i0] : 0 <= i0 < N and (i0 > P or i0 < P) };
;
; void f(int *A, int N, int P, int Q) {
; for (int i = 0; i < N; i++) {
Modified: polly/trunk/test/ScopInfo/nested-loops.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/nested-loops.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/nested-loops.ll (original)
+++ polly/trunk/test/ScopInfo/nested-loops.ll Fri Jan 15 09:54:45 2016
@@ -31,7 +31,7 @@ return:
; CHECK: Statements {
; CHECK-NEXT: Stmt_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_body[i0, i1] : i0 <= 2046 and i0 >= 0 and i1 <= 1022 and i1 >= 0 };
+; CHECK-NEXT: { Stmt_body[i0, i1] : 0 <= i0 <= 2046 and 0 <= i1 <= 1022 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_body[i0, i1] -> [i0, i1] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/non_affine_access.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/non_affine_access.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/non_affine_access.ll (original)
+++ polly/trunk/test/ScopInfo/non_affine_access.ll Fri Jan 15 09:54:45 2016
@@ -30,4 +30,4 @@ for.end:
}
; CHECK-NOT: Stmt_for_body
-; NONAFFINE: { Stmt_for_body[i0] -> MemRef_A[o0] : o0 >= -1152921504606846976 and o0 <= 1152921504606846973 };
+; NONAFFINE: { Stmt_for_body[i0] -> MemRef_A[o0] : -1152921504606846976 <= o0 <= 1152921504606846973 };
Modified: polly/trunk/test/ScopInfo/non_affine_region_1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/non_affine_region_1.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/non_affine_region_1.ll (original)
+++ polly/trunk/test/ScopInfo/non_affine_region_1.ll Fri Jan 15 09:54:45 2016
@@ -24,14 +24,14 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb3
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [b] -> { Stmt_bb3[i0] : i0 <= 1023 and i0 >= 0 and i0 <= -1 + b };
+; CHECK-NEXT: [b] -> { Stmt_bb3[i0] : 0 <= i0 <= 1023 and i0 < b };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [b] -> { Stmt_bb3[i0] -> [i0, 2] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: [b] -> { Stmt_bb3[i0] -> MemRef_x_1__phi[] };
; CHECK-NEXT: Stmt_bb7
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [b] -> { Stmt_bb7[i0] : i0 >= b and 2i0 >= 1 + b and i0 <= 1023 and i0 >= 0 };
+; CHECK-NEXT: [b] -> { Stmt_bb7[i0] : i0 >= b and 0 <= i0 <= 1023 and 2i0 > b };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [b] -> { Stmt_bb7[i0] -> [i0, 1] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -47,15 +47,15 @@
; CHECK-NEXT: [b] -> { Stmt_bb8[i0] -> MemRef_x_1__phi[] };
; CHECK-NEXT: Stmt_bb10__TO__bb18
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] : (i0 <= 1023 and i0 >= 0 and i0 <= -1 + b) or (i0 >= b and 2i0 >= 1 + b and i0 <= 1023 and i0 >= 0); Stmt_bb10__TO__bb18[0] : b = 0 };
+; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] : 0 <= i0 <= 1023 and (i0 < b or (i0 >= b and 2i0 > b)); Stmt_bb10__TO__bb18[0] : b = 0 };
; CHECK-NEXT: Schedule :=
-; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] -> [i0, 3] : i0 <= -1 + b or (i0 >= b and 2i0 >= 1 + b); Stmt_bb10__TO__bb18[0] -> [0, 3] : b = 0 };
+; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] -> [i0, 3] : i0 < b or (i0 >= b and 2i0 > b); Stmt_bb10__TO__bb18[0] -> [0, 3] : b = 0 };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] -> MemRef_x_1__phi[] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] -> MemRef_A[o0] : o0 >= -2147483648 and o0 <= 2147483645 };
+; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] -> MemRef_A[o0] : -2147483648 <= o0 <= 2147483645 };
; CHECK-NEXT: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
-; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] -> MemRef_A[o0] : o0 >= -2147483648 and o0 <= 2147483645 };
+; CHECK-NEXT: [b] -> { Stmt_bb10__TO__bb18[i0] -> MemRef_A[o0] : -2147483648 <= o0 <= 2147483645 };
; CHECK-NEXT: }
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
Modified: polly/trunk/test/ScopInfo/non_affine_region_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/non_affine_region_2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/non_affine_region_2.ll (original)
+++ polly/trunk/test/ScopInfo/non_affine_region_2.ll Fri Jan 15 09:54:45 2016
@@ -24,7 +24,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb3__TO__bb18
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] : i0 <= 1023 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] : 0 <= i0 <= 1023 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] -> [i0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -35,7 +35,7 @@
; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
; CHECK-NEXT: Stmt_bb18
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb18[i0] : i0 <= 1023 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb18[i0] : 0 <= i0 <= 1023 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb18[i0] -> [i0, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/non_affine_region_3.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/non_affine_region_3.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/non_affine_region_3.ll (original)
+++ polly/trunk/test/ScopInfo/non_affine_region_3.ll Fri Jan 15 09:54:45 2016
@@ -24,7 +24,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb3__TO__bb18
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] : i0 <= 1023 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] : 0 <= i0 <= 1023 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] -> [i0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -41,7 +41,7 @@
; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
; CHECK-NEXT: Stmt_bb18
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb18[i0] : i0 <= 1023 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb18[i0] : 0 <= i0 <= 1023 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb18[i0] -> [i0, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/non_affine_region_4.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/non_affine_region_4.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/non_affine_region_4.ll (original)
+++ polly/trunk/test/ScopInfo/non_affine_region_4.ll Fri Jan 15 09:54:45 2016
@@ -29,7 +29,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb2__TO__bb7
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb2__TO__bb7[i0] : i0 <= 1023 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb2__TO__bb7[i0] : 0 <= i0 <= 1023 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb2__TO__bb7[i0] -> [i0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -42,7 +42,7 @@
; CHECK-NEXT: { Stmt_bb2__TO__bb7[i0] -> MemRef_y__phi[] };
; CHECK-NEXT: Stmt_bb7
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb7[i0] : i0 <= 1023 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb7[i0] : 0 <= i0 <= 1023 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb7[i0] -> [i0, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/phi_condition_modeling_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/phi_condition_modeling_2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/phi_condition_modeling_2.ll (original)
+++ polly/trunk/test/ScopInfo/phi_condition_modeling_2.ll Fri Jan 15 09:54:45 2016
@@ -14,21 +14,21 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb6
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, c] -> { Stmt_bb6[i0] : i0 >= 1 + c and i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [N, c] -> { Stmt_bb6[i0] : i0 > c and 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, c] -> { Stmt_bb6[i0] -> [i0, 1] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: [N, c] -> { Stmt_bb6[i0] -> MemRef_tmp_0__phi[] };
; CHECK-NEXT: Stmt_bb7
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, c] -> { Stmt_bb7[i0] : i0 >= 0 and i0 <= c and i0 <= -1 + N };
+; CHECK-NEXT: [N, c] -> { Stmt_bb7[i0] : 0 <= i0 <= c and i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, c] -> { Stmt_bb7[i0] -> [i0, 0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: [N, c] -> { Stmt_bb7[i0] -> MemRef_tmp_0__phi[] };
; CHECK-NEXT: Stmt_bb8
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, c] -> { Stmt_bb8[i0] : i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [N, c] -> { Stmt_bb8[i0] : 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, c] -> { Stmt_bb8[i0] -> [i0, 2] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -37,7 +37,7 @@
; CHECK-NEXT: [N, c] -> { Stmt_bb8[i0] -> MemRef_tmp_0[] };
; CHECK-NEXT: Stmt_bb8b
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, c] -> { Stmt_bb8b[i0] : i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [N, c] -> { Stmt_bb8b[i0] : 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, c] -> { Stmt_bb8b[i0] -> [i0, 3] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/phi_loop_carried_float.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/phi_loop_carried_float.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/phi_loop_carried_float.ll (original)
+++ polly/trunk/test/ScopInfo/phi_loop_carried_float.ll Fri Jan 15 09:54:45 2016
@@ -9,16 +9,16 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb1
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_bb1[i0] : i0 >= 0 and i0 <= N; Stmt_bb1[0] : N <= -1 };
+; CHECK-NEXT: [N] -> { Stmt_bb1[i0] : 0 <= i0 <= N; Stmt_bb1[0] : N < 0 };
; CHECK-NEXT: Schedule :=
-; CHECK-NEXT: [N] -> { Stmt_bb1[i0] -> [i0, 0] : i0 <= N; Stmt_bb1[0] -> [0, 0] : N <= -1 };
+; CHECK-NEXT: [N] -> { Stmt_bb1[i0] -> [i0, 0] : i0 <= N; Stmt_bb1[0] -> [0, 0] : N < 0 };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: [N] -> { Stmt_bb1[i0] -> MemRef_tmp_0__phi[] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: [N] -> { Stmt_bb1[i0] -> MemRef_tmp_0[] };
; CHECK-NEXT: Stmt_bb4
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_bb4[i0] : i0 <= -1 + N and i0 >= 0 };
+; CHECK-NEXT: [N] -> { Stmt_bb4[i0] : 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_bb4[i0] -> [i0, 1] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/phi_scalar_simple_1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/phi_scalar_simple_1.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/phi_scalar_simple_1.ll (original)
+++ polly/trunk/test/ScopInfo/phi_scalar_simple_1.ll Fri Jan 15 09:54:45 2016
@@ -17,9 +17,9 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_cond
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_for_cond[i0] : N >= 2 and i0 >= 0 and i0 <= -1 + N; Stmt_for_cond[0] : N <= 1 };
+; CHECK-NEXT: [N] -> { Stmt_for_cond[i0] : N >= 2 and 0 <= i0 < N; Stmt_for_cond[0] : N <= 1 };
; CHECK-NEXT: Schedule :=
-; CHECK-NEXT: [N] -> { Stmt_for_cond[i0] -> [i0, 0, 0, 0] : N >= 2 and i0 <= -1 + N; Stmt_for_cond[0] -> [0, 0, 0, 0] : N <= 1 };
+; CHECK-NEXT: [N] -> { Stmt_for_cond[i0] -> [i0, 0, 0, 0] : N >= 2 and i0 < N; Stmt_for_cond[0] -> [0, 0, 0, 0] : N <= 1 };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: [N] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0__phi[] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -28,7 +28,7 @@
; CHECK-NEXT: [N] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] };
; CHECK-NEXT: Stmt_for_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_for_body[i0] : i0 <= -2 + N and i0 >= 0 and N >= 2 };
+; CHECK-NEXT: [N] -> { Stmt_for_body[i0] : N >= 2 and 0 <= i0 <= -2 + N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_for_body[i0] -> [i0, 1, 0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -37,7 +37,7 @@
; CHECK-NEXT: [N] -> { Stmt_for_body[i0] -> MemRef_x_addr_1__phi[] };
; CHECK-NEXT: Stmt_for_cond1
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_for_cond1[i0, i1] : i0 >= 0 and i0 <= -2 + N and i1 >= 0 and i1 <= -3 + N };
+; CHECK-NEXT: [N] -> { Stmt_for_cond1[i0, i1] : 0 <= i0 <= -2 + N and 0 <= i1 <= -3 + N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_for_cond1[i0, i1] -> [i0, 2, i1, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -48,7 +48,7 @@
; CHECK-NEXT: [N] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1_lcssa__phi[] };
; CHECK-NEXT: Stmt_for_inc
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_for_inc[i0, i1] : i0 >= 0 and i0 <= -2 + N and i1 >= 0 and i1 <= -4 + N };
+; CHECK-NEXT: [N] -> { Stmt_for_inc[i0, i1] : 0 <= i0 <= -2 + N and 0 <= i1 <= -4 + N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_for_inc[i0, i1] -> [i0, 2, i1, 1] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -59,7 +59,7 @@
; CHECK-NEXT: [N] -> { Stmt_for_inc[i0, i1] -> MemRef_A[1 + i0] };
; CHECK-NEXT: Stmt_for_end
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_for_end[i0] : N >= 3 and i0 >= 0 and i0 <= -2 + N };
+; CHECK-NEXT: [N] -> { Stmt_for_end[i0] : N >= 3 and 0 <= i0 <= -2 + N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_for_end[i0] -> [i0, 3, 0, 0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -68,7 +68,7 @@
; CHECK-NEXT: [N] -> { Stmt_for_end[i0] -> MemRef_x_addr_1_lcssa__phi[] };
; CHECK-NEXT: Stmt_for_inc4
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_for_inc4[i0] : N >= 3 and i0 >= 0 and i0 <= -2 + N };
+; CHECK-NEXT: [N] -> { Stmt_for_inc4[i0] : N >= 3 and 0 <= i0 <= -2 + N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_for_inc4[i0] -> [i0, 4, 0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/phi_scalar_simple_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/phi_scalar_simple_2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/phi_scalar_simple_2.ll (original)
+++ polly/trunk/test/ScopInfo/phi_scalar_simple_2.ll Fri Jan 15 09:54:45 2016
@@ -11,9 +11,9 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_cond
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, c] -> { Stmt_for_cond[i0] : i0 >= 0 and i0 <= N; Stmt_for_cond[0] : N <= -1 };
+; CHECK-NEXT: [N, c] -> { Stmt_for_cond[i0] : 0 <= i0 <= N; Stmt_for_cond[0] : N < 0 };
; CHECK-NEXT: Schedule :=
-; CHECK-NEXT: [N, c] -> { Stmt_for_cond[i0] -> [i0, 0, 0, 0] : i0 <= N; Stmt_for_cond[0] -> [0, 0, 0, 0] : N <= -1 };
+; CHECK-NEXT: [N, c] -> { Stmt_for_cond[i0] -> [i0, 0, 0, 0] : i0 <= N; Stmt_for_cond[0] -> [0, 0, 0, 0] : N < 0 };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
; CHECK-NEXT: [N, c] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0__phi[] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -24,7 +24,7 @@
; CHECK-NEXT: [N, c] -> { Stmt_for_cond[i0] -> MemRef_x_addr_0[] };
; CHECK-NEXT: Stmt_for_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, c] -> { Stmt_for_body[i0] : i0 <= -1 + N and i0 >= 0 };
+; CHECK-NEXT: [N, c] -> { Stmt_for_body[i0] : 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, c] -> { Stmt_for_body[i0] -> [i0, 1, 0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -33,7 +33,7 @@
; CHECK-NEXT: [N, c] -> { Stmt_for_body[i0] -> MemRef_x_addr_1__phi[] };
; CHECK-NEXT: Stmt_for_cond1
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, c] -> { Stmt_for_cond1[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= N };
+; CHECK-NEXT: [N, c] -> { Stmt_for_cond1[i0, i1] : 0 <= i0 < N and 0 <= i1 <= N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, c] -> { Stmt_for_cond1[i0, i1] -> [i0, 2, i1, 0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -46,7 +46,7 @@
; CHECK-NEXT: [N, c] -> { Stmt_for_cond1[i0, i1] -> MemRef_x_addr_1[] };
; CHECK-NEXT: Stmt_for_body3
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, c] -> { Stmt_for_body3[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
+; CHECK-NEXT: [N, c] -> { Stmt_for_body3[i0, i1] : 0 <= i0 < N and 0 <= i1 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, c] -> { Stmt_for_body3[i0, i1] -> [i0, 2, i1, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -55,7 +55,7 @@
; CHECK-NEXT: [N, c] -> { Stmt_for_body3[i0, i1] -> MemRef_x_addr_2__phi[] };
; CHECK-NEXT: Stmt_if_then
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, c] -> { Stmt_if_then[i0, i1] : i0 >= 0 and i0 <= -1 + c and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
+; CHECK-NEXT: [N, c] -> { Stmt_if_then[i0, i1] : 0 <= i0 < c and i0 < N and 0 <= i1 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, c] -> { Stmt_if_then[i0, i1] -> [i0, 2, i1, 2] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -66,7 +66,7 @@
; CHECK-NEXT: [N, c] -> { Stmt_if_then[i0, i1] -> MemRef_x_addr_2__phi[] };
; CHECK-NEXT: Stmt_if_end
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, c] -> { Stmt_if_end[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
+; CHECK-NEXT: [N, c] -> { Stmt_if_end[i0, i1] : 0 <= i0 < N and 0 <= i1 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, c] -> { Stmt_if_end[i0, i1] -> [i0, 2, i1, 3] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -75,7 +75,7 @@
; CHECK-NEXT: [N, c] -> { Stmt_if_end[i0, i1] -> MemRef_x_addr_2__phi[] };
; CHECK-NEXT: Stmt_for_inc
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, c] -> { Stmt_for_inc[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
+; CHECK-NEXT: [N, c] -> { Stmt_for_inc[i0, i1] : 0 <= i0 < N and 0 <= i1 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, c] -> { Stmt_for_inc[i0, i1] -> [i0, 2, i1, 4] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -84,7 +84,7 @@
; CHECK-NEXT: [N, c] -> { Stmt_for_inc[i0, i1] -> MemRef_x_addr_1__phi[] };
; CHECK-NEXT: Stmt_for_inc5
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N, c] -> { Stmt_for_inc5[i0] : i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [N, c] -> { Stmt_for_inc5[i0] : 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N, c] -> { Stmt_for_inc5[i0] -> [i0, 3, 0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/pointer-used-as-base-pointer-and-scalar-read.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/pointer-used-as-base-pointer-and-scalar-read.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/pointer-used-as-base-pointer-and-scalar-read.ll (original)
+++ polly/trunk/test/ScopInfo/pointer-used-as-base-pointer-and-scalar-read.ll Fri Jan 15 09:54:45 2016
@@ -23,7 +23,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_then
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [p] -> { Stmt_then[i0] : p = 32 and i0 <= 999 and i0 >= 0 };
+; CHECK-NEXT: [p] -> { Stmt_then[i0] : p = 32 and 0 <= i0 <= 999 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [p] -> { Stmt_then[i0] -> [i0, 1] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -34,7 +34,7 @@
; CHECK-NEXT: [p] -> { Stmt_then[i0] -> MemRef_x__phi[] };
; CHECK-NEXT: Stmt_else
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [p] -> { Stmt_else[i0] : (p >= 33 and i0 <= 999 and i0 >= 0) or (p <= 31 and i0 <= 999 and i0 >= 0) };
+; CHECK-NEXT: [p] -> { Stmt_else[i0] : 0 <= i0 <= 999 and (p >= 33 or p <= 31) };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [p] -> { Stmt_else[i0] -> [i0, 0] : p >= 33 or p <= 31 };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -45,7 +45,7 @@
; CHECK-NEXT: [p] -> { Stmt_else[i0] -> MemRef_x__phi[] };
; CHECK-NEXT: Stmt_bb8
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [p] -> { Stmt_bb8[i0] : (p >= 33 and i0 <= 999 and i0 >= 0) or (p <= 32 and i0 <= 999 and i0 >= 0) };
+; CHECK-NEXT: [p] -> { Stmt_bb8[i0] : 0 <= i0 <= 999 and (p >= 33 or p <= 32) };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [p] -> { Stmt_bb8[i0] -> [i0, 2] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/ranged_parameter.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/ranged_parameter.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/ranged_parameter.ll (original)
+++ polly/trunk/test/ScopInfo/ranged_parameter.ll Fri Jan 15 09:54:45 2016
@@ -4,11 +4,7 @@
; range metadata (see bottom of the file) are present:
;
; CHECK: Context:
-; CHECK: [p_0] -> { :
-; CHECK-DAG: p_0 >= 0
-; CHECK-DAG: and
-; CHECK-DAG: p_0 <= 255
-; CHECK: }
+; CHECK: [p_0] -> { : 0 <= p_0 <= 255 }
;
; void jd(int *A, int *p /* in [0,256) */) {
; for (int i = 0; i < 1024; i++)
Modified: polly/trunk/test/ScopInfo/ranged_parameter_wrap.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/ranged_parameter_wrap.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/ranged_parameter_wrap.ll (original)
+++ polly/trunk/test/ScopInfo/ranged_parameter_wrap.ll Fri Jan 15 09:54:45 2016
@@ -4,7 +4,7 @@
; __wrapping__ range metadata (see bottom of the file) are present:
;
; CHECK: Context:
-; CHECK: [tmp] -> { : tmp >= 256 or tmp <= -1 }
+; CHECK: [tmp] -> { : tmp >= 256 or tmp < 0 }
;
; void jd(int *A, int *p /* in [256, 0) */) {
; for (int i = 0; i < 1024; i++)
Modified: polly/trunk/test/ScopInfo/read-only-scalar-used-in-phi.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/read-only-scalar-used-in-phi.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/read-only-scalar-used-in-phi.ll (original)
+++ polly/trunk/test/ScopInfo/read-only-scalar-used-in-phi.ll Fri Jan 15 09:54:45 2016
@@ -23,7 +23,7 @@
; CHECK-NEXT: { Stmt_next[] -> MemRef_phisummerge[] };
; CHECK-NEXT: Stmt_bb1
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_bb1[i0] : i0 <= 100 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_bb1[i0] : 0 <= i0 <= 100 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_bb1[i0] -> [1, i0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/read-only-statements.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/read-only-statements.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/read-only-statements.ll (original)
+++ polly/trunk/test/ScopInfo/read-only-statements.ll Fri Jan 15 09:54:45 2016
@@ -5,7 +5,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_body_2
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: { Stmt_for_body_2[i0] : i0 <= 99 and i0 >= 0 };
+; CHECK-NEXT: { Stmt_for_body_2[i0] : 0 <= i0 <= 99 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: { Stmt_for_body_2[i0] -> [i0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/remarks.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/remarks.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/remarks.ll (original)
+++ polly/trunk/test/ScopInfo/remarks.ll Fri Jan 15 09:54:45 2016
@@ -2,9 +2,9 @@
;
; CHECK: remark: test/ScopInfo/remarks.c:4:7: SCoP begins here.
; CHECK: remark: test/ScopInfo/remarks.c:8:5: Finite loop assumption: [M, N, Debug] -> { : M >= 0 or (M <= -2 and N <= 0) or (M = -1 and N <= 0) }
-; CHECK: remark: test/ScopInfo/remarks.c:13:7: No-error assumption: [M, N, Debug] -> { : M <= -1 or (M >= 0 and N <= 0) or (Debug = 0 and M >= 0 and N >= 1) }
-; CHECK: remark: test/ScopInfo/remarks.c:9:7: Inbounds assumption: [M, N, Debug] -> { : M <= 100 or (M >= 1 and N <= 0) }
-; CHECK: remark: <unknown>:0:0: No-overflows assumption: [N, M, Debug] -> { : M <= 2147483647 - N and M >= -2147483648 - N }
+; CHECK: remark: test/ScopInfo/remarks.c:13:7: No-error assumption: [M, N, Debug] -> { : M < 0 or (M >= 0 and N <= 0) or (Debug = 0 and M >= 0 and N > 0) }
+; CHECK: remark: test/ScopInfo/remarks.c:9:7: Inbounds assumption: [M, N, Debug] -> { : M <= 100 or (M > 0 and N <= 0) }
+; CHECK: remark: <unknown>:0:0: No-overflows assumption: [N, M, Debug] -> { : -2147483648 - N <= M <= 2147483647 - N }
; CHECK: remark: test/ScopInfo/remarks.c:9:18: Possibly aliasing pointer, use restrict keyword.
; CHECK: remark: test/ScopInfo/remarks.c:9:33: Possibly aliasing pointer, use restrict keyword.
; CHECK: remark: test/ScopInfo/remarks.c:9:15: Possibly aliasing pointer, use restrict keyword.
Modified: polly/trunk/test/ScopInfo/scalar.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/scalar.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/scalar.ll (original)
+++ polly/trunk/test/ScopInfo/scalar.ll Fri Jan 15 09:54:45 2016
@@ -43,7 +43,7 @@ return:
; CHECK: Statements {
; CHECK-NEXT: Stmt_S1
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_S1[i0] : i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [N] -> { Stmt_S1[i0] : 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_S1[i0] -> [i0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -52,7 +52,7 @@ return:
; CHECK-NEXT: [N] -> { Stmt_S1[i0] -> MemRef_val[] };
; CHECK-NEXT: Stmt_S2
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_S2[i0] : i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [N] -> { Stmt_S2[i0] : 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_S2[i0] -> [i0, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/simple_loop_1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/simple_loop_1.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/simple_loop_1.ll (original)
+++ polly/trunk/test/ScopInfo/simple_loop_1.ll Fri Jan 15 09:54:45 2016
@@ -35,7 +35,7 @@ return:
; CHECK: Statements {
; CHECK-NEXT: Stmt_bb
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_bb[i0] : i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [N] -> { Stmt_bb[i0] : 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_bb[i0] -> [i0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/switch-1.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-1.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-1.ll (original)
+++ polly/trunk/test/ScopInfo/switch-1.ll Fri Jan 15 09:54:45 2016
@@ -21,7 +21,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_sw_bb_1
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((-1 + i0)/4): 4e0 = -1 + i0 and i0 >= 1 and i0 <= -1 + N) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb_1[i0] : 4*floor((-1 + i0)/4) = -1 + i0 and 0 < i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb_1[i0] -> [i0, 2] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
@@ -30,7 +30,7 @@
; CHECK-NEXT: [N] -> { Stmt_sw_bb_1[i0] -> MemRef_A[i0] };
; CHECK-NEXT: Stmt_sw_bb_2
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb_2[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb_2[i0] : 4*floor((-2 + i0)/4) = -2 + i0 and 2 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb_2[i0] -> [i0, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
@@ -39,7 +39,7 @@
; CHECK-NEXT: [N] -> { Stmt_sw_bb_2[i0] -> MemRef_A[i0] };
; CHECK-NEXT: Stmt_sw_bb_6
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb_6[i0] : exists (e0 = floor((-3 + i0)/4): 4e0 = -3 + i0 and i0 >= 0 and i0 <= -1 + N) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb_6[i0] : 4*floor((-3 + i0)/4) = -3 + i0 and 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb_6[i0] -> [i0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/switch-2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-2.ll (original)
+++ polly/trunk/test/ScopInfo/switch-2.ll Fri Jan 15 09:54:45 2016
@@ -20,7 +20,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_sw_bb
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] : 4*floor((i0)/4) = i0 and 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] -> [i0, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
@@ -29,7 +29,7 @@
; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] -> MemRef_A[i0] };
; CHECK-NEXT: Stmt_sw_bb_2
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb_2[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb_2[i0] : 4*floor((-2 + i0)/4) = -2 + i0 and 2 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb_2[i0] -> [i0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/switch-3.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-3.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-3.ll (original)
+++ polly/trunk/test/ScopInfo/switch-3.ll Fri Jan 15 09:54:45 2016
@@ -20,7 +20,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_sw_bb
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] : 4*floor((i0)/4) = i0 and 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] -> [i0, 2] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
@@ -29,7 +29,7 @@
; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] -> MemRef_A[i0] };
; CHECK-NEXT: Stmt_sw_bb_1
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((2 + i0)/4): i0 >= 0 and i0 <= -1 + N and 4e0 >= -1 + i0 and 4e0 <= i0) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb_1[i0] : 0 <= i0 < N and 4*floor((2 + i0)/4) <= i0 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb_1[i0] -> [i0, 3] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
@@ -38,7 +38,7 @@
; CHECK-NEXT: [N] -> { Stmt_sw_bb_1[i0] -> MemRef_A[i0] };
; CHECK-NEXT: Stmt_sw_bb_5
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb_5[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb_5[i0] : 4*floor((-2 + i0)/4) = -2 + i0 and 2 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb_5[i0] -> [i0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
@@ -47,7 +47,7 @@
; CHECK-NEXT: [N] -> { Stmt_sw_bb_5[i0] -> MemRef_A[i0] };
; CHECK-NEXT: Stmt_sw_bb_9
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb_9[i0] : exists (e0 = floor((i0)/4): i0 >= 0 and i0 <= -1 + N and 4e0 >= -3 + i0 and 4e0 <= -2 + i0) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb_9[i0] : 0 <= i0 < N and 4*floor((i0)/4) <= -2 + i0 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb_9[i0] -> [i0, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/switch-4.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-4.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-4.ll (original)
+++ polly/trunk/test/ScopInfo/switch-4.ll Fri Jan 15 09:54:45 2016
@@ -24,7 +24,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_sw_bb
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] : exists (e0 = floor((i0)/4): 4e0 = i0 and i0 >= 0 and i0 <= -1 + N) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] : 4*floor((i0)/4) = i0 and 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] -> [i0, 3] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
@@ -33,7 +33,7 @@
; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] -> MemRef_A[i0] };
; CHECK-NEXT: Stmt_sw_bb_1
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb_1[i0] : exists (e0 = floor((-1 + i0)/4): 4e0 = -1 + i0 and i0 >= 1 and i0 <= -1 + N) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb_1[i0] : 4*floor((-1 + i0)/4) = -1 + i0 and 0 < i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb_1[i0] -> [i0, 2] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
@@ -42,7 +42,7 @@
; CHECK-NEXT: [N] -> { Stmt_sw_bb_1[i0] -> MemRef_A[i0] };
; CHECK-NEXT: Stmt_sw_bb_5
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb_5[i0] : exists (e0 = floor((-2 + i0)/4): 4e0 = -2 + i0 and i0 >= 2 and i0 <= -1 + N) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb_5[i0] : 4*floor((-2 + i0)/4) = -2 + i0 and 2 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb_5[i0] -> [i0, 1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
@@ -51,7 +51,7 @@
; CHECK-NEXT: [N] -> { Stmt_sw_bb_5[i0] -> MemRef_A[i0] };
; CHECK-NEXT: Stmt_sw_bb_9
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb_9[i0] : exists (e0 = floor((-3 + i0)/4): 4e0 = -3 + i0 and i0 >= 0 and i0 <= -1 + N) };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb_9[i0] : 4*floor((-3 + i0)/4) = -3 + i0 and 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb_9[i0] -> [i0, 0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
@@ -71,9 +71,9 @@
; AST-NEXT: }
; AST-NEXT: if (N >= 1)
; AST-NEXT: if (N % 4 >= 1) {
-; AST-NEXT: Stmt_sw_bb(-((N - 1) % 4) + N - 1);
+; AST-NEXT: Stmt_sw_bb(-(N % 4) + N);
; AST-NEXT: if (N % 4 >= 2) {
-; AST-NEXT: Stmt_sw_bb_1(-((N - 1) % 4) + N);
+; AST-NEXT: Stmt_sw_bb_1(-(N % 4) + N + 1);
; AST-NEXT: if ((N - 3) % 4 == 0)
; AST-NEXT: Stmt_sw_bb_5(N - 1);
; AST-NEXT: }
Modified: polly/trunk/test/ScopInfo/switch-5.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-5.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-5.ll (original)
+++ polly/trunk/test/ScopInfo/switch-5.ll Fri Jan 15 09:54:45 2016
@@ -17,7 +17,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_for_body[0] : N >= 1 };
+; CHECK-NEXT: [N] -> { Stmt_for_body[0] : N > 0 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_for_body[i0] -> [0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/switch-6.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-6.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-6.ll (original)
+++ polly/trunk/test/ScopInfo/switch-6.ll Fri Jan 15 09:54:45 2016
@@ -24,7 +24,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_sw_bb
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_sw_bb[0] : N >= 1 };
+; CHECK-NEXT: [N] -> { Stmt_sw_bb[0] : N > 0 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_sw_bb[i0] -> [0, 3] };
; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/switch-7.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/switch-7.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/switch-7.ll (original)
+++ polly/trunk/test/ScopInfo/switch-7.ll Fri Jan 15 09:54:45 2016
@@ -20,7 +20,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_body
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [c, N] -> { Stmt_for_body[i0] : c = -1 and i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [c, N] -> { Stmt_for_body[i0] : c = -1 and 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [c, N] -> { Stmt_for_body[i0] -> [1, i0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -31,7 +31,7 @@
; CHECK-NEXT: [c, N] -> { Stmt_for_body[i0] -> MemRef_A[N - i0] };
; CHECK-NEXT: Stmt_for_body_7
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [c, N] -> { Stmt_for_body_7[i0] : c = 1 and i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [c, N] -> { Stmt_for_body_7[i0] : c = 1 and 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [c, N] -> { Stmt_for_body_7[i0] -> [0, i0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/tempscop-printing.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/tempscop-printing.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/tempscop-printing.ll (original)
+++ polly/trunk/test/ScopInfo/tempscop-printing.ll Fri Jan 15 09:54:45 2016
@@ -16,7 +16,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_j
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_for_j[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
+; CHECK-NEXT: [N] -> { Stmt_for_j[i0, i1] : 0 <= i0 < N and 0 <= i1 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
@@ -30,7 +30,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_for_j
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_for_j[i0, i1] : i0 >= 0 and i0 <= -1 + N and i1 >= 0 and i1 <= -1 + N };
+; CHECK-NEXT: [N] -> { Stmt_for_j[i0, i1] : 0 <= i0 < N and 0 <= i1 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_for_j[i0, i1] -> [i0, i1] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
Modified: polly/trunk/test/ScopInfo/two-loops-right-after-each-other.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/two-loops-right-after-each-other.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/two-loops-right-after-each-other.ll (original)
+++ polly/trunk/test/ScopInfo/two-loops-right-after-each-other.ll Fri Jan 15 09:54:45 2016
@@ -4,7 +4,7 @@
; CHECK: Statements {
; CHECK-NEXT: Stmt_loop_1
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_loop_1[i0] : N <= 100 and i0 <= 101 and i0 >= 0 };
+; CHECK-NEXT: [N] -> { Stmt_loop_1[i0] : N <= 100 and 0 <= i0 <= 101 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_loop_1[i0] -> [0, i0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
@@ -13,7 +13,7 @@
; CHECK-NEXT: [N] -> { Stmt_loop_1[i0] -> MemRef_A[0] };
; CHECK-NEXT: Stmt_loop_2
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [N] -> { Stmt_loop_2[i0] : N <= 100 and i0 <= 301 and i0 >= 0 };
+; CHECK-NEXT: [N] -> { Stmt_loop_2[i0] : N <= 100 and 0 <= i0 <= 301 };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [N] -> { Stmt_loop_2[i0] -> [1, i0] };
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/unsigned-condition.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/unsigned-condition.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/unsigned-condition.ll (original)
+++ polly/trunk/test/ScopInfo/unsigned-condition.ll Fri Jan 15 09:54:45 2016
@@ -39,7 +39,7 @@ return:
; CHECK: Statements {
; CHECK-NEXT: Stmt_store
; CHECK-NEXT: Domain :=
-; CHECK-NEXT: [P, N] -> { Stmt_store[i0] : P >= 42 and i0 >= 0 and i0 <= -1 + N };
+; CHECK-NEXT: [P, N] -> { Stmt_store[i0] : P >= 42 and 0 <= i0 < N };
; CHECK-NEXT: Schedule :=
; CHECK-NEXT: [P, N] -> { Stmt_store[i0] -> [i0] };
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
Modified: polly/trunk/test/ScopInfo/user_context.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/user_context.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/user_context.ll (original)
+++ polly/trunk/test/ScopInfo/user_context.ll Fri Jan 15 09:54:45 2016
@@ -10,7 +10,7 @@
; }
; CHECK: Context:
-; CHECK-NEXT: [N] -> { : N <= 9223372036854775807 and N >= -9223372036854775808 }
+; CHECK-NEXT: [N] -> { : -9223372036854775808 <= N <= 9223372036854775807 }
; CTX: Context:
; CTX-NEXT: [N] -> { : N = 1024 }
Modified: polly/trunk/test/ScopInfo/user_provided_assumptions.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/user_provided_assumptions.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/user_provided_assumptions.ll (original)
+++ polly/trunk/test/ScopInfo/user_provided_assumptions.ll Fri Jan 15 09:54:45 2016
@@ -3,13 +3,13 @@
;
; CHECK: remark: <unknown>:0:0: SCoP begins here.
; CHECK-NEXT: remark: <unknown>:0:0: Use user assumption: [M, N] -> { : N <= 2147483647 - M }
-; CHECK-NEXT: remark: <unknown>:0:0: Use user assumption: [M, N] -> { : N >= -2147483648 - M and N <= 2147483647 - M }
-; CHECK-NEXT: remark: <unknown>:0:0: Use user assumption: [M, N, Debug] -> { : Debug = 0 and M <= 100 and M >= 1 and N <= 2147483647 - M and N >= -2147483648 - M }
-; CHECK-NEXT: remark: <unknown>:0:0: Use user assumption: [M, N, Debug] -> { : Debug = 0 and N >= -2147483648 - M and N <= 2147483647 - M and M <= 100 and M >= 1 and N >= 1 }
+; CHECK-NEXT: remark: <unknown>:0:0: Use user assumption: [M, N] -> { : -2147483648 - M <= N <= 2147483647 - M }
+; CHECK-NEXT: remark: <unknown>:0:0: Use user assumption: [M, N, Debug] -> { : Debug = 0 and 0 < M <= 100 and -2147483648 - M <= N <= 2147483647 - M }
+; CHECK-NEXT: remark: <unknown>:0:0: Use user assumption: [M, N, Debug] -> { : Debug = 0 and 0 < M <= 100 and N > 0 and -2147483648 - M <= N <= 2147483647 - M }
; CHECK-NEXT: remark: <unknown>:0:0: SCoP ends here.
; SCOP: Context:
-; SCOP-NEXT: [N, M, Debug] -> { : Debug = 0 and N >= 1 and M <= 2147483647 - N and M <= 100 and M >= 1 }
+; SCOP-NEXT: [N, M, Debug] -> { : Debug = 0 and N > 0 and 0 < M <= 2147483647 - N and M <= 100 }
; SCOP: Assumed Context:
; SCOP-NEXT: [N, M, Debug] -> { : }
; SCOP: Boundary Context:
Modified: polly/trunk/test/ScopInfo/user_provided_non_dominating_assumptions.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/user_provided_non_dominating_assumptions.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/user_provided_non_dominating_assumptions.ll (original)
+++ polly/trunk/test/ScopInfo/user_provided_non_dominating_assumptions.ll Fri Jan 15 09:54:45 2016
@@ -1,8 +1,8 @@
; RUN: opt %loadPolly -pass-remarks-analysis="polly-scops" -polly-scops -disable-output < %s 2>&1 | FileCheck %s
;
; CHECK: remark: <unknown>:0:0: SCoP begins here.
-; CHECK-NEXT: remark: <unknown>:0:0: Inbounds assumption: [i, N, p_2] -> { : N <= i or (N >= 1 + i and p_2 <= 100) }
-; CHECK-NEXT: remark: <unknown>:0:0: Inbounds assumption: [i, N, p_2, M] -> { : N <= i or (N >= 1 + i and p_2 <= 0) or (N >= 1 + i and p_2 >= 1 and M >= p_2) }
+; CHECK-NEXT: remark: <unknown>:0:0: Inbounds assumption: [i, N, p_2] -> { : N <= i or (N > i and p_2 <= 100) }
+; CHECK-NEXT: remark: <unknown>:0:0: Inbounds assumption: [i, N, p_2, M] -> { : N <= i or (N > i and p_2 <= 0) or (N > i and p_2 > 0 and M >= p_2) }
; CHECK-NEXT: remark: <unknown>:0:0: SCoP ends here.
;
; void f(int *restrict A, int *restrict B, int i, int N, int M, int C[100][100]) {
Modified: polly/trunk/test/ScopInfo/wraping_signed_expr_2.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/wraping_signed_expr_2.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/wraping_signed_expr_2.ll (original)
+++ polly/trunk/test/ScopInfo/wraping_signed_expr_2.ll Fri Jan 15 09:54:45 2016
@@ -13,7 +13,7 @@
; CHECK: Function: wrap
;
; CHECK: Context:
-; CHECK-NEXT: [N] -> { : N <= 2147483647 and N >= -2147483648 }
+; CHECK-NEXT: [N] -> { : -2147483648 <= N <= 2147483647 }
;
; CHECK: Boundary Context:
; CHECK-NEXT: [N] -> { : N <= 2147483618 }
Modified: polly/trunk/test/ScopInfo/wraping_signed_expr_4.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/wraping_signed_expr_4.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/wraping_signed_expr_4.ll (original)
+++ polly/trunk/test/ScopInfo/wraping_signed_expr_4.ll Fri Jan 15 09:54:45 2016
@@ -8,7 +8,7 @@
; CHECK: Function: wrap
;
; CHECK: Context:
-; CHECK-NEXT: [N, p] -> { : N <= 127 and N >= -128 and p <= 127 and p >= -128 }
+; CHECK-NEXT: [N, p] -> { : -128 <= N <= 127 and -128 <= p <= 127 }
;
; CHECK: Boundary Context:
; CHECK-NEXT: [N, p] -> { : p >= -127 }
Modified: polly/trunk/test/ScopInfo/wraping_signed_expr_5.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/wraping_signed_expr_5.ll?rev=257898&r1=257897&r2=257898&view=diff
==============================================================================
--- polly/trunk/test/ScopInfo/wraping_signed_expr_5.ll (original)
+++ polly/trunk/test/ScopInfo/wraping_signed_expr_5.ll Fri Jan 15 09:54:45 2016
@@ -4,7 +4,7 @@
; to overflow. However (p + q) can, thus checks are needed.
;
; CHECK: Boundary Context:
-; CHECK-NEXT: [r1, r2, q, p] -> { : r2 <= 127 + r1 and p <= 2147483647 - q and p >= -2147483648 - q }
+; CHECK-NEXT: [r1, r2, q, p] -> { : r2 <= 127 + r1 and -2147483648 - q <= p <= 2147483647 - q }
;
; void wraps(int *A, int p, short q, char r1, char r2) {
; for (char i = r1; i < r2; i++)
More information about the llvm-commits
mailing list