This is the first step in migrating all the Info types to be POD. We introduced a shared string saver that can be used safely across threads, and updated the internal represntation of various data types to use these over owned strings, like SmallString or std::string. This also required changes to YAMLGenerator to keep the single quoted string formatting and to update the YAML traits. This change gives an almost 50% reduction in peak memory when building documentation for clang, at about a 10% performance loss. Future patches can mitigate the performance penalties, and further reduce memory use. | Metric | Baseline | Prev | This | Culm% | Seq% | | :--- | :--- | :--- | :--- | :--- | :--- | | Time | 920.5s | 920.5s | 1011.0s | +9.8% | +9.8% | | Memory | 86.0G | 86.0G | 44.9G | -47.8% | -47.8% | | Benchmark | Baseline | Prev | This | Culm% | Seq% | | :--- | :--- | :--- | :--- | :--- | :--- | | BM_BitcodeReader_Scale/10 | 67.9us | 67.9us | 70.0us | +3.0% | +3.0% | | BM_BitcodeReader_Scale/10000 | 70.5ms | 70.5ms | 21.3ms | -69.8% | -69.8% | | BM_BitcodeReader_Scale/4096 | 23.2ms | 23.2ms | 4.5ms | -80.7% | -80.7% | | BM_BitcodeReader_Scale/512 | 509.4us | 509.4us | 538.8us | +5.8% | +5.8% | | BM_BitcodeReader_Scale/64 | 114.8us | 114.8us | 118.0us | +2.8% | +2.8% | | BM_Index_Insertion/10 | 2.3us | 2.3us | 4.0us | +71.6% | +71.6% | | BM_Index_Insertion/10000 | 3.1ms | 3.1ms | 5.0ms | +60.6% | +60.6% | | BM_Index_Insertion/4096 | 1.3ms | 1.3ms | 2.0ms | +57.1% | +57.1% | | BM_Index_Insertion/512 | 153.6us | 153.6us | 245.0us | +59.6% | +59.6% | | BM_Index_Insertion/64 | 18.1us | 18.1us | 28.9us | +60.0% | +60.0% | | BM_JSONGenerator_Scale/10 | 36.8us | 36.8us | 36.4us | -1.3% | -1.3% | | BM_Mapper_Scale/10000 | 104.3ms | 104.3ms | 105.4ms | +1.0% | +1.0% | | BM_Mapper_Scale/512 | 7.6ms | 7.6ms | 7.7ms | +1.9% | +1.9% | | BM_MergeInfos_Scale/10000 | 12.2ms | 12.2ms | 1.4ms | -88.2% | -88.2% | | BM_MergeInfos_Scale/2 | 1.9us | 1.9us | 1.7us | -10.3% | -10.3% | | BM_MergeInfos_Scale/4096 | 2.8ms | 2.8ms | 495.6us | -82.2% | -82.2% | | BM_MergeInfos_Scale/512 | 68.9us | 68.9us | 34.6us | -49.7% | -49.7% | | BM_MergeInfos_Scale/64 | 10.3us | 10.3us | 6.0us | -41.6% | -41.6% | | BM_MergeInfos_Scale/8 | 2.8us | 2.8us | 2.1us | -24.4% | -24.4% | | BM_SerializeFunctionInfo | 25.5us | 25.5us | 26.8us | +4.9% | +4.9% | note: I used an LLM to help generate the test code adjustments and the YAML traits.
//===----------------------------------------------------------------------===// // Clang Tools repository //===----------------------------------------------------------------------===// Welcome to the repository of extra Clang Tools. This repository holds tools that are developed as part of the LLVM compiler infrastructure project and the Clang frontend. These tools are kept in a separate "extra" repository to allow lighter weight checkouts of the core Clang codebase. All discussion regarding Clang, Clang-based tools, and code in this repository should be held using the standard Clang forums: https://discourse.llvm.org/c/clang https://discourse.llvm.org/c/clang/clang-tidy/71 https://discourse.llvm.org/c/clang/clangd/34 Code review for this tree should take place on Github: https://github.com/llvm/llvm-project/pulls?q=label%3Aclang-tools-extra If you find a bug in these tools, please file it in the LLVM bug tracker: https://github.com/llvm/llvm-project/issues/