20 #ifndef LLVM_SUPPORT_COMMANDLINE_H
21 #define LLVM_SUPPORT_COMMANDLINE_H
45 const char *Overview = 0);
52 const char *Overview = 0);
146 const char *
const Name;
147 const char *
const Description;
148 void registerCategory();
151 : Name(Name), Description(Description) { registerCategory(); }
170 virtual bool handleOccurrence(
unsigned pos,
StringRef ArgName,
173 virtual enum ValueExpected getValueExpectedFlagDefault()
const {
178 virtual void anchor();
183 unsigned Occurrences : 3;
187 unsigned HiddenFlag : 2;
188 unsigned Formatting : 2;
191 unsigned AdditionalVals;
205 : getValueExpectedFlagDefault();
240 : NumOccurrences(0), Occurrences(OccurrencesFlag),
Value(0),
242 Position(0), AdditionalVals(0), NextRegistered(0),
329 void apply(Opt &O)
const { O.setLocation(O,
Loc); }
355 virtual void anchor();
362 template<
class DataType,
bool isClass>
381 template<
class DataType>
391 assert(Valid &&
"invalid option value");
398 return Valid && (
Value != V);
410 template<
class DataType>
416 template<
class DataType>
447 virtual void anchor();
464 virtual void anchor();
470 #define clEnumVal(ENUMVAL, DESC) #ENUMVAL, int(ENUMVAL), DESC
471 #define clEnumValN(ENUMVAL, FLAGNAME, DESC) FLAGNAME, int(ENUMVAL), DESC
472 #define clEnumValEnd (reinterpret_cast<void*>(0))
479 template<
class DataType>
485 void processValues(va_list Vals);
490 Values.
push_back(std::make_pair(EnumName, std::make_pair(Val, Desc)));
493 while (
const char *enumName = va_arg(ValueArgs,
const char *)) {
495 const char *EnumDesc = va_arg(ValueArgs,
const char *);
496 Values.
push_back(std::make_pair(enumName,
497 std::make_pair(EnumVal, EnumDesc)));
503 for (
size_t i = 0, e = Values.
size(); i != e; ++i)
504 O.getParser().addLiteralOption(Values[i].first, Values[i].second.first,
505 Values[i].second.second);
509 template<
class DataType>
511 const char *Desc, ...) {
513 va_start(ValueArgs, Desc);
549 virtual const char *
getOption(
unsigned N)
const = 0;
566 size_t GlobalWidth)
const;
572 template<
class AnyOptionValue>
575 size_t GlobalWidth)
const {
629 template <
class DataType>
662 for (
size_t i = 0, e =
Values.size(); i != e; ++i)
664 V =
Values[i].V.getValue();
668 return O.
error(
"Cannot find option named '" + ArgVal +
"'!");
676 OptionInfo
X(Name, static_cast<DataType>(V), HelpStr);
685 assert(N !=
Values.size() &&
"Option not found!");
731 template<
class DataType>
762 size_t GlobalWidth)
const;
765 virtual void anchor();
786 size_t GlobalWidth)
const;
789 virtual void anchor();
807 size_t GlobalWidth)
const;
810 virtual void anchor();
829 size_t GlobalWidth)
const;
832 virtual void anchor();
845 unsigned long long &Val);
851 size_t GlobalWidth)
const;
854 virtual void anchor();
872 size_t GlobalWidth)
const;
875 virtual void anchor();
893 size_t GlobalWidth)
const;
896 virtual void anchor();
917 size_t GlobalWidth)
const;
920 virtual void anchor();
941 size_t GlobalWidth)
const;
944 virtual void anchor();
956 template<
class ParserClass,
class DT>
965 template<
class ParserDT,
class ValDT>
969 P.printOptionNoValue(O, GlobalWidth);
985 template<
class ParserClass,
class ValDT>
990 size_t GlobalWidth) {
993 printer.
print(O, static_cast<const ParserClass&>(P), V, Default,
1005 static void opt(
const Mod &M, Opt &O) { M.apply(O); }
1011 static void opt(
const char *Str, Opt &O) { O.setArgStr(Str); }
1015 static void opt(
const char *Str, Opt &O) { O.setArgStr(Str); }
1019 static void opt(
const char *Str, Opt &O) { O.setArgStr(Str); }
1041 template<
class Mod,
class Opt>
1053 template<
class DataType,
bool ExternalStorage,
bool isClass>
1058 void check()
const {
1059 assert(Location != 0 &&
"cl::location(...) not specified for a command "
1060 "line option with external storage, "
1061 "or cl::init specified before cl::location()!!");
1068 return O.
error(
"cl::location(x) specified more than once!");
1094 template<
class DataType>
1101 DataType::operator=(V);
1116 template<
class DataType>
1147 template <
class DataType,
bool ExternalStorage =
false,
1148 class ParserClass = parser<DataType> >
1151 is_class<DataType>::value> {
1154 virtual bool handleOccurrence(
unsigned pos,
StringRef ArgName,
1156 typename ParserClass::parser_data_type Val =
1157 typename ParserClass::parser_data_type();
1158 if (Parser.parse(*
this, ArgName, Arg, Val))
1165 virtual enum ValueExpected getValueExpectedFlagDefault()
const {
1166 return Parser.getValueExpectedFlagDefault();
1169 return Parser.getExtraOptionNames(OptionNames);
1173 virtual size_t getOptionWidth()
const {
return Parser.getOptionWidth(*
this);}
1174 virtual void printOptionInfo(
size_t GlobalWidth)
const {
1175 Parser.printOptionInfo(*
this, GlobalWidth);
1178 virtual void printOptionValue(
size_t GlobalWidth,
bool Force)
const {
1180 cl::printOptionDiff<ParserClass>(
1187 Parser.initialize(*
this);
1209 template<
class M0t,
class M1t>
1216 template<
class M0t,
class M1t,
class M2t>
1217 opt(
const M0t &M0,
const M1t &M1,
1223 template<
class M0t,
class M1t,
class M2t,
class M3t>
1224 opt(
const M0t &M0,
const M1t &M1,
const M2t &M2,
1230 template<
class M0t,
class M1t,
class M2t,
class M3t,
class M4t>
1231 opt(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3,
1238 template<
class M0t,
class M1t,
class M2t,
class M3t,
1239 class M4t,
class M5t>
1240 opt(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3,
1247 template<
class M0t,
class M1t,
class M2t,
class M3t,
1248 class M4t,
class M5t,
class M6t>
1249 opt(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3,
1250 const M4t &M4,
const M5t &M5,
1257 template<
class M0t,
class M1t,
class M2t,
class M3t,
1258 class M4t,
class M5t,
class M6t,
class M7t>
1259 opt(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3,
1260 const M4t &M4,
const M5t &M5,
const M6t &M6,
1281 template<
class DataType,
class StorageClass>
1290 return O.
error(
"cl::location(x) specified more than once!");
1297 assert(Location != 0 &&
"cl::location(...) not specified for a command "
1298 "line option with external storage!");
1299 Location->push_back(V);
1308 template<
class DataType>
1312 void addValue(
const T &V) { std::vector<DataType>::push_back(V); }
1320 class ParserClass = parser<DataType> >
1322 std::vector<unsigned> Positions;
1325 virtual enum ValueExpected getValueExpectedFlagDefault()
const {
1326 return Parser.getValueExpectedFlagDefault();
1329 return Parser.getExtraOptionNames(OptionNames);
1333 typename ParserClass::parser_data_type Val =
1334 typename ParserClass::parser_data_type();
1335 if (Parser.parse(*
this, ArgName, Arg, Val))
1339 Positions.push_back(pos);
1344 virtual size_t getOptionWidth()
const {
return Parser.getOptionWidth(*
this);}
1345 virtual void printOptionInfo(
size_t GlobalWidth)
const {
1346 Parser.printOptionInfo(*
this, GlobalWidth);
1350 virtual void printOptionValue(
size_t ,
bool )
const {}
1354 Parser.initialize(*
this);
1360 assert(optnum < this->size() &&
"Invalid option index");
1361 return Positions[optnum];
1375 template<
class M0t,
class M1t>
1381 template<
class M0t,
class M1t,
class M2t>
1382 list(
const M0t &M0,
const M1t &M1,
const M2t &M2)
1388 template<
class M0t,
class M1t,
class M2t,
class M3t>
1389 list(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3)
1395 template<
class M0t,
class M1t,
class M2t,
class M3t,
class M4t>
1396 list(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3,
1403 template<
class M0t,
class M1t,
class M2t,
class M3t,
1404 class M4t,
class M5t>
1405 list(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3,
1412 template<
class M0t,
class M1t,
class M2t,
class M3t,
1413 class M4t,
class M5t,
class M6t>
1414 list(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3,
1415 const M4t &M4,
const M5t &M5,
const M6t &M6)
1422 template<
class M0t,
class M1t,
class M2t,
class M3t,
1423 class M4t,
class M5t,
class M6t,
class M7t>
1424 list(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3,
1425 const M4t &M4,
const M5t &M5,
const M6t &M6,
1438 template <
typename D,
typename S,
typename P>
1450 template<
class DataType,
class StorageClass>
1455 static unsigned Bit(
const T &V) {
1456 unsigned BitPos =
reinterpret_cast<unsigned>(V);
1457 assert(BitPos <
sizeof(
unsigned) * CHAR_BIT &&
1458 "enum exceeds width of bit vector!");
1467 return O.
error(
"cl::location(x) specified more than once!");
1474 assert(Location != 0 &&
"cl::location(...) not specified for a command "
1475 "line option with external storage!");
1476 *Location |= Bit(V);
1483 return (*Location & Bit(V)) != 0;
1491 template<
class DataType>
1496 static unsigned Bit(
const T &V) {
1498 assert(BitPos <
sizeof(
unsigned) * CHAR_BIT &&
1499 "enum exceeds width of bit vector!");
1513 return (
Bits & Bit(V)) != 0;
1522 class ParserClass = parser<DataType> >
1524 std::vector<unsigned> Positions;
1527 virtual enum ValueExpected getValueExpectedFlagDefault()
const {
1528 return Parser.getValueExpectedFlagDefault();
1531 return Parser.getExtraOptionNames(OptionNames);
1535 typename ParserClass::parser_data_type Val =
1536 typename ParserClass::parser_data_type();
1537 if (Parser.parse(*
this, ArgName, Arg, Val))
1541 Positions.push_back(pos);
1546 virtual size_t getOptionWidth()
const {
return Parser.getOptionWidth(*
this);}
1547 virtual void printOptionInfo(
size_t GlobalWidth)
const {
1548 Parser.printOptionInfo(*
this, GlobalWidth);
1552 virtual void printOptionValue(
size_t ,
bool )
const {}
1556 Parser.initialize(*
this);
1562 assert(optnum < this->size() &&
"Invalid option index");
1563 return Positions[optnum];
1573 template<
class M0t,
class M1t>
1579 template<
class M0t,
class M1t,
class M2t>
1580 bits(
const M0t &M0,
const M1t &M1,
const M2t &M2)
1586 template<
class M0t,
class M1t,
class M2t,
class M3t>
1587 bits(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3)
1593 template<
class M0t,
class M1t,
class M2t,
class M3t,
class M4t>
1594 bits(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3,
1601 template<
class M0t,
class M1t,
class M2t,
class M3t,
1602 class M4t,
class M5t>
1603 bits(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3,
1610 template<
class M0t,
class M1t,
class M2t,
class M3t,
1611 class M4t,
class M5t,
class M6t>
1612 bits(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3,
1613 const M4t &M4,
const M5t &M5,
const M6t &M6)
1620 template<
class M0t,
class M1t,
class M2t,
class M3t,
1621 class M4t,
class M5t,
class M6t,
class M7t>
1622 bits(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3,
1623 const M4t &M4,
const M5t &M5,
const M6t &M6,
1637 virtual bool handleOccurrence(
unsigned pos,
StringRef ,
1639 return AliasFor->handleOccurrence(pos, AliasFor->
ArgStr, Arg);
1643 virtual void printOptionInfo(
size_t GlobalWidth)
const LLVM_OVERRIDE;
1646 virtual void printOptionValue(
size_t ,
1651 error(
"cl::alias must have argument name specified!");
1653 error(
"cl::alias must have an cl::aliasopt(option) specified!");
1659 error(
"cl::alias must only have one cl::aliasopt(...) specified!");
1670 template<
class M0t,
class M1t>
1676 template<
class M0t,
class M1t,
class M2t>
1677 alias(
const M0t &M0,
const M1t &M1,
const M2t &M2)
1683 template<
class M0t,
class M1t,
class M2t,
class M3t>
1684 alias(
const M0t &M0,
const M1t &M1,
const M2t &M2,
const M3t &M3)
1758 virtual void anchor();
1760 virtual const char *
SaveString(
const char *Str) = 0;
unsigned getNumOptions() const
void addValue(const T &V)
void setValue(const T &V, bool initial=false)
void push_back(const T &Elt)
SmallVector< OptionInfo, 8 > Values
Saves strings in the inheritor's stable storage and returns a stable raw character pointer...
OptionValue< std::string > & operator=(const std::string &V)
OptionCategory GeneralCategory
OptionValue< cl::boolOrDefault > & operator=(const cl::boolOrDefault &V)
bits(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4, const M5t &M5)
bits(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3)
Option * getNextRegisteredOption() const
bits(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4)
bool parse(Option &, StringRef, StringRef Arg, char &Value)
void initialize(Option &)
OptionValue(const DataType &V)
static void opt(const char *Str, Opt &O)
DataType parser_data_type
static void opt(const char *Str, Opt &O)
enum ValueExpected getValueExpectedFlagDefault() const
virtual const GenericOptionValue & getOptionValue(unsigned N) const =0
void PrintVersionMessage()
Utility function for printing version number.
bool compare(const DataType &V) const
virtual const char * getValueName() const
opt(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4, const M5t &M5, const M6t &M6, const M7t &M7)
bits(const M0t &M0, const M1t &M1, const M2t &M2)
OptionValue< DataType > Default
static void opt(NumOccurrencesFlag NO, Option &O)
void(* TokenizerCallback)(StringRef Source, StringSaver &Saver, SmallVectorImpl< const char * > &NewArgv)
String tokenization function type. Should be compatible with either Windows or Unix command line toke...
void setValue(const T &V, bool initial=false)
OptionValue< DataType > WrapperType
bits(const M0t &M0, const M1t &M1)
ValuesClass< DataType > END_WITH_NULL values(const char *Arg, DataType Val, const char *Desc,...)
unsigned findOption(const char *Name)
alias(const M0t &M0, const M1t &M1, const M2t &M2)
void printOptionName(const Option &O, size_t GlobalWidth) const
std::string str() const
str - Get the contents as an std::string.
void addValue(const T &V)
ValuesClass(const char *EnumName, DataType Val, const char *Desc, va_list ValueArgs)
list(const M0t &M0, const M1t &M1, const M2t &M2)
unsigned getPosition(unsigned optnum) const
void SetVersionPrinter(void(*func)())
virtual size_t getOptionWidth() const =0
void removeLiteralOption(const char *Name)
COFF::SymbolStorageClass StorageClass
void print(const Option &O, const parser< DT > P, const DT &V, const OptionValue< DT > &Default, size_t GlobalWidth)
static void opt(OptionHidden OH, Option &O)
list(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4, const M5t &M5, const M6t &M6, const M7t &M7)
bool parse(Option &, StringRef, StringRef Arg, std::string &Value)
virtual void printOptionValue(size_t GlobalWidth, bool Force) const =0
virtual void printOptionInfo(const Option &O, size_t GlobalWidth) const
Option(enum NumOccurrencesFlag OccurrencesFlag, enum OptionHidden Hidden)
void setDescription(const char *S)
enum ValueExpected getValueExpectedFlagDefault() const
virtual void printOptionInfo(size_t GlobalWidth) const =0
void setNumAdditionalVals(unsigned n)
const OptionValue< DataType > & getDefault() const
#define llvm_unreachable(msg)
list(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4)
ParserClass & getParser()
void printOptionDiff(const Option &O, const generic_parser_base &P, const DT &V, const OptionValue< DT > &Default, size_t GlobalWidth)
virtual bool compare(const GenericOptionValue &V) const
const OptionValue< DataType > & getDefault() const
opt(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3)
virtual bool compare(const GenericOptionValue &) const
void apply(list< D, S, P > &L) const
OptionValue< DataType > V
const OptionValue< DataType > & getDefault() const
virtual bool compare(const GenericOptionValue &V) const =0
bool addOccurrence(unsigned pos, StringRef ArgName, StringRef Value, bool MultiArg=false)
void printOptionInfo(const Option &O, size_t GlobalWidth) const
OptionValue(const cl::boolOrDefault &V)
void setValueStr(const char *S)
void AddExtraVersionPrinter(void(*func)())
const DataType & getValue() const
OptionCategory(const char *const Name, const char *const Description=0)
ParserClass & getParser()
int getNumOccurrences() const
void ParseEnvironmentOptions(const char *progName, const char *envvar, const char *Overview=0)
opt(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4)
list(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3)
void initialize(Option &O)
ParserClass & getParser()
virtual const char * getValueName() const
bool setLocation(Option &O, DataType &L)
static void opt(const Mod &M, Opt &O)
opt(const M0t &M0, const M1t &M1)
initializer< Ty > init(const Ty &Val)
void setArgStr(const char *S)
const char * getDescription()
void ParseCommandLineOptions(int argc, const char *const *argv, const char *Overview=0)
size_t getOptionWidth(const Option &O) const
opt(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4, const M5t &M5)
bool parse(Option &O, StringRef ArgName, StringRef Arg, DataType &V)
void getRegisteredOptions(StringMap< Option * > &Map)
Use this to get a StringMap to all registered named options (e.g. -help). Note Map Should be an empty...
void setNumOccurrencesFlag(enum NumOccurrencesFlag Val)
enum NumOccurrencesFlag getNumOccurrencesFlag() const
void TokenizeWindowsCommandLine(StringRef Source, StringSaver &Saver, SmallVectorImpl< const char * > &NewArgv)
Tokenizes a Windows command line which may contain quotes and escaped quotes.
void PrintHelpMessage(bool Hidden=false, bool Categorized=false)
const char * getOption(unsigned N) const
const char * getDescription(unsigned N) const
bool setLocation(Option &O, StorageClass &L)
DataType parser_data_type
void setHiddenFlag(enum OptionHidden Val)
virtual const char * SaveString(const char *Str)=0
virtual unsigned getNumOptions() const =0
OptionCategory * Category
void apply(Option &O) const
void addValue(const T &V)
enum OptionHidden getOptionHiddenFlag() const
void setPosition(unsigned pos)
bits(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4, const M5t &M5, const M6t &M6)
void MarkOptionsChanged()
virtual const GenericOptionValue & getOptionValue(unsigned N) const
void setValue(const DataType &V)
void print(const Option &O, const parser< ParserDT > P, const ValDT &, const OptionValue< ValDT > &, size_t GlobalWidth)
void TokenizeGNUCommandLine(StringRef Source, StringSaver &Saver, SmallVectorImpl< const char * > &NewArgv)
Tokenizes a command line that can contain escapes and quotes.
void printGenericOptionDiff(const Option &O, const GenericOptionValue &V, const GenericOptionValue &Default, size_t GlobalWidth) const
GenericOptionInfo(const char *name, const char *helpStr)
void setCategory(OptionCategory &C)
bool setLocation(Option &O, unsigned &L)
bits(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4, const M5t &M5, const M6t &M6, const M7t &M7)
virtual const char * getValueName() const
opt(const M0t &M0, const M1t &M1, const M2t &M2)
static void opt(const char *Str, Opt &O)
cl::boolOrDefault WrapperType
DataType getValue() const
OptionInfo(const char *name, DataType v, const char *helpStr)
alias(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3)
void printOptionNoValue(const Option &O, size_t GlobalWidth) const
virtual const char * getValueName() const
list(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4, const M5t &M5)
void setFormattingFlag(enum FormattingFlags V)
enum FormattingFlags getFormattingFlag() const
virtual const char * getOption(unsigned N) const =0
list(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4, const M5t &M5, const M6t &M6)
OptionValue(const std::string &V)
OptionValue< DataType > OptVal
virtual ~basic_parser_impl()
void setInitialValue(const DataType &V)
virtual const char * getValueName() const
void getExtraOptionNames(SmallVectorImpl< const char * > &OptionNames)
void setValueExpectedFlag(enum ValueExpected Val)
DataType operator->() const
void apply(const Mod &M, Opt *O)
virtual const char * getValueName() const
void setValue(const T &V, bool initial=false)
void setAliasFor(Option &O)
virtual void getExtraOptionNames(SmallVectorImpl< const char * > &)
virtual size_t getOptionWidth(const Option &O) const
const DataType & getValue() const
virtual const char * getValueName() const
unsigned getNumAdditionalVals() const
enum ValueExpected getValueExpectedFlag() const
static void opt(MiscFlags MF, Option &O)
void setMiscFlag(enum MiscFlags M)
static void opt(ValueExpected VE, Option &O)
void setValue(const DT &)
virtual const char * getValueName() const
virtual const char * getValueName() const
void setNumAdditionalVals(unsigned n)
virtual const char * getDescription(unsigned N) const =0
DataType & operator=(const T &Val)
virtual ~generic_parser_base()
list(const M0t &M0, const M1t &M1)
const DataType & getValue() const
virtual const char * getValueName() const
void apply(Option &O) const
value_desc(const char *Str)
LLVM Value Representation.
unsigned getPosition(unsigned optnum) const
OptionValue< DataType > & operator=(const DT &V)
opt(const M0t &M0, const M1t &M1, const M2t &M2, const M3t &M3, const M4t &M4, const M5t &M5, const M6t &M6)
bool ExpandResponseFiles(StringSaver &Saver, TokenizerCallback Tokenizer, SmallVectorImpl< const char * > &Argv)
Expand response files on a command line recursively using the given StringSaver and tokenization stra...
void addLiteralOption(const char *Name, const DT &V, const char *HelpStr)
void getExtraOptionNames(SmallVectorImpl< const char * > &)
bool error(const Twine &Message, StringRef ArgName=StringRef())
bool compare(const DataType &) const
unsigned getPosition() const
const DataType & getValue() const
alias(const M0t &M0, const M1t &M1)
virtual ~GenericOptionValue()
void addValue(const T &V)
OptionValue< DataType > Default
void apply(alias &A) const
EXTERN_TEMPLATE_INSTANTIATION(class basic_parser< bool >)
static RegisterPass< NVPTXAllocaHoisting > X("alloca-hoisting","Hoisting alloca instructions in non-entry ""blocks to the entry block")
LocationClass< Ty > location(Ty &L)
unsigned getMiscFlags() const
void printOptionDiff(const Option &O, const AnyOptionValue &V, const AnyOptionValue &Default, size_t GlobalWidth) const
initializer(const Ty &Val)
OptionCategory & Category