[clang] Switch builtin strings to use string tables (PR #118734)
Chandler Carruth via cfe-commits
cfe-commits at lists.llvm.org
Sat Dec 7 16:38:35 PST 2024
================
@@ -68,23 +69,156 @@ enum ID {
FirstTSBuiltin
};
+// The info used to represent each builtin.
struct Info {
- llvm::StringLiteral Name;
- const char *Type, *Attributes;
- const char *Features;
+ // Rather than store pointers to the string literals describing these four
+ // aspects of builtins, we store offsets into a common string table.
+ struct StrOffsets {
+ int Name;
+ int Type;
+ int Attributes;
+ int Features;
+ } Offsets;
+
HeaderDesc Header;
LanguageID Langs;
};
+// The storage for `N` builtins. This contains a single pointer to the string
+// table used for these builtins and an array of metadata for each builtin.
+template <size_t N> struct Storage {
+ const char *StringTable;
+
+ std::array<Info, N> Infos;
+
+ // A constexpr function to construct the storage for a a given string table in
+ // the first argument and an array in the second argument. This is *only*
+ // expected to be used at compile time, we should mark it `consteval` when
+ // available.
+ //
+ // The `Infos` array is particularly special. This function expects an array
+ // of `Info` structs, where the string offsets of each entry refer to the
+ // *sizes* of those strings rather than their offsets, and for the target
+ // string to be in the provided string table at an offset the sum of all
+ // previous string sizes. This function walks the `Infos` array computing the
+ // running sum and replacing the sizes with the actual offsets in the string
+ // table that should be used. This arrangement is designed to make it easy to
+ // expand `.def` and `.inc` files with X-macros to construct both the string
+ // table and the `Info` structs in the arguments to this function.
+ static constexpr auto Make(const char *Strings,
+ std::array<Info, N> Infos) -> Storage<N> {
----------------
chandlerc wrote:
Sorry, a new habit of mine and I hadn't gone through thoroughly enough to fix everywhere.
Should be fixed now throughout, I checked all the `auto` keywords in the diff.
https://github.com/llvm/llvm-project/pull/118734
More information about the cfe-commits
mailing list