When graphite support is enabled, C++ libraries (libppl, libcloog, libgmpxx, libstdc++-v3) are linked into cc1. Because of libstdc++ symbol versioning this has the unfortunate side effect of making it difficult to switch to a previous version of GCC using gcc-config once these libraries have be built with the newer version. (http://bugs.gentoo.org/315377#c3) Instead, dlopen libcloog as necessary. This patch originated in Fedora and was modified to work on FreeBSD (http://bugs.gentoo.org/317211). 2011-01-04 Jakub Jelinek * Makefile.in (BACKENDLIBS): Link against -ldl instead of -lcloog -lppl. (graphite.o, graphite%.o): Force -O, remove -fkeep-inline-functions. (GRAPHITE_CLOOG_UTIL_H, GRAPHITE_POLY_H): New. (graphite*.o): Adjust dependencies. * graphite-cloog-compat.h: Include . Reference libcloog and libppl symbols through pointers in cloog_pointers__ variable. * graphite.c (init_cloog_pointers): New function. (graphite_transform_loops): Call init_cloog_pointers. * graphite-clast-to-gimple.c (gcc_type_for_iv_of_clast_loop): Rename stmt_for argument to stmt_fora. * graphite-poly.h: Include graphite-cloog-util.h. 2011-04-02 Ryan Hill * configure.ac (DL_LIB): Check how to dlopen. * configure: Regenerate. * Makefile.in (BACKENDLIBS): Use DL_LIB. * graphite-cloog-compat.h: Add missing symbols. 2012-03-02 * ported to gcc-4.6.3 --- a/gcc/Makefile.in 2011-08-20 09:51:09.000000000 +0200 +++ b/gcc/Makefile.in 2012-03-02 00:15:01.193908120 +0100 @@ -984,6 +984,8 @@ PLUGIN_H = plugin.h $(GCC_PLUGIN_H) PLUGIN_VERSION_H = plugin-version.h configargs.h LIBFUNCS_H = libfuncs.h $(HASHTAB_H) +GRAPHITE_CLOOG_UTIL_H = graphite-cloog-util.h graphite-cloog-compat.h +GRAPHITE_POLY_H = graphite-poly.h $(GRAPHITE_CLOOG_UTIL_H) # # Now figure out from those variables how to compile and link. @@ -1037,7 +1039,7 @@ # and the system's installed libraries. LIBS = @LIBS@ $(CPPLIB) $(LIBINTL) $(LIBICONV) $(LIBIBERTY) $(LIBDECNUMBER) \ $(HOST_LIBS) -BACKENDLIBS = $(CLOOGLIBS) $(PPLLIBS) $(GMPLIBS) $(PLUGINLIBS) $(HOST_LIBS) \ +BACKENDLIBS = $(GMPLIBS) $(if $(CLOOGLIBS),@DL_LIB@) $(PLUGINLIBS) $(HOST_LIBS) \ $(ZLIB) # Any system libraries needed just for GNAT. SYSLIBS = @GNAT_LIBEXC@ @@ -2668,40 +2670,40 @@ $(TREE_FLOW_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) tree-pass.h value-prof.h graphite.o : graphite.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(DIAGNOSTIC_CORE_H) \ $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) sese.h \ - $(DBGCNT_H) graphite-ppl.h graphite-poly.h graphite-scop-detection.h \ + $(DBGCNT_H) graphite-ppl.h $(GRAPHITE_POLY_H) graphite-scop-detection.h \ graphite-clast-to-gimple.h graphite-sese-to-poly.h graphite-blocking.o : graphite-blocking.c $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) \ - sese.h graphite-ppl.h graphite-poly.h + sese.h graphite-ppl.h $(GRAPHITE_POLY_H) graphite-clast-to-gimple.o : graphite-clast-to-gimple.c $(CONFIG_H) \ $(SYSTEM_H) coretypes.h $(DIAGNOSTIC_CORE_H) $(TREE_FLOW_H) $(TREE_DUMP_H) \ - $(CFGLOOP_H) $(TREE_DATA_REF_H) sese.h graphite-cloog-util.h \ - graphite-ppl.h graphite-poly.h graphite-clast-to-gimple.h \ + $(CFGLOOP_H) $(TREE_DATA_REF_H) sese.h $(GRAPHITE_CLOOG_UTIL_H) \ + 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 $(CONFIG_H) $(SYSTEM_H) \ - coretypes.h graphite-cloog-util.h graphite-cloog-compat.h + coretypes.h $(GRAPHITE_CLOOG_UTIL_H) graphite-cloog-compat.h graphite-dependences.o : graphite-dependences.c $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) \ - sese.h graphite-ppl.h graphite-poly.h graphite-dependences.h \ - graphite-cloog-util.h + sese.h graphite-ppl.h $(GRAPHITE_POLY_H) graphite-dependences.h \ + $(GRAPHITE_CLOOG_UTIL_H) graphite-flattening.o : graphite-flattening.c $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) \ - sese.h graphite-ppl.h graphite-poly.h + sese.h graphite-ppl.h $(GRAPHITE_POLY_H) graphite-interchange.o : graphite-interchange.c $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) \ - sese.h graphite-ppl.h graphite-poly.h + sese.h graphite-ppl.h $(GRAPHITE_POLY_H) graphite-poly.o : graphite-poly.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(DIAGNOSTIC_CORE_H) $(TREE_FLOW_H) $(TREE_DUMP_H) gimple-pretty-print.h \ - $(CFGLOOP_H) $(TREE_DATA_REF_H) sese.h graphite-ppl.h graphite-poly.h \ - graphite-dependences.h graphite-cloog-util.h + $(CFGLOOP_H) $(TREE_DATA_REF_H) sese.h graphite-ppl.h $(GRAPHITE_POLY_H) \ + graphite-dependences.h $(GRAPHITE_CLOOG_UTIL_H) graphite-ppl.o : graphite-ppl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ - graphite-cloog-util.h graphite-ppl.h + $(GRAPHITE_CLOOG_UTIL_H) graphite-ppl.h graphite-scop-detection.o : graphite-scop-detection.c $(CONFIG_H) $(SYSTEM_H) \ coretypes.h $(TREE_FLOW_H) $(CFGLOOP_H) $(TREE_DATA_REF_H) $(TREE_PASS_H) \ - sese.h graphite-ppl.h graphite-poly.h graphite-scop-detection.h + sese.h graphite-ppl.h $(GRAPHITE_POLY_H) graphite-scop-detection.h graphite-sese-to-poly.o : graphite-sese-to-poly.c $(CONFIG_H) \ $(SYSTEM_H) coretypes.h $(TREE_FLOW_H) $(TREE_DUMP_H) $(CFGLOOP_H) \ - $(TREE_DATA_REF_H) domwalk.h sese.h graphite-ppl.h graphite-poly.h \ + $(TREE_DATA_REF_H) domwalk.h sese.h graphite-ppl.h $(GRAPHITE_POLY_H) \ graphite-sese-to-poly.h tree-vect-loop.o: tree-vect-loop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \ $(TM_H) $(GGC_H) $(TREE_H) $(BASIC_BLOCK_H) $(DIAGNOSTIC_H) $(TREE_FLOW_H) \ @@ -3483,6 +3485,11 @@ $(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) \ $(out_file) $(OUTPUT_OPTION) +graphite%.o : \ + ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS)) +graphite.o : \ + ALL_CFLAGS := -O $(filter-out -fkeep-inline-functions, $(ALL_CFLAGS)) + # Build auxiliary files that support ecoff format. mips-tfile: mips-tfile.o version.o $(LIBDEPS) $(LINKER) $(LINKERFLAGS) $(LDFLAGS) -o $@ \ --- a/gcc/configure 2012-03-01 23:46:35.178236251 +0100 +++ b/gcc/configure 2012-03-02 00:20:36.991710070 +0100 @@ -602,6 +602,7 @@ LIBOBJS enable_plugin pluginlibs +DL_LIB CLOOGINC CLOOGLIBS PPLINC @@ -17495,7 +17496,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 17498 "configure" +#line 17499 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -17601,7 +17602,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 17604 "configure" +#line 17605 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -26282,6 +26283,7 @@ fi # Check -ldl + DL_LIB= saved_LIBS="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 $as_echo_n "checking for library containing dlopen... " >&6; } @@ -26341,7 +26343,9 @@ if test x"$ac_cv_search_dlopen" = x"-ldl"; then pluginlibs="$pluginlibs -ldl" + DL_LIB=$ac_cv_search_dlopen fi + LIBS="$saved_LIBS" # Check that we can build shared objects with -fPIC -shared --- a/gcc/configure.ac 2012-03-01 23:46:35.179236239 +0100 +++ b/gcc/configure.ac 2012-03-02 00:22:54.920985716 +0100 @@ -4839,11 +4839,14 @@ fi # Check -ldl + DL_LIB= saved_LIBS="$LIBS" AC_SEARCH_LIBS([dlopen], [dl]) if test x"$ac_cv_search_dlopen" = x"-ldl"; then pluginlibs="$pluginlibs -ldl" + DL_LIB=$ac_cv_search_dlopen fi + AC_SUBST(DL_LIB) LIBS="$saved_LIBS" # Check that we can build shared objects with -fPIC -shared --- a/gcc/graphite-cloog-compat.h 2011-03-14 09:18:52.000000000 +0100 +++ b/gcc/graphite-cloog-compat.h 2012-03-02 00:31:54.414241124 +0100 @@ -272,4 +272,269 @@ return m->NbRows; } #endif /* CLOOG_ORG */ + +#include +#define DYNSYMS \ + DYNSYM (cloog_block_alloc); \ + DYNSYM (cloog_block_list_free); \ + DYNSYM (cloog_block_list_malloc); \ + DYNSYM (cloog_clast_create); \ + DYNSYM (cloog_clast_free); \ + DYNSYM (cloog_domain_free); \ + DYNSYM (cloog_domain_matrix2domain); \ + DYNSYM (cloog_initialize); \ + DYNSYM (cloog_loop_malloc); \ + DYNSYM (cloog_matrix_alloc); \ + DYNSYM (cloog_matrix_copy); \ + DYNSYM (cloog_matrix_free); \ + DYNSYM (cloog_matrix_print); \ + DYNSYM (cloog_names_malloc); \ + DYNSYM (cloog_names_scalarize); \ + DYNSYM (cloog_options_free); \ + DYNSYM (cloog_options_malloc); \ + DYNSYM (cloog_program_dump_cloog); \ + DYNSYM (cloog_program_extract_scalars); \ + DYNSYM (cloog_program_free); \ + DYNSYM (cloog_program_generate); \ + DYNSYM (cloog_program_malloc); \ + DYNSYM (cloog_program_print); \ + DYNSYM (cloog_program_scatter); \ + DYNSYM (cloog_statement_alloc); \ + DYNSYM (cloog_domain_union); \ + DYNSYM (cloog_matrix_read); \ + DYNSYM (cloog_new_pol); \ + DYNSYM (cloog_vector_gcd); \ + DYNSYM (ppl_finalize); \ + DYNSYM (ppl_assign_Coefficient_from_mpz_t); \ + DYNSYM (ppl_assign_Linear_Expression_from_Linear_Expression); \ + DYNSYM (ppl_Coefficient_to_mpz_t); \ + DYNSYM (ppl_Constraint_coefficient); \ + DYNSYM (ppl_Constraint_inhomogeneous_term); \ + DYNSYM (ppl_Constraint_space_dimension); \ + DYNSYM (ppl_Constraint_System_begin); \ + DYNSYM (ppl_Constraint_System_const_iterator_dereference); \ + DYNSYM (ppl_Constraint_System_const_iterator_equal_test); \ + DYNSYM (ppl_Constraint_System_const_iterator_increment); \ + DYNSYM (ppl_Constraint_System_end); \ + DYNSYM (ppl_Constraint_System_insert_Constraint); \ + DYNSYM (ppl_Constraint_System_space_dimension); \ + DYNSYM (ppl_Constraint_type); \ + DYNSYM (ppl_delete_Coefficient); \ + DYNSYM (ppl_delete_Constraint); \ + DYNSYM (ppl_delete_Constraint_System_const_iterator); \ + DYNSYM (ppl_delete_Linear_Expression); \ + DYNSYM (ppl_delete_Pointset_Powerset_C_Polyhedron); \ + DYNSYM (ppl_delete_Pointset_Powerset_C_Polyhedron_iterator); \ + DYNSYM (ppl_delete_Polyhedron); \ + DYNSYM (ppl_Linear_Expression_add_to_coefficient); \ + DYNSYM (ppl_Linear_Expression_add_to_inhomogeneous); \ + DYNSYM (ppl_Linear_Expression_coefficient); \ + DYNSYM (ppl_Linear_Expression_inhomogeneous_term); \ + DYNSYM (ppl_Linear_Expression_space_dimension); \ + DYNSYM (ppl_new_Coefficient); \ + DYNSYM (ppl_new_Coefficient_from_mpz_t); \ + DYNSYM (ppl_new_Constraint); \ + DYNSYM (ppl_new_Constraint_System); \ + DYNSYM (ppl_new_Constraint_System_const_iterator); \ + DYNSYM (ppl_new_C_Polyhedron_from_C_Polyhedron); \ + DYNSYM (ppl_new_C_Polyhedron_from_space_dimension); \ + DYNSYM (ppl_new_C_Polyhedron_recycle_Constraint_System); \ + DYNSYM (ppl_new_Linear_Expression); \ + DYNSYM (ppl_new_Linear_Expression_from_Constraint); \ + DYNSYM (ppl_new_Linear_Expression_from_Linear_Expression); \ + DYNSYM (ppl_new_Linear_Expression_with_dimension); \ + DYNSYM (ppl_new_Pointset_Powerset_C_Polyhedron_from_C_Polyhedron); \ + DYNSYM (ppl_new_Pointset_Powerset_C_Polyhedron_from_Pointset_Powerset_C_Polyhedron); \ + DYNSYM (ppl_new_Pointset_Powerset_C_Polyhedron_from_space_dimension); \ + DYNSYM (ppl_new_Pointset_Powerset_C_Polyhedron_iterator); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_add_constraint); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_add_space_dimensions_and_embed); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_difference_assign); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_intersection_assign); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_is_empty); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_iterator_begin); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_iterator_dereference); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_iterator_end); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_iterator_equal_test); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_iterator_increment); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_map_space_dimensions); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_maximize); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_minimize); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_remove_space_dimensions); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_size); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_space_dimension); \ + DYNSYM (ppl_Pointset_Powerset_C_Polyhedron_upper_bound_assign); \ + DYNSYM (ppl_Polyhedron_add_constraint); \ + DYNSYM (ppl_Polyhedron_add_constraints); \ + DYNSYM (ppl_Polyhedron_add_space_dimensions_and_embed); \ + DYNSYM (ppl_Polyhedron_get_constraints); \ + DYNSYM (ppl_Polyhedron_map_space_dimensions); \ + DYNSYM (ppl_Polyhedron_remove_space_dimensions); \ + DYNSYM (ppl_Polyhedron_space_dimension); \ + DYNSYM (ppl_subtract_Linear_Expression_from_Linear_Expression); \ + DYNSYM (pprint); \ + DYNSYM (stmt_block); \ + DYNSYM (stmt_for); \ + DYNSYM (stmt_guard); \ + DYNSYM (stmt_root); \ + DYNSYM (stmt_user); \ + DYNSYM (ppl_delete_Constraint_System); \ + DYNSYM (ppl_initialize); \ + DYNSYM (ppl_new_Constraint_System_from_Constraint); \ + DYNSYM (ppl_new_C_Polyhedron_from_Constraint_System); \ + DYNSYM (ppl_Polyhedron_affine_image); \ + DYNSYM (ppl_io_fprint_Pointset_Powerset_C_Polyhedron); \ + DYNSYM (ppl_new_PIP_Problem_from_constraints); \ + DYNSYM (ppl_PIP_Problem_is_satisfiable); \ + DYNSYM (ppl_delete_PIP_Problem); +extern struct +{ + bool inited; + void *h; +#define DYNSYM(x) __typeof (x) *p_##x + DYNSYMS +#undef DYNSYM +} cloog_pointers__; + +#define cloog_block_alloc (*cloog_pointers__.p_cloog_block_alloc) +#define cloog_block_list_free (*cloog_pointers__.p_cloog_block_list_free) +#define cloog_block_list_malloc (*cloog_pointers__.p_cloog_block_list_malloc) +#define cloog_clast_create (*cloog_pointers__.p_cloog_clast_create) +#define cloog_clast_free (*cloog_pointers__.p_cloog_clast_free) +#define cloog_domain_free (*cloog_pointers__.p_cloog_domain_free) +#define cloog_domain_matrix2domain (*cloog_pointers__.p_cloog_domain_matrix2domain) +#define cloog_initialize (*cloog_pointers__.p_cloog_initialize) +#ifndef CLOOG_ORG +#undef cloog_loop_malloc +#define cloog_loop_malloc(STATE) (*cloog_pointers__.p_cloog_loop_malloc) () +#else +#define cloog_loop_malloc (*cloog_pointers__.p_cloog_loop_malloc) +#endif +#define cloog_matrix_alloc (*cloog_pointers__.p_cloog_matrix_alloc) +#define cloog_matrix_copy (*cloog_pointers__.p_cloog_matrix_copy) +#define cloog_matrix_free (*cloog_pointers__.p_cloog_matrix_free) +#define cloog_matrix_print (*cloog_pointers__.p_cloog_matrix_print) +#define cloog_names_malloc (*cloog_pointers__.p_cloog_names_malloc) +#define cloog_names_scalarize (*cloog_pointers__.p_cloog_names_scalarize) +#define cloog_options_free (*cloog_pointers__.p_cloog_options_free) +#ifndef CLOOG_ORG +#undef cloog_options_malloc +#define cloog_options_malloc(STATE) (*cloog_pointers__.p_cloog_options_malloc) () +#undef cloog_program_dump_cloog +#define cloog_program_dump_cloog(DUMPFILE, PROGRAM, SCATTERINGLIST) \ + (*cloog_pointers__.p_cloog_program_dump_cloog) (DUMPFILE, PROGRAM) +#undef cloog_program_extract_scalars +#define cloog_program_extract_scalars(PROG, SCATT, OPT) \ + (*cloog_pointers__.p_cloog_program_extract_scalars) (PROG, SCATT) +#else +#define cloog_options_malloc (*cloog_pointers__.p_cloog_options_malloc) +#define cloog_program_dump_cloog (*cloog_pointers__.p_cloog_program_dump_cloog) +#define cloog_program_extract_scalars (*cloog_pointers__.p_cloog_program_extract_scalars) +#endif +#define cloog_program_free (*cloog_pointers__.p_cloog_program_free) +#define cloog_program_generate (*cloog_pointers__.p_cloog_program_generate) +#define cloog_program_malloc (*cloog_pointers__.p_cloog_program_malloc) +#define cloog_program_print (*cloog_pointers__.p_cloog_program_print) +#ifndef CLOOG_ORG +#undef cloog_program_scatter +#define cloog_program_scatter(PROG, SCATT, OPT) \ + (*cloog_pointers__.p_cloog_program_scatter) (PROG, SCATT) +#undef cloog_statement_alloc +#define cloog_statement_alloc(STATE, INDEX) \ + (*cloog_pointers__.p_cloog_statement_alloc) (INDEX) +#else +#define cloog_program_scatter (*cloog_pointers__.p_cloog_program_scatter) +#define cloog_statement_alloc (*cloog_pointers__.p_cloog_statement_alloc) +#endif +#define cloog_domain_union (*cloog_pointers__.p_cloog_domain_union) +#define cloog_matrix_read (*cloog_pointers__.p_cloog_matrix_read) +#define cloog_new_pol (*cloog_pointers__.p_cloog_new_pol) +#define cloog_vector_gcd (*cloog_pointers__.p_cloog_vector_gcd) +#define ppl_finalize (*cloog_pointers__.p_ppl_finalize) +#define ppl_assign_Coefficient_from_mpz_t (*cloog_pointers__.p_ppl_assign_Coefficient_from_mpz_t) +#define ppl_assign_Linear_Expression_from_Linear_Expression (*cloog_pointers__.p_ppl_assign_Linear_Expression_from_Linear_Expression) +#define ppl_Coefficient_to_mpz_t (*cloog_pointers__.p_ppl_Coefficient_to_mpz_t) +#define ppl_Constraint_coefficient (*cloog_pointers__.p_ppl_Constraint_coefficient) +#define ppl_Constraint_inhomogeneous_term (*cloog_pointers__.p_ppl_Constraint_inhomogeneous_term) +#define ppl_Constraint_space_dimension (*cloog_pointers__.p_ppl_Constraint_space_dimension) +#define ppl_Constraint_System_begin (*cloog_pointers__.p_ppl_Constraint_System_begin) +#define ppl_Constraint_System_const_iterator_dereference (*cloog_pointers__.p_ppl_Constraint_System_const_iterator_dereference) +#define ppl_Constraint_System_const_iterator_equal_test (*cloog_pointers__.p_ppl_Constraint_System_const_iterator_equal_test) +#define ppl_Constraint_System_const_iterator_increment (*cloog_pointers__.p_ppl_Constraint_System_const_iterator_increment) +#define ppl_Constraint_System_end (*cloog_pointers__.p_ppl_Constraint_System_end) +#define ppl_Constraint_System_insert_Constraint (*cloog_pointers__.p_ppl_Constraint_System_insert_Constraint) +#define ppl_Constraint_System_space_dimension (*cloog_pointers__.p_ppl_Constraint_System_space_dimension) +#define ppl_Constraint_type (*cloog_pointers__.p_ppl_Constraint_type) +#define ppl_delete_Coefficient (*cloog_pointers__.p_ppl_delete_Coefficient) +#define ppl_delete_Constraint (*cloog_pointers__.p_ppl_delete_Constraint) +#define ppl_delete_Constraint_System_const_iterator (*cloog_pointers__.p_ppl_delete_Constraint_System_const_iterator) +#define ppl_delete_Linear_Expression (*cloog_pointers__.p_ppl_delete_Linear_Expression) +#define ppl_delete_Pointset_Powerset_C_Polyhedron (*cloog_pointers__.p_ppl_delete_Pointset_Powerset_C_Polyhedron) +#define ppl_delete_Pointset_Powerset_C_Polyhedron_iterator (*cloog_pointers__.p_ppl_delete_Pointset_Powerset_C_Polyhedron_iterator) +#define ppl_delete_Polyhedron (*cloog_pointers__.p_ppl_delete_Polyhedron) +#define ppl_Linear_Expression_add_to_coefficient (*cloog_pointers__.p_ppl_Linear_Expression_add_to_coefficient) +#define ppl_Linear_Expression_add_to_inhomogeneous (*cloog_pointers__.p_ppl_Linear_Expression_add_to_inhomogeneous) +#define ppl_Linear_Expression_coefficient (*cloog_pointers__.p_ppl_Linear_Expression_coefficient) +#define ppl_Linear_Expression_inhomogeneous_term (*cloog_pointers__.p_ppl_Linear_Expression_inhomogeneous_term) +#define ppl_Linear_Expression_space_dimension (*cloog_pointers__.p_ppl_Linear_Expression_space_dimension) +#define ppl_new_Coefficient (*cloog_pointers__.p_ppl_new_Coefficient) +#define ppl_new_Coefficient_from_mpz_t (*cloog_pointers__.p_ppl_new_Coefficient_from_mpz_t) +#define ppl_new_Constraint (*cloog_pointers__.p_ppl_new_Constraint) +#define ppl_new_Constraint_System (*cloog_pointers__.p_ppl_new_Constraint_System) +#define ppl_new_Constraint_System_const_iterator (*cloog_pointers__.p_ppl_new_Constraint_System_const_iterator) +#define ppl_new_C_Polyhedron_from_C_Polyhedron (*cloog_pointers__.p_ppl_new_C_Polyhedron_from_C_Polyhedron) +#define ppl_new_C_Polyhedron_from_space_dimension (*cloog_pointers__.p_ppl_new_C_Polyhedron_from_space_dimension) +#define ppl_new_C_Polyhedron_recycle_Constraint_System (*cloog_pointers__.p_ppl_new_C_Polyhedron_recycle_Constraint_System) +#define ppl_new_Linear_Expression (*cloog_pointers__.p_ppl_new_Linear_Expression) +#define ppl_new_Linear_Expression_from_Constraint (*cloog_pointers__.p_ppl_new_Linear_Expression_from_Constraint) +#define ppl_new_Linear_Expression_from_Linear_Expression (*cloog_pointers__.p_ppl_new_Linear_Expression_from_Linear_Expression) +#define ppl_new_Linear_Expression_with_dimension (*cloog_pointers__.p_ppl_new_Linear_Expression_with_dimension) +#define ppl_new_Pointset_Powerset_C_Polyhedron_from_C_Polyhedron (*cloog_pointers__.p_ppl_new_Pointset_Powerset_C_Polyhedron_from_C_Polyhedron) +#define ppl_new_Pointset_Powerset_C_Polyhedron_from_Pointset_Powerset_C_Polyhedron (*cloog_pointers__.p_ppl_new_Pointset_Powerset_C_Polyhedron_from_Pointset_Powerset_C_Polyhedron) +#define ppl_new_Pointset_Powerset_C_Polyhedron_from_space_dimension (*cloog_pointers__.p_ppl_new_Pointset_Powerset_C_Polyhedron_from_space_dimension) +#define ppl_new_Pointset_Powerset_C_Polyhedron_iterator (*cloog_pointers__.p_ppl_new_Pointset_Powerset_C_Polyhedron_iterator) +#define ppl_Pointset_Powerset_C_Polyhedron_add_constraint (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_add_constraint) +#define ppl_Pointset_Powerset_C_Polyhedron_add_space_dimensions_and_embed (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_add_space_dimensions_and_embed) +#define ppl_Pointset_Powerset_C_Polyhedron_difference_assign (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_difference_assign) +#define ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_intersection_assign) +#define ppl_Pointset_Powerset_C_Polyhedron_is_empty (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_is_empty) +#define ppl_Pointset_Powerset_C_Polyhedron_iterator_begin (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_iterator_begin) +#define ppl_Pointset_Powerset_C_Polyhedron_iterator_dereference (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_iterator_dereference) +#define ppl_Pointset_Powerset_C_Polyhedron_iterator_end (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_iterator_end) +#define ppl_Pointset_Powerset_C_Polyhedron_iterator_equal_test (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_iterator_equal_test) +#define ppl_Pointset_Powerset_C_Polyhedron_iterator_increment (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_iterator_increment) +#define ppl_Pointset_Powerset_C_Polyhedron_map_space_dimensions (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_map_space_dimensions) +#define ppl_Pointset_Powerset_C_Polyhedron_maximize (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_maximize) +#define ppl_Pointset_Powerset_C_Polyhedron_minimize (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_minimize) +#define ppl_Pointset_Powerset_C_Polyhedron_remove_space_dimensions (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_remove_space_dimensions) +#define ppl_Pointset_Powerset_C_Polyhedron_size (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_size) +#define ppl_Pointset_Powerset_C_Polyhedron_space_dimension (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_space_dimension) +#define ppl_Pointset_Powerset_C_Polyhedron_upper_bound_assign (*cloog_pointers__.p_ppl_Pointset_Powerset_C_Polyhedron_upper_bound_assign) +#define ppl_Polyhedron_add_constraint (*cloog_pointers__.p_ppl_Polyhedron_add_constraint) +#define ppl_Polyhedron_add_constraints (*cloog_pointers__.p_ppl_Polyhedron_add_constraints) +#define ppl_Polyhedron_add_space_dimensions_and_embed (*cloog_pointers__.p_ppl_Polyhedron_add_space_dimensions_and_embed) +#define ppl_Polyhedron_get_constraints (*cloog_pointers__.p_ppl_Polyhedron_get_constraints) +#define ppl_Polyhedron_map_space_dimensions (*cloog_pointers__.p_ppl_Polyhedron_map_space_dimensions) +#define ppl_Polyhedron_remove_space_dimensions (*cloog_pointers__.p_ppl_Polyhedron_remove_space_dimensions) +#define ppl_Polyhedron_space_dimension (*cloog_pointers__.p_ppl_Polyhedron_space_dimension) +#define ppl_subtract_Linear_Expression_from_Linear_Expression (*cloog_pointers__.p_ppl_subtract_Linear_Expression_from_Linear_Expression) +#define pprint (*cloog_pointers__.p_pprint) +#define stmt_block (*cloog_pointers__.p_stmt_block) +#define stmt_for (*cloog_pointers__.p_stmt_for) +#define stmt_guard (*cloog_pointers__.p_stmt_guard) +#define stmt_root (*cloog_pointers__.p_stmt_root) +#define stmt_user (*cloog_pointers__.p_stmt_user) +#define ppl_delete_Constraint_System (*cloog_pointers__.p_ppl_delete_Constraint_System) +#define ppl_initialize (*cloog_pointers__.p_ppl_initialize) +#define ppl_new_Constraint_System_from_Constraint (*cloog_pointers__.p_ppl_new_Constraint_System_from_Constraint) +#define ppl_new_C_Polyhedron_from_Constraint_System (*cloog_pointers__.p_ppl_new_C_Polyhedron_from_Constraint_System) +#define ppl_Polyhedron_affine_image (*cloog_pointers__.p_ppl_Polyhedron_affine_image) +#define ppl_io_fprint_Pointset_Powerset_C_Polyhedron (*cloog_pointers__.p_ppl_io_fprint_Pointset_Powerset_C_Polyhedron) +#define ppl_new_PIP_Problem_from_constraints (*cloog_pointers__.p_ppl_new_PIP_Problem_from_constraints) +#define ppl_PIP_Problem_is_satisfiable (*cloog_pointers__.p_ppl_PIP_Problem_is_satisfiable) +#define ppl_delete_PIP_Problem (*cloog_pointers__.p_ppl_delete_PIP_Problem) + +#define cloog_finalize (*cloog_pointers__.p_ppl_finalize) + + #endif /* GRAPHITE_CLOOG_COMPAT_H */ --- a/gcc/graphite-poly.h 2011-01-25 07:46:56.000000000 +0100 +++ b/gcc/graphite-poly.h 2012-03-02 00:34:04.023620780 +0100 @@ -22,6 +22,8 @@ #ifndef GCC_GRAPHITE_POLY_H #define GCC_GRAPHITE_POLY_H +#include "graphite-cloog-util.h" + typedef struct poly_dr *poly_dr_p; DEF_VEC_P(poly_dr_p); DEF_VEC_ALLOC_P (poly_dr_p, heap); --- a/gcc/graphite.c 2011-03-12 23:05:38.000000000 +0100 +++ b/gcc/graphite.c 2012-03-02 00:38:16.703461849 +0100 @@ -56,6 +56,35 @@ CloogState *cloog_state; +__typeof (cloog_pointers__) cloog_pointers__; + +static bool +init_cloog_pointers (void) +{ + void *h; + + if (cloog_pointers__.inited) + return cloog_pointers__.h != NULL; + h = dlopen ("libcloog.so.0", RTLD_LAZY); + cloog_pointers__.h = h; + if (h == NULL) + return false; +#define DYNSYM(x) \ + do \ + { \ + union { __typeof (cloog_pointers__.p_##x) p; void *q; } u; \ + u.q = dlsym (h, #x); \ + if (u.q == NULL) \ + return false; \ + cloog_pointers__.p_##x = u.p; \ + } \ + while (0) + DYNSYMS +#undef DYNSYM + return true; +} + + /* Print global statistics to FILE. */ static void @@ -201,6 +230,12 @@ return false; } + if (!init_cloog_pointers ()) + { + sorry ("Graphite loop optimizations cannot be used"); + return false; + } + scev_reset (); recompute_all_dominators (); initialize_original_copy_tables (); --- a/gcc/graphite-clast-to-gimple.c 2011-03-12 23:05:38.000000000 +0100 +++ b/gcc/graphite-clast-to-gimple.c 2012-03-02 00:45:30.495038708 +0100 @@ -738,10 +738,10 @@ from STMT_FOR. */ static tree -gcc_type_for_iv_of_clast_loop (struct clast_for *stmt_for, int level, +gcc_type_for_iv_of_clast_loop (struct clast_for *stmt_fora, int level, tree lb_type, tree ub_type) { - struct clast_stmt *stmt = (struct clast_stmt *) stmt_for; + struct clast_stmt *stmt = (struct clast_stmt *) stmt_fora; struct clast_user_stmt *body = clast_get_body_of_loop (stmt); CloogStatement *cs = body->statement; poly_bb_p pbb = (poly_bb_p) cloog_statement_usr (cs);