Devirtualize Reference::kind.
Improves performance.
llvm-svn: 177556
diff --git a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
index 21dc171..c2945f7 100644
--- a/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
+++ b/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp
@@ -777,15 +777,16 @@
class NormalizedReference : public lld::Reference {
public:
NormalizedReference(IO &io)
- : _target(nullptr), _targetName(), _offset(0), _addend(0) , _kind(0) {
- }
+ : _target(nullptr), _targetName(), _offset(0), _addend(0) {}
+
NormalizedReference(IO &io, const lld::Reference *ref)
: _target(nullptr),
_targetName(targetName(io, ref)),
_offset(ref->offsetInAtom()),
_addend(ref->addend()),
- _kind(ref->kind()) {
+ _mappedKind(ref->kind()) {
}
+
const lld::Reference *denormalize(IO &io) {
ContextInfo *info = reinterpret_cast<ContextInfo*>(io.getContext());
assert(info != nullptr);
@@ -797,16 +798,15 @@
<< "created Reference to name: '" << _targetName
<< "' (" << (void*)_targetName.data() << ", "
<< _targetName.size() << ")\n");
+ setKind(_mappedKind);
return this;
}
void bind(const RefNameResolver&);
static StringRef targetName(IO &io, const lld::Reference *ref);
virtual uint64_t offsetInAtom() const { return _offset; }
- virtual Kind kind() const { return _kind; }
virtual const lld::Atom *target() const { return _target; }
virtual Addend addend() const { return _addend; }
- virtual void setKind(Kind k) { _kind = k; }
virtual void setAddend(Addend a) { _addend = a; }
virtual void setTarget(const lld::Atom *a) { _target = a; }
@@ -814,7 +814,7 @@
StringRef _targetName;
uint32_t _offset;
Addend _addend;
- RefKind _kind;
+ RefKind _mappedKind;
};
@@ -822,7 +822,7 @@
MappingNormalizationHeap<NormalizedReference,
const lld::Reference*> keys(io, ref);
- io.mapRequired("kind", keys->_kind);
+ io.mapRequired("kind", keys->_mappedKind);
io.mapOptional("offset", keys->_offset);
io.mapOptional("target", keys->_targetName);
io.mapOptional("addend", keys->_addend, (lld::Reference::Addend)0);