summaryrefslogtreecommitdiffstats
path: root/clang/lib/Frontend/PCHReader.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* PCH optimization for the identifier table, where we separateDouglas Gregor2009-04-251-3/+26
| | | | | | | | | | | | | | | "interesting" identifiers (e.g., those where the IdentifierInfo has some useful information) from "uninteresting" identifiers (where the IdentifierInfo is just a name). This makes the hash table smaller (so searching in it should be faster) and, when loading "uninteresting" identifiers, we skip the lookup in the hash table. PCH file size is slightly smaller than before (since we don't emit the contents of the uninteresting IdentifierInfo structures). The Cocoa.h-prefixed "Hello, World" doesn't show any speedup, although we're getting to the point where system noise is a bit issue. llvm-svn: 70075
* Revert my changes that try to avoid creating StringMap entries forDouglas Gregor2009-04-251-15/+3
| | | | | | | identifiers. They don't yet work, but will inhibit future optimizations. llvm-svn: 70071
* Start implementing the PTH IdentifierInfo-saving trick in PCH,Douglas Gregor2009-04-251-2/+14
| | | | | | | | | | | | | | | | | allocating IdentifierInfos with a pointer into the string data stored in the PCH file rather than having an entry in the identifier table's string map. However, we don't actually get these savings at the moment, because we go through the IdentifierTable when loading identifiers from the on-disk hash table. This commit is for record-keeping purposes only. I'll be reverting this change (and the PCH layout tweak that preceded it) because it appears that implementing this optimization will collide with another, future optimization to reduce the size of the on-disk hash table for identifiers. That optimization is likely to provide more benefit (with less voodoo). llvm-svn: 70070
* Tweak the data layout for the on-disk hash table of identifiers in the PCH ↵Douglas Gregor2009-04-251-1/+1
| | | | | | file so that the key layout matches that of the PTH key layout llvm-svn: 70066
* Write the identifier offsets array into the PCH file as a blob, soDouglas Gregor2009-04-251-40/+34
| | | | | | | | | | | | | | that the PCH reader does not have to decode the VBR encoding at PCH load time. Also, reduce the size of the identifier offsets from 64 bits down to 32 bits. The identifier table itself isn't going to grow to more than 4GB :) Overall, this results in a 13% speedup in the Cocoa-prefixed "Hello, World" benchmark. llvm-svn: 70063
* Write the declaration and type offset arrays into the bitstream asDouglas Gregor2009-04-251-33/+31
| | | | | | | | | | blobs, so that we don't need to do any work to get these arrays into memory at PCH load time. This gives another 19% performance improvement to the Cocoa-prefixed "Hello, World!". llvm-svn: 70059
* Load the selector table lazily from the PCH file. Douglas Gregor2009-04-251-121/+81
| | | | | | | | | | | | | | | | | | This results in a 10% speedup on the Cocoa-prefixed "Hello, World!", all of which is (not surprisingly) user time. There was a tiny reduction in the size of the PCH file for Cocoa.h, because certain selectors aren't being written twice. I'm using two new tricks here that I'd like to replicate elsewhere: (1) The selectors not used in the global method pool are packed into the blob after the global method pool's on-disk hash table and stored as keys, so that all selectors are in the same blob. (2) We record the offsets of each selector key when we write it into the global method pool (or after it, in the same blob). The offset table is written as a blob, so that we don't need to pack/unpack a SmallVector with its contents. llvm-svn: 70055
* Fix indexing error in PCHStmtReader::VisitArraySubscriptExpr().Steve Naroff2009-04-251-1/+1
| | | | llvm-svn: 70046
* Add PCH support for ObjCMessageExpr (needed to build Mail).Steve Naroff2009-04-251-0/+19
| | | | llvm-svn: 70044
* Fixup comment.Steve Naroff2009-04-251-1/+1
| | | | llvm-svn: 70040
* Fix a major bug in PCHReader::ReadSelectorBlock().Steve Naroff2009-04-251-2/+3
| | | | | | Also simplify some syntax in PCHWriter::WritePreprocessor(), suggested by Chris. llvm-svn: 70039
* Make sure that the consumer sees all interested decls. This fixes PreviewDouglas Gregor2009-04-251-15/+26
| | | | llvm-svn: 70007
* Add new checker-specific attribute 'objc_ownership_retain'. This isn't hooked upTed Kremenek2009-04-251-0/+1
| | | | | | | | to the checker yet, but essentially it allows a user to specify that an Objective-C method or C function increments the reference count of a passed object. llvm-svn: 70005
* When we de-serialize an Objective-C protocol, hand it to the AST consumer so ↵Douglas Gregor2009-04-241-0/+3
| | | | | | that we can create metadata llvm-svn: 70003
* Add new checker-specific attribute 'objc_ownership_returns'. This isn't hookedTed Kremenek2009-04-241-0/+1
| | | | | | | up to the checker yet, but essentially it allows a user to specify that an Objective-C method or C function returns an owned an Objective-C object. llvm-svn: 70001
* Once the protocol list has been loaded from the PCH file, add it toDouglas Gregor2009-04-241-0/+1
| | | | | | the Objective-C interface. llvm-svn: 69993
* PCH support for the global method pool (= instance and factory methodDouglas Gregor2009-04-241-1/+134
| | | | | | | | pools, combined). The methods in the global method pool are lazily loaded from an on-disk hash table when Sema looks into its version of the hash tables. llvm-svn: 69989
* Add PCH support for #import.Steve Naroff2009-04-241-3/+16
| | | | llvm-svn: 69987
* Use cast_or_null instead of ternary operator (suggested by Doug).Steve Naroff2009-04-241-3/+1
| | | | llvm-svn: 69975
* Allow the next catoregory slot to be null.Steve Naroff2009-04-241-1/+3
| | | | llvm-svn: 69969
* Eliminate Sema::ObjCImplementations, relying instead on name lookup. What's ↵Douglas Gregor2009-04-241-1/+1
| | | | | | | | | | | good for uniformity is good for PCH (or is it the other way around?). As part of this, make ObjCImplDecl inherit from NamedDecl (since ObjCImplementationDecls now need to have names so that they can be found). This brings ObjCImplDecl very, very close to ObjCContainerDecl; we may be able to merge them soon. llvm-svn: 69941
* PCH support for categories in Objective-C interfaces.Douglas Gregor2009-04-231-2/+2
| | | | llvm-svn: 69933
* PCH support for all of the predefined Objective-C types, such as id,Douglas Gregor2009-04-231-1/+13
| | | | | | | | SEL, Class, Protocol, CFConstantString, and __objcFastEnumerationState. With this, we can now run the Objective-C methods and properties PCH tests. llvm-svn: 69932
* Fix handling of C99 "extern inline" semantics when dealing withDouglas Gregor2009-04-231-0/+1
| | | | | | | multiple declarations of the function. Should fix PR3989 and <rdar://problem/6818429>. llvm-svn: 69905
* More PushOnScopeChain() FIXME's.Steve Naroff2009-04-231-1/+0
| | | | llvm-svn: 69894
* Sema::ActOnStartClassInterface(): Use PushOnScopeChains().Steve Naroff2009-04-231-1/+1
| | | | | | This enables class recognition to work with PCH. I believe this means we can remove Sema::ObjCInterfaceDecls and it's usage within Sema::LookupName(). Will investigate. llvm-svn: 69891
* Add PCH read/write support for Objective-C Selectors.Steve Naroff2009-04-231-5/+104
| | | | | Note: This support is non-lazy. Once we get "Cocoa.h" humming, we can optimize this. llvm-svn: 69884
* PCH (de-)serialization of the protocols in an ObjCInterfaceDeclDouglas Gregor2009-04-231-1/+6
| | | | llvm-svn: 69860
* Add the PCH reader stub for ObjCCompatibleAliasDeclDouglas Gregor2009-04-231-1/+1
| | | | llvm-svn: 69859
* PCH support for ObjCPropertyImplDeclDouglas Gregor2009-04-231-2/+8
| | | | llvm-svn: 69858
* The ivars in an ObjCImplementationDecl are now stored in theDouglas Gregor2009-04-231-2/+3
| | | | | | | DeclContext rather than in a separate list. This makes PCH (de-)serialization trivial, so that ivars can be loaded lazily. llvm-svn: 69857
* PCH support for ObjCCategoryImplDecl (which can't be tested now).Douglas Gregor2009-04-231-2/+2
| | | | llvm-svn: 69856
* PCH (de-)serialization for ObjCImplDecl. This can't be tested yet.Douglas Gregor2009-04-231-1/+3
| | | | llvm-svn: 69855
* PCH support for Objective-C property declarations (UNTESTED!)Douglas Gregor2009-04-221-2/+16
| | | | llvm-svn: 69843
* Add PCH statistics for the number/percent of lexical/visible declcontexts readDouglas Gregor2009-04-221-0/+12
| | | | llvm-svn: 69835
* Support locally-declared external declarations in PCH filesDouglas Gregor2009-04-221-0/+16
| | | | llvm-svn: 69833
* Support tentative definitions in precompiled headers. This isn't likelyDouglas Gregor2009-04-221-0/+14
| | | | | | to happen (ever), but at least we'll do the right thing when it does. llvm-svn: 69829
* Eliminate some FIXMEs in the PCH reader that were either already fixed or ↵Douglas Gregor2009-04-221-15/+9
| | | | | | aren't actually things to fix llvm-svn: 69827
* Minimize the number and kind of "external definitions" that the PCHDouglas Gregor2009-04-221-3/+20
| | | | | | | | | | | | | | | | | | | | | | | file needs to store. CodeGen needs to see these definitions (via HandleTopLevelDecl), otherwise it won't be able to generate code for them. This patch notifies the consumer (e.g., CodeGen) about function definitions and variable definitions when the corresponding declarations are deserialized. Hence, we don't eagerly deserialize the declarations for every variable or function that has a definition in the PCH file. This gives another 5% speedup for the Carbon-prefixed "Hello, World!", and brings our PCH statistics down to something far more reasonable: *** PCH Statistics: 13/20693 types read (0.062823%) 17/59230 declarations read (0.028702%) 54/44914 identifiers read (0.120230%) 0/32954 statements read (0.000000%) 5/6187 macros read (0.080815%) llvm-svn: 69820
* Lazy loading of builtins for precompiled headers.Douglas Gregor2009-04-221-3/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | PCH files now contain complete information about builtins, including any declarations that have been synthesized as part of building the PCH file. When using a PCH file, we do not initialize builtins at all; when needed, they'll be found in the PCH file. This optimization translations into a 9% speedup for "Hello, World!" with Carbon.h as a prefix header and roughly a 5% speedup for 403.gcc with its prefix header. We're also reading less of the PCH file for "Hello, World!": *** PCH Statistics: 286/20693 types read (1.382110%) 1630/59230 declarations read (2.751984%) 764/44914 identifiers read (1.701029%) 1/32954 statements read (0.003035%) 5/6187 macros read (0.080815%) down from *** PCH Statistics: 411/20693 types read (1.986179%) 2553/59230 declarations read (4.310316%) 1093/44646 identifiers read (2.448148%) 1/32954 statements read (0.003035%) 21/6187 macros read (0.339421%) llvm-svn: 69815
* Remove some debugging output from the PCH readerDouglas Gregor2009-04-221-3/+0
| | | | llvm-svn: 69803
* ObjCQualifiedClass is dead, remove it.Chris Lattner2009-04-221-6/+0
| | | | llvm-svn: 69783
* deserialization support for qualified interfacesChris Lattner2009-04-221-4/+9
| | | | llvm-svn: 69782
* pch support for protocol qualified id's.Chris Lattner2009-04-221-4/+8
| | | | llvm-svn: 69781
* add three new objc expression types. @selector doesn't work because we have no Chris Lattner2009-04-221-0/+38
| | | | | | way to serialize selectors yet. llvm-svn: 69780
* implement serialization support for @encode,Chris Lattner2009-04-221-4/+20
| | | | | | | fix a couple of bugs in reader support for ObjCInterfaceDecl, and add support for reading ObjCInterfaceType. llvm-svn: 69779
* Reorganize built-in initialization to separate the creation of target ↵Douglas Gregor2009-04-221-0/+3
| | | | | | builtins from marking IdentifierInfos as builtins. No functionality change llvm-svn: 69774
* Lazy deserialization of macro definitions for precompiled headers.Douglas Gregor2009-04-211-43/+108
| | | | | | | | | | | | | | | This optimization improves performance on the Carbon-prefixed "Hello, World!" example by 57%. For reference, we're now about 2.25x faster than GCC PCH. We're also pulling in far less of the PCH file: *** PCH Statistics: 411/20693 types read (1.986179%) 2553/59230 declarations read (4.310316%) 1093/44646 identifiers read (2.448148%) 1/32954 statements read (0.003035%) 21/6187 macros read (0.339421%) llvm-svn: 69755
* Lazy deserialization of the declaration chains associated withDouglas Gregor2009-04-211-39/+224
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Add pch reader/writer support for most of DeclObjC.h. Very close to ↵Steve Naroff2009-04-211-3/+144
| | | | | | | | reading/writing all ObjC AST nodes that we will encounter in header files (still a few FIXME's). Once selector support is in place, we should be able to take this for a spin (and add test cases). llvm-svn: 69674
OpenPOWER on IntegriCloud