Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3f092f3

Browse files
committed
[llvm] Extract common OptTable bits into macros
All command-line tools using `llvm::opt` create an enum of option IDs and a table of `OptTable::Info` object. Most of the tools use the same ID (`OPT_##ID`), kind (`Option::KIND##Class`), group ID (`OPT_##GROUP`) and alias ID (`OPT_##ALIAS`). This patch extracts that common code into canonical macros. This results in fewer changes when tweaking the `OPTION` macros emitted by the TableGen backend. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D157028
1 parent e6b2e1b commit 3f092f3

43 files changed

Lines changed: 123 additions & 375 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

clang/include/clang/Driver/Options.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,7 @@
99
#ifndef LLVM_CLANG_DRIVER_OPTIONS_H
1010
#define LLVM_CLANG_DRIVER_OPTIONS_H
1111

12-
namespace llvm {
13-
namespace opt {
14-
class OptTable;
15-
}
16-
}
12+
#include "llvm/Option/OptTable.h"
1713

1814
namespace clang {
1915
namespace driver {
@@ -43,9 +39,7 @@ enum ClangFlags {
4339

4440
enum ID {
4541
OPT_INVALID = 0, // This is not an option ID.
46-
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
47-
HELPTEXT, METAVAR, VALUES) \
48-
OPT_##ID,
42+
#define OPTION(...) LLVM_MAKE_OPT_ID(__VA_ARGS__),
4943
#include "clang/Driver/Options.inc"
5044
LastOption
5145
#undef OPTION

clang/lib/Driver/DriverOptions.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,7 @@ static constexpr const llvm::ArrayRef<llvm::StringLiteral>
3636
PrefixTable(PrefixTable_init, std::size(PrefixTable_init) - 1);
3737

3838
static constexpr OptTable::Info InfoTable[] = {
39-
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
40-
HELPTEXT, METAVAR, VALUES) \
41-
{PREFIX, NAME, HELPTEXT, METAVAR, OPT_##ID, Option::KIND##Class, \
42-
PARAM, FLAGS, OPT_##GROUP, OPT_##ALIAS, ALIASARGS, VALUES},
39+
#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
4340
#include "clang/Driver/Options.inc"
4441
#undef OPTION
4542
};

clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,7 @@ enum WrapperFlags {
117117

118118
enum ID {
119119
OPT_INVALID = 0, // This is not an option ID.
120-
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
121-
HELPTEXT, METAVAR, VALUES) \
122-
OPT_##ID,
120+
#define OPTION(...) LLVM_MAKE_OPT_ID(__VA_ARGS__),
123121
#include "LinkerWrapperOpts.inc"
124122
LastOption
125123
#undef OPTION
@@ -133,10 +131,7 @@ enum ID {
133131
#undef PREFIX
134132

135133
static constexpr OptTable::Info InfoTable[] = {
136-
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
137-
HELPTEXT, METAVAR, VALUES) \
138-
{PREFIX, NAME, HELPTEXT, METAVAR, OPT_##ID, Option::KIND##Class, \
139-
PARAM, FLAGS, OPT_##GROUP, OPT_##ALIAS, ALIASARGS, VALUES},
134+
#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
140135
#include "LinkerWrapperOpts.inc"
141136
#undef OPTION
142137
};

clang/tools/clang-scan-deps/ClangScanDeps.cpp

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ namespace {
4343
using namespace llvm::opt;
4444
enum ID {
4545
OPT_INVALID = 0, // This is not an option ID.
46-
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
47-
HELPTEXT, METAVAR, VALUES) \
48-
OPT_##ID,
46+
#define OPTION(...) LLVM_MAKE_OPT_ID(__VA_ARGS__),
4947
#include "Opts.inc"
5048
#undef OPTION
5149
};
@@ -58,12 +56,7 @@ enum ID {
5856
#undef PREFIX
5957

6058
const llvm::opt::OptTable::Info InfoTable[] = {
61-
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
62-
HELPTEXT, METAVAR, VALUES) \
63-
{PREFIX, NAME, HELPTEXT, \
64-
METAVAR, OPT_##ID, llvm::opt::Option::KIND##Class, \
65-
PARAM, FLAGS, OPT_##GROUP, \
66-
OPT_##ALIAS, ALIASARGS, VALUES},
59+
#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
6760
#include "Opts.inc"
6861
#undef OPTION
6962
};

lld/COFF/Driver.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ class LinkerDriver {
272272
// Create enum with OPT_xxx values for each option in Options.td
273273
enum {
274274
OPT_INVALID = 0,
275-
#define OPTION(_1, _2, ID, _4, _5, _6, _7, _8, _9, _10, _11, _12) OPT_##ID,
275+
#define OPTION(...) LLVM_MAKE_OPT_ID(__VA_ARGS__),
276276
#include "Options.inc"
277277
#undef OPTION
278278
};

lld/COFF/DriverUtils.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -818,9 +818,7 @@ MemoryBufferRef LinkerDriver::convertResToCOFF(ArrayRef<MemoryBufferRef> mbs,
818818

819819
// Create table mapping all options defined in Options.td
820820
static constexpr llvm::opt::OptTable::Info infoTable[] = {
821-
#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \
822-
{X1, X2, X10, X11, OPT_##ID, llvm::opt::Option::KIND##Class, \
823-
X9, X8, OPT_##GROUP, OPT_##ALIAS, X7, X12},
821+
#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
824822
#include "Options.inc"
825823
#undef OPTION
826824
};

lld/ELF/Driver.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class ELFOptTable : public llvm::opt::GenericOptTable {
2525
// Create enum with OPT_xxx values for each option in Options.td
2626
enum {
2727
OPT_INVALID = 0,
28-
#define OPTION(_1, _2, ID, _4, _5, _6, _7, _8, _9, _10, _11, _12) OPT_##ID,
28+
#define OPTION(...) LLVM_MAKE_OPT_ID(__VA_ARGS__),
2929
#include "Options.inc"
3030
#undef OPTION
3131
};

lld/ELF/DriverUtils.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,7 @@ using namespace lld::elf;
4343

4444
// Create table mapping all options defined in Options.td
4545
static constexpr opt::OptTable::Info optInfo[] = {
46-
#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \
47-
{X1, X2, X10, X11, OPT_##ID, opt::Option::KIND##Class, \
48-
X9, X8, OPT_##GROUP, OPT_##ALIAS, X7, X12},
46+
#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__),
4947
#include "Options.inc"
5048
#undef OPTION
5149
};

lld/MachO/Driver.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class MachOOptTable : public llvm::opt::GenericOptTable {
3535
// Create enum with OPT_xxx values for each option in Options.td
3636
enum {
3737
OPT_INVALID = 0,
38-
#define OPTION(_1, _2, ID, _4, _5, _6, _7, _8, _9, _10, _11, _12) OPT_##ID,
38+
#define OPTION(...) LLVM_MAKE_OPT_ID(__VA_ARGS__),
3939
#include "Options.inc"
4040
#undef OPTION
4141
};

lld/MinGW/Driver.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ using namespace llvm;
5656
// Create OptTable
5757
enum {
5858
OPT_INVALID = 0,
59-
#define OPTION(_1, _2, ID, _4, _5, _6, _7, _8, _9, _10, _11, _12) OPT_##ID,
59+
#define OPTION(...) LLVM_MAKE_OPT_ID(__VA_ARGS__),
6060
#include "Options.inc"
6161
#undef OPTION
6262
};

0 commit comments

Comments
 (0)