]> granicus.if.org Git - clang/commitdiff
Petty space optimizations in ElaboratedType and DependentNameType.
authorJohn McCall <rjmccall@apple.com>
Tue, 19 Oct 2010 05:23:37 +0000 (05:23 +0000)
committerJohn McCall <rjmccall@apple.com>
Tue, 19 Oct 2010 05:23:37 +0000 (05:23 +0000)
Petty time optimization in TemplateTypeParmType.

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

include/clang/AST/Type.h

index b0f74ee05162499bef91f4f034b7273b046cfb31..dbf4a3847713086044a121fcddd23b98c82b0e92 100644 (file)
@@ -899,6 +899,15 @@ protected:
     unsigned InnerRef : 1;
   };
 
+  class TypeWithKeywordBitfields {
+    friend class TypeWithKeyword;
+
+    unsigned : NumTypeBits;
+
+    /// An ElaboratedTypeKeyword.  8 bits for efficient access.
+    unsigned Keyword : 8;
+  };
+
   class VectorTypeBitfields {
     friend class VectorType;
 
@@ -919,6 +928,7 @@ protected:
     FunctionTypeBitfields FunctionTypeBits;
     ObjCObjectTypeBitfields ObjCObjectTypeBits;
     ReferenceTypeBitfields ReferenceTypeBits;
+    TypeWithKeywordBitfields TypeWithKeywordBits;
     VectorTypeBitfields VectorTypeBits;
   };
 
@@ -2486,20 +2496,20 @@ public:
 
 class TemplateTypeParmType : public Type, public llvm::FoldingSetNode {
   unsigned Depth : 15;
-  unsigned Index : 16;
   unsigned ParameterPack : 1;
+  unsigned Index : 16;
   IdentifierInfo *Name;
 
   TemplateTypeParmType(unsigned D, unsigned I, bool PP, IdentifierInfo *N,
                        QualType Canon)
     : Type(TemplateTypeParm, Canon, /*Dependent=*/true,
            /*VariablyModified=*/false),
-      Depth(D), Index(I), ParameterPack(PP), Name(N) { }
+      Depth(D), ParameterPack(PP), Index(I), Name(N) { }
 
   TemplateTypeParmType(unsigned D, unsigned I, bool PP)
     : Type(TemplateTypeParm, QualType(this, 0), /*Dependent=*/true,
            /*VariablyModified=*/false),
-      Depth(D), Index(I), ParameterPack(PP), Name(0) { }
+      Depth(D), ParameterPack(PP), Index(I), Name(0) { }
 
   friend class ASTContext;  // ASTContext creates these
 
@@ -2778,20 +2788,18 @@ enum ElaboratedTypeKeyword {
 /// Also provides a few static helpers for converting and printing
 /// elaborated type keyword and tag type kind enumerations.
 class TypeWithKeyword : public Type {
-  /// Keyword - Encodes an ElaboratedTypeKeyword enumeration constant.
-  unsigned Keyword : 3;
-
 protected:
   TypeWithKeyword(ElaboratedTypeKeyword Keyword, TypeClass tc,
                   QualType Canonical, bool Dependent, bool VariablyModified)
-    : Type(tc, Canonical, Dependent, VariablyModified), 
-      Keyword(Keyword) {}
+    : Type(tc, Canonical, Dependent, VariablyModified) {
+    TypeWithKeywordBits.Keyword = Keyword;
+  }
 
 public:
   virtual ~TypeWithKeyword(); // pin vtable to Type.cpp
 
   ElaboratedTypeKeyword getKeyword() const {
-    return static_cast<ElaboratedTypeKeyword>(Keyword);
+    return static_cast<ElaboratedTypeKeyword>(TypeWithKeywordBits.Keyword);
   }
 
   /// getKeywordForTypeSpec - Converts a type specifier (DeclSpec::TST)