From 381405fafe9d48d29c777e7680902d0943834859 Mon Sep 17 00:00:00 2001 From: Rahul Joshi Date: Thu, 22 Aug 2024 19:16:59 -0700 Subject: [PATCH] [NFC][TableGen] Emit more readable builtin string table (#105445) - Add `EmitStringLiteralDef` to StringToOffsetTable class to emit more readable string table. - Use that in `EmitIntrinsicToBuiltinMap`. --- .../llvm/TableGen/StringToOffsetTable.h | 26 +++++++++++++++++++ llvm/utils/TableGen/IntrinsicEmitter.cpp | 4 +-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/llvm/include/llvm/TableGen/StringToOffsetTable.h b/llvm/include/llvm/TableGen/StringToOffsetTable.h index 7fb9d02d77c704..f2a20f06ae007f 100644 --- a/llvm/include/llvm/TableGen/StringToOffsetTable.h +++ b/llvm/include/llvm/TableGen/StringToOffsetTable.h @@ -12,6 +12,7 @@ #include "llvm/ADT/SmallString.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringMap.h" +#include "llvm/Support/FormatVariadic.h" #include "llvm/Support/raw_ostream.h" #include #include @@ -52,6 +53,31 @@ class StringToOffsetTable { return II->second; } + // Emit the string using string literal concatenation, for better readability + // and searchability. + void EmitStringLiteralDef(raw_ostream &OS, const Twine &Decl, + const Twine &Indent = " ") const { + OS << formatv(R"( +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Woverlength-strings" +#endif +{0}{1} = )", + Indent, Decl); + + for (StringRef Str : split(AggregateString, '\0')) { + OS << "\n" << Indent << " \""; + OS.write_escaped(Str); + OS << "\\0\""; + } + OS << R"(; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif +)"; + } + + // Emit the string as one single string. void EmitString(raw_ostream &O) { // Escape the string. SmallString<256> Str; diff --git a/llvm/utils/TableGen/IntrinsicEmitter.cpp b/llvm/utils/TableGen/IntrinsicEmitter.cpp index 5d972157828784..8e536c99f627f5 100644 --- a/llvm/utils/TableGen/IntrinsicEmitter.cpp +++ b/llvm/utils/TableGen/IntrinsicEmitter.cpp @@ -669,9 +669,7 @@ Intrinsic::getIntrinsicFor{1}Builtin(StringRef TargetPrefix, } if (!Table.empty()) { - OS << " static constexpr char BuiltinNames[] = {\n"; - Table.EmitCharArray(OS); - OS << " };\n\n"; + Table.EmitStringLiteralDef(OS, "static constexpr char BuiltinNames[]"); OS << R"( struct BuiltinEntry {