Update isl to isl-0.18-9-gd4734f3
authorTobias Grosser <tobias@grosser.es>
Thu, 22 Dec 2016 23:08:57 +0000 (23:08 +0000)
committerTobias Grosser <tobias@grosser.es>
Thu, 22 Dec 2016 23:08:57 +0000 (23:08 +0000)
llvm-svn: 290389

22 files changed:
polly/lib/External/isl/AUTHORS
polly/lib/External/isl/ChangeLog
polly/lib/External/isl/GIT_HEAD_ID
polly/lib/External/isl/config.guess
polly/lib/External/isl/config.sub
polly/lib/External/isl/configure
polly/lib/External/isl/configure.ac
polly/lib/External/isl/doc/manual.pdf
polly/lib/External/isl/include/isl/ast_build.h
polly/lib/External/isl/isl_affine_hull.c
polly/lib/External/isl/isl_coalesce.c
polly/lib/External/isl/isl_convex_hull.c
polly/lib/External/isl/isl_equalities.c
polly/lib/External/isl/isl_map.c
polly/lib/External/isl/isl_output.c
polly/lib/External/isl/isl_schedule_tree.c
polly/lib/External/isl/isl_scheduler.c
polly/lib/External/isl/isl_tab.c
polly/lib/External/isl/isl_tab.h
polly/lib/External/isl/isl_test.c
polly/lib/External/isl/ltmain.sh
polly/lib/External/isl/m4/libtool.m4

index 671a241..975d5b6 100644 (file)
@@ -23,7 +23,7 @@ isl was written by
            Domaine de Voluceau - Rocquencourt, B.P. 105
            78153 Le Chesnay
            France
-2015       Polly Labs
+2015-2016   Polly Labs
 
 Contributions by
 
@@ -38,6 +38,7 @@ Andreas Kloeckner
 Michael Kruse
 Sebastian Pop
 Louis-Noel Pouchet
+Benoit Pradelle
 Uday Kumar Reddy
 Andreas Simbuerger
 Sven van Haastregt
index 14ff1b4..249acdf 100644 (file)
@@ -1,3 +1,13 @@
+version: 0.18
+date: Sun Dec 18 11:01:58 CET 2016
+changes:
+       - improve elimination of redundant existentially quantified variables
+       - improve coalescing
+       - improve parametric integer programming
+       - preserve isolate option in isl_schedule_node_band_split
+       - print AST nodes in YAML format
+       - minor improvements to Python bindings
+---
 version: 0.17.1
 date: Fri May  6 12:02:48 CEST 2016
 changes:
index 1659250..0967f2a 100755 (executable)
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2015 Free Software Foundation, Inc.
+#   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2015-08-20'
+timestamp='2016-04-02'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -27,7 +27,7 @@ timestamp='2015-08-20'
 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 #
 # Please send patches to <config-patches@gnu.org>.
 
@@ -50,7 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2015 Free Software Foundation, Inc.
+Copyright 1992-2016 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -237,6 +237,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
        echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
        exit ;;
+    *:LibertyBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+       echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+       exit ;;
     *:ekkoBSD:*:*)
        echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
        exit ;;
@@ -268,42 +272,42 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
        case "$ALPHA_CPU_TYPE" in
            "EV4 (21064)")
-               UNAME_MACHINE="alpha" ;;
+               UNAME_MACHINE=alpha ;;
            "EV4.5 (21064)")
-               UNAME_MACHINE="alpha" ;;
+               UNAME_MACHINE=alpha ;;
            "LCA4 (21066/21068)")
-               UNAME_MACHINE="alpha" ;;
+               UNAME_MACHINE=alpha ;;
            "EV5 (21164)")
-               UNAME_MACHINE="alphaev5" ;;
+               UNAME_MACHINE=alphaev5 ;;
            "EV5.6 (21164A)")
-               UNAME_MACHINE="alphaev56" ;;
+               UNAME_MACHINE=alphaev56 ;;
            "EV5.6 (21164PC)")
-               UNAME_MACHINE="alphapca56" ;;
+               UNAME_MACHINE=alphapca56 ;;
            "EV5.7 (21164PC)")
-               UNAME_MACHINE="alphapca57" ;;
+               UNAME_MACHINE=alphapca57 ;;
            "EV6 (21264)")
-               UNAME_MACHINE="alphaev6" ;;
+               UNAME_MACHINE=alphaev6 ;;
            "EV6.7 (21264A)")
-               UNAME_MACHINE="alphaev67" ;;
+               UNAME_MACHINE=alphaev67 ;;
            "EV6.8CB (21264C)")
-               UNAME_MACHINE="alphaev68" ;;
+               UNAME_MACHINE=alphaev68 ;;
            "EV6.8AL (21264B)")
-               UNAME_MACHINE="alphaev68" ;;
+               UNAME_MACHINE=alphaev68 ;;
            "EV6.8CX (21264D)")
-               UNAME_MACHINE="alphaev68" ;;
+               UNAME_MACHINE=alphaev68 ;;
            "EV6.9A (21264/EV69A)")
-               UNAME_MACHINE="alphaev69" ;;
+               UNAME_MACHINE=alphaev69 ;;
            "EV7 (21364)")
-               UNAME_MACHINE="alphaev7" ;;
+               UNAME_MACHINE=alphaev7 ;;
            "EV7.9 (21364A)")
-               UNAME_MACHINE="alphaev79" ;;
+               UNAME_MACHINE=alphaev79 ;;
        esac
        # A Pn.n version is a patched version.
        # A Vn.n version is a released version.
        # A Tn.n version is a released field test version.
        # A Xn.n version is an unreleased experimental baselevel.
        # 1.2 uses "1.2" for uname -r.
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
        # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
        exitcode=$?
        trap '' 0
@@ -376,16 +380,16 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
        eval $set_cc_for_build
-       SUN_ARCH="i386"
+       SUN_ARCH=i386
        # If there is a compiler, see if it is configured for 64-bit objects.
        # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
        # This test works for both compilers.
