Skip to content
  • Douglas Gregor's avatar
    Lazy deserialization of the declaration chains associated with · a868bbd3
    Douglas Gregor authored
    identifiers from a precompiled header.
    
    This patch changes the primary name lookup method for entities within
    a precompiled header. Previously, we would load all of the names of
    declarations at translation unit scope into a large DenseMap (inside
    the TranslationUnitDecl's DeclContext), and then perform a special
    "last resort" lookup into this DeclContext when we knew there was a
    PCH file (see Sema::LookupName). Now, when we see an identifier named
    for the first time, we load all of the declarations with that name
    that are visible from the translation unit into the IdentifierInfo's
    chain of declarations. Thus, the explicit "look into the translation
    unit's DeclContext" code is gone, and Sema effectively uses the same
    IdentifierInfo-based name lookup mechanism whether we are using a PCH
    file or not. 
    
    This approach should help PCH scale with the size of the input program
    rather than the size of the PCH file. The "Hello, World!" application
    with Carbon.h as a PCH file now loads 20% of the identifiers in the
    PCH file rather than 85% of the identifiers. 
    
    90% of the 20% of identifiers loaded are actually loaded when we
    deserialize the preprocessor state. The next step is to make the
    preprocessor load macros lazily, which should drastically reduce the
    number of types, declarations, and identifiers loaded for "Hello,
    World".
    
    llvm-svn: 69737
    a868bbd3
Loading