You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by gr...@apache.org on 2020/11/27 05:40:17 UTC
[kudu] 03/04: [thirdparty] Upgrade to LLVM 11 and IWYU 0.15
This is an automated email from the ASF dual-hosted git repository.
granthenke pushed a commit to branch apple-m1
in repository https://gitbox.apache.org/repos/asf/kudu.git
commit 9e2ab0c6cda726405810e6ceb8bb272f17379133
Author: Grant Henke <gr...@apache.org>
AuthorDate: Wed Nov 18 14:10:36 2020 -0600
[thirdparty] Upgrade to LLVM 11 and IWYU 0.15
This patch upgrades LLVM to version 11 and IWYU to version 0.15.
Change-Id: Id9c32abe256978158617a4fe3a3c34e9bfd00fb2
---
src/kudu/codegen/code_generator.cc | 6 +-
src/kudu/codegen/module_builder.cc | 4 +-
thirdparty/build-definitions.sh | 7 +-
thirdparty/download-thirdparty.sh | 7 +-
thirdparty/package-llvm.sh | 11 +-
thirdparty/patches/llvm-iwyu-include-picker.patch | 10 --
.../patches/llvm-iwyu-sized-deallocation.patch | 116 ---------------------
thirdparty/vars.sh | 4 +-
8 files changed, 20 insertions(+), 145 deletions(-)
diff --git a/src/kudu/codegen/code_generator.cc b/src/kudu/codegen/code_generator.cc
index 7e419ab..642b841 100644
--- a/src/kudu/codegen/code_generator.cc
+++ b/src/kudu/codegen/code_generator.cc
@@ -158,14 +158,14 @@ int DumpAsm(FuncPtr fptr, const TargetMachine& tm, std::ostream* out, int max_in
MCInst inst;
uint64_t size;
MCDisassembler::DecodeStatus stat =
- disas->getInstruction(inst, size, mem_obj.slice(addr), addr, llvm::nulls(), llvm::nulls());
+ disas->getInstruction(inst, size, mem_obj.slice(addr), addr, llvm::nulls());
if (stat != MCDisassembler::Success) {
*out << "<ERROR at 0x" << std::hex << addr
<< " (absolute 0x" << (addr + base_addr) << ")"
<< ", skipping instruction>\n" << std::dec;
} else {
string annotations;
- printer->printInst(&inst, os, annotations, subtarget_info);
+ printer->printInst(&inst, addr, annotations, subtarget_info, os);
os << " " << annotations << "\n";
// We need to check the opcode name for "RET" instead of comparing
// the opcode to llvm::ReturnInst::getOpcode() because the native
@@ -178,7 +178,7 @@ int DumpAsm(FuncPtr fptr, const TargetMachine& tm, std::ostream* out, int max_in
// LLVM RTTI, since subclassing an LLVM interface would require
// identical RTTI settings between LLVM and Kudu (see:
// http://llvm.org/docs/Packaging.html#c-features).
- string opname = printer->getOpcodeName(inst.getOpcode());
+ string opname = printer->getOpcodeName(inst.getOpcode()).str();
std::transform(opname.begin(), opname.end(), opname.begin(), ::toupper);
if (opname.find("RET") != string::npos) return i + 1;
}
diff --git a/src/kudu/codegen/module_builder.cc b/src/kudu/codegen/module_builder.cc
index e0818de..eb7e931 100644
--- a/src/kudu/codegen/module_builder.cc
+++ b/src/kudu/codegen/module_builder.cc
@@ -125,7 +125,7 @@ string ToString(const Module& m) {
// This method is needed for the implicit conversion from
// llvm::StringRef to std::string
string ToString(const Function* f) {
- return f->getName();
+ return f->getName().str();
}
bool ModuleContains(const Module& m, const Function* fptr) {
@@ -379,7 +379,7 @@ TargetMachine* ModuleBuilder::GetTargetMachine() const {
unordered_set<string> ModuleBuilder::GetFunctionNames() const {
unordered_set<string> ret;
for (const JITFuture& fut : futures_) {
- ret.insert(CHECK_NOTNULL(fut.llvm_f_)->getName());
+ ret.insert(CHECK_NOTNULL(fut.llvm_f_)->getName().str());
}
return ret;
}
diff --git a/thirdparty/build-definitions.sh b/thirdparty/build-definitions.sh
index fced6d4..7df9aca 100644
--- a/thirdparty/build-definitions.sh
+++ b/thirdparty/build-definitions.sh
@@ -194,7 +194,6 @@ build_llvm() {
TOOLS_ARGS="$TOOLS_ARGS -DLLVM_TOOL_LIBCXX_BUILD=OFF"
TOOLS_ARGS="$TOOLS_ARGS -DLLVM_TOOL_LIBCXXABI_BUILD=OFF"
-
# Disable some builds we don't care about.
for arg in \
CLANG_ENABLE_ARCMT \
@@ -291,6 +290,11 @@ build_llvm() {
# See https://github.com/llvm-mirror/compiler-rt/blob/749af53928a31afa3111f27cc41fd15849d86667/lib/CMakeLists.txt#L11-L14
TOOLS_ARGS="$TOOLS_ARGS -DCOMPILER_RT_BUILD_SANITIZERS=OFF"
TOOLS_ARGS="$TOOLS_ARGS -DCOMPILER_RT_BUILD_XRAY=OFF"
+
+ # Disable Apple platforms the we do not support.
+ TOOLS_ARGS="$TOOLS_ARGS -DCOMPILER_RT_ENABLE_IOS=OFF"
+ TOOLS_ARGS="$TOOLS_ARGS -DCOMPILER_RT_ENABLE_WATCHOS=OFF"
+ TOOLS_ARGS="$TOOLS_ARGS -DCOMPILER_RT_ENABLE_TVOS=OFF"
fi
# Depend on zlib from the thirdparty tree. It's an optional dependency for
@@ -345,7 +349,6 @@ build_llvm() {
-DLLVM_INCLUDE_UTILS=OFF \
-DLLVM_TARGETS_TO_BUILD="X86;AArch64" \
-DLLVM_ENABLE_RTTI=ON \
- -DCMAKE_OSX_ARCHITECTURES="x86_64" \
-DCMAKE_CXX_FLAGS="$CLANG_CXXFLAGS" \
-DCMAKE_EXE_LINKER_FLAGS="$CLANG_LDFLAGS" \
-DCMAKE_MODULE_LINKER_FLAGS="$CLANG_LDFLAGS" \
diff --git a/thirdparty/download-thirdparty.sh b/thirdparty/download-thirdparty.sh
index 86be27d..2edb494 100755
--- a/thirdparty/download-thirdparty.sh
+++ b/thirdparty/download-thirdparty.sh
@@ -319,15 +319,12 @@ fetch_and_patch \
$PYTHON_SOURCE \
$PYTHON_PATCHLEVEL
-LLVM_PATCHLEVEL=4
+LLVM_PATCHLEVEL=1
fetch_and_patch \
llvm-${LLVM_VERSION}-iwyu-${IWYU_VERSION}.src.tar.gz \
$LLVM_SOURCE \
$LLVM_PATCHLEVEL \
- "patch -p1 < $TP_DIR/patches/llvm-add-iwyu.patch" \
- "patch -p1 < $TP_DIR/patches/llvm-iwyu-include-picker.patch" \
- "patch -p0 < $TP_DIR/patches/llvm-iwyu-sized-deallocation.patch" \
- "patch -d projects -p1 < $TP_DIR/patches/llvm-947f9692440836dcb8d88b74b69dd379d85974ce.patch"
+ "patch -p1 < $TP_DIR/patches/llvm-add-iwyu.patch"
LZ4_PATCHLEVEL=0
fetch_and_patch \
diff --git a/thirdparty/package-llvm.sh b/thirdparty/package-llvm.sh
index ec25174..3a71072 100755
--- a/thirdparty/package-llvm.sh
+++ b/thirdparty/package-llvm.sh
@@ -36,22 +36,23 @@
# 10. Create new tarball from the resulting source tree
#
# Usage:
-# $ env VERSION=6.0.0 IWYU_VERSION=0.9 thirdparty/package-llvm.sh
+# $ env VERSION=11.0.0 IWYU_VERSION=0.15 thirdparty/package-llvm.sh
set -eux
-for ARTIFACT in llvm cfe compiler-rt libcxx libcxxabi lld clang-tools-extra; do
- wget https://releases.llvm.org/$VERSION/$ARTIFACT-$VERSION.src.tar.xz
+for ARTIFACT in llvm clang compiler-rt libcxx libcxxabi lld clang-tools-extra; do
+ wget https://github.com/llvm/llvm-project/releases/download/llvmorg-$VERSION/$ARTIFACT-$VERSION.src.tar.xz
tar xf $ARTIFACT-$VERSION.src.tar.xz
rm $ARTIFACT-$VERSION.src.tar.xz
done
IWYU_TAR=include-what-you-use-${IWYU_VERSION}.src.tar.gz
wget https://include-what-you-use.org/downloads/$IWYU_TAR
-tar xf $IWYU_TAR
+mkdir include-what-you-use
+tar xf $IWYU_TAR -C include-what-you-use
rm $IWYU_TAR
-mv cfe-$VERSION.src llvm-$VERSION.src/tools/clang
+mv clang-$VERSION.src llvm-$VERSION.src/tools/clang
mv clang-tools-extra-$VERSION.src llvm-$VERSION.src/tools/clang/tools/extra
mv lld-$VERSION.src llvm-$VERSION.src/tools/lld
mv compiler-rt-$VERSION.src llvm-$VERSION.src/projects/compiler-rt
diff --git a/thirdparty/patches/llvm-iwyu-include-picker.patch b/thirdparty/patches/llvm-iwyu-include-picker.patch
deleted file mode 100644
index 5c42d15..0000000
--- a/thirdparty/patches/llvm-iwyu-include-picker.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/tools/clang/tools/include-what-you-use/iwyu_include_picker.cc 2017-08-07 16:41:03.193267222 -0700
-+++ b/tools/clang/tools/include-what-you-use/iwyu_include_picker.cc 2017-08-07 16:41:12.603327180 -0700
-@@ -288,6 +295,7 @@ const IncludeMapEntry libc_include_map[] = {
- { "<bits/param.h>", kPrivate, "<sys/param.h>", kPublic },
- { "<bits/poll.h>", kPrivate, "<sys/poll.h>", kPrivate },
- { "<bits/poll2.h>", kPrivate, "<sys/poll.h>", kPrivate },
-+ { "<bits/local_lim.h>", kPrivate, "<limits.h>", kPublic },
- { "<bits/posix1_lim.h>", kPrivate, "<limits.h>", kPublic },
- { "<bits/posix2_lim.h>", kPrivate, "<limits.h>", kPublic },
- { "<bits/posix_opt.h>", kPrivate, "<unistd.h>", kPublic },
diff --git a/thirdparty/patches/llvm-iwyu-sized-deallocation.patch b/thirdparty/patches/llvm-iwyu-sized-deallocation.patch
deleted file mode 100644
index 5af6398..0000000
--- a/thirdparty/patches/llvm-iwyu-sized-deallocation.patch
+++ /dev/null
@@ -1,116 +0,0 @@
---- tools/clang/tools/include-what-you-use/iwyu_ast_util.cc.orig 2020-03-23 14:03:01.060932783 -0700
-+++ tools/clang/tools/include-what-you-use/iwyu_ast_util.cc 2020-03-23 14:04:37.056235116 -0700
-@@ -47,6 +47,7 @@
- class FileEntry;
- } // namespace clang
-
-+using clang::ASTContext;
- using clang::BlockPointerType;
- using clang::CXXConstructExpr;
- using clang::CXXConstructorDecl;
-@@ -78,6 +79,7 @@
- using clang::FullSourceLoc;
- using clang::FunctionDecl;
- using clang::FunctionType;
-+using clang::IdentifierInfo;
- using clang::ImplicitCastExpr;
- using clang::InjectedClassNameType;
- using clang::LValueReferenceType;
-@@ -929,13 +931,81 @@
- !StartsWith(decl_name, "operator delete"))
- return false;
-
-- // Placement-new/delete has 2 args, second is void*. The only other
-- // 2-arg overloads of new/delete in <new> take a const nothrow_t&.
-- if (decl->getNumParams() == 2 &&
-- !decl->getParamDecl(1)->getType().isConstQualified())
-- return false;
--
-- return true;
-+ // The following variants of operator new[1] are implicitly defined in every
-+ // translation unit and should not require including <new>.
-+ //
-+ // void* operator new ( std::size_t count );
-+ // void* operator new[]( std::size_t count );
-+ // void* operator new ( std::size_t count, std::align_val_t al ); (since C++17)
-+ // void* operator new[]( std::size_t count, std::align_val_t al ); (since C++17)
-+ //
-+ // Likewise, the following variants of operator delete[2] are implicitly
-+ // defined in every translation unit and should not require including <new>.
-+ //
-+ // void operator delete ( void* ptr ) throw(); (until C++11)
-+ // void operator delete ( void* ptr ) noexcept; (since C++11)
-+ // void operator delete[]( void* ptr ) throw(); (until C++11)
-+ // void operator delete[]( void* ptr ) noexcept; (since C++11)
-+ // void operator delete ( void* ptr, std::align_val_t al ) noexcept; (since C++17)
-+ // void operator delete[]( void* ptr, std::align_val_t al ) noexcept; (since C++17)
-+ // void operator delete ( void* ptr, std::size_t sz ) noexcept; (since C++14)
-+ // void operator delete[]( void* ptr, std::size_t sz ) noexcept; (since C++14)
-+ // void operator delete ( void* ptr, std::size_t sz,
-+ // std::align_val_t al ) noexcept; (since C++17)
-+ // void operator delete[]( void* ptr, std::size_t sz,
-+ // std::align_val_t al ) noexcept; (since C++17)
-+ // void operator delete ( void* ptr, const std::nothrow_t& tag ) throw(); (until C++11)
-+ // void operator delete ( void* ptr, const std::nothrow_t& tag ) noexcept; (since C++11)
-+ // void operator delete[]( void* ptr, const std::nothrow_t& tag ) throw(); (until C++11)
-+ // void operator delete[]( void* ptr, const std::nothrow_t& tag ) noexcept; (since C++11)
-+ //
-+ // The below code attempts to return true for these variants while returning
-+ // false for all others. FunctionDecl::isReplaceableGlobalAllocationFunction
-+ // comes very very close, but returns true for nothrow new, which is not
-+ // implicitly defined.
-+ //
-+ // 1. https://en.cppreference.com/w/cpp/memory/new/operator_new
-+ // 2. https://en.cppreference.com/w/cpp/memory/new/operator_delete
-+ switch (decl->getNumParams()) {
-+ case 1:
-+ // All 1-arg variants are implicitly declared.
-+ return true;
-+ case 2: {
-+ // Amongst 2-arg variants, aligned (C++17) new/delete, sized delete (C++14), and
-+ // nothrow delete are implicitly declared.
-+ ASTContext& ctx = decl->getASTContext();
-+ QualType t = decl->getParamDecl(1)->getType();
-+ if (t->isAlignValT() || // aligned new/delete
-+ ctx.hasSameType(t, ctx.getSizeType())) // sized delete
-+ return true;
-+ // We have to work a bit harder to figure out if it's a nothrow delete.
-+ //
-+ // This cribs from FunctionDecl::isReplaceableGlobalAllocationFunction.
-+ if (StartsWith(decl_name, "operator delete") && t->isReferenceType()) {
-+ t = t->getPointeeType();
-+ if (t.isConstQualified()) {
-+ const CXXRecordDecl* recordDecl = t->getAsCXXRecordDecl();
-+ if (recordDecl) {
-+ const IdentifierInfo* iInfo = recordDecl->getIdentifier();
-+ if (iInfo && iInfo->isStr("nothrow_t") && recordDecl->isInStdNamespace())
-+ return true;
-+ }
-+ }
-+ }
-+ return false;
-+ }
-+ case 3: {
-+ // Amongst 3-arg variants, only sized aligned delete (C++17) is implicitly
-+ // declared.
-+ ASTContext& ctx = decl->getASTContext();
-+ QualType t = decl->getParamDecl(1)->getType();
-+ return ctx.hasSameType(t, ctx.getSizeType()) &&
-+ decl->getParamDecl(2)->getType()->isAlignValT();
-+ }
-+ default:
-+ return false;
-+ return true;
-+ }
- }
-
- bool IsFriendDecl(const Decl* decl) {
-@@ -1082,7 +1152,7 @@
-
- bool IsBuiltinFunction(const clang::NamedDecl* decl,
- const std::string& symbol_name) {
-- if (const clang::IdentifierInfo* iden = decl->getIdentifier()) {
-+ if (const IdentifierInfo* iden = decl->getIdentifier()) {
- return iden->getBuiltinID() != 0 &&
- !clang::Builtin::Context::isBuiltinFunc(symbol_name.c_str());
- }
diff --git a/thirdparty/vars.sh b/thirdparty/vars.sh
index 04fa883..25abe6a 100644
--- a/thirdparty/vars.sh
+++ b/thirdparty/vars.sh
@@ -142,12 +142,12 @@ LIBUNWIND_NAME=libunwind-$LIBUNWIND_VERSION
LIBUNWIND_SOURCE=$TP_SOURCE_DIR/$LIBUNWIND_NAME
# See package-llvm.sh for details on the LLVM tarball.
-LLVM_VERSION=9.0.0
+LLVM_VERSION=11.0.0
LLVM_NAME=llvm-$LLVM_VERSION.src
LLVM_SOURCE=$TP_SOURCE_DIR/$LLVM_NAME
# The include-what-you-use is built along with LLVM in its source tree.
-IWYU_VERSION=0.13
+IWYU_VERSION=0.15
# Python is required to build LLVM 3.6+ because it uses
# llvm/utils/llvm-build/llvmbuild script. It is only built and installed if