[lld] r262194 - Remove dead code for ELF.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 28 13:22:44 PST 2016
Author: ruiu
Date: Sun Feb 28 15:22:44 2016
New Revision: 262194
URL: http://llvm.org/viewvc/llvm-project?rev=262194&view=rev
Log:
Remove dead code for ELF.
The preload feature was buggy that we had disabled it even for ELF.
Modified:
lld/trunk/include/lld/Core/ArchiveLibraryFile.h
lld/trunk/include/lld/Core/LinkingContext.h
lld/trunk/include/lld/Core/Parallel.h
lld/trunk/include/lld/Core/Resolver.h
lld/trunk/lib/Core/Resolver.cpp
lld/trunk/lib/Driver/Driver.cpp
lld/trunk/lib/ReaderWriter/FileArchive.cpp
Modified: lld/trunk/include/lld/Core/ArchiveLibraryFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/ArchiveLibraryFile.h?rev=262194&r1=262193&r2=262194&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/ArchiveLibraryFile.h (original)
+++ lld/trunk/include/lld/Core/ArchiveLibraryFile.h Sun Feb 28 15:22:44 2016
@@ -11,7 +11,6 @@
#define LLD_CORE_ARCHIVE_LIBRARY_FILE_H
#include "lld/Core/File.h"
-#include "lld/Core/Parallel.h"
#include <set>
namespace lld {
@@ -38,12 +37,6 @@ public:
virtual std::error_code
parseAllMembers(std::vector<std::unique_ptr<File>> &result) = 0;
- // Parses a member file containing a given symbol, so that when you
- // need the file find() can return that immediately. Calling this function
- // has no side effect other than pre-instantiating a file. Calling this
- // function doesn't affect correctness.
- virtual void preload(TaskGroup &group, StringRef symbolName) {}
-
protected:
/// only subclasses of ArchiveLibraryFile can be instantiated
ArchiveLibraryFile(StringRef path) : File(path, kindArchiveLibrary) {}
Modified: lld/trunk/include/lld/Core/LinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/LinkingContext.h?rev=262194&r1=262193&r2=262194&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/LinkingContext.h (original)
+++ lld/trunk/include/lld/Core/LinkingContext.h Sun Feb 28 15:22:44 2016
@@ -13,7 +13,6 @@
#include "lld/Core/Error.h"
#include "lld/Core/LLVM.h"
#include "lld/Core/Node.h"
-#include "lld/Core/Parallel.h"
#include "lld/Core/Reference.h"
#include "lld/Core/Reader.h"
#include "llvm/Support/ErrorOr.h"
@@ -309,8 +308,6 @@ public:
return std::error_code();
}
- TaskGroup &getTaskGroup() { return _taskGroup; }
-
/// @}
protected:
LinkingContext(); // Must be subclassed
@@ -354,7 +351,6 @@ protected:
private:
/// Validate the subclass bits. Only called by validate.
virtual bool validateImpl(raw_ostream &diagnostics) = 0;
- TaskGroup _taskGroup;
};
} // end namespace lld
Modified: lld/trunk/include/lld/Core/Parallel.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Parallel.h?rev=262194&r1=262193&r2=262194&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/Parallel.h (original)
+++ lld/trunk/include/lld/Core/Parallel.h Sun Feb 28 15:22:44 2016
@@ -62,41 +62,6 @@ public:
}
};
-/// \brief An implementation of future. std::future and std::promise in
-/// old libstdc++ have a threading bug; there is a small chance that a
-/// call of future::get throws an exception in the normal use case.
-/// We want to use our own future implementation until we drop support
-/// of old versions of libstdc++.
-/// https://gcc.gnu.org/ml/gcc-patches/2014-05/msg01389.html
-template<typename T> class Future {
-public:
- Future() : _hasValue(false) {}
-
- void set(T &&val) {
- assert(!_hasValue);
- {
- std::unique_lock<std::mutex> lock(_mutex);
- _val = val;
- _hasValue = true;
- }
- _cond.notify_all();
- }
-
- T &get() {
- std::unique_lock<std::mutex> lock(_mutex);
- if (_hasValue)
- return _val;
- _cond.wait(lock, [&] { return _hasValue; });
- return _val;
- }
-
-private:
- T _val;
- bool _hasValue;
- std::mutex _mutex;
- std::condition_variable _cond;
-};
-
// Classes in this namespace are implementation details of this header.
namespace internal {
Modified: lld/trunk/include/lld/Core/Resolver.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Resolver.h?rev=262194&r1=262193&r2=262194&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/Resolver.h (original)
+++ lld/trunk/include/lld/Core/Resolver.h Sun Feb 28 15:22:44 2016
@@ -64,7 +64,6 @@ private:
File *getFile(int &index);
/// \brief The main function that iterates over the files to resolve
- void updatePreloadArchiveMap();
bool resolveUndefines();
void updateReferences();
void deadStripOptimize();
@@ -76,7 +75,6 @@ private:
void markLive(const Atom *atom);
void addAtoms(const std::vector<const DefinedAtom *>&);
- void maybePreloadArchiveMember(StringRef sym);
class MergedFile : public SimpleFile {
public:
@@ -98,10 +96,6 @@ private:
std::map<File *, bool> _newUndefinesAdded;
size_t _fileIndex;
- // Preloading
- llvm::StringMap<ArchiveLibraryFile *> _archiveMap;
- llvm::DenseSet<ArchiveLibraryFile *> _archiveSeen;
-
// List of undefined symbols.
std::vector<StringRef> _undefines;
Modified: lld/trunk/lib/Core/Resolver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/Resolver.cpp?rev=262194&r1=262193&r2=262194&view=diff
==============================================================================
--- lld/trunk/lib/Core/Resolver.cpp (original)
+++ lld/trunk/lib/Core/Resolver.cpp Sun Feb 28 15:22:44 2016
@@ -36,10 +36,8 @@ ErrorOr<bool> Resolver::handleFile(File
for (const DefinedAtom *atom : file.defined())
doDefinedAtom(*atom);
for (const UndefinedAtom *atom : file.undefined()) {
- if (doUndefinedAtom(*atom)) {
+ if (doUndefinedAtom(*atom))
undefAdded = true;
- maybePreloadArchiveMember(atom->name());
- }
}
for (const SharedLibraryAtom *atom : file.sharedLibrary())
doSharedLibraryAtom(*atom);
@@ -98,7 +96,6 @@ ErrorOr<bool> Resolver::handleArchiveFil
bool dataSymbolOnly)->ErrorOr<bool> {
if (File *member = archiveFile->find(undefName, dataSymbolOnly)) {
member->setOrdinal(_ctx.getNextOrdinalAndIncrement());
- updatePreloadArchiveMap();
return handleFile(*member);
}
return false;
@@ -207,17 +204,6 @@ void Resolver::addAtoms(const std::vecto
doDefinedAtom(*newAtom);
}
-// Instantiate an archive file member if there's a file containing a
-// defined symbol for a given symbol name. Instantiation is done in a
-// different worker thread and has no visible side effect.
-void Resolver::maybePreloadArchiveMember(StringRef sym) {
- auto it = _archiveMap.find(sym);
- if (it == _archiveMap.end())
- return;
- ArchiveLibraryFile *archive = it->second;
- archive->preload(_ctx.getTaskGroup(), sym);
-}
-
// Returns true if at least one of N previous files has created an
// undefined symbol.
bool Resolver::undefinesAdded(int begin, int end) {
@@ -248,23 +234,6 @@ File *Resolver::getFile(int &index) {
return cast<FileNode>(inputs[index++].get())->getFile();
}
-// Update a map of Symbol -> ArchiveFile. The map is used for speculative
-// file loading.
-void Resolver::updatePreloadArchiveMap() {
- std::vector<std::unique_ptr<Node>> &nodes = _ctx.getNodes();
- for (int i = nodes.size() - 1; i >= 0; --i) {
- auto *fnode = dyn_cast<FileNode>(nodes[i].get());
- if (!fnode)
- continue;
- auto *archive = dyn_cast<ArchiveLibraryFile>(fnode->getFile());
- if (!archive || _archiveSeen.count(archive))
- continue;
- _archiveSeen.insert(archive);
- for (StringRef sym : archive->getDefinedSymbols())
- _archiveMap[sym] = archive;
- }
-}
-
// Keep adding atoms until _ctx.getNextFile() returns an error. This
// function is where undefined atoms are resolved.
bool Resolver::resolveUndefines() {
@@ -287,7 +256,6 @@ bool Resolver::resolveUndefines() {
}
DEBUG_WITH_TYPE("resolver",
llvm::dbgs() << "Loaded file: " << file->path() << "\n");
- updatePreloadArchiveMap();
switch (file->kind()) {
case File::kindErrorObject:
case File::kindNormalizedObject:
@@ -503,7 +471,6 @@ void Resolver::removeCoalescedAwayAtoms(
bool Resolver::resolve() {
DEBUG_WITH_TYPE("resolver",
llvm::dbgs() << "******** Resolving atom references:\n");
- updatePreloadArchiveMap();
if (!resolveUndefines())
return false;
updateReferences();
Modified: lld/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/Driver.cpp?rev=262194&r1=262193&r2=262194&view=diff
==============================================================================
--- lld/trunk/lib/Driver/Driver.cpp (original)
+++ lld/trunk/lib/Driver/Driver.cpp Sun Feb 28 15:22:44 2016
@@ -11,7 +11,6 @@
#include "lld/Core/File.h"
#include "lld/Core/Instrumentation.h"
#include "lld/Core/LLVM.h"
-#include "lld/Core/Parallel.h"
#include "lld/Core/PassManager.h"
#include "lld/Core/Reader.h"
#include "lld/Core/Resolver.h"
@@ -84,7 +83,7 @@ bool Driver::link(LinkingContext &ctx, r
for (std::unique_ptr<Node> &ie : ctx.getNodes())
if (FileNode *node = dyn_cast<FileNode>(ie.get()))
- ctx.getTaskGroup().spawn([node] { node->getFile()->parse(); });
+ node->getFile()->parse();
std::vector<std::unique_ptr<File>> internalFiles;
ctx.createInternalFiles(internalFiles);
@@ -108,10 +107,8 @@ bool Driver::link(LinkingContext &ctx, r
// Do core linking.
ScopedTask resolveTask(getDefaultDomain(), "Resolve");
Resolver resolver(ctx);
- if (!resolver.resolve()) {
- ctx.getTaskGroup().sync();
+ if (!resolver.resolve())
return false;
- }
std::unique_ptr<SimpleFile> merged = resolver.resultFile();
resolveTask.end();
Modified: lld/trunk/lib/ReaderWriter/FileArchive.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/FileArchive.cpp?rev=262194&r1=262193&r2=262194&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/FileArchive.cpp (original)
+++ lld/trunk/lib/ReaderWriter/FileArchive.cpp Sun Feb 28 15:22:44 2016
@@ -10,7 +10,6 @@
#include "lld/Core/ArchiveLibraryFile.h"
#include "lld/Core/LLVM.h"
#include "lld/Core/LinkingContext.h"
-#include "lld/Core/Parallel.h"
#include "lld/Driver/Driver.h"
#include "llvm/ADT/Hashing.h"
#include "llvm/ADT/StringRef.h"
@@ -64,17 +63,6 @@ public:
_membersInstantiated.insert(memberStart);
- // Check if a file is preloaded.
- {
- std::lock_guard<std::mutex> lock(_mutex);
- auto it = _preloaded.find(memberStart);
- if (it != _preloaded.end()) {
- std::unique_ptr<Future<File *>> &p = it->second;
- Future<File *> *future = p.get();
- return future->get();
- }
- }
-
std::unique_ptr<File> result;
if (instantiateMember(ci, result))
return nullptr;
@@ -86,38 +74,6 @@ public:
return file;
}
- // Instantiate a member file containing a given symbol name.
- void preload(TaskGroup &group, StringRef name) override {
- auto member = _symbolMemberMap.find(name);
- if (member == _symbolMemberMap.end())
- return;
- Archive::child_iterator ci = member->second;
- if (ci->getError())
- return;
-
- // Do nothing if a member is already instantiated.
- ErrorOr<StringRef> buf = (*ci)->getBuffer();
- if (!buf)
- return;
- const char *memberStart = buf->data();
- if (_membersInstantiated.count(memberStart))
- return;
-
- std::lock_guard<std::mutex> lock(_mutex);
- if (_preloaded.find(memberStart) != _preloaded.end())
- return;
-
- // Instantiate the member
- auto *future = new Future<File *>();
- _preloaded[memberStart] = std::unique_ptr<Future<File *>>(future);
-
- group.spawn([=] {
- std::unique_ptr<File> result;
- std::error_code ec = instantiateMember(ci, result);
- future->set(ec ? nullptr : result.release());
- });
- }
-
/// \brief parse each member
std::error_code
parseAllMembers(std::vector<std::unique_ptr<File>> &result) override {
@@ -262,7 +218,6 @@ private:
InstantiatedSet _membersInstantiated;
bool _logLoading;
std::vector<std::unique_ptr<MemoryBuffer>> _memberBuffers;
- std::map<const char *, std::unique_ptr<Future<File *>>> _preloaded;
std::mutex _mutex;
FileVector _filesReturned;
};
More information about the llvm-commits
mailing list