]> granicus.if.org Git - clang/commitdiff
continue dancing around the obvious algorithm issues in PR3810:
authorChris Lattner <sabre@nondot.org>
Sat, 21 Mar 2009 06:49:19 +0000 (06:49 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 21 Mar 2009 06:49:19 +0000 (06:49 +0000)
This speeds up getAsIdentifierInfo from being a call to a function
with a big switch to a single testl instruction.  This speeds up
the example in PR3810 by 6.2%

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67433 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/DeclarationName.h

index d1cd4ebc958b4176725893098e89c14316185852..42c1640b5649f7e1349ecf29dff3f8b50f48e14e 100644 (file)
@@ -163,8 +163,18 @@ public:
            (reinterpret_cast<IdentifierInfo *>(Ptr & ~PtrMask));
   }
 
+  /// Predicate functions for querying what type of name this is.
+  bool isIdentifier() const { return getStoredNameKind() == StoredIdentifier; }
+  bool isObjCZeroArgSelector() const {
+    return getStoredNameKind() == StoredObjCZeroArgSelector;
+  }
+  bool isObjCOneArgSelector() const {
+    return getStoredNameKind() == StoredObjCOneArgSelector;
+  }
+  
   /// getNameKind - Determine what kind of name this is.
   NameKind getNameKind() const;
+  
 
   /// getName - Retrieve the human-readable string for this name.
   std::string getAsString() const;
@@ -173,7 +183,7 @@ public:
   /// this declaration name, or NULL if this declaration name isn't a
   /// simple identifier.
   IdentifierInfo *getAsIdentifierInfo() const { 
-    if (getNameKind() == Identifier)
+    if (isIdentifier())
       return reinterpret_cast<IdentifierInfo *>(Ptr);
     return 0;
   }