On May 13, 2011, at 8:08 AM, Douglas Gregor wrote: >>> When determining whether we can make a declaration into a global >>> constant, also consider whether it's a class type that has any mutable >>> fields. If so, it can't be a global constant. >> >> Are bits like this really worth putting into the PCH file? Why not just >> lazily compute them? > > Lazily computing them would involve deserializing all of the fields within > the class and all of its subobjects of class type. That may be fine---we > could due so once and compute all of the properties based on those fields at > that time---but it's a shame to require extra deserialization to save a bit.
Ok. I was mostly wondering if anything that would use this bit would require deserializing all those fields anyway. In this case, the big is used (for example) by codegen of a global, which will have to deserialize the full type. If this doesn't make sense, it isn't worth doing :) > These bits in CXXRecordDecl::DefinitionData *do* take up way too much space > in the PCH, but the fix should be to make each logical bit take just one bit > rather than the current 6 bits (due to the VBR-6 encoding). A simple change > there could save us a bunch of I/O. Yes. The bitcode format supports use of abbreviations to store this in one bit. It is probably worth looking at statistics for the common records (using llvm-bcanalyzer) and adding abbrevs for them if you haven't already. http://llvm.org/docs/BitCodeFormat.html#abbreviations -Chris _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
