I am merging free_lang_data, which is an IPA pass that scrubs all types and symbols from any front end language information.
After free_lang_data all types and symbols are in gimple form. This form is much leaner in terms of memory utilization and since it does not rely on the presence of the front end, it can be streamed to disk for LTO. The biggest side-effect right now is that many debug hooks stop working because the information just isn't there. So part of all this is to recognize when debug information is requested and save it so that it can be used from debug hooks. Currently, the pass bootstraps all languages but since debug information is disabled, all the debugging tests in the testsuite fail. Since the patch is rather large and it affects the other LTO merge activities, I've been thinking about ways of making it easier and avoid conflicts: 1- Keep working on my local tree; combining both free_lang_data and early debug generation. 2- Add free_lang_data to trunk with a gate function that only triggers it if -g is missing. 3- Add free_lang_data to trunk with a gate function that enables it only if a special flag is given on the command line. My obvious preference is #2 because that will simplify our merging activities and will also allow wider testing for free_lang_data in the trunk. My second preference would be #3, which would at least get the code in trunk. Other than latent bugs, the main observable difference with this patch in trunk will be reduced memory consumption at compile-time, particularly for C++ (free_lang_data removes quite a bit of cruft). I am attaching the WIP patch for reference. I would appreciate feedback on this plan. Thanks. Diego.
20090817-free-lang-data.diff.txt.gz
Description: GNU Zip compressed data