Richard Guenther - [PATCH] Move Graphite to upstream cloog 0.17.0 (original) (raw)
This is the mail archive of the gcc-patches@gcc.gnu.orgmailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
- From: Richard Guenther
- To: gcc-patches at gcc dot gnu dot org
- Cc: tobias at grosser dot es, bonzini at gnu dot org
- Date: Fri, 22 Jun 2012 15:16:20 +0200 (CEST)
- Subject: [PATCH] Move Graphite to upstream cloog 0.17.0
This bumps the requirement to enable Graphite to using cloog 0.17.0 which is the last release from upstream. The patch removes the support for the legacy cloog versions, too.
I am bootstrapping and testing this now with cloog 0.17.0 built against the upstream ISL 0.10 version.
If this ends up being approved I will put the cloog 0.17.0 tarball in the infrastructure directory.
Bootstrap and regtest pending on x86_64-unknown-linux-gnu.
Ok for trunk (for the build parts)?
Thanks, Richard.
2012-06-22 Richard Guenther rguenther@suse.de
Merge from graphite branch
2011-07-21 Tobias Grosser <tobias@grosser.es>
* configure: Regenerated.
* config/cloog.m4: Remove support for CLooG-ppl and CLooG-parma,
both cloog.org and legacy versions. The only supported version will
be CLooG with the isl backend.
2011-07-21 Tobias Grosser <tobias@grosser.es>
* configure: Regenerated.
* configure.ac: Require cloog isl 0.17.0
2011-07-21 Tobias Grosser <tobias@grosser.es>
* configure: Regenerated.
* config/cloog.m4: Do not define CLOOG_ORG
gcc/
* Makefile.in (graphite-clast-to-gimple.o, graphite-cloog-util.o):
Remove graphite-cloog-util.h.
* graphite-clast-to-gimple.c (gcc_type_for_iv_of_clast_loop,
build_iv_mapping, translate_clast_user, translate_clast,
free_scattering, initialize_cloog_names, build_cloog_prog,
create_params_index): Do not use old compatibility functions.
(clast_name_to_index, set_cloog_options): Remove code for legacy cloog.
* graphite-cloog-util.c (openscop_print_cloog_matrix): Do not use old
compatibility functions.
(new_Cloog_Scattering_from_ppl_Polyhedron): Remove code for legacy
cloog.
* graphite-cloog-util.h: Remove include of graphite-cloog-util.h.
* graphite.c (graphite.c): Do not call outdated cloog_initialize() and
cloog_finalize().
* graphite-cloog-compat.h: Remove.
2011-08-09 Tobias Grosser <tobias@grosser.es>
gcc/
* graphite-clast-to-gimple.c (new_clast_name_index): Store a copy
of the string, no just a reference.
(clast_name_index): Add a new field, that specifies if we need to free
the name.
(free_clast_name_index): If necessary, free the name string.
(clast_name_index_elt_info): Calculate the hash based on the string
content, not the memory location it is stored in.
(clast_name_to_level): Specify that we do not need to free the name.
(clast_name_to_index): Dito.
(clast_name_to_lb_ub): Dito.
(eq_clast_name_indexes): Compare the strings, not their base pointers.
(free_scattering): Removed.
(initialize_cloog_names): Renamed to add_names_to_union_domain().
(add_names_to_union_domain): Changed to work on a union_domain,
instead of a CloogNames structure.
(build_cloog_prog): Removed.
(build_cloog_union_domain): New.
(generate_cloog_input): New.
(scop_to_clast): Use CloogInput instead of CloogProgram.
(print_generated_program): Adapt to new scop_to_clast() and do not
print the CloogProgram any more.
(create_params_index): Removed, functionality integrated in
add_names_to_union_domain().
(gloog): Adapt to new scop_to_clast().
* graphite-clast-to-gimple.h (scop_to_clast): Remove.
2012-01-11 Tobias Grosser <tobias@grosser.es>
* graphite-clast-to-gimple.c (clast_name_to_index,
clast_name_to_lb_ub, clast_name_to_gcc): Change types.
(clast_to_gcc_expression): Add clast_expr_name as a new
case. Do not assume a clast_expr_term points always to a
clast_expr_name.
(type_for_clast_term): Do not assume a clast_expr_term points always to
a clast_expr_name.
(type_for_clast_name): New.
(type_for_clast_expr): Add clast_expr_name as a new case.
2011-08-03 Sebastian Pop <sebpop@gmail.com>
* graphite-cloog-util.c (new_Cloog_Domain_from_ppl_Polyhedron,
new_Cloog_Scattering_from_ppl_Polyhedron,
new_Cloog_Domain_from_ppl_Pointset_Powerset): Remove ATTRIBUTE_UNUSED.
Index: configure.ac
--- configure.ac (revision 188887) +++ configure.ac (working copy) @@ -1623,7 +1623,7 @@ if test "x$with_cloog" != "xno"; then dnl dnl If we use CLooG-Legacy, the provided version information is dnl ignored. - CLOOG_CHECK_VERSION(0,16,1) + CLOOG_CHECK_VERSION(0,17,0) dnl Only execute fail-action, if CLooG has been requested. CLOOG_IF_FAILED([ Index: config/cloog.m4
--- config/cloog.m4 (revision 188887) +++ config/cloog.m4 (working copy) @@ -37,17 +37,6 @@ AC_DEFUN([CLOOG_INIT_FLAGS], [--with-cloog-lib=PATH], [Specify the directory for the installed CLooG library])]) - AC_ARG_ENABLE(cloog-backend, - [AS_HELP_STRING( - [--enable-cloog-backend[[=BACKEND]]], - [set the CLooG BACKEND used to either isl, ppl or ppl-legacy (default)])], - [ if test "x${enableval}" = "xisl"; then - cloog_backend=isl - elif test "x${enableval}" = "xppl"; then - cloog_backend=ppl - else - cloog_backend=ppl-legacy - fi], cloog_backend=ppl-legacy) AC_ARG_ENABLE(cloog-version-check, [AS_HELP_STRING( [--disable-cloog-version-check], @@ -107,23 +96,6 @@ m4_define([_CLOOG_ORG_PROG_ISL],[AC_LANG [#include "cloog/cloog.h" ], [cloog_version ()])]) -# _CLOOG_ORG_PROG_PPL () -# ------------------ -# Helper for detecting CLooG.org's PPL backend. -m4_define([_CLOOG_ORG_PROG_PPL],[AC_LANG_PROGRAM( - [#include "cloog/cloog.h" - #include "cloog/ppl/cloog.h"], - [cloog_version ()])])
-# _CLOOG_PPL_LEGACY_PROG () -# ------------------------- -# Helper for detecting CLooG-Legacy (CLooG-PPL). -m4_define([_CLOOG_PPL_LEGACY_PROG], [AC_LANG_PROGRAM( - [#include "cloog/cloog.h"], - [#ifndef CLOOG_PPL_BACKEND - choke me - #endif ])])
CLOOG_FIND_FLAGS ()
------------------
Detect the used CLooG-backend and set clooginc/clooglibs/cloog_org.
@@ -137,56 +109,24 @@ AC_DEFUN([CLOOG_FIND_FLAGS],
_cloog_saved_LDFLAGS=$LDFLAGS
_cloog_saved_LIBS=$LIBS
- _cloogorginc="-DCLOOG_INT_GMP -DCLOOG_ORG"
+ _cloogorginc="-DCLOOG_INT_GMP"
dnl clooglibs & clooginc may have been initialized by CLOOG_INIT_FLAGS.
CFLAGS="${CFLAGS} clooginc{clooginc} clooginc{gmpinc}"
CPPFLAGS="${CPPFLAGS} ${_cloogorginc}"
LDFLAGS="${LDFLAGS} ${clooglibs}"
- case $cloog_backend in
- "ppl-legacy")
- CFLAGS="${CFLAGS} ${pplinc}"
- LDFLAGS="${LDFLAGS} ${ppllibs}"
- AC_CACHE_CHECK([for installed CLooG PPL Legacy], [gcc_cv_cloog_type],
- [LIBS="-lcloog ${_cloog_saved_LIBS}"
- AC_LINK_IFELSE([_CLOOG_PPL_LEGACY_PROG], [gcc_cv_cloog_type="PPL Legacy"],
- [gcc_cv_cloog_type=no])])
- ;;
- "isl")
- AC_CACHE_CHECK([for installed CLooG ISL], [gcc_cv_cloog_type],
- [LIBS="-lcloog-isl ${_cloog_saved_LIBS}"
- AC_LINK_IFELSE([_CLOOG_ORG_PROG_ISL], [gcc_cv_cloog_type="ISL"],
- [gcc_cv_cloog_type=no])])
- ;;
- "ppl")
- CFLAGS="${CFLAGS} ${pplinc}"
- LDFLAGS="${LDFLAGS} ${ppllibs}"
- AC_CACHE_CHECK([for installed CLooG PPL], [gcc_cv_cloog_type],
- [LIBS="-lcloog-ppl ${_cloog_saved_LIBS}"
- AC_LINK_IFELSE([_CLOOG_ORG_PROG_PPL], [gcc_cv_cloog_type="PPL"],
- [gcc_cv_cloog_type=no])])
- ;;
- *)
- gcc_cv_cloog_type=""
- esac
+ AC_CACHE_CHECK([for installed CLooG ISL], [gcc_cv_cloog_type],
+ [LIBS="-lcloog-isl ${_cloog_saved_LIBS}"
+ AC_LINK_IFELSE([_CLOOG_ORG_PROG_ISL], [gcc_cv_cloog_type="ISL"],
+ [gcc_cv_cloog_type=no])])
case $gcc_cv_cloog_type in
- "PPL Legacy")
- clooginc="${clooginc}"
- clooglibs="${clooglibs} -lcloog"
- cloog_org=no
- ;;
"ISL")
clooginc="${clooginc} ${_cloogorginc}"
clooglibs="${clooglibs} -lcloog-isl -lisl"
cloog_org=yes
;;
- "PPL")
- clooginc="${clooginc} ${_cloogorginc}"
- clooglibs="${clooglibs} -lcloog-ppl"
- cloog_org=yes
- ;;
*)
clooglibs=
clooginc=
@@ -212,25 +152,10 @@ m4_define([_CLOOG_CHECK_CT_PROG],[AC_LAN
choke me
#endif])])
-# _CLOOG_CHECK_RT_PROG ()
-# -----------------------
-# Helper for verifying that CLooG's compile time version
-# matches the run time version.
-m4_define([_CLOOG_CHECK_RT_PROG],[AC_LANG_PROGRAM(
- [#include "cloog/cloog.h"],
- [if ((cloog_version_major () != CLOOG_VERSION_MAJOR)
- && (cloog_version_minor () != CLOOG_VERSION_MINOR)
- && (cloog_version_revision () != CLOOG_VERSION_REVISION))
- {
- return 1;
- }])])
CLOOG_CHECK_VERSION CLOOG_CHECK_VERSION (MAJOR, MINOR, REVISION)
----------------------------------------------------------------
Test the found CLooG to be exact of version MAJOR.MINOR and at least
REVISION.
-# If we're using the old CLooG-PPL (Legacy), the old version check will
-# be executed (Ignores the provided version information).
AC_DEFUN([CLOOG_CHECK_VERSION],
[
AC_REQUIRE([CLOOG_FIND_FLAGS])
@@ -242,21 +167,11 @@ AC_DEFUN([CLOOG_CHECK_VERSION],
CFLAGS="${_cloog_saved_CFLAGS} clooginc{clooginc} clooginc{pplinc} ${gmpinc}"
LDFLAGS="${_cloog_saved_LDFLAGS} clooglibs{clooglibs} clooglibs{ppllibs}"
- if test "${cloog_org}" = yes ; then
- AC_CACHE_CHECK([for version 1.1.1.2.$3 of CLooG],
- [gcc_cv_cloog_ct_0_14_0],
- [AC_COMPILE_IFELSE([_CLOOG_CHECK_CT_PROG($1,$2,$3)],
- [gcc_cv_cloog_ct_0_14_0=yes],
- [gcc_cv_cloog_ct_0_14_0=no])])
- elif test "${cloog_org}" = no ; then
- AC_CACHE_CHECK([for version 0.15.5 (or later revision) of CLooG],
- [gcc_cv_cloog_ct_0_15_5],
- [AC_COMPILE_IFELSE([_CLOOG_CHECK_CT_PROG(0,15,5)],
- [AC_COMPILE_IFELSE([_CLOOG_CHECK_CT_PROG(0,15,9)],
- [gcc_cv_cloog_ct_0_15_5=yes],
- [gcc_cv_cloog_ct_0_15_5="buggy but acceptable"])],
- [gcc_cv_cloog_ct_0_15_5=no])])
- fi
+ AC_CACHE_CHECK([for version 1.1.1.2.$3 of CLooG],
+ [gcc_cv_cloog],
+ [AC_COMPILE_IFELSE([_CLOOG_CHECK_CT_PROG($1,$2,$3)],
+ [gcc_cv_cloog=yes],
+ [gcc_cv_cloog=no])])
CFLAGS=$_cloog_saved_CFLAGS
LDFLAGS=$_cloog_saved_LDFLAGS
@@ -272,9 +187,7 @@ AC_DEFUN([CLOOG_IF_FAILED],
[
CLOOG_REQUESTED([graphite_requested=yes], [graphite_requested=no])
- if test "${gcc_cv_cloog_ct_0_14_0}" = no
- || test "${gcc_cv_cloog_rt_0_14_0}" = no
- || test "${gcc_cv_cloog_ct_0_15_5}" = no; then
+ if test "${gcc_cv_cloog}" = no ; then
clooglibs=
clooginc=
fi
Index: configure
--- configure (revision 188887) +++ configure (working copy) @@ -777,7 +777,6 @@ enable_ppl_version_check with_cloog with_cloog_include with_cloog_lib -enable_cloog_backend enable_cloog_version_check enable_lto enable_stage1_languages @@ -1476,9 +1475,6 @@ Optional Features: build stages 2 and 3 with C++, not C --disable-ppl-version-check disable check for PPL version - --enable-cloog-backend[=BACKEND] - set the CLooG BACKEND used to either isl, ppl or - ppl-legacy (default) --disable-cloog-version-check disable check for CLooG version --enable-lto enable link time optimization support @@ -5757,19 +5753,6 @@ if test "${with_cloog_lib+set}" = set; t fi - # Check whether --enable-cloog-backend was given. -if test "${enable_cloog_backend+set}" = set; then : - enableval=$enable_cloog_backend; if test "x${enableval}" = "xisl"; then - cloog_backend=isl - elif test "x${enableval}" = "xppl"; then - cloog_backend=ppl - else - cloog_backend=ppl-legacy - fi -else - cloog_backend=ppl-legacy -fi
Check whether --enable-cloog-version-check was given.
if test "${enable_cloog_version_check+set}" = set; then :
enableval=$enable_cloog_version_check; ENABLE_CLOOG_CHECK=$enableval
@@ -5836,54 +5819,19 @@ if test "x$with_cloog" != "xno"; then
_cloog_saved_LDFLAGS=$LDFLAGS
_cloog_saved_LIBS=$LIBS
- _cloogorginc="-DCLOOG_INT_GMP -DCLOOG_ORG"
+ _cloogorginc="-DCLOOG_INT_GMP"
CFLAGS="${CFLAGS} clooginc{clooginc} clooginc{gmpinc}"
CPPFLAGS="${CPPFLAGS} ${_cloogorginc}"
LDFLAGS="${LDFLAGS} ${clooglibs}"
- case $cloog_backend in
- "ppl-legacy")
- CFLAGS="${CFLAGS} ${pplinc}"
- LDFLAGS="${LDFLAGS} ${ppllibs}"
- { asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: checking for installed CLooG PPL Legacy" >&5
-$as_echo_n "checking for installed CLooG PPL Legacy... " >&6; }
-if test "${gcc_cv_cloog_type+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- LIBS="-lcloog ${_cloog_saved_LIBS}"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. /
-#include "cloog/cloog.h"
-int
-main ()
-{
-#ifndef CLOOG_PPL_BACKEND
- choke me
- #endif
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- gcc_cv_cloog_type="PPL Legacy"
-else
- gcc_cv_cloog_type=no
-fi
-rm -f core conftest.err conftest.$ac_objext
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: result: $gcc_cv_cloog_type" >&5
-$as_echo "$gcc_cv_cloog_type" >&6; }
- ;;
- "isl")
- { asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: checking for installed CLooG ISL" >&5
+ { asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: checking for installed CLooG ISL" >&5
$as_echo_n "checking for installed CLooG ISL... " >&6; }
if test "${gcc_cv_cloog_type+set}" = set; then :
$as_echo_n "(cached) " >&6
else
LIBS="-lcloog-isl ${_cloog_saved_LIBS}"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/ end confdefs.h. /
#include "cloog/cloog.h"
int
@@ -5904,59 +5852,13 @@ rm -f core conftest.err conftest.$ac_obj
fi
{ asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: result: $gcc_cv_cloog_type" >&5
asecho"as_echo "asecho"gcc_cv_cloog_type" >&6; }
- ;;
- "ppl")
- CFLAGS="${CFLAGS} ${pplinc}"
- LDFLAGS="${LDFLAGS} ${ppllibs}"
- { asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: checking for installed CLooG PPL" >&5
-$as_echo_n "checking for installed CLooG PPL... " >&6; }
-if test "${gcc_cv_cloog_type+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- LIBS="-lcloog-ppl ${_cloog_saved_LIBS}"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/ end confdefs.h. */
-#include "cloog/cloog.h"
- #include "cloog/ppl/cloog.h"
-int
-main ()
-{
-cloog_version ()
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- gcc_cv_cloog_type="PPL"
-else
- gcc_cv_cloog_type=no
-fi
-rm -f core conftest.err conftest.$ac_objext
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: result: $gcc_cv_cloog_type" >&5
-$as_echo "$gcc_cv_cloog_type" >&6; }
- ;;
- *)
- gcc_cv_cloog_type=""
- esac
case $gcc_cv_cloog_type in
- "PPL Legacy")
- clooginc="${clooginc}"
- clooglibs="${clooglibs} -lcloog"
- cloog_org=no
- ;;
"ISL")
clooginc="${clooginc} ${_cloogorginc}"
clooglibs="${clooglibs} -lcloog-isl -lisl"
cloog_org=yes
;;
- "PPL")
- clooginc="${clooginc} ${_cloogorginc}"
- clooglibs="${clooglibs} -lcloog-ppl"
- cloog_org=yes
- ;;
)
clooglibs=
clooginc=
@@ -5980,40 +5882,9 @@ asecho"as_echo "asecho"gcc_cv_cloog_type" >&6; }
CFLAGS="${_cloog_saved_CFLAGS} clooginc{clooginc} clooginc{pplinc} ${gmpinc}"
LDFLAGS="${_cloog_saved_LDFLAGS} clooglibs{clooglibs} clooglibs{ppllibs}"
- if test "${cloog_org}" = yes ; then
- { asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: checking for version 0.16.1 of CLooG" >&5
-$as_echo_n "checking for version 0.16.1 of CLooG... " >&6; }
-if test "${gcc_cv_cloog_ct_0_14_0+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/ end confdefs.h. /
-#include "cloog/cloog.h"
-int
-main ()
-{
-#if CLOOG_VERSION_MAJOR != 0
- || CLOOG_VERSION_MINOR != 16
- || CLOOG_VERSION_REVISION < 1
- choke me
- #endif
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gcc_cv_cloog_ct_0_14_0=yes
-else
- gcc_cv_cloog_ct_0_14_0=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: result: $gcc_cv_cloog_ct_0_14_0" >&5
-$as_echo "$gcc_cv_cloog_ct_0_14_0" >&6; }
- elif test "${cloog_org}" = no ; then
- { asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: checking for version 0.15.5 (or later revision) of CLooG" >&5
-$as_echo_n "checking for version 0.15.5 (or later revision) of CLooG... " >&6; }
-if test "${gcc_cv_cloog_ct_0_15_5+set}" = set; then :
+ { asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: checking for version 0.17.0 of CLooG" >&5
+$as_echo_n "checking for version 0.17.0 of CLooG... " >&6; }
+if test "${gcc_cv_cloog+set}" = set; then :
$as_echo_n "(cached) " >&6
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6023,8 +5894,8 @@ int
main ()
{
#if CLOOG_VERSION_MAJOR != 0
- || CLOOG_VERSION_MINOR != 15
- || CLOOG_VERSION_REVISION < 5
+ || CLOOG_VERSION_MINOR != 17
+ || CLOOG_VERSION_REVISION < 0
choke me
#endif
;
@@ -6032,35 +5903,14 @@ main ()
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/ end confdefs.h. */
-#include "cloog/cloog.h"
-int
-main ()
-{
-#if CLOOG_VERSION_MAJOR != 0
- || CLOOG_VERSION_MINOR != 15
- || CLOOG_VERSION_REVISION < 9
- choke me
- #endif
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- gcc_cv_cloog_ct_0_15_5=yes
-else
- gcc_cv_cloog_ct_0_15_5="buggy but acceptable"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ gcc_cv_cloog=yes
else
- gcc_cv_cloog_ct_0_15_5=no
+ gcc_cv_cloog=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: result: $gcc_cv_cloog_ct_0_15_5" >&5
-$as_echo "$gcc_cv_cloog_ct_0_15_5" >&6; }
- fi
+{ asecho"as_echo "asecho"as_me:${as_lineno-$LINENO}: result: $gcc_cv_cloog" >&5
+$as_echo "$gcc_cv_cloog" >&6; }
CFLAGS=$_cloog_saved_CFLAGS
LDFLAGS=$_cloog_saved_LDFLAGS
@@ -6084,9 +5934,7 @@ asecho"as_echo "asecho"gcc_cv_cloog_ct_0_15_5" >&6;
- if test "${gcc_cv_cloog_ct_0_14_0}" = no
- || test "${gcc_cv_cloog_rt_0_14_0}" = no
- || test "${gcc_cv_cloog_ct_0_15_5}" = no; then
+ if test "${gcc_cv_cloog}" = no ; then
clooglibs=
clooginc=
fi
Index: gcc/doc/install.texi
--- gcc/doc/install.texi (revision 188887) +++ gcc/doc/install.texi (working copy) @@ -370,23 +370,12 @@ It can be downloaded from @uref{http://w The @option{--with-ppl} configure option should be used if PPL is not installed in your default library search path. -@item CLooG-PPL version 0.15 or CLooG 0.16 +@item CLooG 0.17.0 -Necessary to build GCC with the Graphite loop optimizations. There -are two versions available. CLooG-PPL 0.15 as well as CLooG 0.16. -The former is the default right now. It can be downloaded from -@uref{ftp://gcc.gnu.org/pub/gcc/infrastructure/} as -@file{cloog-ppl-0.15.tar.gz}.
-CLooG 0.16 support is still in testing stage, but will be the -default in future GCC releases. It is also available at -@uref{ftp://gcc.gnu.org/pub/gcc/infrastructure/} as -@file{cloog-0.16.1.tar.gz}. To use it add the additional configure -option @option{--enable-cloog-backend=isl}. Even if CLooG 0.16 -does not use PPL, PPL is still required for Graphite.
-In both cases @option{--with-cloog} configure option should be used -if CLooG is not installed in your default library search path. +Necessary to build GCC with the Graphite loop optimizations. It can be +downloaded from @uref{ftp://gcc.gnu.org/pub/gcc/infrastructure/} as +@file{cloog-0.17.0.tar.gz}. The @option{--with-cloog} configure option should +be used if CLooG is not installed in your default library search path. @end table Index: gcc/graphite-cloog-util.c
--- gcc/graphite-cloog-util.c (revision 188887) +++ gcc/graphite-cloog-util.c (working copy) @@ -28,7 +28,6 @@ along with GCC; see the file COPYING3. #include "ppl_c.h" #include "cloog/cloog.h" #include "graphite-cloog-util.h" -#include "graphite-cloog-compat.h" /* Counts the number of constraints in PCS. */ @@ -237,7 +236,7 @@ new_C_Polyhedron_from_Cloog_Matrix (ppl_ CloogDomain * new_Cloog_Domain_from_ppl_Polyhedron (ppl_const_Polyhedron_t ph, int nb_params, - CloogState *state ATTRIBUTE_UNUSED) + CloogState *state) { CloogMatrix *mat = new_Cloog_Matrix_from_ppl_Polyhedron (ph); CloogDomain *res = cloog_domain_from_cloog_matrix (state, mat, nb_params); @@ -249,11 +248,10 @@ new_Cloog_Domain_from_ppl_Polyhedron (pp CloogScattering * new_Cloog_Scattering_from_ppl_Polyhedron (ppl_const_Polyhedron_t ph, - int nb_params ATTRIBUTE_UNUSED, - int nb_scatt ATTRIBUTE_UNUSED, - CloogState *state ATTRIBUTE_UNUSED) + int nb_params, + int nb_scatt, + CloogState *state) { -#ifdef CLOOG_ORG CloogMatrix *mat = new_Cloog_Matrix_from_ppl_Polyhedron (ph); CloogScattering res = cloog_scattering_from_cloog_matrix (state, mat, nb_scatt, @@ -261,9 +259,6 @@ new_Cloog_Scattering_from_ppl_Polyhedron cloog_matrix_free (mat); return res; -#else - return new_Cloog_Domain_from_ppl_Polyhedron (ph, nb_params, state); -#endif } / Creates a CloogDomain from a pointset powerset PS. */ @@ -271,7 +266,7 @@ new_Cloog_Scattering_from_ppl_Polyhedron CloogDomain * new_Cloog_Domain_from_ppl_Pointset_Powerset (ppl_Pointset_Powerset_C_Polyhedron_t ps, int nb_params, - CloogState *state ATTRIBUTE_UNUSED) + CloogState *state) { CloogDomain *res = NULL; ppl_Pointset_Powerset_C_Polyhedron_iterator_t it, end; @@ -314,14 +309,14 @@ openscop_print_cloog_matrix (FILE *file, int output, int input, int locals, int params) { - int i, j; + unsigned i, j; - fprintf (file, "%d %d %d %d %d %d \n", cloog_matrix_nrows (mat), - cloog_matrix_ncolumns (mat), output, input, locals, params); + fprintf (file, "%d %d %d %d %d %d \n", mat->NbRows, + mat->NbColumns, output, input, locals, params); - for (i = 0; i < cloog_matrix_nrows (mat); i++) + for (i = 0; i < mat->NbRows; i++) { - for (j = 0; j < cloog_matrix_ncolumns (mat); j++) + for (j = 0; j < mat->NbColumns; j++) if (j == 0) fprintf (file, "%ld ", mpz_get_si (mat->p[i][j])); else Index: gcc/graphite-cloog-util.h
--- gcc/graphite-cloog-util.h (revision 188887) +++ gcc/graphite-cloog-util.h (working copy) @@ -22,7 +22,6 @@ along with GCC; see the file COPYING3. #define GRAPHITE_CLOOG_UTIL_H #include "cloog/cloog.h" -#include "graphite-cloog-compat.h" CloogMatrix *new_Cloog_Matrix_from_ppl_Polyhedron (ppl_const_Polyhedron_t); CloogDomain *new_Cloog_Domain_from_ppl_Polyhedron (ppl_const_Polyhedron_t, Index: gcc/graphite.c
--- gcc/graphite.c (revision 188887) +++ gcc/graphite.c (working copy) @@ -209,7 +209,6 @@ graphite_initialize (void) gcc_assert (ppl_initialized == 0); cloog_state = cloog_state_malloc (); - cloog_initialize (); if (dump_file && dump_flags) dump_function_to_file (current_function_decl, dump_file, dump_flags); @@ -233,7 +232,6 @@ graphite_finalize (bool need_cfg_cleanup } cloog_state_free (cloog_state); - cloog_finalize (); ppl_finalize (); free_original_copy_tables (); Index: gcc/graphite-clast-to-gimple.c
--- gcc/graphite-clast-to-gimple.c (revision 188887) +++ gcc/graphite-clast-to-gimple.c (working copy) @@ -38,7 +38,8 @@ along with GCC; see the file COPYING3. #include "graphite-poly.h" #include "graphite-clast-to-gimple.h" #include "graphite-dependences.h" -#include "graphite-cloog-compat.h" + +typedef const struct clast_expr *clast_name_p; #ifndef CLOOG_LANGUAGE_C #define CLOOG_LANGUAGE_C LANGUAGE_C @@ -68,6 +69,9 @@ typedef struct clast_name_index { int level; mpz_t bound_one, bound_two; const char name; + / If free_name is set, the content of name was allocated by us and needs + to be freed. */ + char *free_name; } clast_name_index_p; / Returns a pointer to a new element of type clast_name_index_p built @@ -78,8 +82,11 @@ new_clast_name_index (const char *name, mpz_t bound_one, mpz_t bound_two) { clast_name_index_p res = XNEW (struct clast_name_index); + char *new_name = XNEWVEC (char, strlen (name) + 1); + strcpy (new_name, name); - res->name = name; + res->name = new_name; + res->free_name = new_name; res->level = level; res->index = index; mpz_init (res->bound_one); @@ -95,6 +102,8 @@ static void free_clast_name_index (void *ptr) { struct clast_name_index *c = (struct clast_name_index *) ptr; + if (c->free_name) + free (c->free_name); mpz_clear (c->bound_one); mpz_clear (c->bound_two); free (ptr); @@ -111,12 +120,9 @@ clast_name_to_level (clast_name_p name, struct clast_name_index tmp; PTR *slot; -#ifdef CLOOG_ORG gcc_assert (name->type == clast_expr_name); tmp.name = ((const struct clast_name *) name)->name; -#else - tmp.name = name; -#endif + tmp.free_name = NULL; slot = htab_find_slot (index_table, &tmp, NO_INSERT); @@ -131,17 +137,13 @@ clast_name_to_level (clast_name_p name, SCATTERING_DIMENSIONS vector. */ static inline int -clast_name_to_index (clast_name_p name, htab_t index_table) +clast_name_to_index (struct clast_name *name, htab_t index_table) { struct clast_name_index tmp; PTR *slot; -#ifdef CLOOG_ORG - gcc_assert (name->type == clast_expr_name); tmp.name = ((const struct clast_name *) name)->name; -#else - tmp.name = name; -#endif + tmp.free_name = NULL; slot = htab_find_slot (index_table, &tmp, NO_INSERT); @@ -156,18 +158,14 @@ clast_name_to_index (clast_name_p name, found in the INDEX_TABLE, false otherwise. */ static inline bool -clast_name_to_lb_ub (clast_name_p name, htab_t index_table, mpz_t bound_one, - mpz_t bound_two) +clast_name_to_lb_ub (struct clast_name *name, htab_t index_table, + mpz_t bound_one, mpz_t bound_two) { struct clast_name_index tmp; PTR *slot; -#ifdef CLOOG_ORG - gcc_assert (name->type == clast_expr_name); - tmp.name = ((const struct clast_name *) name)->name; -#else - tmp.name = name; -#endif + tmp.name = name->name; + tmp.free_name = NULL; slot = htab_find_slot (index_table, &tmp, NO_INSERT); @@ -191,6 +189,7 @@ save_clast_name_index (htab_t index_tabl PTR *slot; tmp.name = name; + tmp.free_name = NULL; slot = htab_find_slot (index_table, &tmp, INSERT); if (slot) @@ -206,7 +205,16 @@ save_clast_name_index (htab_t index_tabl static inline hashval_t clast_name_index_elt_info (const void *elt) { - return htab_hash_pointer (((const struct clast_name_index *) elt)->name); + const struct clast_name_index *e = ((const struct clast_name_index *) elt); + hashval_t hash = 0; + + int length = strlen (e->name); + int i; + + for (i = 0; i < length; ++i) + hash = hash | (e->name[i] << (i % 4)); + + return hash; } /* Compares database elements E1 and E2. */ @@ -217,7 +225,7 @@ eq_clast_name_indexes (const void *e1, c const struct clast_name_index *elt1 = (const struct clast_name_index *) e1; const struct clast_name_index *elt2 = (const struct clast_name_index *) e2; - return (elt1->name == elt2->name); + return strcmp (elt1->name, elt2->name) == 0; } @@ -238,7 +246,7 @@ typedef struct ivs_params { Cloog representation. */ static tree -clast_name_to_gcc (clast_name_p name, ivs_params_p ip) +clast_name_to_gcc (struct clast_name *name, ivs_params_p ip) { int index; @@ -334,6 +342,10 @@ clast_to_gcc_expression (tree type, stru { switch (e->type) { + case clast_expr_name: + { + return clast_name_to_gcc ((struct clast_name *) e, ip); + } case clast_expr_term: { struct clast_term *t = (struct clast_term *) e; @@ -342,7 +354,7 @@ clast_to_gcc_expression (tree type, stru { if (mpz_cmp_si (t->val, 1) == 0) { - tree name = clast_name_to_gcc (t->var, ip); + tree name = clast_to_gcc_expression (type, t->var, ip); if (POINTER_TYPE_P (TREE_TYPE (name)) != POINTER_TYPE_P (type)) name = convert_to_ptrofftype (name); @@ -353,7 +365,7 @@ clast_to_gcc_expression (tree type, stru else if (mpz_cmp_si (t->val, -1) == 0) { - tree name = clast_name_to_gcc (t->var, ip); + tree name = clast_to_gcc_expression (type, t->var, ip); if (POINTER_TYPE_P (TREE_TYPE (name)) != POINTER_TYPE_P (type)) name = convert_to_ptrofftype (name); @@ -364,7 +376,7 @@ clast_to_gcc_expression (tree type, stru } else { - tree name = clast_name_to_gcc (t->var, ip); + tree name = clast_to_gcc_expression (type, t->var, ip); tree cst = gmp_cst_to_tree (type, t->val); if (POINTER_TYPE_P (TREE_TYPE (name)) != POINTER_TYPE_P (type)) @@ -493,6 +505,9 @@ type_for_value (mpz_t val) return type_for_interval (val, val); } +static tree +type_for_clast_expr (struct clast_expr , ivs_params_p, mpz_t, mpz_t); + / Return the type for the clast_term T. Initializes BOUND_ONE and BOUND_TWO to the bounds of the term. */ @@ -500,38 +515,24 @@ static tree type_for_clast_term (struct clast_term *t, ivs_params_p ip, mpz_t bound_one, mpz_t bound_two) { - clast_name_p name = t->var; - bool found = false;
- tree type; gcc_assert (t->expr.type == clast_expr_term);
- if (!name)
- if (!t->var) { mpz_set (bound_one, t->val); mpz_set (bound_two, t->val); return type_for_value (t->val); }
- if (ip->params && ip->params_index)
- found = clast_name_to_lb_ub (name, ip->params_index, bound_one, bound_two);
- if (!found)
- {
gcc_assert (*(ip->newivs) && ip->newivs_index);
found = clast_name_to_lb_ub (name, ip->newivs_index,
bound_one, bound_two);
gcc_assert (found);
- }
type = type_for_clast_expr (t->var, ip, bound_one, bound_two);
mpz_mul (bound_one, bound_one, t->val); mpz_mul (bound_two, bound_two, t->val);
- return TREE_TYPE (clast_name_to_gcc (name, ip));
- return max_precision_type (type, type_for_interval (bound_one, bound_two)); }
-static tree -type_for_clast_expr (struct clast_expr *, ivs_params_p, mpz_t, mpz_t);
/* Return the type for the clast_reduction R. Initializes BOUND_ONE and BOUND_TWO to the bounds of the reduction expression. / @@ -639,6 +640,29 @@ type_for_clast_bin (struct clast_binary return max_precision_type (type, type_for_interval (bound_one, bound_two)); } +/ Return the type for the clast_name NAME. Initializes BOUND_ONE and + BOUND_TWO to the bounds of the term. / + +static tree +type_for_clast_name (struct clast_name name, ivs_params_p ip, mpz_t bound_one, + mpz_t bound_two) +{ + bool found = false; + + if (ip->params && ip->params_index) + found = clast_name_to_lb_ub (name, ip->params_index, bound_one, bound_two); + + if (!found) + { + gcc_assert ((ip->newivs) && ip->newivs_index); + found = clast_name_to_lb_ub (name, ip->newivs_index, bound_one, + bound_two); + gcc_assert (found); + } + + return TREE_TYPE (clast_name_to_gcc (name, ip)); +} + / Returns the type for the CLAST expression E when used in statement STMT. */ @@ -660,6 +684,10 @@ type_for_clast_expr (struct clast_expr * return type_for_clast_bin ((struct clast_binary *) e, ip, bound_one, bound_two); + case clast_expr_name: + return type_for_clast_name ((struct clast_name *) e, ip, + bound_one, bound_two); + default: gcc_unreachable (); } @@ -869,7 +897,7 @@ graphite_create_new_loop (edge entry_edg struct clast_user_stmt *body = clast_get_body_of_loop ((struct clast_stmt *) stmt); - poly_bb_p pbb = (poly_bb_p) cloog_statement_usr (body->statement); + poly_bb_p pbb = (poly_bb_p) body->statement->usr; tree stride = gmp_cst_to_tree (type, stmt->stride); tree ivvar = create_tmp_var (type, "graphite_IV"); @@ -901,7 +929,7 @@ build_iv_mapping (VEC (tree, heap) *iv_m struct clast_stmt *t; int depth = 0; CloogStatement *cs = user_stmt->statement; - poly_bb_p pbb = (poly_bb_p) cloog_statement_usr (cs); + poly_bb_p pbb = (poly_bb_p) cs->usr; gimple_bb_p gbb = PBB_BLACK_BOX (pbb); mpz_t bound_one, bound_two; @@ -1018,7 +1046,7 @@ translate_clast_user (struct clast_user_ { int i, nb_loops; basic_block new_bb; - poly_bb_p pbb = (poly_bb_p) cloog_statement_usr (stmt->statement); + poly_bb_p pbb = (poly_bb_p) stmt->statement->usr; gimple_bb_p gbb = PBB_BLACK_BOX (pbb); VEC (tree, heap) iv_map; @@ -1240,81 +1268,69 @@ translate_clast (loop_p context_loop, st level, ip); } -/ Free the SCATTERING domain list. / +/ Add parameter and iterator names to the CloogUnionDomain. */ -static void -free_scattering (CloogScatteringList *scattering) -{ - while (scattering) - { - CloogScattering *dom = cloog_scattering (scattering); - CloogScatteringList *next = cloog_next_scattering (scattering);
cloog_scattering_free (dom);
free (scattering);
scattering = next;
- }
-}
-/* Initialize Cloog's parameter names from the names used in GIMPLE. - Initialize Cloog's iterator names, using 'graphite_iterator_%d' - from 0 to scop_nb_loops (scop). */
-static void -initialize_cloog_names (scop_p scop, CloogProgram *prog) +static CloogUnionDomain * +add_names_to_union_domain (scop_p scop, CloogUnionDomain *union_domain, + int nb_scattering_dims, htab_t params_index) { sese region = SCOP_REGION (scop); int i; int nb_iterators = scop_max_loop_depth (scop); - int nb_scattering = cloog_program_nb_scattdims (prog); int nb_parameters = VEC_length (tree, SESE_PARAMS (region)); - char **iterators = XNEWVEC (char *, nb_iterators * 2); - char **scattering = XNEWVEC (char *, nb_scattering); - char **parameters= XNEWVEC (char *, nb_parameters); + mpz_t bound_one, bound_two; - cloog_program_set_names (prog, cloog_names_malloc ()); + mpz_init (bound_one); + mpz_init (bound_two); for (i = 0; i < nb_parameters; i++) { tree param = VEC_index (tree, SESE_PARAMS (region), i); const char *name = get_name (param); int len; + char *parameter; if (!name) name = "T"; len = strlen (name); len += 17; - parameters[i] = XNEWVEC (char, len + 1); - snprintf (parameters[i], len, "%s_%d", name, SSA_NAME_VERSION (param)); + parameter = XNEWVEC (char, len + 1); + snprintf (parameter, len, "%s_%d", name, SSA_NAME_VERSION (param)); + save_clast_name_index (params_index, parameter, i, i, bound_one, + bound_two); + union_domain = cloog_union_domain_set_name (union_domain, CLOOG_PARAM, i, + parameter); + compute_bounds_for_param (scop, i, bound_one, bound_two); + free (parameter); } - cloog_names_set_nb_parameters (cloog_program_names (prog), nb_parameters); - cloog_names_set_parameters (cloog_program_names (prog), parameters); + mpz_clear (bound_one); + mpz_clear (bound_two); for (i = 0; i < nb_iterators; i++) { int len = 4 + 16; - iterators[i] = XNEWVEC (char, len); - snprintf (iterators[i], len, "git_%d", i); + char *iterator; + iterator = XNEWVEC (char, len); + snprintf (iterator, len, "git_%d", i); + union_domain = cloog_union_domain_set_name (union_domain, CLOOG_ITER, i, + iterator); + free (iterator); } - cloog_names_set_nb_iterators (cloog_program_names (prog), - nb_iterators); - cloog_names_set_iterators (cloog_program_names (prog), - iterators);
- for (i = 0; i < nb_scattering; i++)
- for (i = 0; i < nb_scattering_dims; i++) { int len = 5 + 16;
scattering[i] = XNEWVEC (char, len);
snprintf (scattering[i], len, "scat_%d", i);
char *scattering;
scattering = XNEWVEC (char, len);
snprintf (scattering, len, "scat_%d", i);
union_domain = cloog_union_domain_set_name (union_domain, CLOOG_SCAT, i,
scattering);
}free (scattering);
- cloog_names_set_nb_scattering (cloog_program_names (prog),
nb_scattering);
- cloog_names_set_scattering (cloog_program_names (prog),
scattering);
- return union_domain; }
/* Initialize a CLooG input file. / @@ -1342,129 +1358,40 @@ init_cloog_input_file (int scop_number) return graphite_out_file; } -/ Build cloog program for SCoP. / +/ Build cloog union domain for SCoP. */ -static void -build_cloog_prog (scop_p scop, CloogProgram *prog, - CloogOptions *options) +static CloogUnionDomain * +build_cloog_union_domain (scop_p scop) { int i; - int max_nb_loops = scop_max_loop_depth (scop); poly_bb_p pbb; - CloogLoop *loop_list = NULL; - CloogBlockList *block_list = NULL; - CloogScatteringList *scattering = NULL; - int nbs = 2 * max_nb_loops + 1; - int *scaldims;
- cloog_program_set_context
- (prog, new_Cloog_Domain_from_ppl_Pointset_Powerset (SCOP_CONTEXT (scop),
scop_nb_params (scop), cloog_state));
- nbs = unify_scattering_dimensions (scop);
- scaldims = (int *) xmalloc (nbs * (sizeof (int)));
- cloog_program_set_nb_scattdims (prog, nbs);
- initialize_cloog_names (scop, prog);
- CloogUnionDomain *union_domain =
- cloog_union_domain_alloc (scop_nb_params (scop));
FOR_EACH_VEC_ELT (poly_bb_p, SCOP_BBS (scop), i, pbb) { - CloogStatement *stmt; - CloogBlock *block; - CloogDomain *dom; + CloogDomain *domain; + CloogScattering scattering; / Dead code elimination: when the domain of a PBB is empty, don't generate code for the PBB. / if (ppl_Pointset_Powerset_C_Polyhedron_is_empty (PBB_DOMAIN (pbb))) continue; - / Build the new statement and its block. */ - stmt = cloog_statement_alloc (cloog_state, pbb_index (pbb)); - dom = new_Cloog_Domain_from_ppl_Pointset_Powerset (PBB_DOMAIN (pbb), - scop_nb_params (scop), - cloog_state); - block = cloog_block_alloc (stmt, 0, NULL, pbb_dim_iter_domain (pbb)); - cloog_statement_set_usr (stmt, pbb);
/* Build loop list. */
{
CloogLoop *new_loop_list = cloog_loop_malloc (cloog_state);
cloog_loop_set_next (new_loop_list, loop_list);
cloog_loop_set_domain (new_loop_list, dom);
cloog_loop_set_block (new_loop_list, block);
loop_list = new_loop_list;
}
/* Build block list. */
{
CloogBlockList *new_block_list = cloog_block_list_malloc ();
domain = new_Cloog_Domain_from_ppl_Pointset_Powerset (PBB_DOMAIN (pbb),
scop_nb_params (scop),
cloog_state);
cloog_block_list_set_next (new_block_list, block_list);
cloog_block_list_set_block (new_block_list, block);
block_list = new_block_list;
}
scattering = new_Cloog_Scattering_from_ppl_Polyhedron
- (PBB_TRANSFORMED_SCATTERING (pbb), scop_nb_params (scop),
pbb_nb_scattering_transform (pbb), cloog_state);
/* Build scattering list. */
{
/* XXX: Replace with cloog_domain_list_alloc(), when available. */
CloogScatteringList *new_scattering
= (CloogScatteringList *) xmalloc (sizeof (CloogScatteringList));
ppl_Polyhedron_t scat;
- CloogScattering *dom;
- scat = PBB_TRANSFORMED_SCATTERING (pbb);
dom = new_Cloog_Scattering_from_ppl_Polyhedron
(scat, scop_nb_params (scop), pbb_nb_scattering_transform (pbb),
cloog_state);
cloog_set_next_scattering (new_scattering, scattering);
cloog_set_scattering (new_scattering, dom);
scattering = new_scattering;
}
union_domain = cloog_union_domain_add_domain (union_domain, "", domain,
scattering, pbb); }
- cloog_program_set_loop (prog, loop_list);
- cloog_program_set_blocklist (prog, block_list);
- for (i = 0; i < nbs; i++)
- scaldims[i] = 0 ;
- cloog_program_set_scaldims (prog, scaldims);
- /* Extract scalar dimensions to simplify the code generation problem. */
- cloog_program_extract_scalars (prog, scattering, options);
- /* Dump a .cloog input file, if requested. This feature is only
enabled in the Graphite branch. */
- if (0)
- {
static size_t file_scop_number = 0;
FILE *cloog_file = init_cloog_input_file (file_scop_number);
cloog_program_dump_cloog (cloog_file, prog, scattering);
++file_scop_number;
- }
- /* Apply scattering. */
- cloog_program_scatter (prog, scattering, options);
- free_scattering (scattering);
- /* Iterators corresponding to scalar dimensions have to be extracted. */
- cloog_names_scalarize (cloog_program_names (prog), nbs,
cloog_program_scaldims (prog));
- /* Free blocklist. */
- {
- CloogBlockList *next = cloog_program_blocklist (prog);
- while (next)
{
CloogBlockList *toDelete = next;
next = cloog_block_list_next (next);
cloog_block_list_set_next (toDelete, NULL);
cloog_block_list_set_block (toDelete, NULL);
cloog_block_list_free (toDelete);
}
- cloog_program_set_blocklist (prog, NULL);
- }
- return union_domain; }
/* Return the options that will be used in GLOOG. */ @@ -1485,14 +1412,8 @@ set_cloog_options (void) GLooG. / options->esp = 1; -#ifdef CLOOG_ORG / Silence CLooG to avoid failing tests due to debug output to stderr. / options->quiet = 1; -#else - / Enable C pretty-printing mode: normalizes the substitution - equations for statements. / - options->cpp = 1; -#endif / Allow cloog to build strides with a stride width different to one. This example has stride = 4: @@ -1535,24 +1456,52 @@ debug_clast_stmt (struct clast_stmt *stm print_clast_stmt (stderr, stmt); } +static CloogInput * +generate_cloog_input (scop_p scop, htab_t params_index) +{ + CloogUnionDomain *union_domain; + CloogInput *cloog_input; + CloogDomain context; + + int nb_scattering_dims = unify_scattering_dimensions (scop); + union_domain = build_cloog_union_domain (scop); + union_domain = add_names_to_union_domain (scop, union_domain, + nb_scattering_dims, + params_index); + context = new_Cloog_Domain_from_ppl_Pointset_Powerset + (SCOP_CONTEXT (scop), scop_nb_params (scop), cloog_state); + + cloog_input = cloog_input_alloc (context, union_domain); + + return cloog_input; +} + / Translate SCOP to a CLooG program and clast. These two representations should be freed together: a clast cannot be used without a program. */ -cloog_prog_clast -scop_to_clast (scop_p scop) +static struct clast_stmt * +scop_to_clast (scop_p scop, htab_t params_index) { + CloogInput *cloog_input; + struct clast_stmt *clast; CloogOptions options = set_cloog_options (); - cloog_prog_clast pc; - / Connect new cloog prog generation to graphite. / - pc.prog = cloog_program_malloc (); - build_cloog_prog (scop, pc.prog, options); - pc.prog = cloog_program_generate (pc.prog, options); - pc.stmt = cloog_clast_create (pc.prog, options); + cloog_input = generate_cloog_input (scop, params_index); + + / Dump a .cloog input file, if requested. This feature is only + enabled in the Graphite branch. */ + if (0) + { + static size_t file_scop_number = 0; + FILE cloog_file = init_cloog_input_file (file_scop_number); + cloog_input_dump_cloog (cloog_file, cloog_input, options); + } + + clast = cloog_clast_create_from_input (cloog_input, options); cloog_options_free (options); - return pc; + return clast; } / Prints to FILE the code generated by CLooG for SCOP. */ @@ -1561,20 +1510,20 @@ void print_generated_program (FILE *file, scop_p scop) { CloogOptions *options = set_cloog_options (); + htab_t params_index; + struct clast_stmt clast; - cloog_prog_clast pc = scop_to_clast (scop); + params_index = htab_create (10, clast_name_index_elt_info, + eq_clast_name_indexes, free_clast_name_index); - fprintf (file, " (prog: \n"); - cloog_program_print (file, pc.prog); - fprintf (file, " )\n"); + clast = scop_to_clast (scop, params_index); fprintf (file, " (clast: \n"); - clast_pprint (file, pc.stmt, 0, options); + clast_pprint (file, clast, 0, options); fprintf (file, " )\n"); cloog_options_free (options); - cloog_clast_free (pc.stmt); - cloog_program_free (pc.prog); + cloog_clast_free (clast); } / Prints to STDERR the code generated by CLooG for SCOP. / @@ -1585,31 +1534,6 @@ debug_generated_program (scop_p scop) print_generated_program (stderr, scop); } -/ Add CLooG names to parameter index. The index is used to translate - back from CLooG names to GCC trees. */
-static void -create_params_index (scop_p scop, htab_t index_table, CloogProgram prog) { - CloogNames names = cloog_program_names (prog); - int nb_parameters = cloog_names_nb_parameters (names); - char **parameters = cloog_names_parameters (names); - int i; - mpz_t bound_one, bound_two;
- mpz_init (bound_one);
- mpz_init (bound_two);
- for (i = 0; i < nb_parameters; i++)
- {
compute_bounds_for_param (scop, i, bound_one, bound_two);
save_clast_name_index (index_table, parameters[i], i, i,
bound_one, bound_two);
- }
- mpz_clear (bound_one);
- mpz_clear (bound_two); -}
- /* GIMPLE Loop Generator: generates loops from STMT in GIMPLE form for the given SCOP. Return true if code generation succeeded. BB_PBB_MAPPING is a basic_block and it's related poly_bb_p mapping. @@ -1623,18 +1547,21 @@ gloog (scop_p scop, htab_t bb_pbb_mappin sese region = SCOP_REGION (scop); ifsese if_region = NULL; htab_t newivs_index, params_index;
- cloog_prog_clast pc;
struct clast_stmt *clast; struct ivs_params ip;
timevar_push (TV_GRAPHITE_CODE_GEN); gloog_error = false;
- pc = scop_to_clast (scop);
params_index = htab_create (10, clast_name_index_elt_info,
eq_clast_name_indexes, free_clast_name_index);
clast = scop_to_clast (scop, params_index);
if (dump_file && (dump_flags & TDF_DETAILS)) { fprintf (dump_file, "\nCLAST generated by CLooG: \n");
print_clast_stmt (dump_file, pc.stmt);
}print_clast_stmt (dump_file, clast); fprintf (dump_file, "\n");
@@ -1652,10 +1579,6 @@ gloog (scop_p scop, htab_t bb_pbb_mappin context_loop = SESE_ENTRY (region)->src->loop_father; newivs_index = htab_create (10, clast_name_index_elt_info, eq_clast_name_indexes, free_clast_name_index); - params_index = htab_create (10, clast_name_index_elt_info, - eq_clast_name_indexes, free_clast_name_index);
create_params_index (scop, params_index, pc.prog);
ip.newivs = &newivs; ip.newivs_index = newivs_index;
@@ -1663,7 +1586,7 @@ gloog (scop_p scop, htab_t bb_pbb_mappin ip.params_index = params_index; ip.region = region; - translate_clast (context_loop, pc.stmt, if_region->true_region->entry, + translate_clast (context_loop, clast, if_region->true_region->entry, bb_pbb_mapping, 0, &ip); graphite_verify (); scev_reset (); @@ -1680,8 +1603,7 @@ gloog (scop_p scop, htab_t bb_pbb_mappin htab_delete (newivs_index); htab_delete (params_index); VEC_free (tree, heap, newivs); - cloog_clast_free (pc.stmt); - cloog_program_free (pc.prog); + cloog_clast_free (clast); timevar_pop (TV_GRAPHITE_CODE_GEN); if (dump_file && (dump_flags & TDF_DETAILS)) Index: gcc/graphite-clast-to-gimple.h
--- gcc/graphite-clast-to-gimple.h (revision 188887) +++ gcc/graphite-clast-to-gimple.h (working copy) @@ -41,7 +41,6 @@ typedef struct bb_pbb_def } bb_pbb_def; extern bool gloog (scop_p, htab_t); -extern cloog_prog_clast scop_to_clast (scop_p); extern void debug_clast_stmt (struct clast_stmt *); extern void print_clast_stmt (FILE *, struct clast_stmt *); Index: gcc/Makefile.in
--- gcc/Makefile.in (revision 188887)
+++ gcc/Makefile.in (working copy)
@@ -2622,7 +2622,7 @@ graphite-clast-to-gimple.o : graphite-cl
$(GRAPHITE_PPL_H) graphite-poly.h graphite-clast-to-gimple.h
graphite-dependences.h graphite-cloog-compat.h
graphite-cloog-util.o : graphite-cloog-util.c (CONFIGH)(CONFIG_H) (CONFIGH)(SYSTEM_H) \
- coretypes.h graphite-cloog-util.h graphite-cloog-compat.h
- coretypes.h graphite-cloog-util.h
graphite-dependences.o : graphite-dependences.c (CONFIGH)(CONFIG_H) (CONFIGH)(SYSTEM_H)
coretypes.h (TREEFLOWH)(TREE_FLOW_H) (TREEFLOWH)(TREE_DUMP_H) (CFGLOOPH)(CFGLOOP_H) (CFGLOOPH)(TREE_DATA_REF_H)
sese.h $(GRAPHITE_PPL_H) graphite-poly.h graphite-dependences.h \
- Follow-Ups:
- Re: [PATCH] Move Graphite to upstream cloog 0.17.0
* From: Richard Guenther - Re: [PATCH] Move Graphite to upstream cloog 0.17.0
* From: Diego Novillo
- Re: [PATCH] Move Graphite to upstream cloog 0.17.0
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |