From patchwork Fri Aug 15 11:13:46 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Roman Gareev X-Patchwork-Id: 380191 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 77AFD140097 for ; Fri, 15 Aug 2014 21:14:03 +1000 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; q=dns; s=default; b=JESvjamjjw+AYa70wE 6WZyv2YZPPPZ9tiiY24W+GLQvs8zN0sfaxCSqptpkGcCeGURZodPdHxdRM2paoZp 0Vlt+GnOx4x9at/POH43gkU7Q1VaNQKFKrq9RcDxQKd+pTASt1PTMN4GUZIv/T3j EnHPmP3tWAH8K6t7R4za47LN4= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :mime-version:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; s=default; bh=05HWtQhnzFF7X7y2NEbvUFKn 0yY=; b=b0J7+uLwS7JoZ0yci/EN7QwhtFln5oVOPufngPNk5LMTLb++3zbidp2Z yVLomZ/NOFOb8Qsno5StSLcnMwPU/bF7kVpDl5Bn0vZT5np8EtuRCDZNxN4ZxDtj 1UYVseiG2DmUXegugOsGdu1zPwwYCo9Vp4T0GXy49yJxy31Rehg= Received: (qmail 1949 invoked by alias); 15 Aug 2014 11:13:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 1937 invoked by uid 89); 15 Aug 2014 11:13:52 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-yk0-f173.google.com Received: from mail-yk0-f173.google.com (HELO mail-yk0-f173.google.com) (209.85.160.173) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Fri, 15 Aug 2014 11:13:48 +0000 Received: by mail-yk0-f173.google.com with SMTP id 131so1957392ykp.18 for ; Fri, 15 Aug 2014 04:13:46 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.236.118.207 with SMTP id l55mr60104yhh.178.1408101226505; Fri, 15 Aug 2014 04:13:46 -0700 (PDT) Received: by 10.170.85.194 with HTTP; Fri, 15 Aug 2014 04:13:46 -0700 (PDT) In-Reply-To: References: Date: Fri, 15 Aug 2014 17:13:46 +0600 Message-ID: Subject: Re: [GSoC] Elimination of CLooG library installation dependency From: Roman Gareev To: Tobias Grosser Cc: Mircea Namolaru , gcc-patches@gcc.gnu.org > I've attached the patch, which should eliminate CLooG library > installation dependency from GCC. The CLooG AST generator is still the > main code generator, but the isl ast generator will be chosen in case > of nonavailability of CLooG library. > > However, I've found out a problem. Almost all the functions of the ISL > cannot be used without installed CLooG. (I get errors which contain > “undefined reference to...”). Maybe I missed something. What do you > think about this? I’ve attached a patch, which contains mentioned changes and doesn’t cause the error. I want to commit it in coming days. What do you think about it? Maybe we should make the ISL AST generator to be the main code generator of Graphite (the patch1 implements this). What do you think about it? Index: Makefile.in =================================================================== --- Makefile.in (revision 214008) +++ Makefile.in (working copy) @@ -219,6 +219,7 @@ HOST_LIBS="$(STAGE1_LIBS)"; export HOST_LIBS; \ GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \ GMPINC="$(HOST_GMPINC)"; export GMPINC; \ + ISLLIBS="$(HOST_ISLLIBS)"; export ISLLIBS; \ ISLINC="$(HOST_ISLINC)"; export ISLINC; \ CLOOGLIBS="$(HOST_CLOOGLIBS)"; export CLOOGLIBS; \ CLOOGINC="$(HOST_CLOOGINC)"; export CLOOGINC; \ @@ -310,6 +311,7 @@ HOST_GMPINC = @gmpinc@ # Where to find ISL +HOST_ISLLIBS = @isllibs@ HOST_ISLINC = @islinc@ # Where to find CLOOG Index: Makefile.tpl =================================================================== --- Makefile.tpl (revision 214008) +++ Makefile.tpl (working copy) @@ -222,6 +222,7 @@ HOST_LIBS="$(STAGE1_LIBS)"; export HOST_LIBS; \ GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \ GMPINC="$(HOST_GMPINC)"; export GMPINC; \ + ISLLIBS="$(HOST_ISLLIBS)"; export ISLLIBS; \ ISLINC="$(HOST_ISLINC)"; export ISLINC; \ CLOOGLIBS="$(HOST_CLOOGLIBS)"; export CLOOGLIBS; \ CLOOGINC="$(HOST_CLOOGINC)"; export CLOOGINC; \ @@ -313,6 +314,7 @@ HOST_GMPINC = @gmpinc@ # Where to find ISL +HOST_ISLLIBS = @isllibs@ HOST_ISLINC = @islinc@ # Where to find CLOOG Index: config/cloog.m4 =================================================================== --- config/cloog.m4 (revision 214008) +++ config/cloog.m4 (working copy) @@ -69,7 +69,7 @@ fi clooginc="-DCLOOG_INT_GMP ${clooginc}" - clooglibs="${clooglibs} -lcloog-isl ${isllibs} -lisl" + clooglibs="${clooglibs} -lcloog-isl" ] ) Index: config/isl.m4 =================================================================== --- config/isl.m4 (revision 214008) +++ config/isl.m4 (working copy) @@ -68,6 +68,9 @@ ENABLE_ISL_CHECK=no AC_MSG_WARN([using in-tree ISL, disabling version check]) fi + + islinc="-DCLOOG_INT_GMP ${islinc}" + isllibs="${isllibs} -lisl" ] ) Index: configure =================================================================== --- configure (revision 214008) +++ configure (working copy) @@ -649,6 +649,7 @@ clooginc clooglibs islinc +isllibs poststage1_ldflags poststage1_libs stage1_ldflags @@ -2760,7 +2761,7 @@ build_tools="build-texinfo build-flex build-bison build-m4 build-fixincludes" # these libraries are used by various programs built for the host environment -# +#f host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libdecnumber gmp mpfr mpc isl cloog libelf libiconv" # these tools are built for the host environment @@ -5835,10 +5836,9 @@ fi -# Treat either --without-cloog or --without-isl as a request to disable +# Treat --without-isl as a request to disable # GRAPHITE support and skip all following checks. -if test "x$with_isl" != "xno" && - test "x$with_cloog" != "xno"; then +if test "x$with_isl" != "xno"; then # Check for ISL @@ -5890,8 +5890,11 @@ $as_echo "$as_me: WARNING: using in-tree ISL, disabling version check" >&2;} fi + islinc="-DCLOOG_INT_GMP ${islinc}" + isllibs="${isllibs} -lisl" + if test "${ENABLE_ISL_CHECK}" = yes ; then _isl_saved_CFLAGS=$CFLAGS _isl_saved_LDFLAGS=$LDFLAGS @@ -6021,7 +6024,7 @@ fi clooginc="-DCLOOG_INT_GMP ${clooginc}" - clooglibs="${clooglibs} -lcloog-isl ${isllibs} -lisl" + clooglibs="${clooglibs} -lcloog-isl" @@ -6098,11 +6101,9 @@ fi fi -# If either the ISL or the CLooG check failed, disable builds of in-tree -# variants of both +# If the ISL check failed, disable builds of in-tree +# variants of both ISL and CLooG if test "x$with_isl" = xno || - test "x$with_cloog" = xno || - test "x$gcc_cv_cloog" = xno || test "x$gcc_cv_isl" = xno; then noconfigdirs="$noconfigdirs cloog isl" islinc= @@ -6110,11 +6111,20 @@ clooglibs= fi +# If the CLooG check failed, disable builds of in-tree +# variants of CLooG +if test "x$with_cloog" = xno || + test "x$gcc_cv_cloog" = xno; then + noconfigdirs="$noconfigdirs cloog isl" + clooginc= + clooglibs= +fi + # Check for LTO support. # Check whether --enable-lto was given. if test "${enable_lto+set}" = set; then : @@ -7325,7 +7335,7 @@ case $lib in - mpc | mpfr | gmp | cloog) + mpc | mpfr | gmp | isl | cloog) # If we're processing --with-$lib, --with-$lib-include or # --with-$lib-lib, for one of the libs above, and target is # different from host, don't pass the current argument to any Index: configure.ac =================================================================== --- configure.ac (revision 214008) +++ configure.ac (working copy) @@ -132,7 +132,7 @@ build_tools="build-texinfo build-flex build-bison build-m4 build-fixincludes" # these libraries are used by various programs built for the host environment -# +#f host_libs="intl libiberty opcodes bfd readline tcl tk itcl libgui zlib libbacktrace libcpp libdecnumber gmp mpfr mpc isl cloog libelf libiconv" # these tools are built for the host environment @@ -1644,10 +1644,9 @@ Equivalent to --with-isl-include=PATH/include plus --with-isl-lib=PATH/lib])]) -# Treat either --without-cloog or --without-isl as a request to disable +# Treat --without-isl as a request to disable # GRAPHITE support and skip all following checks. -if test "x$with_isl" != "xno" && - test "x$with_cloog" != "xno"; then +if test "x$with_isl" != "xno"; then # Check for ISL dnl Provide configure switches and initialize islinc & isllibs dnl with user input. @@ -1672,11 +1671,9 @@ fi fi -# If either the ISL or the CLooG check failed, disable builds of in-tree -# variants of both +# If the ISL check failed, disable builds of in-tree +# variants of both ISL and CLooG if test "x$with_isl" = xno || - test "x$with_cloog" = xno || - test "x$gcc_cv_cloog" = xno || test "x$gcc_cv_isl" = xno; then noconfigdirs="$noconfigdirs cloog isl" islinc= @@ -1684,11 +1681,20 @@ clooglibs= fi +# If the CLooG check failed, disable builds of in-tree +# variants of CLooG +if test "x$with_cloog" = xno || + test "x$gcc_cv_cloog" = xno; then + noconfigdirs="$noconfigdirs cloog isl" + clooginc= + clooglibs= +fi + +AC_SUBST(isllibs) AC_SUBST(islinc) AC_SUBST(clooglibs) AC_SUBST(clooginc) - # Check for LTO support. AC_ARG_ENABLE(lto, [AS_HELP_STRING([--enable-lto], [enable link time optimization support])], @@ -2812,7 +2818,7 @@ changequote([,]) case $lib in - mpc | mpfr | gmp | cloog) + mpc | mpfr | gmp | isl | cloog) # If we're processing --with-$lib, --with-$lib-include or # --with-$lib-lib, for one of the libs above, and target is # different from host, don't pass the current argument to any Index: gcc/Makefile.in =================================================================== --- gcc/Makefile.in (revision 214008) +++ gcc/Makefile.in (working copy) @@ -335,6 +335,7 @@ GMPINC = @GMPINC@ # How to find ISL +ISLLIBS = @ISLLIBS@ ISLINC = @ISLINC@ # How to find CLOOG @@ -1011,7 +1012,7 @@ # and the system's installed libraries. LIBS = @LIBS@ libcommon.a $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBBACKTRACE) \ $(LIBIBERTY) $(LIBDECNUMBER) $(HOST_LIBS) -BACKENDLIBS = $(CLOOGLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \ +BACKENDLIBS = $(CLOOGLIBS) $(ISLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \ $(ZLIB) # Any system libraries needed just for GNAT. SYSLIBS = @GNAT_LIBEXC@ Index: gcc/config.in =================================================================== --- gcc/config.in (revision 214008) +++ gcc/config.in (working copy) @@ -1699,13 +1699,16 @@ #undef HAVE_WORKING_VFORK #endif +/* Define if isl is in use. */ +#ifndef USED_FOR_TARGET +#undef HAVE_isl +#endif /* Define if cloog is in use. */ #ifndef USED_FOR_TARGET #undef HAVE_cloog #endif - /* Define if F_SETLKW supported by fcntl. */ #ifndef USED_FOR_TARGET #undef HOST_HAS_F_SETLKW Index: gcc/configure =================================================================== --- gcc/configure (revision 214008) +++ gcc/configure (working copy) @@ -27888,9 +27888,14 @@ +if test "x${ISLLIBS}" != "x" ; then +$as_echo "#define HAVE_isl 1" >>confdefs.h +fi + + if test "x${CLOOGLIBS}" != "x" ; then $as_echo "#define HAVE_cloog 1" >>confdefs.h Index: gcc/configure.ac =================================================================== --- gcc/configure.ac (revision 214008) +++ gcc/configure.ac (working copy) @@ -5514,6 +5514,9 @@ AC_ARG_VAR(ISLLIBS,[How to link ISL]) AC_ARG_VAR(ISLINC,[How to find ISL include files]) +if test "x${ISLLIBS}" != "x" ; then + AC_DEFINE(HAVE_isl, 1, [Define if isl is in use.]) +fi AC_ARG_VAR(CLOOGLIBS,[How to link CLOOG]) AC_ARG_VAR(CLOOGINC,[How to find CLOOG include files]) Index: gcc/graphite-blocking.c =================================================================== --- gcc/graphite-blocking.c (revision 214008) +++ gcc/graphite-blocking.c (working copy) @@ -23,14 +23,16 @@ #include "config.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include #include #include #include +#ifdef HAVE_cloog #include #include #endif +#endif #include "system.h" #include "coretypes.h" @@ -49,7 +51,7 @@ #include "tree-data-ref.h" #include "sese.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include "graphite-poly.h" Index: gcc/graphite-dependences.c =================================================================== --- gcc/graphite-dependences.c (revision 214008) +++ gcc/graphite-dependences.c (working copy) @@ -21,15 +21,17 @@ #include "config.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include #include #include #include #include +#ifdef HAVE_cloog #include #include #endif +#endif #include "system.h" #include "coretypes.h" @@ -49,7 +51,7 @@ #include "tree-scalar-evolution.h" #include "sese.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include "graphite-poly.h" #include "graphite-htab.h" @@ -630,6 +632,8 @@ return res; } +#ifdef HAVE_cloog + /* Return true when the loop at DEPTH carries dependences. BODY is the body of the loop. */ @@ -685,3 +689,4 @@ } #endif +#endif Index: gcc/graphite-interchange.c =================================================================== --- gcc/graphite-interchange.c (revision 214008) +++ gcc/graphite-interchange.c (working copy) @@ -23,7 +23,7 @@ #include "config.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include #include #include @@ -37,9 +37,11 @@ #if defined(__cplusplus) } #endif +#ifdef HAVE_cloog #include #include #endif +#endif #include "system.h" #include "coretypes.h" @@ -59,7 +61,7 @@ #include "tree-scalar-evolution.h" #include "sese.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include "graphite-poly.h" /* XXX isl rewrite following comment */ Index: gcc/graphite-isl-ast-to-gimple.c =================================================================== --- gcc/graphite-isl-ast-to-gimple.c (revision 214008) +++ gcc/graphite-isl-ast-to-gimple.c (working copy) @@ -20,7 +20,7 @@ #include "config.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include #include #include @@ -55,7 +55,7 @@ #include "tree-into-ssa.h" #include -#ifdef HAVE_cloog +#ifdef HAVE_isl #include "graphite-poly.h" #include "graphite-isl-ast-to-gimple.h" Index: gcc/graphite-optimize-isl.c =================================================================== --- gcc/graphite-optimize-isl.c (revision 214008) +++ gcc/graphite-optimize-isl.c (working copy) @@ -20,7 +20,7 @@ #include "config.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include #include #include @@ -48,7 +48,7 @@ #include "tree-scalar-evolution.h" #include "sese.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include "graphite-poly.h" static isl_union_set * Index: gcc/graphite-poly.c =================================================================== --- gcc/graphite-poly.c (revision 214008) +++ gcc/graphite-poly.c (working copy) @@ -21,7 +21,7 @@ #include "config.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include #include #include @@ -36,9 +36,11 @@ #if defined(__cplusplus) } #endif +#ifdef HAVE_cloog #include #include #endif +#endif #include "system.h" #include "coretypes.h" @@ -60,7 +62,7 @@ #include "tree-scalar-evolution.h" #include "sese.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include "graphite-poly.h" #define OPENSCOP_MAX_STRING 256 Index: gcc/graphite-scop-detection.c =================================================================== --- gcc/graphite-scop-detection.c (revision 214008) +++ gcc/graphite-scop-detection.c (working copy) @@ -21,13 +21,15 @@ #include "config.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include #include #include +#ifdef HAVE_cloog #include #include #endif +#endif #include "system.h" #include "coretypes.h" @@ -56,7 +58,7 @@ #include "tree-ssa-propagate.h" #include "cp/cp-tree.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include "graphite-poly.h" #include "graphite-scop-detection.h" Index: gcc/graphite-sese-to-poly.c =================================================================== --- gcc/graphite-sese-to-poly.c (revision 214008) +++ gcc/graphite-sese-to-poly.c (working copy) @@ -20,7 +20,7 @@ #include "config.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include #include #include @@ -38,10 +38,12 @@ #if defined(__cplusplus) } #endif +#ifdef HAVE_cloog #include #include #include #endif +#endif #include "system.h" #include "coretypes.h" @@ -74,7 +76,7 @@ #include "sese.h" #include "tree-ssa-propagate.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include "expr.h" #include "graphite-poly.h" #include "graphite-sese-to-poly.h" Index: gcc/graphite.c =================================================================== --- gcc/graphite.c (revision 214008) +++ gcc/graphite.c (working copy) @@ -34,15 +34,17 @@ #include "config.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include #include #include #include +#ifdef HAVE_cloog #include #include #include #endif +#endif #include "system.h" #include "coretypes.h" @@ -68,16 +70,19 @@ #include "tree-pass.h" #include "tree-cfgcleanup.h" -#ifdef HAVE_cloog +#ifdef HAVE_isl #include "graphite-poly.h" #include "graphite-scop-detection.h" -#include "graphite-clast-to-gimple.h" #include "graphite-isl-ast-to-gimple.h" #include "graphite-sese-to-poly.h" #include "graphite-htab.h" +#ifdef HAVE_cloog +#include "graphite-clast-to-gimple.h" + CloogState *cloog_state; +#endif /* Print global statistics to FILE. */ @@ -228,7 +233,9 @@ recompute_all_dominators (); initialize_original_copy_tables (); +#ifdef HAVE_cloog cloog_state = cloog_isl_state_malloc (ctx); +#endif if (dump_file && dump_flags) dump_function_to_file (current_function_decl, dump_file, dump_flags); @@ -251,7 +258,9 @@ tree_estimate_probability (); } +#ifdef HAVE_cloog cloog_state_free (cloog_state); +#endif free_original_copy_tables (); if (dump_file && dump_flags) @@ -292,12 +301,23 @@ } bb_pbb_htab_type bb_pbb_mapping (10); + +#ifndef HAVE_cloog + if(flag_graphite_code_gen == FGRAPHITE_CODE_GEN_CLOOG) + { + flag_graphite_code_gen = FGRAPHITE_CODE_GEN_ISL; + printf ("The CLooG code generator cannot be used (CLooG is not " + "available). The ISL code generator was chosen.\n"); + } +#endif + FOR_EACH_VEC_ELT (scops, i, scop) if (dbg_cnt (graphite_scop)) { scop->ctx = ctx; build_poly_scop (scop); +#ifdef HAVE_cloog if (POLY_SCOP_P (scop) && apply_poly_transforms (scop) && (((flag_graphite_code_gen == FGRAPHITE_CODE_GEN_ISL) @@ -305,6 +325,13 @@ || ((flag_graphite_code_gen == FGRAPHITE_CODE_GEN_CLOOG) && graphite_regenerate_ast_cloog (scop, &bb_pbb_mapping)))) need_cfg_cleanup_p = true; +#else + if (POLY_SCOP_P (scop) + && apply_poly_transforms (scop) + && graphite_regenerate_ast_isl (scop)) + need_cfg_cleanup_p = true; +#endif + } free_scops (scops); @@ -313,12 +340,12 @@ isl_ctx_free (ctx); } -#else /* If Cloog is not available: #ifndef HAVE_cloog. */ +#else /* If ISL is not available: #ifndef HAVE_isl. */ static void graphite_transform_loops (void) { - sorry ("Graphite loop optimizations cannot be used"); + sorry ("Graphite loop optimizations cannot be used (ISL is not available)."); } #endif Index: gcc/toplev.c =================================================================== --- gcc/toplev.c (revision 214008) +++ gcc/toplev.c (working copy) @@ -1275,15 +1275,15 @@ else aux_base_name = "gccaux"; -#ifndef HAVE_cloog +#ifndef HAVE_isl if (flag_graphite || flag_graphite_identity || flag_loop_block || flag_loop_interchange || flag_loop_strip_mine || flag_loop_parallelize_all) - sorry ("Graphite loop optimizations cannot be used (-fgraphite, " - "-fgraphite-identity, -floop-block, " + sorry ("Graphite loop optimizations cannot be used (ISL is not available)" + "(-fgraphite, -fgraphite-identity, -floop-block, " "-floop-interchange, -floop-strip-mine, -floop-parallelize-all, " "and -ftree-loop-linear)"); #endif