-       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+       if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
            if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+               (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
                grep IS_64BIT_ARCH >/dev/null
            then
-               SUN_ARCH="x86_64"
+               SUN_ARCH=x86_64
            fi
        fi
        echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
@@ -410,7 +414,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        exit ;;
     sun*:*:4.2BSD:*)
        UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+       test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
        case "`/bin/arch`" in
            sun3)
                echo m68k-sun-sunos${UNAME_RELEASE}
@@ -635,13 +639,13 @@ EOF
                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
                    case "${sc_cpu_version}" in
-                     523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                     528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                     523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+                     528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
                      532)                      # CPU_PA_RISC2_0
                        case "${sc_kernel_bits}" in
-                         32) HP_ARCH="hppa2.0n" ;;
-                         64) HP_ARCH="hppa2.0w" ;;
-                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                         32) HP_ARCH=hppa2.0n ;;
+                         64) HP_ARCH=hppa2.0w ;;
+                         '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
                        esac ;;
                    esac
                fi
@@ -680,11 +684,11 @@ EOF
                    exit (0);
                }
 EOF
-                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
                    test -z "$HP_ARCH" && HP_ARCH=hppa
                fi ;;
        esac
-       if [ ${HP_ARCH} = "hppa2.0w" ]
+       if [ ${HP_ARCH} = hppa2.0w ]
        then
            eval $set_cc_for_build
 
@@ -697,12 +701,12 @@ EOF
            # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
            # => hppa64-hp-hpux11.23
 
-           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+           if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
                grep -q __LP64__
            then
-               HP_ARCH="hppa2.0w"
+               HP_ARCH=hppa2.0w
            else
-               HP_ARCH="hppa64"
+               HP_ARCH=hppa64
            fi
        fi
        echo ${HP_ARCH}-hp-hpux${HPUX_REV}
@@ -807,14 +811,14 @@ EOF
        echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+       FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+       FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     5000:UNIX_System_V:4.*:*)
