mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 08:32:02 +00:00
Bump LLVM from 12 to 13
This commit is contained in:
parent
e897816572
commit
9c62797d28
6
.gitmodules
vendored
6
.gitmodules
vendored
@ -30,9 +30,6 @@
|
|||||||
[submodule "contrib/re2"]
|
[submodule "contrib/re2"]
|
||||||
path = contrib/re2
|
path = contrib/re2
|
||||||
url = https://github.com/google/re2.git
|
url = https://github.com/google/re2.git
|
||||||
[submodule "contrib/llvm"]
|
|
||||||
path = contrib/llvm
|
|
||||||
url = https://github.com/ClickHouse/llvm
|
|
||||||
[submodule "contrib/mariadb-connector-c"]
|
[submodule "contrib/mariadb-connector-c"]
|
||||||
path = contrib/mariadb-connector-c
|
path = contrib/mariadb-connector-c
|
||||||
url = https://github.com/ClickHouse/mariadb-connector-c.git
|
url = https://github.com/ClickHouse/mariadb-connector-c.git
|
||||||
@ -284,3 +281,6 @@
|
|||||||
[submodule "contrib/c-ares"]
|
[submodule "contrib/c-ares"]
|
||||||
path = contrib/c-ares
|
path = contrib/c-ares
|
||||||
url = https://github.com/ClickHouse/c-ares
|
url = https://github.com/ClickHouse/c-ares
|
||||||
|
[submodule "contrib/llvm-project"]
|
||||||
|
path = contrib/llvm-project
|
||||||
|
url = https://github.com/ClickHouse/llvm-project.git
|
||||||
|
2
contrib/CMakeLists.txt
vendored
2
contrib/CMakeLists.txt
vendored
@ -107,7 +107,7 @@ if (ENABLE_TESTS)
|
|||||||
add_contrib (googletest-cmake googletest)
|
add_contrib (googletest-cmake googletest)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_contrib (llvm-cmake llvm)
|
add_contrib (llvm-project-cmake llvm-project)
|
||||||
add_contrib (libxml2-cmake libxml2)
|
add_contrib (libxml2-cmake libxml2)
|
||||||
add_contrib (aws-s3-cmake
|
add_contrib (aws-s3-cmake
|
||||||
aws
|
aws
|
||||||
|
1
contrib/llvm
vendored
1
contrib/llvm
vendored
@ -1 +0,0 @@
|
|||||||
Subproject commit 0db5bf5bd2452cd8f1283a1fcdc04845af705bfc
|
|
@ -1,112 +0,0 @@
|
|||||||
if (APPLE OR NOT ARCH_AMD64 OR SANITIZE STREQUAL "undefined")
|
|
||||||
set (ENABLE_EMBEDDED_COMPILER_DEFAULT OFF)
|
|
||||||
else()
|
|
||||||
set (ENABLE_EMBEDDED_COMPILER_DEFAULT ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option (ENABLE_EMBEDDED_COMPILER "Enable support for 'compile_expressions' option for query execution" ${ENABLE_EMBEDDED_COMPILER_DEFAULT})
|
|
||||||
|
|
||||||
if (NOT ENABLE_EMBEDDED_COMPILER)
|
|
||||||
message(STATUS "Not using LLVM")
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set (LLVM_FOUND 1)
|
|
||||||
set (LLVM_VERSION "12.0.0bundled")
|
|
||||||
set (LLVM_INCLUDE_DIRS
|
|
||||||
"${ClickHouse_SOURCE_DIR}/contrib/llvm/llvm/include"
|
|
||||||
"${ClickHouse_BINARY_DIR}/contrib/llvm/llvm/include"
|
|
||||||
)
|
|
||||||
set (LLVM_LIBRARY_DIRS "${ClickHouse_BINARY_DIR}/contrib/llvm/llvm")
|
|
||||||
|
|
||||||
# This list was generated by listing all LLVM libraries, compiling the binary and removing all libraries while it still compiles.
|
|
||||||
set (REQUIRED_LLVM_LIBRARIES
|
|
||||||
LLVMExecutionEngine
|
|
||||||
LLVMRuntimeDyld
|
|
||||||
LLVMAsmPrinter
|
|
||||||
LLVMDebugInfoDWARF
|
|
||||||
LLVMGlobalISel
|
|
||||||
LLVMSelectionDAG
|
|
||||||
LLVMMCDisassembler
|
|
||||||
LLVMPasses
|
|
||||||
LLVMCodeGen
|
|
||||||
LLVMipo
|
|
||||||
LLVMBitWriter
|
|
||||||
LLVMInstrumentation
|
|
||||||
LLVMScalarOpts
|
|
||||||
LLVMAggressiveInstCombine
|
|
||||||
LLVMInstCombine
|
|
||||||
LLVMVectorize
|
|
||||||
LLVMTransformUtils
|
|
||||||
LLVMTarget
|
|
||||||
LLVMAnalysis
|
|
||||||
LLVMProfileData
|
|
||||||
LLVMObject
|
|
||||||
LLVMBitReader
|
|
||||||
LLVMCore
|
|
||||||
LLVMRemarks
|
|
||||||
LLVMBitstreamReader
|
|
||||||
LLVMMCParser
|
|
||||||
LLVMMC
|
|
||||||
LLVMBinaryFormat
|
|
||||||
LLVMDebugInfoCodeView
|
|
||||||
LLVMSupport
|
|
||||||
LLVMDemangle
|
|
||||||
)
|
|
||||||
|
|
||||||
if (ARCH_AMD64)
|
|
||||||
list(APPEND REQUIRED_LLVM_LIBRARIES LLVMX86Info LLVMX86Desc LLVMX86CodeGen)
|
|
||||||
elseif (ARCH_AARCH64)
|
|
||||||
list(APPEND REQUIRED_LLVM_LIBRARIES LLVMAArch64Info LLVMAArch64Desc LLVMAArch64CodeGen)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
#function(llvm_libs_all REQUIRED_LLVM_LIBRARIES)
|
|
||||||
# llvm_map_components_to_libnames (result all)
|
|
||||||
# if (USE_STATIC_LIBRARIES OR NOT "LLVM" IN_LIST result)
|
|
||||||
# list (REMOVE_ITEM result "LTO" "LLVM")
|
|
||||||
# else()
|
|
||||||
# set (result "LLVM")
|
|
||||||
# endif ()
|
|
||||||
# list (APPEND result ${CMAKE_DL_LIBS} ch_contrib::zlib)
|
|
||||||
# set (${REQUIRED_LLVM_LIBRARIES} ${result} PARENT_SCOPE)
|
|
||||||
#endfunction()
|
|
||||||
|
|
||||||
message (STATUS "LLVM include Directory: ${LLVM_INCLUDE_DIRS}")
|
|
||||||
message (STATUS "LLVM library Directory: ${LLVM_LIBRARY_DIRS}")
|
|
||||||
message (STATUS "LLVM C++ compiler flags: ${LLVM_CXXFLAGS}")
|
|
||||||
|
|
||||||
# ld: unknown option: --color-diagnostics
|
|
||||||
set (LINKER_SUPPORTS_COLOR_DIAGNOSTICS 0 CACHE INTERNAL "")
|
|
||||||
|
|
||||||
# Do not adjust RPATH in llvm, since then it will not be able to find libcxx/libcxxabi/libunwind
|
|
||||||
set (CMAKE_INSTALL_RPATH "ON")
|
|
||||||
set (LLVM_COMPILER_CHECKED 1 CACHE INTERNAL "")
|
|
||||||
set (LLVM_ENABLE_EH 1 CACHE INTERNAL "")
|
|
||||||
set (LLVM_ENABLE_RTTI 1 CACHE INTERNAL "")
|
|
||||||
set (LLVM_ENABLE_PIC 0 CACHE INTERNAL "")
|
|
||||||
set (LLVM_TARGETS_TO_BUILD "X86;AArch64" CACHE STRING "")
|
|
||||||
|
|
||||||
# Need to use C++17 since the compilation is not possible with C++20 currently, due to ambiguous operator != etc.
|
|
||||||
# LLVM project will set its default value for the -std=... but our global setting from CMake will override it.
|
|
||||||
set (CMAKE_CXX_STANDARD 17)
|
|
||||||
|
|
||||||
set (LLVM_SOURCE_DIR "${ClickHouse_SOURCE_DIR}/contrib/llvm/llvm")
|
|
||||||
set (LLVM_BINARY_DIR "${ClickHouse_BINARY_DIR}/contrib/llvm/llvm")
|
|
||||||
add_subdirectory ("${LLVM_SOURCE_DIR}" "${LLVM_BINARY_DIR}")
|
|
||||||
set_directory_properties (PROPERTIES
|
|
||||||
# due to llvm crosscompile cmake does not know how to clean it, and on clean
|
|
||||||
# will lead to the following error:
|
|
||||||
#
|
|
||||||
# ninja: error: remove(contrib/llvm/llvm/NATIVE): Directory not empty
|
|
||||||
#
|
|
||||||
ADDITIONAL_CLEAN_FILES "${LLVM_BINARY_DIR}"
|
|
||||||
# llvm's cmake configuring this file only when cmake runs,
|
|
||||||
# and after clean cmake will not know that it should re-run,
|
|
||||||
# add explicitly depends from llvm-config.h
|
|
||||||
CMAKE_CONFIGURE_DEPENDS "${LLVM_BINARY_DIR}/include/llvm/Config/llvm-config.h"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library (_llvm INTERFACE)
|
|
||||||
target_link_libraries (_llvm INTERFACE ${REQUIRED_LLVM_LIBRARIES})
|
|
||||||
target_include_directories (_llvm SYSTEM BEFORE INTERFACE ${LLVM_INCLUDE_DIRS})
|
|
||||||
add_library(ch_contrib::llvm ALIAS _llvm)
|
|
1
contrib/llvm-project
vendored
Submodule
1
contrib/llvm-project
vendored
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 71e5e5f48761c6ae1b17c1e5afe1d1dcfdbafdec
|
122
contrib/llvm-project-cmake/CMakeLists.txt
Normal file
122
contrib/llvm-project-cmake/CMakeLists.txt
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
if (APPLE OR NOT ARCH_AMD64 OR SANITIZE STREQUAL "undefined" OR NOT USE_STATIC_LIBRARIES)
|
||||||
|
set (ENABLE_EMBEDDED_COMPILER_DEFAULT OFF)
|
||||||
|
else()
|
||||||
|
set (ENABLE_EMBEDDED_COMPILER_DEFAULT ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option (ENABLE_EMBEDDED_COMPILER "Enable support for 'compile_expressions' option for query execution" ${ENABLE_EMBEDDED_COMPILER_DEFAULT})
|
||||||
|
|
||||||
|
if (NOT ENABLE_EMBEDDED_COMPILER)
|
||||||
|
message(STATUS "Not using LLVM")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# TODO: Enable shared library build
|
||||||
|
# TODO: Enable compilation on AArch64
|
||||||
|
|
||||||
|
set (LLVM_VERSION "13.0.0bundled")
|
||||||
|
set (LLVM_INCLUDE_DIRS
|
||||||
|
"${ClickHouse_SOURCE_DIR}/contrib/llvm-project/llvm/include"
|
||||||
|
"${ClickHouse_BINARY_DIR}/contrib/llvm-project/llvm/include"
|
||||||
|
)
|
||||||
|
set (LLVM_LIBRARY_DIRS "${ClickHouse_BINARY_DIR}/contrib/llvm-project/llvm")
|
||||||
|
|
||||||
|
# This list was generated by listing all LLVM libraries, compiling the binary and removing all libraries while it still compiles.
|
||||||
|
set (REQUIRED_LLVM_LIBRARIES
|
||||||
|
LLVMExecutionEngine
|
||||||
|
LLVMRuntimeDyld
|
||||||
|
LLVMAsmPrinter
|
||||||
|
LLVMDebugInfoDWARF
|
||||||
|
LLVMGlobalISel
|
||||||
|
LLVMSelectionDAG
|
||||||
|
LLVMMCDisassembler
|
||||||
|
LLVMPasses
|
||||||
|
LLVMCodeGen
|
||||||
|
LLVMipo
|
||||||
|
LLVMBitWriter
|
||||||
|
LLVMInstrumentation
|
||||||
|
LLVMScalarOpts
|
||||||
|
LLVMAggressiveInstCombine
|
||||||
|
LLVMInstCombine
|
||||||
|
LLVMVectorize
|
||||||
|
LLVMTransformUtils
|
||||||
|
LLVMTarget
|
||||||
|
LLVMAnalysis
|
||||||
|
LLVMProfileData
|
||||||
|
LLVMObject
|
||||||
|
LLVMBitReader
|
||||||
|
LLVMCore
|
||||||
|
LLVMRemarks
|
||||||
|
LLVMBitstreamReader
|
||||||
|
LLVMMCParser
|
||||||
|
LLVMMC
|
||||||
|
LLVMBinaryFormat
|
||||||
|
LLVMDebugInfoCodeView
|
||||||
|
LLVMSupport
|
||||||
|
LLVMDemangle
|
||||||
|
)
|
||||||
|
|
||||||
|
# if (ARCH_AMD64)
|
||||||
|
list(APPEND REQUIRED_LLVM_LIBRARIES LLVMX86Info LLVMX86Desc LLVMX86CodeGen)
|
||||||
|
# elseif (ARCH_AARCH64)
|
||||||
|
# list(APPEND REQUIRED_LLVM_LIBRARIES LLVMAArch64Info LLVMAArch64Desc LLVMAArch64CodeGen)
|
||||||
|
# endif ()
|
||||||
|
|
||||||
|
# ld: unknown option: --color-diagnostics
|
||||||
|
# set (LINKER_SUPPORTS_COLOR_DIAGNOSTICS 0 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
set (CMAKE_INSTALL_RPATH "ON") # Do not adjust RPATH in llvm, since then it will not be able to find libcxx/libcxxabi/libunwind
|
||||||
|
set (LLVM_COMPILER_CHECKED 1 CACHE INTERNAL "") # Skip internal compiler selection
|
||||||
|
set (LLVM_ENABLE_EH 1 CACHE INTERNAL "") # With exception handling
|
||||||
|
set (LLVM_ENABLE_RTTI 1 CACHE INTERNAL "")
|
||||||
|
set (LLVM_ENABLE_PIC 0 CACHE INTERNAL "")
|
||||||
|
set (LLVM_TARGETS_TO_BUILD "X86" CACHE STRING "") # for x86 + ARM: "X86;AArch64"
|
||||||
|
|
||||||
|
# Omit unnecessary stuff (just the options which are ON by default)
|
||||||
|
set(LLVM_ENABLE_BACKTRACES 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_ENABLE_CRASH_OVERRIDES 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_ENABLE_TERMINFO 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_ENABLE_LIBXML2 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_ENABLE_LIBEDIT 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_ENABLE_LIBPFM 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_ENABLE_ZLIB 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_ENABLE_Z3_SOLVER 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_INCLUDE_TOOLS 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_BUILD_TOOLS 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_INCLUDE_UTILS 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_BUILD_UTILS 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_INCLUDE_RUNTIMES 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_BUILD_RUNTIMES 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_BUILD_RUNTIME 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_INCLUDE_EXAMPLES 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_INCLUDE_TESTS 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_INCLUDE_GO_TESTS 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_INCLUDE_BENCHMARKS 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_INCLUDE_DOCS 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_ENABLE_OCAMLDOC 0 CACHE INTERNAL "")
|
||||||
|
set(LLVM_ENABLE_BINDINGS 0 CACHE INTERNAL "")
|
||||||
|
|
||||||
|
# C++20 is currently not supported due to ambiguous operator != etc.
|
||||||
|
set (CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
|
set (LLVM_SOURCE_DIR "${ClickHouse_SOURCE_DIR}/contrib/llvm-project/llvm")
|
||||||
|
set (LLVM_BINARY_DIR "${ClickHouse_BINARY_DIR}/contrib/llvm-project/llvm")
|
||||||
|
add_subdirectory ("${LLVM_SOURCE_DIR}" "${LLVM_BINARY_DIR}")
|
||||||
|
|
||||||
|
set_directory_properties (PROPERTIES
|
||||||
|
# due to llvm crosscompile cmake does not know how to clean it, and on clean
|
||||||
|
# will lead to the following error:
|
||||||
|
#
|
||||||
|
# ninja: error: remove(contrib/llvm/llvm/NATIVE): Directory not empty
|
||||||
|
#
|
||||||
|
ADDITIONAL_CLEAN_FILES "${LLVM_BINARY_DIR}"
|
||||||
|
# llvm's cmake configuring this file only when cmake runs,
|
||||||
|
# and after clean cmake will not know that it should re-run,
|
||||||
|
# add explicitly depends from llvm-config.h
|
||||||
|
CMAKE_CONFIGURE_DEPENDS "${LLVM_BINARY_DIR}/include/llvm/Config/llvm-config.h"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library (_llvm INTERFACE)
|
||||||
|
target_link_libraries (_llvm INTERFACE ${REQUIRED_LLVM_LIBRARIES})
|
||||||
|
target_include_directories (_llvm SYSTEM BEFORE INTERFACE ${LLVM_INCLUDE_DIRS})
|
||||||
|
add_library(ch_contrib::llvm ALIAS _llvm)
|
@ -235,8 +235,15 @@ public:
|
|||||||
|
|
||||||
if constexpr (result_is_nullable)
|
if constexpr (result_is_nullable)
|
||||||
{
|
{
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
#endif
|
||||||
auto * aggregate_data_is_null_dst_value = b.CreateLoad(aggregate_data_dst_ptr);
|
auto * aggregate_data_is_null_dst_value = b.CreateLoad(aggregate_data_dst_ptr);
|
||||||
auto * aggregate_data_is_null_src_value = b.CreateLoad(aggregate_data_src_ptr);
|
auto * aggregate_data_is_null_src_value = b.CreateLoad(aggregate_data_src_ptr);
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
auto * is_src_null = nativeBoolCast(b, std::make_shared<DataTypeUInt8>(), aggregate_data_is_null_src_value);
|
auto * is_src_null = nativeBoolCast(b, std::make_shared<DataTypeUInt8>(), aggregate_data_is_null_src_value);
|
||||||
auto * is_null_result_value = b.CreateSelect(is_src_null, llvm::ConstantInt::get(b.getInt8Ty(), 1), aggregate_data_is_null_dst_value);
|
auto * is_null_result_value = b.CreateSelect(is_src_null, llvm::ConstantInt::get(b.getInt8Ty(), 1), aggregate_data_is_null_dst_value);
|
||||||
|
@ -842,7 +842,14 @@ CompiledSortDescriptionFunction compileSortDescription(
|
|||||||
auto * lhs_column_data = b.CreatePointerCast(b.CreateExtractValue(lhs_column, {0}), column_native_type_pointer);
|
auto * lhs_column_data = b.CreatePointerCast(b.CreateExtractValue(lhs_column, {0}), column_native_type_pointer);
|
||||||
auto * lhs_column_null_data = column_type_is_nullable ? b.CreateExtractValue(lhs_column, {1}) : nullptr;
|
auto * lhs_column_null_data = column_type_is_nullable ? b.CreateExtractValue(lhs_column, {1}) : nullptr;
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
#endif
|
||||||
llvm::Value * lhs_value = b.CreateLoad(b.CreateInBoundsGEP(nullptr, lhs_column_data, lhs_index_arg));
|
llvm::Value * lhs_value = b.CreateLoad(b.CreateInBoundsGEP(nullptr, lhs_column_data, lhs_index_arg));
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
if (lhs_column_null_data)
|
if (lhs_column_null_data)
|
||||||
{
|
{
|
||||||
@ -856,7 +863,14 @@ CompiledSortDescriptionFunction compileSortDescription(
|
|||||||
auto * rhs_column_data = b.CreatePointerCast(b.CreateExtractValue(rhs_column, {0}), column_native_type_pointer);
|
auto * rhs_column_data = b.CreatePointerCast(b.CreateExtractValue(rhs_column, {0}), column_native_type_pointer);
|
||||||
auto * rhs_column_null_data = column_type_is_nullable ? b.CreateExtractValue(rhs_column, {1}) : nullptr;
|
auto * rhs_column_null_data = column_type_is_nullable ? b.CreateExtractValue(rhs_column, {1}) : nullptr;
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
#endif
|
||||||
llvm::Value * rhs_value = b.CreateLoad(b.CreateInBoundsGEP(nullptr, rhs_column_data, rhs_index_arg));
|
llvm::Value * rhs_value = b.CreateLoad(b.CreateInBoundsGEP(nullptr, rhs_column_data, rhs_index_arg));
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
#endif
|
||||||
if (rhs_column_null_data)
|
if (rhs_column_null_data)
|
||||||
{
|
{
|
||||||
auto * is_null_value_pointer = b.CreateInBoundsGEP(nullptr, rhs_column_null_data, rhs_index_arg);
|
auto * is_null_value_pointer = b.CreateInBoundsGEP(nullptr, rhs_column_null_data, rhs_index_arg);
|
||||||
|
Loading…
Reference in New Issue
Block a user