diff options
22 files changed, 370 insertions, 202 deletions
diff --git a/polly/lib/External/isl/AUTHORS b/polly/lib/External/isl/AUTHORS index 671a2413014..975d5b63ecb 100644 --- a/polly/lib/External/isl/AUTHORS +++ b/polly/lib/External/isl/AUTHORS @@ -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 diff --git a/polly/lib/External/isl/ChangeLog b/polly/lib/External/isl/ChangeLog index 14ff1b49b3c..249acdf37d5 100644 --- a/polly/lib/External/isl/ChangeLog +++ b/polly/lib/External/isl/ChangeLog @@ -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: diff --git a/polly/lib/External/isl/GIT_HEAD_ID b/polly/lib/External/isl/GIT_HEAD_ID index 7ec49141d19..1c16ff73546 100644 --- a/polly/lib/External/isl/GIT_HEAD_ID +++ b/polly/lib/External/isl/GIT_HEAD_ID @@ -1 +1 @@ -isl-0.17.1-314-g3106e8d +isl-0.18-9-gd4734f3 diff --git a/polly/lib/External/isl/config.guess b/polly/lib/External/isl/config.guess index 16592509d49..0967f2afa92 100755 --- a/polly/lib/External/isl/config.guess +++ b/polly/lib/External/isl/config.guess @@ -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 diff --git a/polly/lib/External/isl/config.sub b/polly/lib/External/isl/config.sub index 1acc966a33b..8d39c4ba39f 100755 --- a/polly/lib/External/isl/config.sub +++ b/polly/lib/External/isl/config.sub @@ -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) ;; *) diff --git a/polly/lib/External/isl/configure b/polly/lib/External/isl/configure index 41f71de3865..ef333012671 100755 --- a/polly/lib/External/isl/configure +++ b/polly/lib/External/isl/configure @@ -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. diff --git a/polly/lib/External/isl/configure.ac b/polly/lib/External/isl/configure.ac index b6da64ddc39..fabcf061983 100644 --- a/polly/lib/External/isl/configure.ac +++ b/polly/lib/External/isl/configure.ac @@ -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` diff --git a/polly/lib/External/isl/doc/manual.pdf b/polly/lib/External/isl/doc/manual.pdf Binary files differindex fb5e0430903..026db436006 100644 --- a/polly/lib/External/isl/doc/manual.pdf +++ b/polly/lib/External/isl/doc/manual.pdf diff --git a/polly/lib/External/isl/include/isl/ast_build.h b/polly/lib/External/isl/include/isl/ast_build.h index 1ee932cf1b1..bf08e03cbe0 100644 --- a/polly/lib/External/isl/include/isl/ast_build.h +++ b/polly/lib/External/isl/include/isl/ast_build.h @@ -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); diff --git a/polly/lib/External/isl/isl_affine_hull.c b/polly/lib/External/isl/isl_affine_hull.c index 1c2b212d265..cb95b5c8b46 100644 --- a/polly/lib/External/isl/isl_affine_hull.c +++ b/polly/lib/External/isl/isl_affine_hull.c @@ -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)) diff --git a/polly/lib/External/isl/isl_coalesce.c b/polly/lib/External/isl/isl_coalesce.c index 20da8db7a8d..6d2e9560887 100644 --- a/polly/lib/External/isl/isl_coalesce.c +++ b/polly/lib/External/isl/isl_coalesce.c @@ -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; diff --git a/polly/lib/External/isl/isl_convex_hull.c b/polly/lib/External/isl/isl_convex_hull.c index e61139f2b67..2be7187b93e 100644 --- a/polly/lib/External/isl/isl_convex_hull.c +++ b/polly/lib/External/isl/isl_convex_hull.c @@ -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); diff --git a/polly/lib/External/isl/isl_equalities.c b/polly/lib/External/isl/isl_equalities.c index caefd527cc2..07b053e94f6 100644 --- a/polly/lib/External/isl/isl_equalities.c +++ b/polly/lib/External/isl/isl_equalities.c @@ -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); diff --git a/polly/lib/External/isl/isl_map.c b/polly/lib/External/isl/isl_map.c index 27eff8e7630..5d22aa2d5f9 100644 --- a/polly/lib/External/isl/isl_map.c +++ b/polly/lib/External/isl/isl_map.c @@ -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> diff --git a/polly/lib/External/isl/isl_output.c b/polly/lib/External/isl/isl_output.c index c9c0265c630..a5fb45990c7 100644 --- a/polly/lib/External/isl/isl_output.c +++ b/polly/lib/External/isl/isl_output.c @@ -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; diff --git a/polly/lib/External/isl/isl_schedule_tree.c b/polly/lib/External/isl/isl_schedule_tree.c index b764edd8073..1bf08453d60 100644 --- a/polly/lib/External/isl/isl_schedule_tree.c +++ b/polly/lib/External/isl/isl_schedule_tree.c @@ -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> diff --git a/polly/lib/External/isl/isl_scheduler.c b/polly/lib/External/isl/isl_scheduler.c index 709e1ab8b7b..cc4794ca00d 100644 --- a/polly/lib/External/isl/isl_scheduler.c +++ b/polly/lib/External/isl/isl_scheduler.c @@ -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> diff --git a/polly/lib/External/isl/isl_tab.c b/polly/lib/External/isl/isl_tab.c index ceaaeff7e26..e38c7fef14f 100644 --- a/polly/lib/External/isl/isl_tab.c +++ b/polly/lib/External/isl/isl_tab.c @@ -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". */ diff --git a/polly/lib/External/isl/isl_tab.h b/polly/lib/External/isl/isl_tab.h index afb50a6bc43..df5642ee41e 100644 --- a/polly/lib/External/isl/isl_tab.h +++ b/polly/lib/External/isl/isl_tab.h @@ -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, diff --git a/polly/lib/External/isl/isl_test.c b/polly/lib/External/isl/isl_test.c index 3353c3de0e8..1ebfef350c3 100644 --- a/polly/lib/External/isl/isl_test.c +++ b/polly/lib/External/isl/isl_test.c @@ -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); diff --git a/polly/lib/External/isl/ltmain.sh b/polly/lib/External/isl/ltmain.sh index 147d758abcb..2ad8be8483d 100644 --- a/polly/lib/External/isl/ltmain.sh +++ b/polly/lib/External/isl/ltmain.sh @@ -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` diff --git a/polly/lib/External/isl/m4/libtool.m4 b/polly/lib/External/isl/m4/libtool.m4 index 10ab2844c4e..ee80844b619 100644 --- a/polly/lib/External/isl/m4/libtool.m4 +++ b/polly/lib/External/isl/m4/libtool.m4 @@ -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. |