summaryrefslogtreecommitdiffstats
path: root/lld/lib/Core/Resolver.cpp
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2014-06-05 07:37:29 +0000
committerRui Ueyama <ruiu@google.com>2014-06-05 07:37:29 +0000
commit733b45f3b05a7e2971656dd0b90fe7ddcd45311f (patch)
tree1ed98f2f1f04abd20ddb3cb85b09a2d47aa70c3c /lld/lib/Core/Resolver.cpp
parent52edc4903136edda614e31bf08c5d5118ba071bf (diff)
downloadbcm5719-llvm-733b45f3b05a7e2971656dd0b90fe7ddcd45311f.tar.gz
bcm5719-llvm-733b45f3b05a7e2971656dd0b90fe7ddcd45311f.zip
Add SymbolTable::isCoalescedAway
isCoalescedAway(x) is faster than replacement(x) != x as the former does not follow the replacement atom chain. Also it's easier to use. llvm-svn: 210242
Diffstat (limited to 'lld/lib/Core/Resolver.cpp')
-rw-r--r--lld/lib/Core/Resolver.cpp25
1 files changed, 4 insertions, 21 deletions
diff --git a/lld/lib/Core/Resolver.cpp b/lld/lib/Core/Resolver.cpp
index 03e6596893e..95daed99cac 100644
--- a/lld/lib/Core/Resolver.cpp
+++ b/lld/lib/Core/Resolver.cpp
@@ -29,24 +29,6 @@
namespace lld {
-namespace {
-
-/// This is used as a filter function to std::remove_if to coalesced atoms.
-class AtomCoalescedAway {
-public:
- explicit AtomCoalescedAway(SymbolTable &sym) : _symbolTable(sym) {}
-
- bool operator()(const Atom *atom) const {
- const Atom *rep = _symbolTable.replacement(atom);
- return rep != atom;
- }
-
-private:
- SymbolTable &_symbolTable;
-};
-
-} // namespace
-
void Resolver::handleFile(const File &file) {
bool undefAdded = false;
for (const DefinedAtom *atom : file.defined())
@@ -394,7 +376,7 @@ bool Resolver::checkUndefines() {
continue;
// If the undefine is coalesced away, skip over it.
- if (_symbolTable.replacement(undefAtom) != undefAtom)
+ if (_symbolTable.isCoalescedAway(undefAtom))
continue;
// Seems like this symbol is undefined. Warn that.
@@ -416,8 +398,9 @@ bool Resolver::checkUndefines() {
// remove from _atoms all coaleseced away atoms
void Resolver::removeCoalescedAwayAtoms() {
ScopedTask task(getDefaultDomain(), "removeCoalescedAwayAtoms");
- _atoms.erase(std::remove_if(_atoms.begin(), _atoms.end(),
- AtomCoalescedAway(_symbolTable)),
+ _atoms.erase(std::remove_if(_atoms.begin(), _atoms.end(), [&](const Atom *a) {
+ return _symbolTable.isCoalescedAway(a);
+ }),
_atoms.end());
}
OpenPOWER on IntegriCloud