Store OptTable::Info::Name as a StringRef

This is a recommit of 8ae18303f9,
with a few cleanups.

This avoids implicit conversion to StringRef at several points, which in
turns avoid redundant calls to strlen.

As a side effect, this greatly simplifies the implementation of
StrCmpOptionNameIgnoreCase.

It also eventually gives a consistent, humble speedup in compilation
time (timing updated since original commit).

https://llvm-compile-time-tracker.com/compare.php?from=de4b6a1bc64db33643f001ad45fae7b92b4a4688&to=c23a93d1292052b4be2fbe8c586fa31143d0c7ed&stat=instructions:u

Differential Revision: https://reviews.llvm.org/D139274
This commit is contained in:
serge-sans-paille
2022-12-04 09:33:14 +01:00
parent 5b56b55244
commit 6a35815c73
30 changed files with 35 additions and 35 deletions

View File

@@ -20,7 +20,7 @@ using namespace llvm::opt;
#include "clang/Driver/Options.inc"
#undef PREFIX
static const OptTable::Info InfoTable[] = {
static constexpr OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{PREFIX, NAME, HELPTEXT, METAVAR, OPT_##ID, Option::KIND##Class, \

View File

@@ -125,7 +125,7 @@ enum ID {
#include "LinkerWrapperOpts.inc"
#undef PREFIX
static const OptTable::Info InfoTable[] = {
static constexpr OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{PREFIX, NAME, HELPTEXT, METAVAR, OPT_##ID, Option::KIND##Class, \

View File

@@ -777,7 +777,7 @@ MemoryBufferRef convertResToCOFF(ArrayRef<MemoryBufferRef> mbs,
#undef PREFIX
// Create table mapping all options defined in Options.td
static const llvm::opt::OptTable::Info infoTable[] = {
static constexpr llvm::opt::OptTable::Info infoTable[] = {
#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \
{X1, X2, X10, X11, OPT_##ID, llvm::opt::Option::KIND##Class, \
X9, X8, OPT_##GROUP, OPT_##ALIAS, X7, X12},

View File

@@ -39,7 +39,7 @@ using namespace lld::elf;
#undef PREFIX
// Create table mapping all options defined in Options.td
static const opt::OptTable::Info optInfo[] = {
static constexpr opt::OptTable::Info optInfo[] = {
#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \
{X1, X2, X10, X11, OPT_##ID, opt::Option::KIND##Class, \
X9, X8, OPT_##GROUP, OPT_##ALIAS, X7, X12},

View File

@@ -40,7 +40,7 @@ using namespace lld::macho;
#undef PREFIX
// Create table mapping all options defined in Options.td
static const OptTable::Info optInfo[] = {
static constexpr OptTable::Info optInfo[] = {
#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \
{X1, X2, X10, X11, OPT_##ID, Option::KIND##Class, \
X9, X8, OPT_##GROUP, OPT_##ALIAS, X7, X12},

View File

@@ -66,7 +66,7 @@ enum {
#undef PREFIX
// Create table mapping all options defined in Options.td
static const opt::OptTable::Info infoTable[] = {
static constexpr opt::OptTable::Info infoTable[] = {
#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \
{X1, X2, X10, X11, OPT_##ID, opt::Option::KIND##Class, \
X9, X8, OPT_##GROUP, OPT_##ALIAS, X7, X12},

View File

@@ -106,7 +106,7 @@ bool link(ArrayRef<const char *> args, llvm::raw_ostream &stdoutOS,
#undef PREFIX
// Create table mapping all options defined in Options.td
static const opt::OptTable::Info optInfo[] = {
static constexpr opt::OptTable::Info optInfo[] = {
#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \
{X1, X2, X10, X11, OPT_##ID, opt::Option::KIND##Class, \
X9, X8, OPT_##GROUP, OPT_##ALIAS, X7, X12},

View File

@@ -63,7 +63,7 @@ enum ID {
#include "Options.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -282,7 +282,7 @@ enum ID {
#include "LLGSOptions.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -83,7 +83,7 @@ enum ID {
#include "Options.inc"
#undef PREFIX
static const llvm::opt::OptTable::Info InfoTable[] = {
static constexpr llvm::opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{PREFIX, NAME, HELPTEXT, \

View File

@@ -23,7 +23,7 @@ using namespace jitlink;
#undef PREFIX
// Create table mapping all options defined in COFFOptions.td
static const opt::OptTable::Info infoTable[] = {
static constexpr opt::OptTable::Info infoTable[] = {
#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \
{X1, \
X2, \

View File

@@ -41,7 +41,7 @@ enum {
#include "Options.inc"
#undef PREFIX
static const llvm::opt::OptTable::Info InfoTable[] = {
static constexpr llvm::opt::OptTable::Info InfoTable[] = {
#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \
{X1, X2, X10, X11, OPT_##ID, llvm::opt::Option::KIND##Class, \
X9, X8, OPT_##GROUP, OPT_##ALIAS, X7, X12},

View File

@@ -45,7 +45,7 @@ enum {
#include "Options.inc"
#undef PREFIX
static const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(X1, X2, ID, KIND, GROUP, ALIAS, X7, X8, X9, X10, X11, X12) \
{X1, X2, X10, X11, OPT_##ID, opt::Option::KIND##Class, \
X9, X8, OPT_##GROUP, OPT_##ALIAS, X7, X12},

View File

@@ -67,7 +67,7 @@ enum ID {
#include "Options.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -48,7 +48,7 @@ enum ID {
#include "Opts.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -36,7 +36,7 @@ enum ID {
#include "Opts.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -44,7 +44,7 @@ enum ID {
#include "Options.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -64,7 +64,7 @@ enum ID {
#include "Opts.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -74,12 +74,12 @@ enum LipoID {
};
// LipoInfoTable below references LIPO_##PREFIX. OptionGroup has prefix nullptr.
const char *const *LIPO_nullptr = nullptr;
constexpr const char *const *LIPO_nullptr = nullptr;
#define PREFIX(NAME, VALUE) const char *const LIPO_##NAME[] = VALUE;
#include "LipoOpts.inc"
#undef PREFIX
const opt::OptTable::Info LipoInfoTable[] = {
static constexpr opt::OptTable::Info LipoInfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{LIPO_##PREFIX, NAME, HELPTEXT, \

View File

@@ -64,7 +64,7 @@ enum ID {
#include "Opts.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -45,7 +45,7 @@ enum ID {
#include "Opts.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -68,7 +68,7 @@ enum ID {
#include "Opts.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -40,7 +40,7 @@ enum ObjcopyID {
#include "ObjcopyOpts.inc"
#undef PREFIX
const opt::OptTable::Info ObjcopyInfoTable[] = {
static constexpr opt::OptTable::Info ObjcopyInfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{OBJCOPY_##PREFIX, \
@@ -80,7 +80,7 @@ enum InstallNameToolID {
#include "InstallNameToolOpts.inc"
#undef PREFIX
const opt::OptTable::Info InstallNameToolInfoTable[] = {
static constexpr opt::OptTable::Info InstallNameToolInfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{INSTALL_NAME_TOOL_##PREFIX, \
@@ -117,7 +117,7 @@ enum BitcodeStripID {
#include "BitcodeStripOpts.inc"
#undef PREFIX
const opt::OptTable::Info BitcodeStripInfoTable[] = {
static constexpr opt::OptTable::Info BitcodeStripInfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{BITCODE_STRIP_##PREFIX, \
@@ -154,7 +154,7 @@ enum StripID {
#include "StripOpts.inc"
#undef PREFIX
const opt::OptTable::Info StripInfoTable[] = {
static constexpr opt::OptTable::Info StripInfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{STRIP_##PREFIX, NAME, HELPTEXT, \

View File

@@ -59,7 +59,7 @@ enum ID {
#include "Opts.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \
@@ -89,7 +89,7 @@ enum Windres_ID {
#include "WindresOpts.inc"
#undef PREFIX
const opt::OptTable::Info WindresInfoTable[] = {
static constexpr opt::OptTable::Info WindresInfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -66,7 +66,7 @@ enum ID {
#include "Opts.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -51,7 +51,7 @@ enum ID {
#include "Opts.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -43,7 +43,7 @@ enum ID {
#include "Opts.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -60,7 +60,7 @@ enum ID {
#include "Opts.inc"
#undef PREFIX
const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -39,7 +39,7 @@ enum ID {
#include "Opts.inc"
#undef PREFIX
static const opt::OptTable::Info InfoTable[] = {
static constexpr opt::OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{ \

View File

@@ -35,7 +35,7 @@ enum OptionFlags {
OptFlag3 = (1 << 6)
};
static const OptTable::Info InfoTable[] = {
static constexpr OptTable::Info InfoTable[] = {
#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
HELPTEXT, METAVAR, VALUES) \
{PREFIX, NAME, HELPTEXT, METAVAR, OPT_##ID, Option::KIND##Class, \