mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-10 09:32:06 +00:00
Merge pull request #8258 from ClickHouse/update-llvm-bisect
Update LLVM in contrib
This commit is contained in:
commit
e83eeef731
@ -1,7 +1,7 @@
|
|||||||
# Broken in macos. TODO: update clang, re-test, enable
|
# Broken in macos. TODO: update clang, re-test, enable
|
||||||
if (NOT APPLE)
|
if (NOT APPLE)
|
||||||
option (ENABLE_EMBEDDED_COMPILER "Set to TRUE to enable support for 'compile' option for query execution" ${ENABLE_LIBRARIES})
|
option (ENABLE_EMBEDDED_COMPILER "Set to TRUE to enable support for 'compile_expressions' option for query execution" ${ENABLE_LIBRARIES})
|
||||||
option (USE_INTERNAL_LLVM_LIBRARY "Use bundled or system LLVM library. Default: system library for quicker developer builds." 0)
|
option (USE_INTERNAL_LLVM_LIBRARY "Use bundled or system LLVM library." ${NOT_UNBUNDLED})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (ENABLE_EMBEDDED_COMPILER)
|
if (ENABLE_EMBEDDED_COMPILER)
|
||||||
@ -13,27 +13,11 @@ if (ENABLE_EMBEDDED_COMPILER)
|
|||||||
if (NOT USE_INTERNAL_LLVM_LIBRARY)
|
if (NOT USE_INTERNAL_LLVM_LIBRARY)
|
||||||
set (LLVM_PATHS "/usr/local/lib/llvm")
|
set (LLVM_PATHS "/usr/local/lib/llvm")
|
||||||
|
|
||||||
if (LLVM_VERSION)
|
foreach(llvm_v 9 8)
|
||||||
find_package(LLVM ${LLVM_VERSION} CONFIG PATHS ${LLVM_PATHS})
|
if (NOT LLVM_FOUND)
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
find_package (LLVM ${llvm_v} CONFIG PATHS ${LLVM_PATHS})
|
||||||
find_package(LLVM ${CMAKE_CXX_COMPILER_VERSION} CONFIG PATHS ${LLVM_PATHS})
|
|
||||||
else ()
|
|
||||||
# TODO: 9 8
|
|
||||||
foreach(llvm_v 7.1 7 6 5)
|
|
||||||
if (NOT LLVM_FOUND)
|
|
||||||
find_package (LLVM ${llvm_v} CONFIG PATHS ${LLVM_PATHS})
|
|
||||||
endif ()
|
|
||||||
endforeach ()
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (LLVM_FOUND)
|
|
||||||
find_library (LLD_LIBRARY_TEST lldCore PATHS ${LLVM_LIBRARY_DIRS})
|
|
||||||
find_path (LLD_INCLUDE_DIR_TEST NAMES lld/Core/AbsoluteAtom.h PATHS ${LLVM_INCLUDE_DIRS})
|
|
||||||
if (NOT LLD_LIBRARY_TEST OR NOT LLD_INCLUDE_DIR_TEST)
|
|
||||||
set (LLVM_FOUND 0)
|
|
||||||
message(WARNING "liblld (${LLD_LIBRARY_TEST}, ${LLD_INCLUDE_DIR_TEST}) not found in ${LLVM_INCLUDE_DIRS} ${LLVM_LIBRARY_DIRS}. Disabling internal compiler.")
|
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endforeach ()
|
||||||
|
|
||||||
if (LLVM_FOUND)
|
if (LLVM_FOUND)
|
||||||
# Remove dynamically-linked zlib and libedit from LLVM's dependencies:
|
# Remove dynamically-linked zlib and libedit from LLVM's dependencies:
|
||||||
@ -51,30 +35,39 @@ if (ENABLE_EMBEDDED_COMPILER)
|
|||||||
set (LLVM_FOUND 0)
|
set (LLVM_FOUND 0)
|
||||||
set (USE_EMBEDDED_COMPILER 0)
|
set (USE_EMBEDDED_COMPILER 0)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# TODO: fix llvm 8+ and remove:
|
|
||||||
if (LLVM_FOUND AND LLVM_VERSION_MAJOR GREATER 7)
|
|
||||||
message(WARNING "LLVM 8+ not supported yet, disabling.")
|
|
||||||
set (USE_EMBEDDED_COMPILER 0)
|
|
||||||
endif ()
|
|
||||||
else()
|
else()
|
||||||
set (LLVM_FOUND 1)
|
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
|
||||||
set (USE_EMBEDDED_COMPILER 1)
|
message(WARNING "Option ENABLE_EMBEDDED_COMPILER is set but LLVM library cannot build if build directory is the same as source directory.")
|
||||||
set (LLVM_VERSION "7.0.0bundled")
|
set (LLVM_FOUND 0)
|
||||||
set (LLVM_INCLUDE_DIRS
|
set (USE_EMBEDDED_COMPILER 0)
|
||||||
${ClickHouse_SOURCE_DIR}/contrib/llvm/llvm/include
|
elseif (SPLIT_SHARED_LIBRARIES)
|
||||||
${ClickHouse_BINARY_DIR}/contrib/llvm/llvm/include
|
# llvm-tablegen cannot find shared libraries that we build. Probably can be easily fixed.
|
||||||
${ClickHouse_SOURCE_DIR}/contrib/llvm/clang/include
|
message(WARNING "Option ENABLE_EMBEDDED_COMPILER is not compatible with SPLIT_SHARED_LIBRARIES. Build of LLVM will be disabled.")
|
||||||
${ClickHouse_BINARY_DIR}/contrib/llvm/clang/include
|
set (LLVM_FOUND 0)
|
||||||
${ClickHouse_BINARY_DIR}/contrib/llvm/llvm/tools/clang/include
|
set (USE_EMBEDDED_COMPILER 0)
|
||||||
${ClickHouse_SOURCE_DIR}/contrib/llvm/lld/include
|
elseif (NOT ARCH_AMD64)
|
||||||
${ClickHouse_BINARY_DIR}/contrib/llvm/lld/include
|
# It's not supported yet, but you can help.
|
||||||
${ClickHouse_BINARY_DIR}/contrib/llvm/llvm/tools/lld/include)
|
message(WARNING "Option ENABLE_EMBEDDED_COMPILER is only available for x86_64. Build of LLVM will be disabled.")
|
||||||
set (LLVM_LIBRARY_DIRS ${ClickHouse_BINARY_DIR}/contrib/llvm/llvm)
|
set (LLVM_FOUND 0)
|
||||||
|
set (USE_EMBEDDED_COMPILER 0)
|
||||||
|
elseif (SANITIZE STREQUAL "undefined")
|
||||||
|
# llvm-tblgen, that is used during LLVM build, doesn't work with UBSan.
|
||||||
|
message(WARNING "Option ENABLE_EMBEDDED_COMPILER does not work with UBSan, because 'llvm-tblgen' tool from LLVM has undefined behaviour. Build of LLVM will be disabled.")
|
||||||
|
set (LLVM_FOUND 0)
|
||||||
|
set (USE_EMBEDDED_COMPILER 0)
|
||||||
|
else ()
|
||||||
|
set (LLVM_FOUND 1)
|
||||||
|
set (USE_EMBEDDED_COMPILER 1)
|
||||||
|
set (LLVM_VERSION "9.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)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (LLVM_FOUND)
|
if (LLVM_FOUND)
|
||||||
message(STATUS "LLVM version: ${LLVM_PACKAGE_VERSION}")
|
|
||||||
message(STATUS "LLVM include Directory: ${LLVM_INCLUDE_DIRS}")
|
message(STATUS "LLVM include Directory: ${LLVM_INCLUDE_DIRS}")
|
||||||
message(STATUS "LLVM library Directory: ${LLVM_LIBRARY_DIRS}")
|
message(STATUS "LLVM library Directory: ${LLVM_LIBRARY_DIRS}")
|
||||||
message(STATUS "LLVM C++ compiler flags: ${LLVM_CXXFLAGS}")
|
message(STATUS "LLVM C++ compiler flags: ${LLVM_CXXFLAGS}")
|
||||||
@ -82,16 +75,53 @@ if (ENABLE_EMBEDDED_COMPILER)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
function(llvm_libs_all REQUIRED_LLVM_LIBRARIES)
|
# This list was generated by listing all LLVM libraries, compiling the binary and removing all libraries while it still compiles.
|
||||||
llvm_map_components_to_libnames (result all)
|
set (REQUIRED_LLVM_LIBRARIES
|
||||||
if (USE_STATIC_LIBRARIES OR NOT "LLVM" IN_LIST result)
|
LLVMOrcJIT
|
||||||
list (REMOVE_ITEM result "LTO" "LLVM")
|
LLVMExecutionEngine
|
||||||
else()
|
LLVMRuntimeDyld
|
||||||
set (result "LLVM")
|
LLVMX86CodeGen
|
||||||
endif ()
|
LLVMX86Desc
|
||||||
if (TERMCAP_LIBRARY)
|
LLVMX86Info
|
||||||
list (APPEND result ${TERMCAP_LIBRARY})
|
LLVMX86Utils
|
||||||
endif ()
|
LLVMAsmPrinter
|
||||||
list (APPEND result ${CMAKE_DL_LIBS} ${ZLIB_LIBRARIES})
|
LLVMDebugInfoDWARF
|
||||||
set (${REQUIRED_LLVM_LIBRARIES} ${result} PARENT_SCOPE)
|
LLVMGlobalISel
|
||||||
endfunction()
|
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
|
||||||
|
)
|
||||||
|
|
||||||
|
#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} ${ZLIB_LIBRARIES})
|
||||||
|
# set (${REQUIRED_LLVM_LIBRARIES} ${result} PARENT_SCOPE)
|
||||||
|
#endfunction()
|
||||||
|
@ -76,6 +76,9 @@ if (SANITIZE)
|
|||||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libubsan")
|
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libubsan")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
# llvm-tblgen, that is used during LLVM build, doesn't work with UBSan.
|
||||||
|
set (ENABLE_EMBEDDED_COMPILER 0 CACHE BOOL "")
|
||||||
|
|
||||||
elseif (SANITIZE STREQUAL "libfuzzer")
|
elseif (SANITIZE STREQUAL "libfuzzer")
|
||||||
# NOTE: Eldar Zaitov decided to name it "libfuzzer" instead of "fuzzer" to keep in mind another possible fuzzer backends.
|
# NOTE: Eldar Zaitov decided to name it "libfuzzer" instead of "fuzzer" to keep in mind another possible fuzzer backends.
|
||||||
# NOTE: no-link means that all the targets are built with instrumentation for fuzzer, but only some of them (tests) have entry point for fuzzer and it's not checked.
|
# NOTE: no-link means that all the targets are built with instrumentation for fuzzer, but only some of them (tests) have entry point for fuzzer and it's not checked.
|
||||||
|
34
contrib/CMakeLists.txt
vendored
34
contrib/CMakeLists.txt
vendored
@ -66,24 +66,13 @@ if (USE_INTERNAL_ZLIB_LIBRARY)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
add_subdirectory (${INTERNAL_ZLIB_NAME})
|
add_subdirectory (${INTERNAL_ZLIB_NAME})
|
||||||
# TODO: make pull to Dead2/zlib-ng and remove:
|
|
||||||
# We should use same defines when including zlib.h as used when zlib compiled
|
# We should use same defines when including zlib.h as used when zlib compiled
|
||||||
target_compile_definitions (zlib PUBLIC ZLIB_COMPAT WITH_GZFILEOP)
|
target_compile_definitions (zlib PUBLIC ZLIB_COMPAT WITH_GZFILEOP)
|
||||||
target_compile_definitions (zlibstatic PUBLIC ZLIB_COMPAT WITH_GZFILEOP)
|
target_compile_definitions (zlibstatic PUBLIC ZLIB_COMPAT WITH_GZFILEOP)
|
||||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64")
|
if (ARCH_AMD64 OR ARCH_AARCH64)
|
||||||
target_compile_definitions (zlib PUBLIC X86_64 UNALIGNED_OK)
|
target_compile_definitions (zlib PUBLIC X86_64 UNALIGNED_OK)
|
||||||
target_compile_definitions (zlibstatic PUBLIC X86_64 UNALIGNED_OK)
|
target_compile_definitions (zlibstatic PUBLIC X86_64 UNALIGNED_OK)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
#set_target_properties(example PROPERTIES EXCLUDE_FROM_ALL 1)
|
|
||||||
#if (TARGET example64)
|
|
||||||
# set_target_properties(example64 PROPERTIES EXCLUDE_FROM_ALL 1)
|
|
||||||
#endif ()
|
|
||||||
|
|
||||||
#set_target_properties(minigzip PROPERTIES EXCLUDE_FROM_ALL 1)
|
|
||||||
#if (TARGET minigzip64)
|
|
||||||
# set_target_properties(minigzip64 PROPERTIES EXCLUDE_FROM_ALL 1)
|
|
||||||
#endif ()
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (USE_INTERNAL_CCTZ_LIBRARY)
|
if (USE_INTERNAL_CCTZ_LIBRARY)
|
||||||
@ -175,10 +164,7 @@ if (USE_INTERNAL_PARQUET_LIBRARY_NATIVE_CMAKE)
|
|||||||
set (ARROW_VERBOSE_THIRDPARTY_BUILD ON CACHE INTERNAL "")
|
set (ARROW_VERBOSE_THIRDPARTY_BUILD ON CACHE INTERNAL "")
|
||||||
set (ARROW_BUILD_SHARED 1 CACHE INTERNAL "")
|
set (ARROW_BUILD_SHARED 1 CACHE INTERNAL "")
|
||||||
set (ARROW_BOOST_HEADER_ONLY ON CACHE INTERNAL "")
|
set (ARROW_BOOST_HEADER_ONLY ON CACHE INTERNAL "")
|
||||||
#set (BOOST_INCLUDEDIR Boost_INCLUDE_DIRS)
|
|
||||||
set (Boost_FOUND 1 CACHE INTERNAL "")
|
set (Boost_FOUND 1 CACHE INTERNAL "")
|
||||||
#set (ZLIB_HOME ${ZLIB_INCLUDE_DIR})
|
|
||||||
#set (ZLIB_FOUND 1)
|
|
||||||
if (MAKE_STATIC_LIBRARIES)
|
if (MAKE_STATIC_LIBRARIES)
|
||||||
set (PARQUET_ARROW_LINKAGE "static" CACHE INTERNAL "")
|
set (PARQUET_ARROW_LINKAGE "static" CACHE INTERNAL "")
|
||||||
set (ARROW_TEST_LINKAGE "static" CACHE INTERNAL "")
|
set (ARROW_TEST_LINKAGE "static" CACHE INTERNAL "")
|
||||||
@ -259,28 +245,14 @@ elseif(GTEST_SRC_DIR)
|
|||||||
target_compile_definitions(gtest INTERFACE GTEST_HAS_POSIX_RE=0)
|
target_compile_definitions(gtest INTERFACE GTEST_HAS_POSIX_RE=0)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (USE_INTERNAL_LLVM_LIBRARY)
|
if (USE_EMBEDDED_COMPILER AND USE_INTERNAL_LLVM_LIBRARY)
|
||||||
file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/empty.cpp CONTENT " ")
|
|
||||||
add_library(LLVM0 ${CMAKE_CURRENT_BINARY_DIR}/empty.cpp) # silly cmake bug fix
|
|
||||||
add_library(LLVMOFF ${CMAKE_CURRENT_BINARY_DIR}/empty.cpp)
|
|
||||||
# ld: unknown option: --color-diagnostics
|
# ld: unknown option: --color-diagnostics
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
set (LINKER_SUPPORTS_COLOR_DIAGNOSTICS 0 CACHE INTERNAL "")
|
set (LINKER_SUPPORTS_COLOR_DIAGNOSTICS 0 CACHE INTERNAL "")
|
||||||
endif ()
|
endif ()
|
||||||
set (LLVM_ENABLE_EH 1 CACHE INTERNAL "")
|
set (LLVM_ENABLE_EH 1 CACHE INTERNAL "")
|
||||||
set (LLVM_ENABLE_RTTI 1 CACHE INTERNAL "")
|
set (LLVM_ENABLE_RTTI 1 CACHE INTERNAL "")
|
||||||
set (LLVM_INCLUDE_TESTS 0 CACHE INTERNAL "")
|
set (LLVM_TARGETS_TO_BUILD "X86;AArch64" CACHE STRING "")
|
||||||
set (LLVM_INCLUDE_EXAMPLES 0 CACHE INTERNAL "")
|
|
||||||
set (LLVM_INCLUDE_TOOLS 0 CACHE INTERNAL "")
|
|
||||||
set (LLVM_INSTALL_TOOLCHAIN_ONLY 0 CACHE INTERNAL "")
|
|
||||||
set (CLANG_BUILT_STANDALONE 0 CACHE INTERNAL "")
|
|
||||||
set (LLDB_BUILT_STANDALONE 0 CACHE INTERNAL "")
|
|
||||||
set (CLANG_ENABLE_STATIC_ANALYZER 0 CACHE INTERNAL "")
|
|
||||||
set (CLANG_ENABLE_ARCMT 0 CACHE INTERNAL "")
|
|
||||||
set (CLANG_BUILD_TOOLS 0 CACHE INTERNAL "")
|
|
||||||
set (BENCHMARK_ENABLE_GTEST_TESTS 0 CACHE INTERNAL "")
|
|
||||||
set (BENCHMARK_ENABLE_ASSEMBLY_TESTS 0 CACHE INTERNAL "")
|
|
||||||
set (LLVM_TARGETS_TO_BUILD "X86;AArch64" CACHE INTERNAL "")
|
|
||||||
add_subdirectory (llvm/llvm)
|
add_subdirectory (llvm/llvm)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
@ -54,17 +54,6 @@ set_target_properties(capnp
|
|||||||
)
|
)
|
||||||
target_link_libraries(capnp PUBLIC kj)
|
target_link_libraries(capnp PUBLIC kj)
|
||||||
|
|
||||||
# The library has substandard code
|
|
||||||
if (COMPILER_GCC)
|
|
||||||
set (SUPPRESS_WARNINGS -Wno-non-virtual-dtor -Wno-sign-compare -Wno-strict-aliasing -Wno-maybe-uninitialized
|
|
||||||
-Wno-deprecated-declarations -Wno-class-memaccess)
|
|
||||||
elseif (COMPILER_CLANG)
|
|
||||||
set (SUPPRESS_WARNINGS -Wno-non-virtual-dtor -Wno-sign-compare -Wno-strict-aliasing -Wno-deprecated-declarations)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
target_compile_options(kj PRIVATE ${SUPPRESS_WARNINGS})
|
|
||||||
target_compile_options(capnp PRIVATE ${SUPPRESS_WARNINGS})
|
|
||||||
|
|
||||||
set (CAPNPC_SRCS
|
set (CAPNPC_SRCS
|
||||||
${CAPNPROTO_SOURCE_DIR}/capnp/compiler/type-id.c++
|
${CAPNPROTO_SOURCE_DIR}/capnp/compiler/type-id.c++
|
||||||
${CAPNPROTO_SOURCE_DIR}/capnp/compiler/error-reporter.c++
|
${CAPNPROTO_SOURCE_DIR}/capnp/compiler/error-reporter.c++
|
||||||
@ -80,3 +69,15 @@ set (CAPNPC_SRCS
|
|||||||
|
|
||||||
add_library(capnpc ${CAPNPC_SRCS})
|
add_library(capnpc ${CAPNPC_SRCS})
|
||||||
target_link_libraries(capnpc PUBLIC capnp)
|
target_link_libraries(capnpc PUBLIC capnp)
|
||||||
|
|
||||||
|
# The library has substandard code
|
||||||
|
if (COMPILER_GCC)
|
||||||
|
set (SUPPRESS_WARNINGS -Wno-non-virtual-dtor -Wno-sign-compare -Wno-strict-aliasing -Wno-maybe-uninitialized
|
||||||
|
-Wno-deprecated-declarations -Wno-class-memaccess)
|
||||||
|
elseif (COMPILER_CLANG)
|
||||||
|
set (SUPPRESS_WARNINGS -Wno-non-virtual-dtor -Wno-sign-compare -Wno-strict-aliasing -Wno-deprecated-declarations)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
target_compile_options(kj PRIVATE ${SUPPRESS_WARNINGS})
|
||||||
|
target_compile_options(capnp PRIVATE ${SUPPRESS_WARNINGS})
|
||||||
|
target_compile_options(capnpc PRIVATE ${SUPPRESS_WARNINGS})
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
add_library(roaring
|
add_library(roaring
|
||||||
roaring.c
|
roaring.c
|
||||||
roaring/roaring.h
|
roaring/roaring.h
|
||||||
roaring/roaring.hh)
|
roaring/roaring.hh)
|
||||||
|
|
||||||
target_include_directories (roaring PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
target_include_directories (roaring SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
@ -3,9 +3,4 @@ add_library(btrie
|
|||||||
include/btrie.h
|
include/btrie.h
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories (btrie PUBLIC include)
|
target_include_directories (btrie SYSTEM PUBLIC include)
|
||||||
|
|
||||||
if (ENABLE_TESTS)
|
|
||||||
add_executable(test_btrie test/test_btrie.c)
|
|
||||||
target_link_libraries(test_btrie btrie)
|
|
||||||
endif ()
|
|
||||||
|
2
contrib/llvm
vendored
2
contrib/llvm
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 163def217817c90fb982a6daf384744d8472b92b
|
Subproject commit 778c297395b4a2dfd60e13969a0f9488bf2c16cf
|
@ -291,7 +291,6 @@ macro (dbms_target_link_libraries)
|
|||||||
endmacro ()
|
endmacro ()
|
||||||
|
|
||||||
if (USE_EMBEDDED_COMPILER)
|
if (USE_EMBEDDED_COMPILER)
|
||||||
llvm_libs_all(REQUIRED_LLVM_LIBRARIES)
|
|
||||||
dbms_target_link_libraries (PRIVATE ${REQUIRED_LLVM_LIBRARIES})
|
dbms_target_link_libraries (PRIVATE ${REQUIRED_LLVM_LIBRARIES})
|
||||||
dbms_target_include_directories (SYSTEM BEFORE PUBLIC ${LLVM_INCLUDE_DIRS})
|
dbms_target_include_directories (SYSTEM BEFORE PUBLIC ${LLVM_INCLUDE_DIRS})
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -96,7 +96,6 @@ struct Settings : public SettingsCollection<Settings>
|
|||||||
\
|
\
|
||||||
M(SettingBool, allow_suspicious_low_cardinality_types, false, "In CREATE TABLE statement allows specifying LowCardinality modifier for types of small fixed size (8 or less). Enabling this may increase merge times and memory consumption.", 0) \
|
M(SettingBool, allow_suspicious_low_cardinality_types, false, "In CREATE TABLE statement allows specifying LowCardinality modifier for types of small fixed size (8 or less). Enabling this may increase merge times and memory consumption.", 0) \
|
||||||
M(SettingBool, compile_expressions, false, "Compile some scalar functions and operators to native code.", 0) \
|
M(SettingBool, compile_expressions, false, "Compile some scalar functions and operators to native code.", 0) \
|
||||||
M(SettingUInt64, min_count_to_compile, 3, "The number of structurally identical queries before they are compiled.", 0) \
|
|
||||||
M(SettingUInt64, min_count_to_compile_expression, 3, "The number of identical expressions before they are JIT-compiled", 0) \
|
M(SettingUInt64, min_count_to_compile_expression, 3, "The number of identical expressions before they are JIT-compiled", 0) \
|
||||||
M(SettingUInt64, group_by_two_level_threshold, 100000, "From what number of keys, a two-level aggregation starts. 0 - the threshold is not set.", 0) \
|
M(SettingUInt64, group_by_two_level_threshold, 100000, "From what number of keys, a two-level aggregation starts. 0 - the threshold is not set.", 0) \
|
||||||
M(SettingUInt64, group_by_two_level_threshold_bytes, 100000000, "From what size of the aggregation state in bytes, a two-level aggregation begins to be used. 0 - the threshold is not set. Two-level aggregation is used when at least one of the thresholds is triggered.", 0) \
|
M(SettingUInt64, group_by_two_level_threshold_bytes, 100000000, "From what size of the aggregation state in bytes, a two-level aggregation begins to be used. 0 - the threshold is not set. Two-level aggregation is used when at least one of the thresholds is triggered.", 0) \
|
||||||
@ -392,7 +391,8 @@ struct Settings : public SettingsCollection<Settings>
|
|||||||
/** Obsolete settings that do nothing but left for compatibility reasons. Remove each one after half a year of obsolescence. */ \
|
/** Obsolete settings that do nothing but left for compatibility reasons. Remove each one after half a year of obsolescence. */ \
|
||||||
\
|
\
|
||||||
M(SettingBool, allow_experimental_low_cardinality_type, true, "Obsolete setting, does nothing. Will be removed after 2019-08-13", 0) \
|
M(SettingBool, allow_experimental_low_cardinality_type, true, "Obsolete setting, does nothing. Will be removed after 2019-08-13", 0) \
|
||||||
M(SettingBool, compile, false, "Whether query compilation is enabled. Will be removed after 2020-03-13", 0) \
|
M(SettingBool, compile, false, "Obsolete setting, does nothing. Will be removed after 2020-03-13", 0) \
|
||||||
|
M(SettingUInt64, min_count_to_compile, 0, "Obsolete setting, does nothing. Will be removed after 2020-03-13", 0) \
|
||||||
|
|
||||||
DECLARE_SETTINGS_COLLECTION(LIST_OF_SETTINGS)
|
DECLARE_SETTINGS_COLLECTION(LIST_OF_SETTINGS)
|
||||||
|
|
||||||
|
@ -62,7 +62,6 @@ if (ENABLE_TESTS)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (USE_EMBEDDED_COMPILER)
|
if (USE_EMBEDDED_COMPILER)
|
||||||
llvm_libs_all(REQUIRED_LLVM_LIBRARIES)
|
|
||||||
target_link_libraries(clickhouse_functions PRIVATE ${REQUIRED_LLVM_LIBRARIES})
|
target_link_libraries(clickhouse_functions PRIVATE ${REQUIRED_LLVM_LIBRARIES})
|
||||||
target_include_directories(clickhouse_functions SYSTEM BEFORE PUBLIC ${LLVM_INCLUDE_DIRS})
|
target_include_directories(clickhouse_functions SYSTEM BEFORE PUBLIC ${LLVM_INCLUDE_DIRS})
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
|
#pragma GCC diagnostic ignored "-Wnon-virtual-dtor"
|
||||||
|
|
||||||
#include <llvm/Analysis/TargetTransformInfo.h>
|
#include <llvm/Analysis/TargetTransformInfo.h>
|
||||||
#include <llvm/Config/llvm-config.h>
|
|
||||||
#include <llvm/IR/BasicBlock.h>
|
#include <llvm/IR/BasicBlock.h>
|
||||||
#include <llvm/IR/DataLayout.h>
|
#include <llvm/IR/DataLayout.h>
|
||||||
#include <llvm/IR/DerivedTypes.h>
|
#include <llvm/IR/DerivedTypes.h>
|
||||||
@ -32,6 +31,7 @@
|
|||||||
#include <llvm/IR/Mangler.h>
|
#include <llvm/IR/Mangler.h>
|
||||||
#include <llvm/IR/Module.h>
|
#include <llvm/IR/Module.h>
|
||||||
#include <llvm/IR/Type.h>
|
#include <llvm/IR/Type.h>
|
||||||
|
#include <llvm/IR/LegacyPassManager.h>
|
||||||
#include <llvm/ExecutionEngine/ExecutionEngine.h>
|
#include <llvm/ExecutionEngine/ExecutionEngine.h>
|
||||||
#include <llvm/ExecutionEngine/JITSymbol.h>
|
#include <llvm/ExecutionEngine/JITSymbol.h>
|
||||||
#include <llvm/ExecutionEngine/SectionMemoryManager.h>
|
#include <llvm/ExecutionEngine/SectionMemoryManager.h>
|
||||||
@ -48,6 +48,10 @@
|
|||||||
|
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
|
/// 'LegacyRTDyldObjectLinkingLayer' is deprecated: ORCv1 layers (layers with the 'Legacy' prefix) are deprecated. Please use ORCv2
|
||||||
|
/// 'LegacyIRCompileLayer' is deprecated: ORCv1 layers (layers with the 'Legacy' prefix) are deprecated. Please use the ORCv2 IRCompileLayer instead
|
||||||
|
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
|
||||||
|
|
||||||
|
|
||||||
namespace ProfileEvents
|
namespace ProfileEvents
|
||||||
{
|
{
|
||||||
@ -124,105 +128,68 @@ static llvm::TargetMachine * getNativeMachine()
|
|||||||
llvm::TargetOptions options;
|
llvm::TargetOptions options;
|
||||||
return target->createTargetMachine(
|
return target->createTargetMachine(
|
||||||
triple, cpu, features.getString(), options, llvm::None,
|
triple, cpu, features.getString(), options, llvm::None,
|
||||||
#if LLVM_VERSION_MAJOR >= 6
|
|
||||||
llvm::None, llvm::CodeGenOpt::Default, /*jit=*/true
|
llvm::None, llvm::CodeGenOpt::Default, /*jit=*/true
|
||||||
#else
|
|
||||||
llvm::CodeModel::Default, llvm::CodeGenOpt::Default
|
|
||||||
#endif
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR >= 7
|
|
||||||
static auto wrapJITSymbolResolver(llvm::JITSymbolResolver & jsr)
|
struct SymbolResolver : public llvm::orc::SymbolResolver
|
||||||
{
|
{
|
||||||
#if USE_INTERNAL_LLVM_LIBRARY && LLVM_VERSION_PATCH == 0
|
llvm::LegacyJITSymbolResolver & impl;
|
||||||
// REMOVE AFTER contrib/llvm upgrade
|
|
||||||
auto flags = [&](llvm::orc::SymbolFlagsMap & flags_internal, const llvm::orc::SymbolNameSet & symbols)
|
SymbolResolver(llvm::LegacyJITSymbolResolver & impl_) : impl(impl_) {}
|
||||||
|
|
||||||
|
llvm::orc::SymbolNameSet getResponsibilitySet(const llvm::orc::SymbolNameSet & symbols) final
|
||||||
|
{
|
||||||
|
return symbols;
|
||||||
|
}
|
||||||
|
|
||||||
|
llvm::orc::SymbolNameSet lookup(std::shared_ptr<llvm::orc::AsynchronousSymbolQuery> query, llvm::orc::SymbolNameSet symbols) final
|
||||||
{
|
{
|
||||||
llvm::orc::SymbolNameSet missing;
|
llvm::orc::SymbolNameSet missing;
|
||||||
for (const auto & symbol : symbols)
|
for (const auto & symbol : symbols)
|
||||||
{
|
{
|
||||||
auto resolved = jsr.lookupFlags({*symbol});
|
bool has_resolved = false;
|
||||||
if (resolved && resolved->size())
|
impl.lookup({*symbol}, [&](llvm::Expected<llvm::JITSymbolResolver::LookupResult> resolved)
|
||||||
flags_internal.emplace(symbol, resolved->begin()->second);
|
{
|
||||||
else
|
if (resolved && resolved->size())
|
||||||
missing.emplace(symbol);
|
{
|
||||||
|
query->notifySymbolMetRequiredState(symbol, resolved->begin()->second);
|
||||||
|
has_resolved = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!has_resolved)
|
||||||
|
missing.insert(symbol);
|
||||||
}
|
}
|
||||||
return missing;
|
return missing;
|
||||||
};
|
}
|
||||||
#else
|
};
|
||||||
// Actually this should work for 7.0.0 but now we have OLDER 7.0.0svn in contrib
|
|
||||||
auto flags = [&](const llvm::orc::SymbolNameSet & symbols)
|
|
||||||
{
|
|
||||||
llvm::orc::SymbolFlagsMap flags_map;
|
|
||||||
for (const auto & symbol : symbols)
|
|
||||||
{
|
|
||||||
auto resolved = jsr.lookupFlags({*symbol});
|
|
||||||
if (resolved && resolved->size())
|
|
||||||
flags_map.emplace(symbol, resolved->begin()->second);
|
|
||||||
}
|
|
||||||
return flags_map;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
auto symbols = [&](std::shared_ptr<llvm::orc::AsynchronousSymbolQuery> query, llvm::orc::SymbolNameSet symbols_set)
|
|
||||||
{
|
|
||||||
llvm::orc::SymbolNameSet missing;
|
|
||||||
for (const auto & symbol : symbols_set)
|
|
||||||
{
|
|
||||||
auto resolved = jsr.lookup({*symbol});
|
|
||||||
if (resolved && resolved->size())
|
|
||||||
query->resolve(symbol, resolved->begin()->second);
|
|
||||||
else
|
|
||||||
missing.emplace(symbol);
|
|
||||||
}
|
|
||||||
return missing;
|
|
||||||
};
|
|
||||||
return llvm::orc::createSymbolResolver(flags, symbols);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR >= 7
|
|
||||||
using ModulePtr = std::unique_ptr<llvm::Module>;
|
|
||||||
#else
|
|
||||||
using ModulePtr = std::shared_ptr<llvm::Module>;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct LLVMContext
|
struct LLVMContext
|
||||||
{
|
{
|
||||||
std::shared_ptr<llvm::LLVMContext> context;
|
std::shared_ptr<llvm::LLVMContext> context {std::make_shared<llvm::LLVMContext>()};
|
||||||
#if LLVM_VERSION_MAJOR >= 7
|
std::unique_ptr<llvm::Module> module {std::make_unique<llvm::Module>("jit", *context)};
|
||||||
|
std::unique_ptr<llvm::TargetMachine> machine {getNativeMachine()};
|
||||||
|
llvm::DataLayout layout {machine->createDataLayout()};
|
||||||
|
llvm::IRBuilder<> builder {*context};
|
||||||
|
|
||||||
llvm::orc::ExecutionSession execution_session;
|
llvm::orc::ExecutionSession execution_session;
|
||||||
#endif
|
|
||||||
ModulePtr module;
|
|
||||||
std::unique_ptr<llvm::TargetMachine> machine;
|
|
||||||
std::shared_ptr<llvm::SectionMemoryManager> memory_manager;
|
std::shared_ptr<llvm::SectionMemoryManager> memory_manager;
|
||||||
llvm::orc::RTDyldObjectLinkingLayer object_layer;
|
llvm::orc::LegacyRTDyldObjectLinkingLayer object_layer;
|
||||||
llvm::orc::IRCompileLayer<decltype(object_layer), llvm::orc::SimpleCompiler> compile_layer;
|
llvm::orc::LegacyIRCompileLayer<decltype(object_layer), llvm::orc::SimpleCompiler> compile_layer;
|
||||||
llvm::DataLayout layout;
|
|
||||||
llvm::IRBuilder<> builder;
|
|
||||||
std::unordered_map<std::string, void *> symbols;
|
std::unordered_map<std::string, void *> symbols;
|
||||||
|
|
||||||
LLVMContext()
|
LLVMContext()
|
||||||
: context(std::make_shared<llvm::LLVMContext>())
|
: memory_manager(std::make_shared<llvm::SectionMemoryManager>())
|
||||||
#if LLVM_VERSION_MAJOR >= 7
|
|
||||||
, module(std::make_unique<llvm::Module>("jit", *context))
|
|
||||||
#else
|
|
||||||
, module(std::make_shared<llvm::Module>("jit", *context))
|
|
||||||
#endif
|
|
||||||
, machine(getNativeMachine())
|
|
||||||
, memory_manager(std::make_shared<llvm::SectionMemoryManager>())
|
|
||||||
#if LLVM_VERSION_MAJOR >= 7
|
|
||||||
, object_layer(execution_session, [this](llvm::orc::VModuleKey)
|
, object_layer(execution_session, [this](llvm::orc::VModuleKey)
|
||||||
{
|
{
|
||||||
return llvm::orc::RTDyldObjectLinkingLayer::Resources{memory_manager, wrapJITSymbolResolver(*memory_manager)};
|
return llvm::orc::LegacyRTDyldObjectLinkingLayer::Resources{memory_manager, std::make_shared<SymbolResolver>(*memory_manager)};
|
||||||
})
|
})
|
||||||
#else
|
|
||||||
, object_layer([this]() { return memory_manager; })
|
|
||||||
#endif
|
|
||||||
, compile_layer(object_layer, llvm::orc::SimpleCompiler(*machine))
|
, compile_layer(object_layer, llvm::orc::SimpleCompiler(*machine))
|
||||||
, layout(machine->createDataLayout())
|
|
||||||
, builder(*context)
|
|
||||||
{
|
{
|
||||||
module->setDataLayout(layout);
|
module->setDataLayout(layout);
|
||||||
module->setTargetTriple(machine->getTargetTriple().getTriple());
|
module->setTargetTriple(machine->getTargetTriple().getTriple());
|
||||||
@ -258,14 +225,9 @@ struct LLVMContext
|
|||||||
for (const auto & function : *module)
|
for (const auto & function : *module)
|
||||||
functions.emplace_back(function.getName());
|
functions.emplace_back(function.getName());
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR >= 7
|
|
||||||
llvm::orc::VModuleKey module_key = execution_session.allocateVModule();
|
llvm::orc::VModuleKey module_key = execution_session.allocateVModule();
|
||||||
if (compile_layer.addModule(module_key, std::move(module)))
|
if (compile_layer.addModule(module_key, std::move(module)))
|
||||||
throw Exception("Cannot add module to compile layer", ErrorCodes::CANNOT_COMPILE_CODE);
|
throw Exception("Cannot add module to compile layer", ErrorCodes::CANNOT_COMPILE_CODE);
|
||||||
#else
|
|
||||||
if (!compile_layer.addModule(module, memory_manager))
|
|
||||||
throw Exception("Cannot add module to compile layer", ErrorCodes::CANNOT_COMPILE_CODE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (const auto & name : functions)
|
for (const auto & name : functions)
|
||||||
{
|
{
|
||||||
@ -284,6 +246,13 @@ struct LLVMContext
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <typename... Ts, typename F>
|
||||||
|
static bool castToEither(IColumn * column, F && f)
|
||||||
|
{
|
||||||
|
return ((typeid_cast<Ts *>(column) ? f(*typeid_cast<Ts *>(column)) : false) || ...);
|
||||||
|
}
|
||||||
|
|
||||||
class LLVMExecutableFunction : public IExecutableFunctionImpl
|
class LLVMExecutableFunction : public IExecutableFunctionImpl
|
||||||
{
|
{
|
||||||
std::string name;
|
std::string name;
|
||||||
@ -307,9 +276,16 @@ public:
|
|||||||
|
|
||||||
void execute(Block & block, const ColumnNumbers & arguments, size_t result, size_t block_size) override
|
void execute(Block & block, const ColumnNumbers & arguments, size_t result, size_t block_size) override
|
||||||
{
|
{
|
||||||
auto col_res = block.getByPosition(result).type->createColumn()->cloneResized(block_size);
|
auto col_res = block.getByPosition(result).type->createColumn();
|
||||||
|
|
||||||
if (block_size)
|
if (block_size)
|
||||||
{
|
{
|
||||||
|
if (!castToEither<
|
||||||
|
ColumnUInt8, ColumnUInt16, ColumnUInt32, ColumnUInt64,
|
||||||
|
ColumnInt8, ColumnInt16, ColumnInt32, ColumnInt64,
|
||||||
|
ColumnFloat32, ColumnFloat64>(col_res.get(), [block_size](auto & col) { col.getData().resize(block_size); return true; }))
|
||||||
|
throw Exception("Unexpected column in LLVMExecutableFunction: " + col_res->getName(), ErrorCodes::LOGICAL_ERROR);
|
||||||
|
|
||||||
std::vector<ColumnData> columns(arguments.size() + 1);
|
std::vector<ColumnData> columns(arguments.size() + 1);
|
||||||
for (size_t i = 0; i < arguments.size(); ++i)
|
for (size_t i = 0; i < arguments.size(); ++i)
|
||||||
{
|
{
|
||||||
@ -321,6 +297,7 @@ public:
|
|||||||
columns[arguments.size()] = getColumnData(col_res.get());
|
columns[arguments.size()] = getColumnData(col_res.get());
|
||||||
reinterpret_cast<void (*) (size_t, ColumnData *)>(function)(block_size, columns.data());
|
reinterpret_cast<void (*) (size_t, ColumnData *)>(function)(block_size, columns.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
block.getByPosition(result).column = std::move(col_res);
|
block.getByPosition(result).column = std::move(col_res);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
72
libs/libglibc-compatibility/musl/log2f.c
Normal file
72
libs/libglibc-compatibility/musl/log2f.c
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* Single-precision log2 function.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2018, Arm Limited.
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "libm.h"
|
||||||
|
#include "log2f_data.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
LOG2F_TABLE_BITS = 4
|
||||||
|
LOG2F_POLY_ORDER = 4
|
||||||
|
|
||||||
|
ULP error: 0.752 (nearest rounding.)
|
||||||
|
Relative error: 1.9 * 2^-26 (before rounding.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define N (1 << LOG2F_TABLE_BITS)
|
||||||
|
#define T __log2f_data.tab
|
||||||
|
#define A __log2f_data.poly
|
||||||
|
#define OFF 0x3f330000
|
||||||
|
|
||||||
|
float log2f(float x)
|
||||||
|
{
|
||||||
|
double_t z, r, r2, p, y, y0, invc, logc;
|
||||||
|
uint32_t ix, iz, top, tmp;
|
||||||
|
int k, i;
|
||||||
|
|
||||||
|
ix = asuint(x);
|
||||||
|
/* Fix sign of zero with downward rounding when x==1. */
|
||||||
|
if (WANT_ROUNDING && predict_false(ix == 0x3f800000))
|
||||||
|
return 0;
|
||||||
|
if (predict_false(ix - 0x00800000 >= 0x7f800000 - 0x00800000)) {
|
||||||
|
/* x < 0x1p-126 or inf or nan. */
|
||||||
|
if (ix * 2 == 0)
|
||||||
|
return __math_divzerof(1);
|
||||||
|
if (ix == 0x7f800000) /* log2(inf) == inf. */
|
||||||
|
return x;
|
||||||
|
if ((ix & 0x80000000) || ix * 2 >= 0xff000000)
|
||||||
|
return __math_invalidf(x);
|
||||||
|
/* x is subnormal, normalize it. */
|
||||||
|
ix = asuint(x * 0x1p23f);
|
||||||
|
ix -= 23 << 23;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* x = 2^k z; where z is in range [OFF,2*OFF] and exact.
|
||||||
|
The range is split into N subintervals.
|
||||||
|
The ith subinterval contains z and c is near its center. */
|
||||||
|
tmp = ix - OFF;
|
||||||
|
i = (tmp >> (23 - LOG2F_TABLE_BITS)) % N;
|
||||||
|
top = tmp & 0xff800000;
|
||||||
|
iz = ix - top;
|
||||||
|
k = (int32_t)tmp >> 23; /* arithmetic shift */
|
||||||
|
invc = T[i].invc;
|
||||||
|
logc = T[i].logc;
|
||||||
|
z = (double_t)asfloat(iz);
|
||||||
|
|
||||||
|
/* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */
|
||||||
|
r = z * invc - 1;
|
||||||
|
y0 = logc + (double_t)k;
|
||||||
|
|
||||||
|
/* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */
|
||||||
|
r2 = r * r;
|
||||||
|
y = A[1] * r + A[2];
|
||||||
|
y = A[0] * r2 + y;
|
||||||
|
p = A[3] * r + y0;
|
||||||
|
y = y * r2 + p;
|
||||||
|
return eval_as_float(y);
|
||||||
|
}
|
33
libs/libglibc-compatibility/musl/log2f_data.c
Normal file
33
libs/libglibc-compatibility/musl/log2f_data.c
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Data definition for log2f.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017-2018, Arm Limited.
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "log2f_data.h"
|
||||||
|
|
||||||
|
const struct log2f_data __log2f_data = {
|
||||||
|
.tab = {
|
||||||
|
{ 0x1.661ec79f8f3bep+0, -0x1.efec65b963019p-2 },
|
||||||
|
{ 0x1.571ed4aaf883dp+0, -0x1.b0b6832d4fca4p-2 },
|
||||||
|
{ 0x1.49539f0f010bp+0, -0x1.7418b0a1fb77bp-2 },
|
||||||
|
{ 0x1.3c995b0b80385p+0, -0x1.39de91a6dcf7bp-2 },
|
||||||
|
{ 0x1.30d190c8864a5p+0, -0x1.01d9bf3f2b631p-2 },
|
||||||
|
{ 0x1.25e227b0b8eap+0, -0x1.97c1d1b3b7afp-3 },
|
||||||
|
{ 0x1.1bb4a4a1a343fp+0, -0x1.2f9e393af3c9fp-3 },
|
||||||
|
{ 0x1.12358f08ae5bap+0, -0x1.960cbbf788d5cp-4 },
|
||||||
|
{ 0x1.0953f419900a7p+0, -0x1.a6f9db6475fcep-5 },
|
||||||
|
{ 0x1p+0, 0x0p+0 },
|
||||||
|
{ 0x1.e608cfd9a47acp-1, 0x1.338ca9f24f53dp-4 },
|
||||||
|
{ 0x1.ca4b31f026aap-1, 0x1.476a9543891bap-3 },
|
||||||
|
{ 0x1.b2036576afce6p-1, 0x1.e840b4ac4e4d2p-3 },
|
||||||
|
{ 0x1.9c2d163a1aa2dp-1, 0x1.40645f0c6651cp-2 },
|
||||||
|
{ 0x1.886e6037841edp-1, 0x1.88e9c2c1b9ff8p-2 },
|
||||||
|
{ 0x1.767dcf5534862p-1, 0x1.ce0a44eb17bccp-2 },
|
||||||
|
},
|
||||||
|
.poly = {
|
||||||
|
-0x1.712b6f70a7e4dp-2, 0x1.ecabf496832ep-2, -0x1.715479ffae3dep-1,
|
||||||
|
0x1.715475f35c8b8p0,
|
||||||
|
}
|
||||||
|
};
|
19
libs/libglibc-compatibility/musl/log2f_data.h
Normal file
19
libs/libglibc-compatibility/musl/log2f_data.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017-2018, Arm Limited.
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
#ifndef _LOG2F_DATA_H
|
||||||
|
#define _LOG2F_DATA_H
|
||||||
|
|
||||||
|
#include "musl_features.h"
|
||||||
|
|
||||||
|
#define LOG2F_TABLE_BITS 4
|
||||||
|
#define LOG2F_POLY_ORDER 4
|
||||||
|
extern hidden const struct log2f_data {
|
||||||
|
struct {
|
||||||
|
double invc, logc;
|
||||||
|
} tab[1 << LOG2F_TABLE_BITS];
|
||||||
|
double poly[LOG2F_POLY_ORDER];
|
||||||
|
} __log2f_data;
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user