[Lldb-commits] [clang] [lld] [lldb] [llvm] [Option] Emit the Info table from TableGen. NFC (PR #224508)
via lldb-commits
lldb-commits at lists.llvm.org
Thu Sep 17 21:22:12 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lld-wasm
Author: Fangrui Song (MaskRay)
<details>
<summary>Changes</summary>
Each tool expands OPTION into an Info array and passes it with up to
five side tables to GenericOptTable or PrecomputedOptTable, so a new
side table touches every tool.
Emit the Info table from TableGen with numeric group and alias IDs and
bundle all tables into an OptTable::Tables aggregate under one
OPTTABLE_CODE block, so a tool just constructs OptTable(OptionTables).
Every table now uses the precomputed prefix union, which removes
GenericOptTable and PrecomputedOptTable.
Aided by Opus 5
---
Patch is 98.32 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/224508.diff
55 Files Affected:
- (modified) clang/lib/Options/DriverOptions.cpp (+4-20)
- (modified) clang/tools/clang-installapi/Options.cpp (+4-21)
- (modified) clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp (+4-15)
- (modified) clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp (+4-15)
- (modified) clang/tools/clang-scan-deps/ClangScanDeps.cpp (+4-17)
- (modified) clang/tools/clang-sycl-linker/ClangSYCLLinker.cpp (+4-15)
- (modified) lld/COFF/Driver.h (+1-1)
- (modified) lld/COFF/DriverUtils.cpp (+3-16)
- (modified) lld/ELF/Driver.h (+1-1)
- (modified) lld/ELF/DriverUtils.cpp (+3-16)
- (modified) lld/MachO/Driver.h (+1-1)
- (modified) lld/MachO/DriverUtils.cpp (+3-16)
- (modified) lld/MinGW/Driver.cpp (+4-17)
- (modified) lld/wasm/Driver.cpp (+4-16)
- (modified) lldb/tools/driver/Driver.cpp (+4-15)
- (modified) lldb/tools/lldb-dap/tool/lldb-dap.cpp (+4-16)
- (modified) lldb/tools/lldb-server/lldb-gdbserver.cpp (+4-15)
- (modified) lldb/tools/lldb-server/lldb-platform.cpp (+4-15)
- (modified) llvm/examples/OptSubcommand/llvm-hello-sub.cpp (+4-25)
- (modified) llvm/include/llvm/Option/OptTable.h (+46-85)
- (modified) llvm/include/llvm/Option/Option.h (+7-24)
- (modified) llvm/lib/ExecutionEngine/JITLink/COFFDirectiveParser.cpp (+4-21)
- (modified) llvm/lib/Option/OptTable.cpp (+15-41)
- (modified) llvm/lib/ToolDrivers/llvm-dlltool/DlltoolDriver.cpp (+4-16)
- (modified) llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp (+4-16)
- (modified) llvm/tools/dsymutil/dsymutil.cpp (+4-15)
- (modified) llvm/tools/llvm-cas/llvm-cas.cpp (+4-15)
- (modified) llvm/tools/llvm-cgdata/llvm-cgdata.cpp (+4-15)
- (modified) llvm/tools/llvm-cvtres/llvm-cvtres.cpp (+4-16)
- (modified) llvm/tools/llvm-cxxfilt/llvm-cxxfilt.cpp (+4-15)
- (modified) llvm/tools/llvm-debuginfod-find/llvm-debuginfod-find.cpp (+4-15)
- (modified) llvm/tools/llvm-debuginfod/llvm-debuginfod.cpp (+4-15)
- (modified) llvm/tools/llvm-dwarfutil/llvm-dwarfutil.cpp (+4-15)
- (modified) llvm/tools/llvm-dwp/llvm-dwp.cpp (+4-15)
- (modified) llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp (+4-17)
- (modified) llvm/tools/llvm-ifs/llvm-ifs.cpp (+4-17)
- (modified) llvm/tools/llvm-libtool-darwin/llvm-libtool-darwin.cpp (+4-15)
- (modified) llvm/tools/llvm-lipo/llvm-lipo.cpp (+4-16)
- (modified) llvm/tools/llvm-ml/llvm-ml.cpp (+4-16)
- (modified) llvm/tools/llvm-mt/llvm-mt.cpp (+4-16)
- (modified) llvm/tools/llvm-nm/llvm-nm.cpp (+4-17)
- (modified) llvm/tools/llvm-objcopy/ObjcopyOptions.cpp (+20-88)
- (modified) llvm/tools/llvm-objdump/llvm-objdump.cpp (+13-40)
- (modified) llvm/tools/llvm-rc/llvm-rc.cpp (+8-35)
- (modified) llvm/tools/llvm-readobj/llvm-readobj.cpp (+4-15)
- (modified) llvm/tools/llvm-readtapi/llvm-readtapi.cpp (+4-17)
- (modified) llvm/tools/llvm-size/llvm-size.cpp (+4-17)
- (modified) llvm/tools/llvm-strings/llvm-strings.cpp (+4-15)
- (modified) llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp (+4-15)
- (modified) llvm/tools/llvm-tli-checker/llvm-tli-checker.cpp (+4-15)
- (modified) llvm/tools/sancov/sancov.cpp (+4-15)
- (modified) llvm/unittests/Option/OptionParsingTest.cpp (+71-91)
- (modified) llvm/unittests/Option/OptionSubCommandsTest.cpp (+4-24)
- (modified) llvm/unittests/Option/Opts.td (+5)
- (modified) llvm/utils/TableGen/OptionParserEmitter.cpp (+143-128)
``````````diff
diff --git a/clang/lib/Options/DriverOptions.cpp b/clang/lib/Options/DriverOptions.cpp
index 6f630843f7019..2f73b307dbdea 100644
--- a/clang/lib/Options/DriverOptions.cpp
+++ b/clang/lib/Options/DriverOptions.cpp
@@ -13,35 +13,19 @@
using namespace clang::options;
using namespace llvm::opt;
-#define OPTTABLE_STR_TABLE_CODE
-#include "clang/Options/Options.inc"
-#undef OPTTABLE_STR_TABLE_CODE
-
#define OPTTABLE_VALUES_CODE
#include "clang/Options/Options.inc"
#undef OPTTABLE_VALUES_CODE
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "clang/Options/Options.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-#define OPTTABLE_PREFIXES_UNION_CODE
+#define OPTTABLE_CODE
#include "clang/Options/Options.inc"
-#undef OPTTABLE_PREFIXES_UNION_CODE
-
-static constexpr OptTable::Info InfoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "clang/Options/Options.inc"
-#undef OPTION
-};
+#undef OPTTABLE_CODE
namespace {
-class DriverOptTable : public PrecomputedOptTable {
+class DriverOptTable : public OptTable {
public:
- DriverOptTable()
- : PrecomputedOptTable(OptionStrTable, OptionPrefixesTable, InfoTable,
- OptionPrefixesUnion) {
+ DriverOptTable() : OptTable(OptionTables) {
setValuesCodeFn(getOptionValuesCode);
}
};
diff --git a/clang/tools/clang-installapi/Options.cpp b/clang/tools/clang-installapi/Options.cpp
index f0ad4501a4593..99b495ad7eebb 100644
--- a/clang/tools/clang-installapi/Options.cpp
+++ b/clang/tools/clang-installapi/Options.cpp
@@ -30,33 +30,16 @@ using namespace llvm::MachO;
namespace clang {
namespace installapi {
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "InstallAPIOpts.inc"
-#undef OPTTABLE_STR_TABLE_CODE
-
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "InstallAPIOpts.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-#define OPTTABLE_PREFIXES_UNION_CODE
-#include "InstallAPIOpts.inc"
-#undef OPTTABLE_PREFIXES_UNION_CODE
-
-/// Create table mapping all options defined in InstallAPIOpts.td.
-static constexpr OptTable::Info InfoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "InstallAPIOpts.inc"
-#undef OPTION
-};
+#undef OPTTABLE_CODE
namespace {
/// \brief Create OptTable class for parsing actual command line arguments.
-class DriverOptTable : public opt::PrecomputedOptTable {
+class DriverOptTable : public opt::OptTable {
public:
- DriverOptTable()
- : PrecomputedOptTable(OptionStrTable, OptionPrefixesTable, InfoTable,
- OptionPrefixesUnion) {}
+ DriverOptTable() : OptTable(OptionTables) {}
};
} // end anonymous namespace.
diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
index 59faf38dda140..366cedcebddfa 100644
--- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
+++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp
@@ -174,24 +174,13 @@ enum ID {
#undef OPTION
};
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "LinkerWrapperOpts.inc"
-#undef OPTTABLE_STR_TABLE_CODE
+#undef OPTTABLE_CODE
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "LinkerWrapperOpts.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-static constexpr OptTable::Info InfoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "LinkerWrapperOpts.inc"
-#undef OPTION
-};
-
-class WrapperOptTable : public opt::GenericOptTable {
+class WrapperOptTable : public opt::OptTable {
public:
- WrapperOptTable()
- : opt::GenericOptTable(OptionStrTable, OptionPrefixesTable, InfoTable) {}
+ WrapperOptTable() : opt::OptTable(OptionTables) {}
};
const OptTable &getOptTable() {
diff --git a/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp b/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp
index 4e06d1c149bb6..61b5eb56eaa2f 100644
--- a/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp
+++ b/clang/tools/clang-nvlink-wrapper/ClangNVLinkWrapper.cpp
@@ -111,24 +111,13 @@ enum ID {
#undef OPTION
};
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "NVLinkOpts.inc"
-#undef OPTTABLE_STR_TABLE_CODE
+#undef OPTTABLE_CODE
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "NVLinkOpts.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-static constexpr OptTable::Info InfoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "NVLinkOpts.inc"
-#undef OPTION
-};
-
-class WrapperOptTable : public opt::GenericOptTable {
+class WrapperOptTable : public opt::OptTable {
public:
- WrapperOptTable()
- : opt::GenericOptTable(OptionStrTable, OptionPrefixesTable, InfoTable) {}
+ WrapperOptTable() : opt::OptTable(OptionTables) {}
};
const OptTable &getOptTable() {
diff --git a/clang/tools/clang-scan-deps/ClangScanDeps.cpp b/clang/tools/clang-scan-deps/ClangScanDeps.cpp
index 83b4860c130c3..ac3c329707d0a 100644
--- a/clang/tools/clang-scan-deps/ClangScanDeps.cpp
+++ b/clang/tools/clang-scan-deps/ClangScanDeps.cpp
@@ -54,26 +54,13 @@ enum ID {
#undef OPTION
};
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "Opts.inc"
-#undef OPTTABLE_STR_TABLE_CODE
+#undef OPTTABLE_CODE
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "Opts.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-const llvm::opt::OptTable::Info InfoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "Opts.inc"
-#undef OPTION
-};
-
-class ScanDepsOptTable : public llvm::opt::GenericOptTable {
+class ScanDepsOptTable : public llvm::opt::OptTable {
public:
- ScanDepsOptTable()
- : GenericOptTable(OptionStrTable, OptionPrefixesTable, InfoTable) {
- setGroupedShortOptions(true);
- }
+ ScanDepsOptTable() : OptTable(OptionTables) { setGroupedShortOptions(true); }
};
enum ResourceDirRecipeKind {
diff --git a/clang/tools/clang-sycl-linker/ClangSYCLLinker.cpp b/clang/tools/clang-sycl-linker/ClangSYCLLinker.cpp
index 70afc6d6c4cea..f8c07b6eb9edd 100644
--- a/clang/tools/clang-sycl-linker/ClangSYCLLinker.cpp
+++ b/clang/tools/clang-sycl-linker/ClangSYCLLinker.cpp
@@ -98,24 +98,13 @@ enum ID {
#undef OPTION
};
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "SYCLLinkOpts.inc"
-#undef OPTTABLE_STR_TABLE_CODE
+#undef OPTTABLE_CODE
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "SYCLLinkOpts.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-constexpr OptTable::Info InfoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "SYCLLinkOpts.inc"
-#undef OPTION
-};
-
-class LinkerOptTable : public opt::GenericOptTable {
+class LinkerOptTable : public opt::OptTable {
public:
- LinkerOptTable()
- : opt::GenericOptTable(OptionStrTable, OptionPrefixesTable, InfoTable) {}
+ LinkerOptTable() : opt::OptTable(OptionTables) {}
};
} // namespace
diff --git a/lld/COFF/Driver.h b/lld/COFF/Driver.h
index 7eea9aee279a1..9f4f181379d2b 100644
--- a/lld/COFF/Driver.h
+++ b/lld/COFF/Driver.h
@@ -33,7 +33,7 @@ using llvm::COFF::MachineTypes;
using llvm::COFF::WindowsSubsystem;
using std::optional;
-class COFFOptTable : public llvm::opt::GenericOptTable {
+class COFFOptTable : public llvm::opt::OptTable {
public:
COFFOptTable();
};
diff --git a/lld/COFF/DriverUtils.cpp b/lld/COFF/DriverUtils.cpp
index 3b69a6d9b3d14..2fb126a68f383 100644
--- a/lld/COFF/DriverUtils.cpp
+++ b/lld/COFF/DriverUtils.cpp
@@ -748,24 +748,11 @@ MemoryBufferRef LinkerDriver::convertResToCOFF(ArrayRef<MemoryBufferRef> mbs,
// Create OptTable
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "Options.inc"
-#undef OPTTABLE_STR_TABLE_CODE
+#undef OPTTABLE_CODE
-// Create prefix string literals used in Options.td
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "Options.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-// Create table mapping all options defined in Options.td
-static constexpr llvm::opt::OptTable::Info infoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "Options.inc"
-#undef OPTION
-};
-
-COFFOptTable::COFFOptTable()
- : GenericOptTable(OptionStrTable, OptionPrefixesTable, infoTable, true) {}
+COFFOptTable::COFFOptTable() : OptTable(OptionTables, true) {}
// Set color diagnostics according to --color-diagnostics={auto,always,never}
// or --no-color-diagnostics flags.
diff --git a/lld/ELF/Driver.h b/lld/ELF/Driver.h
index b5d41633141e2..473b5eca77c52 100644
--- a/lld/ELF/Driver.h
+++ b/lld/ELF/Driver.h
@@ -18,7 +18,7 @@ namespace lld::elf {
struct Ctx;
// Parses command line options.
-class ELFOptTable : public llvm::opt::GenericOptTable {
+class ELFOptTable : public llvm::opt::OptTable {
public:
ELFOptTable();
llvm::opt::InputArgList parse(Ctx &, ArrayRef<const char *> argv);
diff --git a/lld/ELF/DriverUtils.cpp b/lld/ELF/DriverUtils.cpp
index 6d027c529c19e..03e568ac46acd 100644
--- a/lld/ELF/DriverUtils.cpp
+++ b/lld/ELF/DriverUtils.cpp
@@ -33,24 +33,11 @@ using namespace lld::elf;
// Create OptTable
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "Options.inc"
-#undef OPTTABLE_STR_TABLE_CODE
+#undef OPTTABLE_CODE
-// Create prefix string literals used in Options.td
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "Options.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-// Create table mapping all options defined in Options.td
-static constexpr opt::OptTable::Info optInfo[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "Options.inc"
-#undef OPTION
-};
-
-ELFOptTable::ELFOptTable()
- : GenericOptTable(OptionStrTable, OptionPrefixesTable, optInfo) {}
+ELFOptTable::ELFOptTable() : OptTable(OptionTables) {}
// Set color diagnostics according to --color-diagnostics={auto,always,never}
// or --no-color-diagnostics flags.
diff --git a/lld/MachO/Driver.h b/lld/MachO/Driver.h
index 9374dffffd8bd..8af7afdf45a93 100644
--- a/lld/MachO/Driver.h
+++ b/lld/MachO/Driver.h
@@ -29,7 +29,7 @@ namespace lld::macho {
class DylibFile;
class InputFile;
-class MachOOptTable : public llvm::opt::GenericOptTable {
+class MachOOptTable : public llvm::opt::OptTable {
public:
MachOOptTable();
llvm::opt::InputArgList parse(CommonLinkerContext &ctx,
diff --git a/lld/MachO/DriverUtils.cpp b/lld/MachO/DriverUtils.cpp
index 46ad681ffaa5d..e9b59dd71263d 100644
--- a/lld/MachO/DriverUtils.cpp
+++ b/lld/MachO/DriverUtils.cpp
@@ -32,24 +32,11 @@ using namespace llvm::sys;
using namespace lld;
using namespace lld::macho;
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "Options.inc"
-#undef OPTTABLE_STR_TABLE_CODE
+#undef OPTTABLE_CODE
-// Create prefix string literals used in Options.td
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "Options.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-// Create table mapping all options defined in Options.td
-static constexpr OptTable::Info optInfo[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "Options.inc"
-#undef OPTION
-};
-
-MachOOptTable::MachOOptTable()
- : GenericOptTable(OptionStrTable, OptionPrefixesTable, optInfo) {}
+MachOOptTable::MachOOptTable() : OptTable(OptionTables) {}
// Set color diagnostics according to --color-diagnostics={auto,always,never}
// or --no-color-diagnostics flags.
diff --git a/lld/MinGW/Driver.cpp b/lld/MinGW/Driver.cpp
index 11ccb110f7684..3f4ac149eb341 100644
--- a/lld/MinGW/Driver.cpp
+++ b/lld/MinGW/Driver.cpp
@@ -58,27 +58,14 @@ enum {
#undef OPTION
};
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "Options.inc"
-#undef OPTTABLE_STR_TABLE_CODE
-
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "Options.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-// Create table mapping all options defined in Options.td
-static constexpr opt::OptTable::Info infoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "Options.inc"
-#undef OPTION
-};
+#undef OPTTABLE_CODE
namespace {
-class MinGWOptTable : public opt::GenericOptTable {
+class MinGWOptTable : public opt::OptTable {
public:
- MinGWOptTable()
- : opt::GenericOptTable(OptionStrTable, OptionPrefixesTable, infoTable,
- false) {}
+ MinGWOptTable() : opt::OptTable(OptionTables, false) {}
opt::InputArgList parse(ArrayRef<const char *> argv);
};
} // namespace
diff --git a/lld/wasm/Driver.cpp b/lld/wasm/Driver.cpp
index e6b3bcc2d438a..380df3f7824dc 100644
--- a/lld/wasm/Driver.cpp
+++ b/lld/wasm/Driver.cpp
@@ -145,26 +145,14 @@ bool link(ArrayRef<const char *> args, llvm::raw_ostream &stdoutOS,
return errorCount() == 0;
}
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "Options.inc"
-#undef OPTTABLE_STR_TABLE_CODE
-
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "Options.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-// Create table mapping all options defined in Options.td
-static constexpr opt::OptTable::Info optInfo[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "Options.inc"
-#undef OPTION
-};
+#undef OPTTABLE_CODE
namespace {
-class WasmOptTable : public opt::GenericOptTable {
+class WasmOptTable : public opt::OptTable {
public:
- WasmOptTable()
- : opt::GenericOptTable(OptionStrTable, OptionPrefixesTable, optInfo) {}
+ WasmOptTable() : opt::OptTable(OptionTables) {}
opt::InputArgList parse(ArrayRef<const char *> argv);
};
} // namespace
diff --git a/lldb/tools/driver/Driver.cpp b/lldb/tools/driver/Driver.cpp
index a66552e0428bf..0ffe296eb274a 100644
--- a/lldb/tools/driver/Driver.cpp
+++ b/lldb/tools/driver/Driver.cpp
@@ -79,24 +79,13 @@ enum ID {
#undef OPTION
};
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "Options.inc"
-#undef OPTTABLE_STR_TABLE_CODE
+#undef OPTTABLE_CODE
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "Options.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-static constexpr opt::OptTable::Info InfoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "Options.inc"
-#undef OPTION
-};
-
-class LLDBOptTable : public opt::GenericOptTable {
+class LLDBOptTable : public opt::OptTable {
public:
- LLDBOptTable()
- : opt::GenericOptTable(OptionStrTable, OptionPrefixesTable, InfoTable) {}
+ LLDBOptTable() : opt::OptTable(OptionTables) {}
};
} // namespace
diff --git a/lldb/tools/lldb-dap/tool/lldb-dap.cpp b/lldb/tools/lldb-dap/tool/lldb-dap.cpp
index 0882e593dc330..370a029dbb221 100644
--- a/lldb/tools/lldb-dap/tool/lldb-dap.cpp
+++ b/lldb/tools/lldb-dap/tool/lldb-dap.cpp
@@ -110,24 +110,12 @@ enum ID {
#undef OPTION
};
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "Options.inc"
-#undef OPTTABLE_STR_TABLE_CODE
-
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "Options.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-static constexpr llvm::opt::OptTable::Info InfoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "Options.inc"
-#undef OPTION
-};
-class LLDBDAPOptTable : public llvm::opt::GenericOptTable {
+#undef OPTTABLE_CODE
+class LLDBDAPOptTable : public llvm::opt::OptTable {
public:
- LLDBDAPOptTable()
- : llvm::opt::GenericOptTable(OptionStrTable, OptionPrefixesTable,
- InfoTable, true) {}
+ LLDBDAPOptTable() : llvm::opt::OptTable(OptionTables, true) {}
};
} // anonymous namespace
diff --git a/lldb/tools/lldb-server/lldb-gdbserver.cpp b/lldb/tools/lldb-server/lldb-gdbserver.cpp
index 91e0379f05585..ecf8ab10045f0 100644
--- a/lldb/tools/lldb-server/lldb-gdbserver.cpp
+++ b/lldb/tools/lldb-server/lldb-gdbserver.cpp
@@ -302,24 +302,13 @@ enum ID {
#undef OPTION
};
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "LLGSOptions.inc"
-#undef OPTTABLE_STR_TABLE_CODE
+#undef OPTTABLE_CODE
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "LLGSOptions.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-static constexpr opt::OptTable::Info InfoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "LLGSOptions.inc"
-#undef OPTION
-};
-
-class LLGSOptTable : public opt::GenericOptTable {
+class LLGSOptTable : public opt::OptTable {
public:
- LLGSOptTable()
- : opt::GenericOptTable(OptionStrTable, OptionPrefixesTable, InfoTable) {}
+ LLGSOptTable() : opt::OptTable(OptionTables) {}
void PrintHelp(llvm::StringRef Name) {
std::string Usage =
diff --git a/lldb/tools/lldb-server/lldb-platform.cpp b/lldb/tools/lldb-server/lldb-platform.cpp
index 1b13ca65b8318..2f44c306c6f3b 100644
--- a/lldb/tools/lldb-server/lldb-platform.cpp
+++ b/lldb/tools/lldb-server/lldb-platform.cpp
@@ -68,24 +68,13 @@ enum ID {
#undef OPTION
};
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "PlatformOptions.inc"
-#undef OPTTABLE_STR_TABLE_CODE
+#undef OPTTABLE_CODE
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "PlatformOptions.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-static constexpr opt::OptTable::Info InfoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "PlatformOptions.inc"
-#undef OPTION
-};
-
-class PlatformOptTable : public opt::GenericOptTable {
+class PlatformOptTable : public opt::OptTable {
public:
- PlatformOptTable()
- : opt::GenericOptTable(OptionStrTable, OptionPrefixesTable, InfoTable) {}
+ PlatformOptTable() : opt::OptTable(OptionTables) {}
void PrintHelp(llvm::StringRef Name) {
std::string Usage =
diff --git a/llvm/examples/OptSubcommand/llvm-hello-sub.cpp b/llvm/examples/OptSubcommand/llvm-hello-sub.cpp
index bcf433f2179c3..1777f30ed4174 100644
--- a/llvm/examples/OptSubcommand/llvm-hello-sub.cpp
+++ b/llvm/examples/OptSubcommand/llvm-hello-sub.cpp
@@ -19,34 +19,13 @@ enum ID {
#include "Opts.inc"
#undef OPTION
};
-#define OPTTABLE_STR_TABLE_CODE
+#define OPTTABLE_CODE
#include "Opts.inc"
-#undef OPTTABLE_STR_TABLE_CODE
+#undef OPTTABLE_CODE
-#define OPTTABLE_PREFIXES_TABLE_CODE
-#include "Opts.inc"
-#undef OPTTABLE_PREFIXES_TABLE_CODE
-
-#define OPTTABLE_SUBCOMMAND_IDS_TABLE_CODE
-#include "Opts.inc"
-#undef OPTTABLE_SUBCOMMAND_IDS_TABLE_CODE
-
-#define OPTTABLE_SUBCOMMANDS_CODE
-#include "Opts.inc"
-#undef OPTTABLE_SUBCOMMANDS_CODE
-
-static constexpr OptTable::Info InfoTable[] = {
-#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
-#include "Opts.inc"
-#undef OPTION
-};
-
-class HelloSubOptTable : public GenericOptTable {
+class HelloSubOptTable : public OptTable {
public:
- HelloSubOptTable()
- : GenericOptTable(OptionStrTable, OptionPrefixesTable, InfoTable,
- /*IgnoreCase=*/false, OptionSubCommands,
- OptionSubCommandIDsTable) {};
+ HelloSubOptTable() : OptTable(OptionTables) {};
};
} // namespace
diff --git a/llvm/include/llvm/Option/OptTable.h b/llvm/include/llvm/Option/OptTable.h
index ceb22c68ccb3b..1532f18b105bd 100644
--- a/llvm/include/llvm/Option/OptTable.h
+++ b/llvm/include/llvm/Option/OptTable.h
@@ -65,38 +65,38 @@ class LLVM_ABI OptTable {
/// table supplies getOptionValuesCode() for this.
using ValuesCodeFnTy = StringRef (*)(unsigned);
- /// Entry for a single option instance in the option data table.
+ /// Help text that replaces Info::HelpTextOffset when the visibility mask
+ /// being printed intersects Visibility. An option's variants form a run
+ /// ended by a zero Visibility.
+ struct HelpTextVariant {
+ unsigned Visibility;
+ StringTable::Offset HelpTextOffset;
+ };
+
+ /// Entry for a single option instance in the option data table. An option's
+ /// ID is its 1-based position in the table.
struct Info {
- unsigned PrefixesOffset;
StringTable::Offset PrefixedNameOffset;
/// Offset 0 means the .td supplied no HelpText. A HelpText<""> maps to a
/// distinct empty string, marking the option deliberately undocumented.
StringTable::Offset HelpTextOffset;
- // Help text for specific visibilities. A list of pairs, where each pair
- // is a list of visibilities and a specific help string for those
- // visibilities. If no help text is found in this list for the visibility of
- // the program, HelpTextOffset is used instead. This cannot use std::vector
- // because OptTable is used in constexpr contexts. Increase the array sizes
- // here if you need more entries and adjust the constants in
- // OptionParserEmitter::EmitHelpTextsForVariants.
- std::array<std::pair<std::array<unsigned int, 2 /*MaxVisibilityPerHelp*/>,
- StringT...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/224508
More information about the lldb-commits
mailing list