Index: CMakeLists.txt =================================================================== --- CMakeLists.txt +++ CMakeLists.txt @@ -131,7 +131,7 @@ ${CMAKE_CURRENT_BINARY_DIR}/lib/External/isl/include ${CMAKE_CURRENT_SOURCE_DIR}/lib/External/isl/include ) - set(ISL_TARGET PollyISL) + set(ISL_TARGET LLVMPollyISL) endif() include_directories( Index: cmake/CMakeLists.txt =================================================================== --- cmake/CMakeLists.txt +++ cmake/CMakeLists.txt @@ -10,12 +10,8 @@ endif() set(POLLY_CONFIG_EXPORTED_TARGETS Polly ${ISL_TARGET}) -if (NOT MSVC) - # LLVMPolly is a dummy target on Win - list(APPEND POLLY_CONFIG_EXPORTED_TARGETS LLVMPolly) -endif() if (POLLY_ENABLE_GPGPU_CODEGEN) - list(APPEND POLLY_CONFIG_EXPORTED_TARGETS PollyPPCG) + list(APPEND POLLY_CONFIG_EXPORTED_TARGETS LLVMPollyPPCG) endif() # Get the target type for every exported target Index: cmake/polly_macros.cmake =================================================================== --- cmake/polly_macros.cmake +++ cmake/polly_macros.cmake @@ -18,36 +18,16 @@ elseif (SHARED_LIBRARY) set(libkind SHARED) else() - set(libkind) + set(libkind STATIC) endif() - add_library( ${name} ${libkind} ${srcs} ) - set_target_properties(${name} PROPERTIES FOLDER "Polly") - - if( LLVM_COMMON_DEPENDS ) - add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} ) - endif( LLVM_COMMON_DEPENDS ) - if( LLVM_USED_LIBS ) - foreach(lib ${LLVM_USED_LIBS}) - target_link_libraries( ${name} PUBLIC ${lib} ) - endforeach(lib) - endif( LLVM_USED_LIBS ) + add_llvm_library( ${name} + ${srcs} - if(POLLY_LINK_LIBS) - foreach(lib ${POLLY_LINK_LIBS}) - target_link_libraries(${name} PUBLIC ${lib}) - endforeach(lib) - endif(POLLY_LINK_LIBS) + ${libkind} - if( LLVM_LINK_COMPONENTS ) - llvm_config(${name} ${LLVM_LINK_COMPONENTS}) - endif( LLVM_LINK_COMPONENTS ) - if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "LLVMPolly") - install(TARGETS ${name} - EXPORT LLVMExports - LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} - ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}) - endif() - set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name}) + LINK_LIBS ${POLLY_LINK_LIBS} + ) + set_target_properties(${name} PROPERTIES FOLDER "Polly") endmacro(add_polly_library) macro(add_polly_loadable_module name) @@ -61,7 +41,6 @@ endif() set(MODULE TRUE) add_polly_library(${name} ${srcs}) - set_target_properties(${name} PROPERTIES FOLDER "Polly") if (GLOBAL_NOT_MODULE) unset (MODULE) endif() Index: lib/CMakeLists.txt =================================================================== --- lib/CMakeLists.txt +++ lib/CMakeLists.txt @@ -21,9 +21,45 @@ file(GLOB_RECURSE POLLY_HEADER_FILES "${POLLY_SOURCE_DIR}/include/polly/*.h") endif () +# Polly-ACC requires the NVPTX backend to work. Ask LLVM about its libraries. +set(nvptx_libs) +if (GPU_CODEGEN) + # This call emits an error if they NVPTX backend is not enable. + llvm_map_components_to_libnames(nvptx_libs NVPTX) +endif () + +set(LLVM_COMPONENTS + Support + Core + ScalarOpts + InstCombine + TransformUtils + Analysis + ipo + MC + Passes + Linker + IRReader + ${nvptx_libs} + # The libraries below are required for darwin: http://PR26392 + BitReader + MCParser + Object + ProfileData + Target + Vectorize + + PollyISL + ) + +# Additional dependencies for Polly-ACC. +if (GPU_CODEGEN) + list(APPEND LLVM_COMPONENTS PollyPPCG) +endif () + # Use an object-library to add the same files to multiple libs without requiring # the sources them to be recompiled for each of them. -add_library(PollyCore OBJECT +add_llvm_library(Polly Analysis/DependenceInfo.cpp Analysis/PolyhedralInfo.cpp Analysis/ScopDetection.cpp @@ -66,96 +102,28 @@ Transform/RewriteByReferenceParameters.cpp Transform/ScopInliner.cpp ${POLLY_HEADER_FILES} - ) -set_target_properties(PollyCore PROPERTIES FOLDER "Polly") - -# Create the library that can be linked into LLVM's tools and Polly's unittests. -# It depends on all library it needs, such that with -# LLVM_POLLY_LINK_INTO_TOOLS=ON, its dependencies like PollyISL are linked as -# well. -add_polly_library(Polly $) -target_link_libraries(Polly PUBLIC - ${ISL_TARGET} -) -# Additional dependencies for Polly-ACC. -if (GPU_CODEGEN) - target_link_libraries(Polly PUBLIC PollyPPCG) -endif () - - -# Polly-ACC requires the NVPTX backend to work. Ask LLVM about its libraries. -set(nvptx_libs) -if (GPU_CODEGEN) - # This call emits an error if they NVPTX backend is not enable. - llvm_map_components_to_libnames(nvptx_libs NVPTX) -endif () + OBJECT + STATIC -if (LLVM_LINK_LLVM_DYLIB) - # The shlib/dylib contains all the LLVM components - # (including NVPTX is enabled) already. Adding them to target_link_libraries - # would cause them being twice in the address space - # (their LLVM*.a/so and their copies in libLLVM.so) - # which results in errors when the two instances try to register the same - # command-line switches. - target_link_libraries(Polly PUBLIC LLVM) -else () - target_link_libraries(Polly PUBLIC - LLVMSupport - LLVMCore - LLVMScalarOpts - LLVMInstCombine - LLVMTransformUtils - LLVMAnalysis - LLVMipo - LLVMMC - LLVMPasses - LLVMLinker - LLVMIRReader - ${nvptx_libs} - # The libraries below are required for darwin: http://PR26392 - LLVMBitReader - LLVMMCParser - LLVMObject - LLVMProfileData - LLVMTarget - LLVMVectorize - ) -endif () + DEPENDS intrinsics_gen -# Create a loadable module Polly.so that can be loaded using -# LLVM's/clang's "-load" option. -if (MSVC) - # Add dummy target, because loadable modules are not supported on Windows - add_custom_target(LLVMPolly) - set_target_properties(LLVMPolly PROPERTIES FOLDER "Polly") -else () - add_polly_loadable_module(LLVMPolly - Polly.cpp - $ + LINK_COMPONENTS ${LLVM_COMPONENTS} + LINK_LIBS ${POLLY_LINK_LIBS} ) +set_target_properties(Polly PROPERTIES FOLDER "Polly") - # Only add the dependencies that are not part of LLVM. The latter are assumed - # to be already available in the address space the module is loaded into. - # Adding them once more would have the effect that both copies try to register - # the same command line options, to which LLVM reacts with an error. - # If Polly-ACC is enabled, the NVPTX target is also expected to reside in the - # hosts. This is not the case for bugpoint. Use LLVM_POLLY_LINK_INTO_TOOLS=ON - # instead which will automatically resolve the additional dependencies by - # Polly. - target_link_libraries(LLVMPolly PUBLIC ${ISL_TARGET}) - if (GPU_CODEGEN) - target_link_libraries(LLVMPolly PUBLIC PollyPPCG) - endif () +add_llvm_loadable_module(LLVMPolly + Polly/Polly.cpp + $ - set_target_properties(LLVMPolly - PROPERTIES - LINKER_LANGUAGE CXX - PREFIX "") -endif () - -if (TARGET intrinsics_gen) - # Check if we are building as part of an LLVM build - add_dependencies(PollyCore intrinsics_gen) -endif() + LINK_COMPONENTS ${LLVM_COMPONENTS} + LINK_LIBS ${POLLY_LINK_LIBS} + ) +set_target_properties(LLVMPolly + PROPERTIES + FOLDER "Polly" + LINKER_LANGUAGE CXX + PREFIX "" + ) Index: lib/External/CMakeLists.txt =================================================================== --- lib/External/CMakeLists.txt +++ lib/External/CMakeLists.txt @@ -265,7 +265,7 @@ isl/imath/imrat.c ) - add_polly_library(PollyISL + add_polly_library(LLVMPollyISL ${ISL_FILES} ) @@ -282,17 +282,15 @@ ) endif() - add_executable(polly-isl-test + set(LLVM_LINK_COMPONENTS PollyISL) + add_llvm_executable(polly-isl-test isl/isl_test.c ) set_target_properties(polly-isl-test PROPERTIES FOLDER "Polly") - - target_link_libraries(polly-isl-test PRIVATE - PollyISL - ) + set(LLVM_LINK_COMPONENTS) # ISL requires at least C99 to compile. gcc < 5.0 use -std=gnu89 as default. - target_enable_c99(PollyISL) + target_enable_c99(LLVMPollyISL) target_enable_c99(polly-isl-test) endif (POLLY_BUNDLED_ISL) @@ -344,11 +342,11 @@ ${PET_SOURCE_DIR}/include ) -add_polly_library(PollyPPCG +add_llvm_library(LLVMPollyPPCG ${PPCG_FILES} -) -target_link_libraries(PollyPPCG PUBLIC ${ISL_TARGET}) + LINK_COMPONENTS PollyISL +) # Disable warnings for upstream projects. if (MSVC) @@ -361,19 +359,19 @@ -wd4221 # nonstandard extension used : 'identifier' : cannot be initialized using address of automatic variable ) if (POLLY_BUNDLED_ISL) - target_compile_options(PollyISL PRIVATE ${DISABLE_WARNING_FLAGS}) + target_compile_options(LLVMPollyISL PRIVATE ${DISABLE_WARNING_FLAGS}) target_compile_options(polly-isl-test PRIVATE ${DISABLE_WARNING_FLAGS}) endif (POLLY_BUNDLED_ISL) - target_compile_options(PollyPPCG PRIVATE ${DISABLE_WARNING_FLAGS}) + target_compile_options(LLVMPollyPPCG PRIVATE ${DISABLE_WARNING_FLAGS}) else () if (POLLY_BUNDLED_ISL) - set_target_properties(PollyISL polly-isl-test PROPERTIES COMPILE_FLAGS "-w") + set_target_properties(LLVMPollyISL polly-isl-test PROPERTIES COMPILE_FLAGS "-w") endif (POLLY_BUNDLED_ISL) - set_target_properties(PollyPPCG PROPERTIES COMPILE_FLAGS "-w") + set_target_properties(LLVMPollyPPCG PROPERTIES COMPILE_FLAGS "-w") endif () if(MSVC) # In the Windows API (with some exceptions), the maximum length for a path is # MAX_PATH, which is defined as 260 characters. - target_compile_definitions(PollyPPCG PRIVATE "-DPATH_MAX=260") + target_compile_definitions(LLVMPollyPPCG PRIVATE "-DPATH_MAX=260") endif () Index: lib/Polly.cpp =================================================================== --- /dev/null +++ lib/Polly.cpp @@ -1,30 +0,0 @@ -//===---------- Polly.cpp - Initialize the Polly Module -------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -//===----------------------------------------------------------------------===// - -#include "polly/RegisterPasses.h" -#include "llvm/Transforms/IPO/PassManagerBuilder.h" - -namespace { - -/// Initialize Polly passes when library is loaded. -/// -/// We use the constructor of a statically declared object to initialize the -/// different Polly passes right after the Polly library is loaded. This ensures -/// that the Polly passes are available e.g. in the 'opt' tool. -class StaticInitializer { -public: - StaticInitializer() { - llvm::PassRegistry &Registry = *llvm::PassRegistry::getPassRegistry(); - polly::initializePollyPasses(Registry); - } -}; -static StaticInitializer InitializeEverything; -} // end of anonymous namespace. Index: unittests/CMakeLists.txt =================================================================== --- unittests/CMakeLists.txt +++ unittests/CMakeLists.txt @@ -5,18 +5,9 @@ # # Will compile the list of files together and link against Polly and its dependences. function(add_polly_unittest test_name) - if(COMMAND add_unittest) - add_unittest(PollyUnitTests ${test_name} ${ARGN}) - else() - add_executable(${test_name} EXCLUDE_FROM_ALL ${ARGN}) - set_target_properties(${test_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) - - target_link_libraries(${test_name} PRIVATE gtest_main gtest) - add_dependencies(PollyUnitTests ${test_name}) - - set_property(TARGET ${test_name} PROPERTY FOLDER "Polly") - endif() - target_link_libraries(${test_name} PRIVATE Polly) + list(APPEND LLVM_LINK_COMPONENTS Analysis Core Passes Polly PollyISL) + add_unittest(PollyUnitTests ${test_name} ${ARGN}) + set_property(TARGET ${test_name} PROPERTY FOLDER "Polly") endfunction() add_subdirectory(Isl)