-
Notifications
You must be signed in to change notification settings - Fork 14.8k
Revert "RuntimeLibcalls: Generate table of libcall name lengths (#153… #153864
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…#153210)" This reverts commit 9a14b1d. Revert "RuntimeLibcalls: Return StringRef for libcall names (llvm#153209)" This reverts commit cb1228f. Revert "TableGen: Emit statically generated hash table for runtime libcalls (llvm#150192)" This reverts commit 769a905. Reverted three changes because of a CMake error while building llvm-nm as reported in the following PR: llvm#150192 (comment)
@llvm/pr-subscribers-llvm-transforms @llvm/pr-subscribers-lto Author: None (gulfemsavrun) Changes…210)" This reverts commit 9a14b1d. Revert "RuntimeLibcalls: Return StringRef for libcall names (#153209)" This reverts commit cb1228f. Revert "TableGen: Emit statically generated hash table for runtime libcalls (#150192)" This reverts commit 769a905. Reverted three changes because of a CMake error while building llvm-nm as reported in the following PR: Patch is 36.96 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/153864.diff 14 Files Affected:
diff --git a/llvm/benchmarks/CMakeLists.txt b/llvm/benchmarks/CMakeLists.txt
index 9613678d2e0ac..1078efa55f497 100644
--- a/llvm/benchmarks/CMakeLists.txt
+++ b/llvm/benchmarks/CMakeLists.txt
@@ -11,20 +11,3 @@ add_benchmark(FormatVariadicBM FormatVariadicBM.cpp PARTIAL_SOURCES_INTENDED)
add_benchmark(GetIntrinsicInfoTableEntriesBM GetIntrinsicInfoTableEntriesBM.cpp PARTIAL_SOURCES_INTENDED)
add_benchmark(SandboxIRBench SandboxIRBench.cpp PARTIAL_SOURCES_INTENDED)
-# Extract the list of symbols in a random utility as sample data.
-set(SYMBOL_TEST_DATA_FILE "sample_symbol_list.txt")
-set(SYMBOL_TEST_DATA_SOURCE_BINARY $<TARGET_FILE:llc>)
-
-add_custom_command(OUTPUT ${SYMBOL_TEST_DATA_FILE}
- COMMAND $<TARGET_FILE:llvm-nm> --no-demangle --no-sort
- --format=just-symbols
- ${SYMBOL_TEST_DATA_SOURCE_BINARY} > ${SYMBOL_TEST_DATA_FILE}
- DEPENDS "$<TARGET_FILE:llvm-nm>" "$<TARGET_FILE:llc>")
-
-add_custom_target(generate-runtime-libcalls-sample-symbol-list
- DEPENDS ${SYMBOL_TEST_DATA_FILE})
-add_benchmark(RuntimeLibcallsBench RuntimeLibcalls.cpp PARTIAL_SOURCES_INTENDED)
-
-add_dependencies(RuntimeLibcallsBench generate-runtime-libcalls-sample-symbol-list)
-target_compile_definitions(RuntimeLibcallsBench PRIVATE
- -DSYMBOL_TEST_DATA_FILE="${CMAKE_CURRENT_BINARY_DIR}/${SYMBOL_TEST_DATA_FILE}")
diff --git a/llvm/benchmarks/RuntimeLibcalls.cpp b/llvm/benchmarks/RuntimeLibcalls.cpp
deleted file mode 100644
index 81a5a24ec8f93..0000000000000
--- a/llvm/benchmarks/RuntimeLibcalls.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/IR/RuntimeLibcalls.h"
-#include "benchmark/benchmark.h"
-#include "llvm/IR/DataLayout.h"
-#include "llvm/Support/Error.h"
-#include "llvm/Support/LineIterator.h"
-#include "llvm/Support/MemoryBuffer.h"
-#include "llvm/TargetParser/Triple.h"
-#include <random>
-#include <string>
-using namespace llvm;
-
-static constexpr unsigned MaxFuncNameSize = 53;
-
-static std::vector<StringRef> getLibcallNameStringRefs() {
- std::vector<StringRef> Names(RTLIB::NumLibcallImpls);
- // Keep the strlens on the StringRef construction out of the benchmark loop.
- for (RTLIB::LibcallImpl LC : RTLIB::libcall_impls())
- Names[LC] = RTLIB::RuntimeLibcallsInfo::getLibcallImplName(LC);
-
- return Names;
-}
-
-static std::vector<std::string> getRandomFuncNames() {
- std::mt19937_64 Rng;
- std::uniform_int_distribution<> StringLengthDistribution(1, MaxFuncNameSize);
- std::uniform_int_distribution<> CharDistribution(1, 255);
- int NumTestFuncs = 1 << 10;
- std::vector<std::string> TestFuncNames(NumTestFuncs);
-
- for (std::string &TestFuncName : TestFuncNames) {
- for (int I = 0, E = StringLengthDistribution(Rng); I != E; ++I)
- TestFuncName += static_cast<char>(CharDistribution(Rng));
- }
-
- return TestFuncNames;
-}
-
-static std::vector<std::string> readSymbolsFromFile(StringRef InputFile) {
- auto BufOrError = MemoryBuffer::getFileOrSTDIN(InputFile, /*IsText=*/true);
- if (!BufOrError) {
- reportFatalUsageError("failed to open \'" + Twine(InputFile) +
- "\': " + BufOrError.getError().message());
- }
-
- // Hackily figure out if there's a prefix on the symbol names - llvm-nm
- // appears to not have a flag to skip this.
- llvm::Triple HostTriple(LLVM_HOST_TRIPLE);
- std::string DummyDatalayout = "e";
- DummyDatalayout += DataLayout::getManglingComponent(HostTriple);
-
- DataLayout DL(DummyDatalayout);
- char GlobalPrefix = DL.getGlobalPrefix();
-
- std::vector<std::string> Lines;
- for (line_iterator LineIt(**BufOrError, /*SkipBlanks=*/true);
- !LineIt.is_at_eof(); ++LineIt) {
- StringRef SymbolName = *LineIt;
- SymbolName.consume_front(StringRef(&GlobalPrefix, 1));
-
- Lines.push_back(SymbolName.str());
- }
- return Lines;
-}
-
-static void BM_LookupRuntimeLibcallByNameKnownCalls(benchmark::State &State) {
- std::vector<StringRef> Names = getLibcallNameStringRefs();
-
- for (auto _ : State) {
- for (StringRef Name : Names) {
- benchmark::DoNotOptimize(
- RTLIB::RuntimeLibcallsInfo::lookupLibcallImplName(Name).empty());
- }
- }
-}
-
-static void BM_LookupRuntimeLibcallByNameRandomCalls(benchmark::State &State) {
- std::vector<std::string> TestFuncNames = getRandomFuncNames();
-
- for (auto _ : State) {
- for (const std::string &Name : TestFuncNames) {
- benchmark::DoNotOptimize(
- RTLIB::RuntimeLibcallsInfo::lookupLibcallImplName(StringRef(Name))
- .empty());
- }
- }
-}
-
-// This isn't fully representative, it doesn't include any anonymous functions.
-// nm -n --no-demangle --format=just-symbols sample-binary > sample.txt
-static void BM_LookupRuntimeLibcallByNameSampleData(benchmark::State &State) {
- std::vector<std::string> TestFuncNames =
- readSymbolsFromFile(SYMBOL_TEST_DATA_FILE);
- for (auto _ : State) {
- for (const std::string &Name : TestFuncNames) {
- benchmark::DoNotOptimize(
- RTLIB::RuntimeLibcallsInfo::lookupLibcallImplName(StringRef(Name))
- .empty());
- }
- }
-}
-
-BENCHMARK(BM_LookupRuntimeLibcallByNameKnownCalls);
-BENCHMARK(BM_LookupRuntimeLibcallByNameRandomCalls);
-BENCHMARK(BM_LookupRuntimeLibcallByNameSampleData);
-
-BENCHMARK_MAIN();
diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h
index 272d7dd5f45e8..ec3104799bfb5 100644
--- a/llvm/include/llvm/CodeGen/TargetLowering.h
+++ b/llvm/include/llvm/CodeGen/TargetLowering.h
@@ -3557,19 +3557,15 @@ class LLVM_ABI TargetLoweringBase {
/// Get the libcall routine name for the specified libcall.
const char *getLibcallName(RTLIB::Libcall Call) const {
- // FIXME: Return StringRef
- return Libcalls.getLibcallName(Call).data();
+ return Libcalls.getLibcallName(Call);
}
/// Get the libcall routine name for the specified libcall implementation
- static StringRef getLibcallImplName(RTLIB::LibcallImpl Call) {
- return RTLIB::RuntimeLibcallsInfo::getLibcallImplName(Call);
+ const char *getLibcallImplName(RTLIB::LibcallImpl Call) const {
+ return Libcalls.getLibcallImplName(Call);
}
- const char *getMemcpyName() const {
- // FIXME: Return StringRef
- return Libcalls.getMemcpyName().data();
- }
+ const char *getMemcpyName() const { return Libcalls.getMemcpyName(); }
/// Get the comparison predicate that's to be used to test the result of the
/// comparison libcall against zero. This should only be used with
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.h b/llvm/include/llvm/IR/RuntimeLibcalls.h
index 308be543de2bd..2d1d07c5fd81b 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.h
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.h
@@ -77,17 +77,17 @@ struct RuntimeLibcallsInfo {
/// Get the libcall routine name for the specified libcall.
// FIXME: This should be removed. Only LibcallImpl should have a name.
- StringRef getLibcallName(RTLIB::Libcall Call) const {
+ const char *getLibcallName(RTLIB::Libcall Call) const {
return getLibcallImplName(LibcallImpls[Call]);
}
/// Get the libcall routine name for the specified libcall implementation.
- static StringRef getLibcallImplName(RTLIB::LibcallImpl CallImpl) {
+ // FIXME: Change to return StringRef
+ static const char *getLibcallImplName(RTLIB::LibcallImpl CallImpl) {
if (CallImpl == RTLIB::Unsupported)
- return StringRef();
- return StringRef(RuntimeLibcallImplNameTable.getCString(
- RuntimeLibcallNameOffsetTable[CallImpl]),
- RuntimeLibcallNameSizeTable[CallImpl]);
+ return nullptr;
+ return RuntimeLibcallImplNameTable[RuntimeLibcallNameOffsetTable[CallImpl]]
+ .data();
}
/// Return the lowering's selection of implementation call for \p Call
@@ -119,10 +119,9 @@ struct RuntimeLibcallsInfo {
/// Return a function name compatible with RTLIB::MEMCPY, or nullptr if fully
/// unsupported.
- StringRef getMemcpyName() const {
- RTLIB::LibcallImpl Memcpy = getLibcallImpl(RTLIB::MEMCPY);
- if (Memcpy != RTLIB::Unsupported)
- return getLibcallImplName(Memcpy);
+ const char *getMemcpyName() const {
+ if (const char *Memcpy = getLibcallName(RTLIB::MEMCPY))
+ return Memcpy;
// Fallback to memmove if memcpy isn't available.
return getLibcallName(RTLIB::MEMMOVE);
@@ -133,41 +132,11 @@ struct RuntimeLibcallsInfo {
return ImplToLibcall[Impl];
}
- /// Check if a function name is a recognized runtime call of any kind. This
- /// does not consider if this call is available for any current compilation,
- /// just that it is a known call somewhere. This returns the set of all
- /// LibcallImpls which match the name; multiple implementations with the same
- /// name may exist but differ in interpretation based on the target context.
- ///
- /// Generated by tablegen.
- LLVM_ABI static inline iota_range<RTLIB::LibcallImpl>
- lookupLibcallImplName(StringRef Name){
- // Inlining the early exit on the string name appears to be worthwhile when
- // querying a real set of symbols
-#define GET_LOOKUP_LIBCALL_IMPL_NAME_BODY
-#include "llvm/IR/RuntimeLibcalls.inc"
-#undef GET_LOOKUP_LIBCALL_IMPL_NAME_BODY
- }
-
/// Check if this is valid libcall for the current module, otherwise
/// RTLIB::Unsupported.
- LLVM_ABI RTLIB::LibcallImpl
- getSupportedLibcallImpl(StringRef FuncName) const {
- for (RTLIB::LibcallImpl Impl : lookupLibcallImplName(FuncName)) {
- // FIXME: This should not depend on looking up ImplToLibcall, only the
- // list of libcalls for the module.
- RTLIB::LibcallImpl Recognized = LibcallImpls[ImplToLibcall[Impl]];
- if (Recognized != RTLIB::Unsupported)
- return Recognized;
- }
-
- return RTLIB::Unsupported;
- }
+ LLVM_ABI RTLIB::LibcallImpl getSupportedLibcallImpl(StringRef FuncName) const;
private:
- LLVM_ABI static iota_range<RTLIB::LibcallImpl>
- lookupLibcallImplNameImpl(StringRef Name);
-
/// Stores the implementation choice for each each libcall.
RTLIB::LibcallImpl LibcallImpls[RTLIB::UNKNOWN_LIBCALL + 1] = {
RTLIB::Unsupported};
@@ -184,16 +153,17 @@ struct RuntimeLibcallsInfo {
LLVM_ABI static const char RuntimeLibcallImplNameTableStorage[];
LLVM_ABI static const StringTable RuntimeLibcallImplNameTable;
LLVM_ABI static const uint16_t RuntimeLibcallNameOffsetTable[];
- LLVM_ABI static const uint8_t RuntimeLibcallNameSizeTable[];
/// Map from a concrete LibcallImpl implementation to its RTLIB::Libcall kind.
LLVM_ABI static const RTLIB::Libcall ImplToLibcall[RTLIB::NumLibcallImpls];
- /// Utility function for tablegenerated lookup function. Return a range of
- /// enum values that apply for the function name at \p NameOffsetEntry with
- /// the value \p StrOffset.
- static inline iota_range<RTLIB::LibcallImpl>
- libcallImplNameHit(uint16_t NameOffsetEntry, uint16_t StrOffset);
+ /// Check if a function name is a recognized runtime call of any kind. This
+ /// does not consider if this call is available for any current compilation,
+ /// just that it is a known call somewhere. This returns the set of all
+ /// LibcallImpls which match the name; multiple implementations with the same
+ /// name may exist but differ in interpretation based on the target context.
+ LLVM_ABI static iterator_range<ArrayRef<uint16_t>::const_iterator>
+ getRecognizedLibcallImpls(StringRef FuncName);
static bool darwinHasSinCosStret(const Triple &TT) {
if (!TT.isOSDarwin())
diff --git a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
index 96c9cde622b45..9fa96e7372961 100644
--- a/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
+++ b/llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp
@@ -145,7 +145,7 @@ static bool lowerObjCCall(Function &F, RTLIB::LibcallImpl NewFn,
// FIXME: When RuntimeLibcalls is an analysis, check if the function is really
// supported, and go through RTLIB::Libcall.
- StringRef NewFnName = RTLIB::RuntimeLibcallsInfo::getLibcallImplName(NewFn);
+ const char *NewFnName = RTLIB::RuntimeLibcallsInfo::getLibcallImplName(NewFn);
// If we haven't already looked up this function, check to see if the
// program already contains a function with this name.
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index 88cb192c08781..ac845c4998783 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -9,7 +9,6 @@
#include "llvm/IR/RuntimeLibcalls.h"
#include "llvm/ADT/StringTable.h"
#include "llvm/Support/Debug.h"
-#include "llvm/Support/xxhash.h"
#include "llvm/TargetParser/ARMTargetParser.h"
#define DEBUG_TYPE "runtime-libcalls-info"
@@ -19,11 +18,9 @@ using namespace RTLIB;
#define GET_INIT_RUNTIME_LIBCALL_NAMES
#define GET_SET_TARGET_RUNTIME_LIBCALL_SETS
-#define DEFINE_GET_LOOKUP_LIBCALL_IMPL_NAME
#include "llvm/IR/RuntimeLibcalls.inc"
#undef GET_INIT_RUNTIME_LIBCALL_NAMES
#undef GET_SET_TARGET_RUNTIME_LIBCALL_SETS
-#undef DEFINE_GET_LOOKUP_LIBCALL_IMPL_NAME
/// Set default libcall names. If a target wants to opt-out of a libcall it
/// should be placed here.
@@ -61,23 +58,49 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
}
}
-LLVM_ATTRIBUTE_ALWAYS_INLINE
-iota_range<RTLIB::LibcallImpl>
-RuntimeLibcallsInfo::libcallImplNameHit(uint16_t NameOffsetEntry,
- uint16_t StrOffset) {
- int NumAliases = 1;
- for (uint16_t Entry : ArrayRef(RuntimeLibcallNameOffsetTable)
- .drop_front(NameOffsetEntry + 1)) {
- if (Entry != StrOffset)
- break;
- ++NumAliases;
+RTLIB::LibcallImpl
+RuntimeLibcallsInfo::getSupportedLibcallImpl(StringRef FuncName) const {
+ const ArrayRef<uint16_t> RuntimeLibcallNameOffsets(
+ RuntimeLibcallNameOffsetTable);
+
+ iterator_range<ArrayRef<uint16_t>::const_iterator> Range =
+ getRecognizedLibcallImpls(FuncName);
+
+ for (auto I = Range.begin(); I != Range.end(); ++I) {
+ RTLIB::LibcallImpl Impl =
+ static_cast<RTLIB::LibcallImpl>(I - RuntimeLibcallNameOffsets.begin());
+
+ // FIXME: This should not depend on looking up ImplToLibcall, only the list
+ // of libcalls for the module.
+ RTLIB::LibcallImpl Recognized = LibcallImpls[ImplToLibcall[Impl]];
+ if (Recognized != RTLIB::Unsupported)
+ return Recognized;
}
- RTLIB::LibcallImpl ImplStart = static_cast<RTLIB::LibcallImpl>(
- &RuntimeLibcallNameOffsetTable[NameOffsetEntry] -
- &RuntimeLibcallNameOffsetTable[0]);
- return enum_seq(ImplStart,
- static_cast<RTLIB::LibcallImpl>(ImplStart + NumAliases));
+ return RTLIB::Unsupported;
+}
+
+iterator_range<ArrayRef<uint16_t>::const_iterator>
+RuntimeLibcallsInfo::getRecognizedLibcallImpls(StringRef FuncName) {
+ StringTable::Iterator It = lower_bound(RuntimeLibcallImplNameTable, FuncName);
+ if (It == RuntimeLibcallImplNameTable.end() || *It != FuncName)
+ return iterator_range(ArrayRef<uint16_t>());
+
+ uint16_t IndexVal = It.offset().value();
+ const ArrayRef<uint16_t> TableRef(RuntimeLibcallNameOffsetTable);
+
+ ArrayRef<uint16_t>::const_iterator E = TableRef.end();
+ ArrayRef<uint16_t>::const_iterator EntriesBegin =
+ std::lower_bound(TableRef.begin(), E, IndexVal);
+ ArrayRef<uint16_t>::const_iterator EntriesEnd = EntriesBegin;
+
+ while (EntriesEnd != E && *EntriesEnd == IndexVal)
+ ++EntriesEnd;
+
+ assert(EntriesBegin != E &&
+ "libcall found in name table but not offset table");
+
+ return make_range(EntriesBegin, EntriesEnd);
}
bool RuntimeLibcallsInfo::isAAPCS_ABI(const Triple &TT, StringRef ABIName) {
diff --git a/llvm/lib/LTO/LTO.cpp b/llvm/lib/LTO/LTO.cpp
index 35d24c17bbd93..0323b4d433b87 100644
--- a/llvm/lib/LTO/LTO.cpp
+++ b/llvm/lib/LTO/LTO.cpp
@@ -1422,7 +1422,7 @@ SmallVector<const char *> LTO::getRuntimeLibcallSymbols(const Triple &TT) {
for (RTLIB::LibcallImpl Impl : LibcallImpls) {
if (Impl != RTLIB::Unsupported)
- LibcallSymbols.push_back(Libcalls.getLibcallImplName(Impl).data());
+ LibcallSymbols.push_back(Libcalls.getLibcallImplName(Impl));
}
return LibcallSymbols;
diff --git a/llvm/lib/Object/IRSymtab.cpp b/llvm/lib/Object/IRSymtab.cpp
index 0043f02107fb8..0f194953787e6 100644
--- a/llvm/lib/Object/IRSymtab.cpp
+++ b/llvm/lib/Object/IRSymtab.cpp
@@ -46,7 +46,7 @@ static cl::opt<bool> DisableBitcodeVersionUpgrade(
"disable-bitcode-version-upgrade", cl::Hidden,
cl::desc("Disable automatic bitcode upgrade for version mismatch"));
-static constexpr StringLiteral PreservedSymbols[] = {
+static const char *PreservedSymbols[] = {
// There are global variables, so put it here instead of in
// RuntimeLibcalls.td.
// TODO: Are there similar such variables?
@@ -54,10 +54,6 @@ static constexpr StringLiteral PreservedSymbols[] = {
"__stack_chk_guard",
};
-static bool isPreservedGlobalVarName(StringRef Name) {
- return PreservedSymbols[0] == Name || PreservedSymbols[1] == Name;
-}
-
namespace {
const char *getExpectedProducerName() {
@@ -85,16 +81,12 @@ struct Builder {
// The StringTableBuilder does not create a copy of any strings added to it,
// so this provides somewhere to store any strings that we create.
Builder(SmallVector<char, 0> &Symtab, StringTableBuilder &StrtabBuilder,
- BumpPtrAllocator &Alloc, const Triple &TT)
- : Symtab(Symtab), StrtabBuilder(StrtabBuilder), Saver(Alloc), TT(TT),
- Libcalls(TT) {}
+ BumpPtrAllocator &Alloc)
+ : Symtab(Symtab), StrtabBuilder(StrtabBuilder), Saver(Alloc) {}
DenseMap<const Comdat *, int> ComdatMap;
Mangler Mang;
- const Triple &TT;
-
- // FIXME: This shouldn't be here.
- RTLIB::RuntimeLibcallsInfo Libcalls;
+ Triple TT;
std::vector<storage::Comdat> Comdats;
std::vector<storage::Module> Mods;
@@ -106,10 +98,6 @@ struct Builder {
std::vector<storage::Str> DependentLibraries;
- bool isPreservedLibFuncName(StringRef Name) {
- return Libcalls.getSupportedLibcallImpl(Name) != RTLIB::Unsupported;
- }
-
void setStr(storage::Str &S, StringRef Value) {
S.Offset = StrtabBuilder.add(Value);
S.Size = Value.size();
@@ -225,6 +213,19 @@ Expected<int> Builder::getComdatIndex(const Comdat *C, const Module *M) {
return P.first->second;
}
+static StringSet<> buildPreservedSymbolsSet(const Triple &TT) {
+ StringSet<> PreservedSymbolSet;
+ PreservedSymbolSet.insert(std::begin(PreservedSymbols),
+ std::end(PreservedSymbols));
+ // FIXME: Do we need to pass in ABI fields from TargetOptions?
+ RTLIB::RuntimeLibcallsInfo Libcalls(TT);
+ for (RTLIB::LibcallImpl Impl : Libcalls.getLibcallImpls()) {
+ if (Impl != RTLIB::Unsupported)
+ PreservedSymbolSet.insert(Libcalls.getLibcallImplName(Impl));
+ }
+ return PreservedSymbolSet;
+}
+
Error Builder::addSymbol(const ModuleSymbolTable &Msymtab,
const SmallPtrSet<GlobalValue *, 4> &Used,
ModuleSymbolTable::Symbol Msym) {
@@ -278,11 +279,13 @@ Error Builder::addSymbol(const ModuleSymbolTable &Msymtab,
return Error::success();
}
- StringRef GVName = GV->getName();
- setStr(Sym.IRName, GVName);
+ setStr(Sym.IRName, GV->getName());
+
+ static const StringSet<> PreservedSymbolsSet =
+ buildPreservedSymbolsSet(GV->getParent()->getTargetTriple());
+ bool IsPreservedSymbol = PreservedSymbolsSet.contains(GV->getName());
- if (Used.count(GV) || isPreservedLibFuncName(GVName) ||
- isPreservedGlobalVarName(GVName))
+ if (Used.count(GV) || IsPreservedSymbol)
Sym.Flags |= 1 << storage::Symbol::FB_used;
if (GV->isThreadLocal())
Sym.Flags |= 1 << storage::Symbol::FB_tls;
@@ -349,6 +352,7 @@ Error Builder::build(ArrayRef<Module *> IRMods) {
setStr(Hdr.Producer, kExpectedProducerName);
setStr(Hdr.TargetTriple, IRMods[0]->getTargetTriple().str());
setStr(Hdr.SourceFileName, IRMods[0]->getSourceFileName());
+ TT = IRMods[0]->getTargetTriple();
for (au...
[truncated]
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/27/builds/14648 Here is the relevant piece of the build log for the reference
|
…210)"
This reverts commit 9a14b1d.
Revert "RuntimeLibcalls: Return StringRef for libcall names (#153209)"
This reverts commit cb1228f.
Revert "TableGen: Emit statically generated hash table for runtime libcalls (#150192)"
This reverts commit 769a905.
Reverted three changes because of a CMake error while building llvm-nm as reported in the following PR:
#150192 (comment)