From: Chris Lattner Date: Sat, 21 Mar 2009 06:27:31 +0000 (+0000) Subject: partially inline getAttrs() to speed up PR3810 (and lots of X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=81abbdd848aa02c30242bd22dcc6ffe024ae2957;p=clang partially inline getAttrs() to speed up PR3810 (and lots of other code presumably) by 4.3% git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67430 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/AST/DeclBase.h b/include/clang/AST/DeclBase.h index 86d96a5b1c..abf5404882 100644 --- a/include/clang/AST/DeclBase.h +++ b/include/clang/AST/DeclBase.h @@ -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(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 diff --git a/lib/AST/DeclBase.cpp b/lib/AST/DeclBase.cpp index 1e7ef549b4..812c362acd 100644 --- a/lib/AST/DeclBase.cpp +++ b/lib/AST/DeclBase.cpp @@ -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]; }