partially inline getAttrs() to speed up PR3810 (and lots of

other code presumably) by 4.3%

llvm-svn: 67430
This commit is contained in:
Chris Lattner 2009-03-21 06:27:31 +00:00
parent cfbe9e746f
commit c2d987425d
2 changed files with 9 additions and 6 deletions

View File

@ -180,7 +180,10 @@ public:
bool hasAttrs() const { return HasAttrs; }
void addAttr(Attr *attr);
const Attr *getAttrs() const;
const Attr *getAttrs() const {
if (!HasAttrs) return 0; // common case, no attributes.
return getAttrsImpl(); // Uncommon case, out of line hash lookup.
}
void swapAttrs(Decl *D);
void invalidateAttrs();
@ -188,7 +191,6 @@ public:
for (const Attr *attr = getAttrs(); attr; attr = attr->getNext())
if (const T *V = dyn_cast<T>(attr))
return V;
return 0;
}
@ -326,6 +328,9 @@ protected:
// FIXME: This will eventually be a pure virtual function.
assert (false && "Not implemented.");
}
private:
const Attr *getAttrsImpl() const;
};
/// PrettyStackTraceDecl - If a crash occurs, indicate that it happened when

View File

@ -171,10 +171,8 @@ void Decl::invalidateAttrs() {
}
}
const Attr *Decl::getAttrs() const {
if (!HasAttrs)
return 0;
const Attr *Decl::getAttrsImpl() const {
assert(HasAttrs && "getAttrs() should verify this!");
return (*DeclAttrs)[this];
}