-       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+       FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
@@ -896,7 +900,7 @@ EOF
        exit ;;
     *:GNU/*:*:*)
        # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
        exit ;;
     i*86:Minix:*:*)
        echo ${UNAME_MACHINE}-pc-minix
@@ -919,7 +923,7 @@ EOF
          EV68*) UNAME_MACHINE=alphaev68 ;;
        esac
        objdump --private-headers /bin/sh | grep -q ld.so.1
-       if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+       if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
     arc:Linux:*:* | arceb:Linux:*:*)
@@ -965,6 +969,9 @@ EOF
     ia64:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
+    k1om:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
     m32r*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
@@ -1120,7 +1127,7 @@ EOF
        # uname -m prints for DJGPP always 'pc', but it prints nothing about
        # the processor, so we play safe by assuming i586.
        # Note: whatever this is, it MUST be the same as what config.sub
-       # prints for the "djgpp" host, or else GDB configury will decide that
+       # prints for the "djgpp" host, or else GDB configure will decide that
        # this is a cross-build.
        echo i586-pc-msdosdjgpp
        exit ;;
@@ -1269,6 +1276,9 @@ EOF
     SX-8R:SUPER-UX:*:*)
        echo sx8r-nec-superux${UNAME_RELEASE}
        exit ;;
+    SX-ACE:SUPER-UX:*:*)
+       echo sxace-nec-superux${UNAME_RELEASE}
+       exit ;;
     Power*:Rhapsody:*:*)
        echo powerpc-apple-rhapsody${UNAME_RELEASE}
        exit ;;
@@ -1282,9 +1292,9 @@ EOF
            UNAME_PROCESSOR=powerpc
        fi
        if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-           if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+           if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
                if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-                   (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+                   (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
                    grep IS_64BIT_ARCH >/dev/null
                then
                    case $UNAME_PROCESSOR in
@@ -1306,7 +1316,7 @@ EOF
        exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
        UNAME_PROCESSOR=`uname -p`
-       if test "$UNAME_PROCESSOR" = "x86"; then
+       if test "$UNAME_PROCESSOR" = x86; then
                UNAME_PROCESSOR=i386
                UNAME_MACHINE=pc
        fi
@@ -1337,7 +1347,7 @@ EOF
        # "uname -m" is not consistent, so use $cputype instead. 386
        # is converted to i386 for consistency with other x86
        # operating systems.
-       if test "$cputype" = "386"; then
+       if test "$cputype" = 386; then
            UNAME_MACHINE=i386
        else
            UNAME_MACHINE="$cputype"
@@ -1379,7 +1389,7 @@ EOF
        echo i386-pc-xenix
        exit ;;
     i*86:skyos:*:*)
-       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
        exit ;;
     i*86:rdos:*:*)
        echo ${UNAME_MACHINE}-pc-rdos
@@ -1390,6 +1400,9 @@ EOF
     x86_64:VMkernel:*:*)
        echo ${UNAME_MACHINE}-unknown-esx
        exit ;;
+    amd64:Isilon\ OneFS:*:*)
+       echo x86_64-unknown-onefs
+       exit ;;
 esac
 
 cat >&2 <<EOF
@@ -1399,9 +1412,9 @@ This script, last modified $timestamp, has failed to recognize
 the operating system you are using. It is advised that you
 download the most up to date version of the config scripts from
 
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 If the version you run ($0) is already up to date, please
 send the following data and any information you think might be
index 1acc966..8d39c4b 100755 (executable)
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2015 Free Software Foundation, Inc.
+#   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2015-08-20'
+timestamp='2016-03-30'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -33,7 +33,7 @@ timestamp='2015-08-20'
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -53,8 +53,7 @@ timestamp='2015-08-20'
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 Canonicalize a configuration name.
 
@@ -68,7 +67,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2015 Free Software Foundation, Inc.
+Copyright 1992-2016 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -521,7 +520,7 @@ case $basic_machine in
                basic_machine=i386-pc
                os=-aros
                ;;
-        asmjs)
+       asmjs)
                basic_machine=asmjs-unknown
                ;;
        aux)
@@ -1383,7 +1382,7 @@ case $os in
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
              | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
              | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -bitrig* | -openbsd* | -solidbsd* \
+             | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
              | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
              | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
              | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
@@ -1399,7 +1398,8 @@ case $os in
              | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
              | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
              | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
+             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+             | -onefs* | -tirtos*)
        # Remember, each alternative MUST END IN *, to match a version number.
                ;;
        -qnx*)
@@ -1531,6 +1531,8 @@ case $os in
                ;;
        -nacl*)
                ;;
+       -ios)
+               ;;
        -none)
                ;;
        *)
index 41f71de..ef33301 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for isl 0.17.1.
+# Generated by GNU Autoconf 2.69 for isl 0.18.
 #
 # Report bugs to <isl-development@googlegroups.com>.
 #
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='isl'
 PACKAGE_TARNAME='isl'
-PACKAGE_VERSION='0.17.1'
-PACKAGE_STRING='isl 0.17.1'
+PACKAGE_VERSION='0.18'
+PACKAGE_STRING='isl 0.18'
 PACKAGE_BUGREPORT='isl-development@googlegroups.com'
 PACKAGE_URL=''
 
@@ -1375,7 +1375,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.17.1 to adapt to many kinds of systems.
+\`configure' configures isl 0.18 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1446,7 +1446,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of isl 0.17.1:";;
+     short | recursive ) echo "Configuration of isl 0.18:";;
    esac
   cat <<\_ACEOF
 
@@ -1576,7 +1576,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-isl configure 0.17.1
+isl configure 0.18
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2471,7 +2471,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.17.1, which was
+It was created by isl $as_me 0.18, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3335,7 +3335,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='isl'
- VERSION='0.17.1'
+ VERSION='0.18'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3468,7 +3468,7 @@ fi
 AM_BACKSLASH='\'
 
 
-versioninfo=17:1:2
+versioninfo=18:0:3
 
 if test "x$prefix" != "xNONE"; then
        prefix_wd=`cd $prefix && pwd`
@@ -19855,7 +19855,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # 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.17.1, which was
+This file was extended by isl $as_me 0.18, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -19921,7 +19921,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.17.1
+isl config.status 0.18
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -21186,7 +21186,6 @@ $as_echo X"$file" |
     cat <<_LT_EOF >> "$cfgfile"
 #! $SHELL
 # Generated automatically by $as_me ($PACKAGE) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 
 # Provide generalized library-building support services.
index b6da64d..fabcf06 100644 (file)
@@ -1,10 +1,10 @@
-AC_INIT([isl], [0.17.1], [isl-development@googlegroups.com])
+AC_INIT([isl], [0.18], [isl-development@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=17:1:2
+versioninfo=18:0:3
 
 if test "x$prefix" != "xNONE"; then
        prefix_wd=`cd $prefix && pwd`
index fb5e043..026db43 100644 (file)
Binary files a/polly/lib/External/isl/doc/manual.pdf and b/polly/lib/External/isl/doc/manual.pdf differ
index 1ee932c..bf08e03 100644 (file)
@@ -94,22 +94,22 @@ __isl_give isl_ast_build *isl_ast_build_set_create_leaf(
        __isl_give isl_ast_node *(*fn)(__isl_take isl_ast_build *build,
                void *user), void *user);
 
-__isl_export
+__isl_overload
 __isl_give isl_ast_expr *isl_ast_build_expr_from_set(
        __isl_keep isl_ast_build *build, __isl_take isl_set *set);
-__isl_export
+__isl_overload
 __isl_give isl_ast_expr *isl_ast_build_expr_from_pw_aff(
        __isl_keep isl_ast_build *build, __isl_take isl_pw_aff *pa);
-__isl_export
+__isl_overload
 __isl_give isl_ast_expr *isl_ast_build_access_from_pw_multi_aff(
        __isl_keep isl_ast_build *build, __isl_take isl_pw_multi_aff *pma);
-__isl_export
+__isl_overload
 __isl_give isl_ast_expr *isl_ast_build_access_from_multi_pw_aff(
        __isl_keep isl_ast_build *build, __isl_take isl_multi_pw_aff *mpa);
-__isl_export
+__isl_overload
 __isl_give isl_ast_expr *isl_ast_build_call_from_pw_multi_aff(
        __isl_keep isl_ast_build *build, __isl_take isl_pw_multi_aff *pma);
-__isl_export
+__isl_overload
 __isl_give isl_ast_expr *isl_ast_build_call_from_multi_pw_aff(
        __isl_keep isl_ast_build *build, __isl_take isl_multi_pw_aff *mpa);
 
index 1c2b212..cb95b5c 100644 (file)
@@ -628,7 +628,7 @@ __isl_give isl_basic_set *isl_basic_set_drop_constraints_involving_dims(
 
 /* Drop constraints from "map" by applying "drop" to each basic map.
  */
