set(LLVM_NO_RTTI 1) set(ISL_CODEGEN_FILES CodeGen/IslAst.cpp CodeGen/IslExprBuilder.cpp CodeGen/IslNodeBuilder.cpp CodeGen/CodeGeneration.cpp) if (GPU_CODEGEN) set (GPGPU_CODEGEN_FILES CodeGen/PPCGCodeGeneration.cpp CodeGen/ManagedMemoryRewrite.cpp ) endif (GPU_CODEGEN) # Compile ISL into a separate library. add_subdirectory(External) set(POLLY_HEADER_FILES) if (MSVC_IDE OR XCODE) file(GLOB_RECURSE POLLY_HEADER_FILES "${POLLY_SOURCE_DIR}/include/polly/*.h") 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_llvm_pass_plugin(Polly Analysis/DependenceInfo.cpp Analysis/PolyhedralInfo.cpp Analysis/ScopDetection.cpp Analysis/ScopDetectionDiagnostic.cpp Analysis/ScopInfo.cpp Analysis/ScopBuilder.cpp Analysis/ScopGraphPrinter.cpp Analysis/ScopPass.cpp Analysis/PruneUnprofitable.cpp CodeGen/BlockGenerators.cpp ${ISL_CODEGEN_FILES} CodeGen/LoopGenerators.cpp CodeGen/LoopGeneratorsGOMP.cpp CodeGen/LoopGeneratorsKMP.cpp CodeGen/IRBuilder.cpp CodeGen/Utils.cpp CodeGen/RuntimeDebugBuilder.cpp CodeGen/CodegenCleanup.cpp CodeGen/PerfMonitor.cpp ${GPGPU_CODEGEN_FILES} Exchange/JSONExporter.cpp Support/GICHelper.cpp Support/SCEVAffinator.cpp Support/SCEVValidator.cpp Support/RegisterPasses.cpp Support/ScopHelper.cpp Support/ScopLocation.cpp Support/ISLTools.cpp Support/DumpModulePass.cpp Support/VirtualInstruction.cpp Transform/Canonicalization.cpp Transform/CodePreparation.cpp Transform/DeadCodeElimination.cpp Transform/ScheduleOptimizer.cpp Transform/ScheduleTreeTransform.cpp Transform/FlattenSchedule.cpp Transform/FlattenAlgo.cpp Transform/ForwardOpTree.cpp Transform/DeLICM.cpp Transform/ZoneAlgo.cpp Transform/Simplify.cpp Transform/MaximalStaticExpansion.cpp Transform/RewriteByReferenceParameters.cpp Transform/ScopInliner.cpp ${POLLY_HEADER_FILES} ) set_target_properties(obj.Polly PROPERTIES FOLDER "Polly") set_target_properties(Polly PROPERTIES FOLDER "Polly") if (MSVC_IDE OR XCODE) # Configure source groups for Polly source files. By default, in the IDE there # will be a source and include folder. In the source folder will be all the # source files in a flat list, and in the include folder will be all the # headers in a flat list. Sets the CMake source_group for each folder such # the organization of the sources and headers in the IDE matches how it is # laid out on disk setup_polly_source_groups(${CMAKE_CURRENT_LIST_DIR} ${CMAKE_CURRENT_LIST_DIR}/../include/polly) endif() # 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. 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 () 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 ) # Polly-ACC requires the NVPTX target to be present in the executable it is linked to set_property(TARGET bugpoint APPEND PROPERTY LINK_LIBRARIES LLVMTarget) endif () # 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 Plugin/Polly.cpp $ ) # 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 () 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(obj.Polly intrinsics_gen) endif()