-__isl_give isl_map *drop_constraints(__isl_take isl_map *map,
+static __isl_give isl_map *drop_constraints(__isl_take isl_map *map,
        enum isl_dim_type type, unsigned first, unsigned n,
        __isl_give isl_basic_map *(*drop)(__isl_take isl_basic_map *bmap,
                enum isl_dim_type type, unsigned first, unsigned n))
index 20da8db..6d2e956 100644 (file)
@@ -3,7 +3,7 @@
  * Copyright 2010      INRIA Saclay
  * Copyright 2012-2013 Ecole Normale Superieure
  * Copyright 2014      INRIA Rocquencourt
- * Copyright 2016      Sven Verdoolaege
+ * Copyright 2016      INRIA Paris
  *
  * Use of this software is governed by the MIT license
  *
@@ -14,6 +14,8 @@
  * and Ecole Normale Superieure, 45 rue d’Ulm, 75230 Paris, France
  * and Inria Paris - Rocquencourt, Domaine de Voluceau - Rocquencourt,
  * B.P. 105 - 78153 Le Chesnay, France
+ * and Centre de Recherche Inria de Paris, 2 rue Simone Iff - Voie DQ12,
+ * CS 42112, 75589 Paris Cedex 12, France
  */
 
 #include <isl_ctx_private.h>
@@ -2364,6 +2366,7 @@ static enum isl_change coalesce_with_expanded_divs(
        init_status(info_i);
        bmap = isl_basic_map_copy(bmap);
        bmap = isl_basic_map_expand_divs(bmap, isl_mat_copy(div), exp);
+       bmap = isl_basic_map_mark_final(bmap);
 
        if (!bmap)
                goto error;
index e61139f..2be7187 100644 (file)
@@ -86,7 +86,12 @@ int isl_basic_set_constraint_is_redundant(struct isl_basic_set **bset,
  * Since some constraints may be mutually redundant, sort the constraints
  * first such that constraints that involve existentially quantified
  * variables are considered for removal before those that do not.
- * The sorting is also need for the use in map_simple_hull.
+ * The sorting is also needed for the use in map_simple_hull.
+ *
+ * Note that isl_tab_detect_implicit_equalities may also end up
+ * marking some constraints as redundant.  Make sure the constraints
+ * are preserved and undo those marking such that isl_tab_detect_redundant
+ * can consider the constraints in the sorted order.
  *
  * Alternatively, we could have intersected the basic map with the
  * corresponding equality and then checked if the dimension was that
@@ -110,8 +115,14 @@ __isl_give isl_basic_map *isl_basic_map_remove_redundancies(
 
        bmap = isl_basic_map_sort_constraints(bmap);
        tab = isl_tab_from_basic_map(bmap, 0);
+       if (!tab)
+               goto error;
+       tab->preserve = 1;
        if (isl_tab_detect_implicit_equalities(tab) < 0)
                goto error;
+       if (isl_tab_restore_redundant(tab) < 0)
+               goto error;
+       tab->preserve = 0;
        if (isl_tab_detect_redundant(tab) < 0)
                goto error;
        bmap = isl_basic_map_update_from_tab(bmap, tab);
index caefd52..07b053e 100644 (file)
@@ -689,7 +689,8 @@ static struct isl_basic_set *compress_variables(
                        isl_mat_free(*T2);
                        *T2 = NULL;
                }
-               return isl_basic_set_set_to_empty(bset);
+               bset = isl_basic_set_set_to_empty(bset);
+               return return_with_identity(bset, T, T2);
        }
 
        bset = isl_basic_set_preimage(bset, T ? isl_mat_copy(TC) : TC);
index 27eff8e..5d22aa2 100644 (file)
@@ -3,6 +3,7 @@
  * Copyright 2010      INRIA Saclay
  * Copyright 2012-2014 Ecole Normale Superieure
  * Copyright 2014      INRIA Rocquencourt
+ * Copyright 2016      INRIA Paris
  * Copyright 2016      Sven Verdoolaege
  *
  * Use of this software is governed by the MIT license
@@ -14,6 +15,8 @@
  * and Ecole Normale Superieure, 45 rue d’Ulm, 75230 Paris, France
  * and Inria Paris - Rocquencourt, Domaine de Voluceau - Rocquencourt,
  * B.P. 105 - 78153 Le Chesnay, France
+ * and Centre de Recherche Inria de Paris, 2 rue Simone Iff - Voie DQ12,
+ * CS 42112, 75589 Paris Cedex 12, France
  */
 
 #include <string.h>
index c9c0265..a5fb459 100644 (file)
@@ -28,6 +28,7 @@
 #include <isl_local_space_private.h>
 #include <isl_aff_private.h>
 #include <isl_val_private.h>
+#include <isl_constraint_private.h>
 #include <isl/ast_build.h>
 #include <isl_sort.h>
 #include <isl_output_private.h>
@@ -729,24 +730,52 @@ static __isl_give isl_printer *print_div_list(__isl_take isl_printer *p,
        return p;
 }
 
-/* Does printing "bmap" require an "exists" clause?
+/* Does printing an object with local variables described by "div"
+ * require an "exists" clause?
  * That is, are there any local variables without an explicit representation?
+ * An exists clause is also needed in "dump" mode because
+ * explicit div representations are not printed inline in that case.
  */
-static isl_bool need_exists(__isl_keep isl_printer *p,
-       __isl_keep isl_basic_map *bmap, __isl_keep isl_mat *div)
+static isl_bool need_exists(__isl_keep isl_printer *p, __isl_keep isl_mat *div)
 {
-       int i;
+       int i, n;
 
-       if (!p || !bmap)
+       if (!p || !div)
                return isl_bool_error;
-       if (bmap->n_div == 0)
+       n = isl_mat_rows(div);
+       if (n == 0)
                return isl_bool_false;
-       for (i = 0; i < bmap->n_div; ++i)
+       if (p->dump)
+               return isl_bool_true;
+       for (i = 0; i < n; ++i)
                if (!can_print_div_expr(p, div, i))
                        return isl_bool_true;
        return isl_bool_false;
 }
 
+/* Print the start of an exists clause, i.e.,
+ *
+ *     (exists variables:
+ *
+ * In dump mode, local variables with an explicit definition are printed
+ * as well because they will not be printed inline.
+ */
+static __isl_give isl_printer *open_exists(__isl_take isl_printer *p,
+       __isl_keep isl_space *space, __isl_keep isl_mat *div, int latex)
+{
+       int dump;
+
+       if (!p)
+               return NULL;
+
+       dump = p->dump;
+       p = isl_printer_print_str(p, s_open_exists[latex]);
+       p = print_div_list(p, space, div, latex, dump);
+       p = isl_printer_print_str(p, ": ");
+
+       return p;
+}
+
 /* 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.
@@ -763,15 +792,9 @@ static __isl_give isl_printer *print_disjunct(__isl_keep isl_basic_map *bmap,
                return NULL;
        dump = p->dump;
        div = isl_basic_map_get_divs(bmap);
-       if (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, dump);
-               p = isl_printer_print_str(p, ": ");
-       }
+       exists = need_exists(p, div);
+       if (exists >= 0 && exists)
+               p = open_exists(p, space, div, latex);
 
        if (dump)
                div = isl_mat_free(div);
@@ -851,6 +874,23 @@ static __isl_give isl_printer *isl_set_print_omega(__isl_keep isl_set *set,
        return p;
 }
 
+/* Print the list of parameters in "space", followed by an arrow, to "p",
+ * if there are any parameters.
+ */
+static __isl_give isl_printer *print_param_tuple(__isl_take isl_printer *p,
+       __isl_keep isl_space *space, struct isl_print_space_data *data)
+{
+       if (!p || !space)
+               return isl_printer_free(p);
+       if (isl_space_dim(space, isl_dim_param) == 0)
+               return p;
+
+       p = print_tuple(space, p, isl_dim_param, data);
+       p = isl_printer_print_str(p, s_to[data->latex]);
+
+       return p;
+}
+
 static __isl_give isl_printer *isl_basic_map_print_isl(
        __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p,
        int latex)
@@ -858,10 +898,7 @@ static __isl_give isl_printer *isl_basic_map_print_isl(
        struct isl_print_space_data data = { .latex = latex };
        int rational = ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL);
 
-       if (isl_basic_map_dim(bmap, isl_dim_param) > 0) {
-               p = print_tuple(bmap->dim, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, " -> ");
-       }
+       p = print_param_tuple(p, bmap->dim, &data);
        p = isl_printer_print_str(p, "{ ");
        p = isl_print_space(bmap->dim, p, rational, &data);
        p = isl_printer_print_str(p, " : ");
@@ -1224,10 +1261,7 @@ static __isl_give isl_printer *isl_map_print_isl(__isl_keep isl_map *map,
 {
        struct isl_print_space_data data = { 0 };
 
-       if (isl_map_dim(map, isl_dim_param) > 0) {
-               p = print_tuple(map->dim, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, s_to[0]);
-       }
+       p = print_param_tuple(p, map->dim, &data);
        p = isl_printer_print_str(p, s_open_set[0]);
        p = isl_map_print_isl_body(map, p);
        p = isl_printer_print_str(p, s_close_set[0]);
@@ -1240,10 +1274,7 @@ static __isl_give isl_printer *print_latex_map(__isl_keep isl_map *map,
        struct isl_print_space_data data = { 0 };
 
        data.latex = 1;
-       if (isl_map_dim(map, isl_dim_param) > 0) {
-               p = print_tuple(map->dim, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, s_to[1]);
-       }
+       p = print_param_tuple(p, map->dim, &data);
        p = isl_printer_print_str(p, s_open_set[1]);
        data.print_dim = &print_dim_eq;
        data.user = aff;
@@ -1383,14 +1414,11 @@ static __isl_give isl_printer *isl_union_map_print_isl(
 {
        struct isl_union_print_data data;
        struct isl_print_space_data space_data = { 0 };
-       isl_space *dim;
+       isl_space *space;
 
-       dim = isl_union_map_get_space(umap);
-       if (isl_space_dim(dim, isl_dim_param) > 0) {
-               p = print_tuple(dim, p, isl_dim_param, &space_data);
-               p = isl_printer_print_str(p, s_to[0]);
-       }
-       isl_space_free(dim);
+       space = isl_union_map_get_space(umap);
+       p = print_param_tuple(p, space, &space_data);
+       isl_space_free(space);
        p = isl_printer_print_str(p, s_open_set[0]);
        data.p = p;
        data.first = 1;
@@ -1612,10 +1640,7 @@ static __isl_give isl_printer *print_qpolynomial_isl(__isl_take isl_printer *p,
        if (!p || !qp)
                goto error;
 
-       if (isl_space_dim(qp->dim, isl_dim_param) > 0) {
-               p = print_tuple(qp->dim, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, " -> ");
-       }
+       p = print_param_tuple(p, qp->dim, &data);
        p = isl_printer_print_str(p, "{ ");
        if (!isl_space_is_params(qp->dim)) {
                p = isl_print_space(qp->dim, p, 0, &data);
@@ -1757,10 +1782,7 @@ static __isl_give isl_printer *print_pw_qpolynomial_isl(
        if (!p || !pwqp)
                goto error;
 
-       if (isl_space_dim(pwqp->dim, isl_dim_param) > 0) {
-               p = print_tuple(pwqp->dim, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, " -> ");
-       }
+       p = print_param_tuple(p, pwqp->dim, &data);
        p = isl_printer_print_str(p, "{ ");
        if (pwqp->n == 0) {
                if (!isl_space_is_set(pwqp->dim)) {
@@ -1821,10 +1843,7 @@ static __isl_give isl_printer *print_pw_qpolynomial_fold_isl(
 {
        struct isl_print_space_data data = { 0 };
 
-       if (isl_space_dim(pwf->dim, isl_dim_param) > 0) {
-               p = print_tuple(pwf->dim, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, " -> ");
-       }
+       p = print_param_tuple(p, pwf->dim, &data);
        p = isl_printer_print_str(p, "{ ");
        if (pwf->n == 0) {
                if (!isl_space_is_set(pwf->dim)) {
@@ -2063,14 +2082,11 @@ static __isl_give isl_printer *print_union_pw_qpolynomial_isl(
 {
        struct isl_union_print_data data;
        struct isl_print_space_data space_data = { 0 };
-       isl_space *dim;
+       isl_space *space;
 
-       dim = isl_union_pw_qpolynomial_get_space(upwqp);
-       if (isl_space_dim(dim, isl_dim_param) > 0) {
-               p = print_tuple(dim, p, isl_dim_param, &space_data);
-               p = isl_printer_print_str(p, " -> ");
-       }
-       isl_space_free(dim);
+       space = isl_union_pw_qpolynomial_get_space(upwqp);
+       p = print_param_tuple(p, space, &space_data);
+       isl_space_free(space);
        p = isl_printer_print_str(p, "{ ");
        data.p = p;
        data.first = 1;
@@ -2208,14 +2224,11 @@ static __isl_give isl_printer *print_union_pw_qpolynomial_fold_isl(
 {
        struct isl_union_print_data data;
        struct isl_print_space_data space_data = { 0 };
-       isl_space *dim;
+       isl_space *space;
 
-       dim = isl_union_pw_qpolynomial_fold_get_space(upwf);
-       if (isl_space_dim(dim, isl_dim_param) > 0) {
-               p = print_tuple(dim, p, isl_dim_param, &space_data);
-               p = isl_printer_print_str(p, " -> ");
-       }
-       isl_space_free(dim);
+       space = isl_union_pw_qpolynomial_fold_get_space(upwf);
+       p = print_param_tuple(p, space, &space_data);
+       isl_space_free(space);
        p = isl_printer_print_str(p, "{ ");
        data.p = p;
        data.first = 1;
@@ -2243,17 +2256,43 @@ error:
        return NULL;
 }
 
+/* Print the isl_constraint "c" to "p".
+ */
 __isl_give isl_printer *isl_printer_print_constraint(__isl_take isl_printer *p,
        __isl_keep isl_constraint *c)
 {
-       isl_basic_map *bmap;
+       struct isl_print_space_data data = { 0 };
+       isl_local_space *ls;
+       isl_space *space;
+       isl_bool exists;
 
        if (!p || !c)
                goto error;
 
-       bmap = isl_basic_map_from_constraint(isl_constraint_copy(c));
-       p = isl_printer_print_basic_map(p, bmap);
-       isl_basic_map_free(bmap);
+       ls = isl_constraint_get_local_space(c);
+       if (!ls)
+               return isl_printer_free(p);
+       space = isl_local_space_get_space(ls);
+       p = print_param_tuple(p, space, &data);
+       p = isl_printer_print_str(p, "{ ");
+       p = isl_print_space(space, p, 0, &data);
+       p = isl_printer_print_str(p, " : ");
+       exists = need_exists(p, ls->div);
+       if (exists < 0)
+               p = isl_printer_free(p);
+       if (exists >= 0 && exists)
+               p = open_exists(p, space, ls->div, 0);
+       p = print_affine_of_len(space, ls->div, p, c->v->el, c->v->size);
+       if (isl_constraint_is_equality(c))
+               p = isl_printer_print_str(p, " = 0");
+       else
+               p = isl_printer_print_str(p, " >= 0");
+       if (exists >= 0 && exists)
+               p = isl_printer_print_str(p, s_close_exists[0]);
+       p = isl_printer_print_str(p, " }");
+       isl_space_free(space);
+       isl_local_space_free(ls);
+
        return p;
 error:
        isl_printer_free(p);
@@ -2268,10 +2307,7 @@ static __isl_give isl_printer *isl_printer_print_space_isl(
        if (!space)
                goto error;
 
-       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 = print_param_tuple(p, space, &data);
 
        p = isl_printer_print_str(p, "{ ");
        if (isl_space_is_params(space))
@@ -2310,10 +2346,7 @@ __isl_give isl_printer *isl_printer_print_local_space(__isl_take isl_printer *p,
        if (!ls)
                goto error;
 
-       if (isl_local_space_dim(ls, isl_dim_param) > 0) {
-               p = print_tuple(ls->dim, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, " -> ");
-       }
+       p = print_param_tuple(p, ls->dim, &data);
        p = isl_printer_print_str(p, "{ ");
        p = isl_print_space(ls->dim, p, 0, &data);
        n_div = isl_local_space_dim(ls, isl_dim_div);
@@ -2379,10 +2412,7 @@ static __isl_give isl_printer *print_aff_isl(__isl_take isl_printer *p,
        if (!aff)
                goto error;
 
-       if (isl_local_space_dim(aff->ls, isl_dim_param) > 0) {
-               p = print_tuple(aff->ls->dim, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, " -> ");
-       }
+       p = print_param_tuple(p, aff->ls->dim, &data);
        p = isl_printer_print_str(p, "{ ");
        p = print_aff(p, aff);
        p = isl_printer_print_str(p, " }");
@@ -2425,10 +2455,7 @@ static __isl_give isl_printer *print_pw_aff_isl(__isl_take isl_printer *p,
        if (!pwaff)
                goto error;
 
-       if (isl_space_dim(pwaff->dim, isl_dim_param) > 0) {
-               p = print_tuple(pwaff->dim, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, " -> ");
-       }
+       p = print_param_tuple(p, pwaff->dim, &data);
        p = isl_printer_print_str(p, "{ ");
        p = print_pw_aff_body(p, pwaff);
        p = isl_printer_print_str(p, " }");
@@ -2648,10 +2675,7 @@ static __isl_give isl_printer *print_union_pw_aff_isl(
        isl_space *space;
 
        space = isl_union_pw_aff_get_space(upa);
-       if (isl_space_dim(space, isl_dim_param) > 0) {
-               p = print_tuple(space, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, s_to[0]);
-       }
+       p = print_param_tuple(p, space, &data);
        isl_space_free(space);
        p = print_union_pw_aff_body(p, upa);
        return p;
@@ -2711,10 +2735,7 @@ static __isl_give isl_printer *print_multi_aff_isl(__isl_take isl_printer *p,
        if (!maff)
                goto error;
 
-       if (isl_space_dim(maff->space, isl_dim_param) > 0) {
-               p = print_tuple(maff->space, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, " -> ");
-       }
+       p = print_param_tuple(p, maff->space, &data);
        p = isl_printer_print_str(p, "{ ");
        p = print_multi_aff(p, maff);
        p = isl_printer_print_str(p, " }");
@@ -2771,10 +2792,7 @@ static __isl_give isl_printer *print_pw_multi_aff_isl(__isl_take isl_printer *p,
        if (!pma)
                goto error;
 
-       if (isl_space_dim(pma->dim, isl_dim_param) > 0) {
-               p = print_tuple(pma->dim, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, " -> ");
-       }
+       p = print_param_tuple(p, pma->dim, &data);
        p = isl_printer_print_str(p, "{ ");
        p = print_pw_multi_aff_body(p, pma);
        p = isl_printer_print_str(p, " }");
@@ -2873,10 +2891,7 @@ static __isl_give isl_printer *print_union_pw_multi_aff_isl(
        isl_space *space;
 
        space = isl_union_pw_multi_aff_get_space(upma);
-       if (isl_space_dim(space, isl_dim_param) > 0) {
-               p = print_tuple(space, p, isl_dim_param, &space_data);
-               p = isl_printer_print_str(p, s_to[0]);
-       }
+       p = print_param_tuple(p, space, &space_data);
        isl_space_free(space);
        p = isl_printer_print_str(p, s_open_set[0]);
        data.p = p;
@@ -2955,10 +2970,7 @@ static __isl_give isl_printer *print_multi_pw_aff_isl(__isl_take isl_printer *p,
        if (!mpa)
                return isl_printer_free(p);
 
-       if (isl_space_dim(mpa->space, isl_dim_param) > 0) {
-               p = print_tuple(mpa->space, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, " -> ");
-       }
+       p = print_param_tuple(p, mpa->space, &data);
        p = isl_printer_print_str(p, "{ ");
        data.print_dim = &print_dim_mpa;
        data.user = mpa;
@@ -3007,10 +3019,7 @@ static __isl_give isl_printer *print_multi_val_isl(__isl_take isl_printer *p,
        if (!mv)
                return isl_printer_free(p);
 
-       if (isl_space_dim(mv->space, isl_dim_param) > 0) {
-               p = print_tuple(mv->space, p, isl_dim_param, &data);
-               p = isl_printer_print_str(p, " -> ");
-       }
+       p = print_param_tuple(p, mv->space, &data);
        p = isl_printer_print_str(p, "{ ");
        data.print_dim = &print_dim_mv;
        data.user = mv;
@@ -3065,11 +3074,7 @@ static __isl_give isl_printer *print_multi_union_pw_aff_isl(
        isl_space *space;
 
        space = isl_multi_union_pw_aff_get_space(mupa);
-       if (isl_space_dim(space, isl_dim_param) > 0) {
-               struct isl_print_space_data space_data = { 0 };
-               p = print_tuple(space, p, isl_dim_param, &space_data);
-               p = isl_printer_print_str(p, s_to[0]);
-       }
+       p = print_param_tuple(p, space, &data);
 
        data.print_dim = &print_union_pw_aff_dim;
        data.user = mupa;
index b764edd..1bf0845 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright 2013-2014 Ecole Normale Superieure
  * Copyright 2014      INRIA Rocquencourt
+ * Copyright 2016      INRIA Paris
  *
  * Use of this software is governed by the MIT license
  *
@@ -8,6 +9,8 @@
  * Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France
  * and Inria Paris - Rocquencourt, Domaine de Voluceau - Rocquencourt,
  * B.P. 105 - 78153 Le Chesnay, France
+ * and Centre de Recherche Inria de Paris, 2 rue Simone Iff - Voie DQ12,
+ * CS 42112, 75589 Paris Cedex 12, France
  */
 
 #include <isl/map.h>
index 709e1ab..cc4794c 100644 (file)
@@ -2,6 +2,7 @@
  * Copyright 2011      INRIA Saclay
  * Copyright 2012-2014 Ecole Normale Superieure
  * Copyright 2015-2016 Sven Verdoolaege
+ * Copyright 2016      INRIA Paris
  *
  * Use of this software is governed by the MIT license
  *
@@ -9,6 +10,8 @@
  * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod,
  * 91893 Orsay, France
  * and Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France
+ * and Centre de Recherche Inria de Paris, 2 rue Simone Iff - Voie DQ12,
+ * CS 42112, 75589 Paris Cedex 12, France
  */
 
 #include <isl_ctx_private.h>
index ceaaeff..e38c7fe 100644 (file)
@@ -3378,6 +3378,29 @@ static int ununrestrict(struct isl_tab *tab, struct isl_tab_var *var)
        return 0;
 }
 
+/* Unmark the last redundant row in "tab" as being redundant.
+ * This undoes part of the modifications performed by isl_tab_mark_redundant.
+ * In particular, remove the redundant mark and make
+ * sure the sample value respects the constraint again.
+ * A variable that is marked non-negative by isl_tab_mark_redundant
+ * is covered by a separate undo record.
+ */
+static isl_stat restore_last_redundant(struct isl_tab *tab)
+{
+       struct isl_tab_var *var;
+
+       if (tab->n_redundant < 1)
+               isl_die(isl_tab_get_ctx(tab), isl_error_internal,
+                       "no redundant rows", return isl_stat_error);
+
+       var = isl_tab_var_from_row(tab, tab->n_redundant - 1);
+       var->is_redundant = 0;
+       tab->n_redundant--;
+       restore_row(tab, var);
+
+       return isl_stat_ok;
+}
+
 static int perform_undo_var(struct isl_tab *tab, struct isl_tab_undo *undo) WARN_UNUSED;
 static int perform_undo_var(struct isl_tab *tab, struct isl_tab_undo *undo)
 {
@@ -3387,10 +3410,10 @@ static int perform_undo_var(struct isl_tab *tab, struct isl_tab_undo *undo)
                var->is_nonneg = 0;
                break;
        case isl_tab_undo_redundant:
-               var->is_redundant = 0;
-               tab->n_redundant--;
-               restore_row(tab, isl_tab_var_from_row(tab, tab->n_redundant));
-               break;
+               if (!var->is_row || var->index != tab->n_redundant - 1)
+                       isl_die(isl_tab_get_ctx(tab), isl_error_internal,
+                               "not undoing last redundant row", return -1);
+               return restore_last_redundant(tab);
        case isl_tab_undo_freeze:
                var->frozen = 0;
                break;
@@ -3429,6 +3452,36 @@ static int perform_undo_var(struct isl_tab *tab, struct isl_tab_undo *undo)
        return 0;
 }
 
+/* Restore all rows that have been marked redundant by isl_tab_mark_redundant
+ * and that have been preserved in the tableau.
+ * Note that isl_tab_mark_redundant may also have marked some variables
+ * as being non-negative before marking them redundant.  These need
+ * to be removed as well as otherwise some constraints could end up
+ * getting marked redundant with respect to the variable.
+ */
+isl_stat isl_tab_restore_redundant(struct isl_tab *tab)
+{
+       if (!tab)
+               return isl_stat_error;
+
+       if (tab->need_undo)
+               isl_die(isl_tab_get_ctx(tab), isl_error_invalid,
+                       "manually restoring redundant constraints "
+                       "interferes with undo history",
+                       return isl_stat_error);
+
+       while (tab->n_redundant > 0) {
+               if (tab->row_var[tab->n_redundant - 1] >= 0) {
+                       struct isl_tab_var *var;
+
+                       var = isl_tab_var_from_row(tab, tab->n_redundant - 1);
+                       var->is_nonneg = 0;
+               }
+               restore_last_redundant(tab);
+       }
+       return isl_stat_ok;
+}
+
 /* Undo the addition of an integer division to the basic map representation
  * of "tab" in position "pos".
  */
index afb50a6..df5642e 100644 (file)
@@ -201,6 +201,7 @@ int isl_tab_detect_implicit_equalities(struct isl_tab *tab) WARN_UNUSED;
 __isl_give isl_basic_map *isl_tab_make_equalities_explicit(struct isl_tab *tab,
        __isl_take isl_basic_map *bmap);
 int isl_tab_detect_redundant(struct isl_tab *tab) WARN_UNUSED;
+isl_stat isl_tab_restore_redundant(struct isl_tab *tab);
 #define ISL_TAB_SAVE_DUAL      (1 << 0)
 enum isl_lp_result isl_tab_min(struct isl_tab *tab,
        isl_int *f, isl_int denom, isl_int *opt, isl_int *opt_denom,
index 3353c3d..1ebfef3 100644 (file)
@@ -2430,6 +2430,33 @@ static int test_min_special(isl_ctx *ctx)
        return 0;
 }
 
+/* A specialized isl_set_min_val test case that would return an error
+ * in earlier versions of isl.
+ */
+static int test_min_special2(isl_ctx *ctx)
+{
+       const char *str;
+       isl_basic_set *bset;
+       isl_aff *obj;
+       isl_val *res;
+
+       str = "{ [i, j, k] : 2j = i and 2k = i + 1 and i >= 2 }";
+       bset = isl_basic_set_read_from_str(ctx, str);
+
+       obj = isl_aff_read_from_str(ctx, "{ [i, j, k] -> [i] }");
+
+       res = isl_basic_set_max_val(bset, obj);
+
+       isl_basic_set_free(bset);
+       isl_aff_free(obj);
+       isl_val_free(res);
+
+       if (!res)
+               return -1;
+
+       return 0;
+}
+
 struct {
        const char *set;
        const char *obj;
@@ -2476,6 +2503,8 @@ static int test_min(struct isl_ctx *ctx)
 
        if (test_min_special(ctx) < 0)
                return -1;
+       if (test_min_special2(ctx) < 0)
+               return -1;
 
        return 0;
 }
@@ -4550,6 +4579,35 @@ int test_aff(isl_ctx *ctx)
        return 0;
 }
 
+/* Check that the computation below results in a single expression.
+ * One or two expressions may result depending on which constraint
+ * ends up being considered as redundant with respect to the other
+ * constraints after the projection that is performed internally
+ * by isl_set_dim_min.
+ */
+static int test_dim_max_1(isl_ctx *ctx)
+{
+       const char *str;
+       isl_set *set;
+       isl_pw_aff *pa;
+       int n;
+
+       str = "[n] -> { [a, b] : n >= 0 and 4a >= -4 + n and b >= 0 and "
+                               "-4a <= b <= 3 and b < n - 4a }";
+       set = isl_set_read_from_str(ctx, str);
+       pa = isl_set_dim_min(set, 0);
+       n = isl_pw_aff_n_piece(pa);
+       isl_pw_aff_free(pa);
+
+       if (!pa)
+               return -1;
+       if (n != 1)
+               isl_die(ctx, isl_error_unknown, "expecting single expression",
+                       return -1);
+
+       return 0;
+}
+
 int test_dim_max(isl_ctx *ctx)
 {
        int equal;
@@ -4559,6 +4617,9 @@ int test_dim_max(isl_ctx *ctx)
        isl_map *map;
        isl_pw_aff *pwaff;
 
+       if (test_dim_max_1(ctx) < 0)
+               return -1;
+
        str = "[N] -> { [i] : 0 <= i <= min(N,10) }";
        set = isl_set_read_from_str(ctx, str);
        pwaff = isl_set_dim_max(set, 0);
index 147d758..2ad8be8 100644 (file)
@@ -31,7 +31,7 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-0.1"
+VERSION="2.4.6 Debian-2.4.6-1"
 package_revision=2.4.6
 
 
@@ -1977,7 +1977,7 @@ func_version ()
 # End:
 
 # Set a version string.
-scriptversion='(GNU libtool) 2.4.6'
+scriptversion='(GNU libtool) 2.4.6 Debian-2.4.6-1'
 
 
 # func_echo ARG...
@@ -2068,7 +2068,7 @@ include the following information:
        compiler:       $LTCC
        compiler flags: $LTCFLAGS
        linker:         $LD (gnu? $with_gnu_ld)
-       version:        $progname (GNU libtool) 2.4.6
+       version:        $progname $scriptversion
        automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
        autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
 
index 10ab284..ee80844 100644 (file)
@@ -728,7 +728,6 @@ _LT_CONFIG_SAVE_COMMANDS([
     cat <<_LT_EOF >> "$cfgfile"
 #! $SHELL
 # Generated automatically by $as_me ($PACKAGE) $VERSION
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 # NOTE: Changes made to this file will be lost: look at ltmain.sh.
 
 # Provide generalized library-building support services.