1*03ce13f7SAndroid Build Coastguard Worker//===- subzero/src/IceClFlags.def - Cl Flags for translation ----*- C++ -*-===// 2*03ce13f7SAndroid Build Coastguard Worker// 3*03ce13f7SAndroid Build Coastguard Worker// The Subzero Code Generator 4*03ce13f7SAndroid Build Coastguard Worker// 5*03ce13f7SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source 6*03ce13f7SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details. 7*03ce13f7SAndroid Build Coastguard Worker// 8*03ce13f7SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 9*03ce13f7SAndroid Build Coastguard Worker/// 10*03ce13f7SAndroid Build Coastguard Worker/// \file 11*03ce13f7SAndroid Build Coastguard Worker/// \brief Declares the command line flags used by Subzero. 12*03ce13f7SAndroid Build Coastguard Worker/// 13*03ce13f7SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 14*03ce13f7SAndroid Build Coastguard Worker 15*03ce13f7SAndroid Build Coastguard Worker#ifndef SUBZERO_SRC_ICECLFLAGS_DEF 16*03ce13f7SAndroid Build Coastguard Worker#define SUBZERO_SRC_ICECLFLAGS_DEF 17*03ce13f7SAndroid Build Coastguard Worker 18*03ce13f7SAndroid Build Coastguard Workernamespace Ice { 19*03ce13f7SAndroid Build Coastguard Worker// cl_detail defines tags (i.e., structs) for specifying the type of a flag 20*03ce13f7SAndroid Build Coastguard Worker// (either single-, or multi-value), and whether or not the flag is available in 21*03ce13f7SAndroid Build Coastguard Worker// non-LLVM_CL build. 22*03ce13f7SAndroid Build Coastguard Workernamespace cl_detail { 23*03ce13f7SAndroid Build Coastguard Worker 24*03ce13f7SAndroid Build Coastguard Worker// Single-value flag, available in a non-LLVM_CL build. 25*03ce13f7SAndroid Build Coastguard Workerstruct release_opt_flag {}; 26*03ce13f7SAndroid Build Coastguard Worker// Single-value flag, not available in a non-LLVM_CL build. 27*03ce13f7SAndroid Build Coastguard Workerstruct dev_opt_flag {}; 28*03ce13f7SAndroid Build Coastguard Worker// Multi-value flag, not available in a non-LLVM_CL build. 29*03ce13f7SAndroid Build Coastguard Workerstruct dev_list_flag {}; 30*03ce13f7SAndroid Build Coastguard Worker 31*03ce13f7SAndroid Build Coastguard Worker} // namespace cl_detail 32*03ce13f7SAndroid Build Coastguard Worker 33*03ce13f7SAndroid Build Coastguard Worker#define COMMAND_LINE_FLAGS \ 34*03ce13f7SAndroid Build Coastguard Worker /* Name, Type, ClType, <<flag declaration ctor arguments>> */ \ 35*03ce13f7SAndroid Build Coastguard Worker X(IRFilename, std::string, release_opt_flag, cl::Positional, \ 36*03ce13f7SAndroid Build Coastguard Worker cl::desc("IR File"), cl::init("-")) \ 37*03ce13f7SAndroid Build Coastguard Worker \ 38*03ce13f7SAndroid Build Coastguard Worker X(NumTranslationThreads, uint32_t, release_opt_flag, "num_threads", \ 39*03ce13f7SAndroid Build Coastguard Worker cl::desc("Number of translation threads (0 for purely sequential)"), \ 40*03ce13f7SAndroid Build Coastguard Worker cl::init(2)) \ 41*03ce13f7SAndroid Build Coastguard Worker \ 42*03ce13f7SAndroid Build Coastguard Worker X(OptLevel, Ice::OptLevel, release_opt_flag, cl::desc("Optimization level"), \ 43*03ce13f7SAndroid Build Coastguard Worker cl::init(Ice::Opt_m1), cl::value_desc("level"), \ 44*03ce13f7SAndroid Build Coastguard Worker cl::values(clEnumValN(Ice::Opt_m1, "Om1", "-1"), \ 45*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Opt_m1, "O-1", "-1"), \ 46*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Opt_0, "O0", "0"), \ 47*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Opt_1, "O1", "1"), \ 48*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Opt_2, "O2", "2") CLENUMVALEND)) \ 49*03ce13f7SAndroid Build Coastguard Worker \ 50*03ce13f7SAndroid Build Coastguard Worker X(OutputFilename, std::string, release_opt_flag, "o", \ 51*03ce13f7SAndroid Build Coastguard Worker cl::desc("Override output filename"), cl::init("-"), \ 52*03ce13f7SAndroid Build Coastguard Worker cl::value_desc("filename")) \ 53*03ce13f7SAndroid Build Coastguard Worker \ 54*03ce13f7SAndroid Build Coastguard Worker X(TargetArch, Ice::TargetArch, release_opt_flag, "target", \ 55*03ce13f7SAndroid Build Coastguard Worker cl::desc("Target architecture:"), cl::init(Ice::Target_X8632), \ 56*03ce13f7SAndroid Build Coastguard Worker cl::values( \ 57*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Target_X8632, "x8632", "x86-32"), \ 58*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Target_X8632, "x86-32", "x86-32 (same as x8632)"), \ 59*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Target_X8632, "x86_32", "x86-32 (same as x8632)"), \ 60*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Target_X8664, "x8664", "x86-64"), \ 61*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Target_X8664, "x86-64", "x86-64 (same as x8664)"), \ 62*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Target_X8664, "x86_64", "x86-64 (same as x8664)"), \ 63*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Target_ARM32, "arm", "arm32"), \ 64*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Target_ARM32, "arm32", "arm32 (same as arm)"), \ 65*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Target_ARM64, "arm64", "arm64"), \ 66*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Target_MIPS32, "mips", "mips32"), \ 67*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::Target_MIPS32, "mips32", "mips32 (same as mips)") \ 68*03ce13f7SAndroid Build Coastguard Worker CLENUMVALEND)) \ 69*03ce13f7SAndroid Build Coastguard Worker \ 70*03ce13f7SAndroid Build Coastguard Worker /* The following are development flags, and ideally should not appear in a \ 71*03ce13f7SAndroid Build Coastguard Worker * release build. */ \ 72*03ce13f7SAndroid Build Coastguard Worker \ 73*03ce13f7SAndroid Build Coastguard Worker X(AllowErrorRecovery, bool, dev_opt_flag, \ 74*03ce13f7SAndroid Build Coastguard Worker "allow-pnacl-reader-error-recovery", \ 75*03ce13f7SAndroid Build Coastguard Worker cl::desc("Allow error recovery when reading PNaCl bitcode."), \ 76*03ce13f7SAndroid Build Coastguard Worker cl::init(false)) \ 77*03ce13f7SAndroid Build Coastguard Worker \ 78*03ce13f7SAndroid Build Coastguard Worker X(AllowExternDefinedSymbols, bool, dev_opt_flag, \ 79*03ce13f7SAndroid Build Coastguard Worker "allow-externally-defined-symbols", \ 80*03ce13f7SAndroid Build Coastguard Worker cl::desc( \ 81*03ce13f7SAndroid Build Coastguard Worker "Allow global symbols to be externally defined (other than _start " \ 82*03ce13f7SAndroid Build Coastguard Worker "and __pnacl_pso_root)."), \ 83*03ce13f7SAndroid Build Coastguard Worker cl::init(false)) \ 84*03ce13f7SAndroid Build Coastguard Worker \ 85*03ce13f7SAndroid Build Coastguard Worker X(AllowIacaMarks, bool, dev_opt_flag, "allow-iaca-marks", \ 86*03ce13f7SAndroid Build Coastguard Worker cl::desc("Allow IACA (Intel Architecture Code Analyzer) marks to be " \ 87*03ce13f7SAndroid Build Coastguard Worker "inserted. These binaries are not executable."), \ 88*03ce13f7SAndroid Build Coastguard Worker cl::init(false)) \ 89*03ce13f7SAndroid Build Coastguard Worker \ 90*03ce13f7SAndroid Build Coastguard Worker X(AllowUninitializedGlobals, bool, dev_opt_flag, \ 91*03ce13f7SAndroid Build Coastguard Worker "allow-uninitialized-globals", \ 92*03ce13f7SAndroid Build Coastguard Worker cl::desc("Allow global variables to be uninitialized")) \ 93*03ce13f7SAndroid Build Coastguard Worker \ 94*03ce13f7SAndroid Build Coastguard Worker X(AlwaysExitSuccess, bool, dev_opt_flag, "exit-success", \ 95*03ce13f7SAndroid Build Coastguard Worker cl::desc("Exit with success status, even if errors found"), \ 96*03ce13f7SAndroid Build Coastguard Worker cl::init(false)) \ 97*03ce13f7SAndroid Build Coastguard Worker \ 98*03ce13f7SAndroid Build Coastguard Worker X(AggressiveLea, bool, dev_opt_flag, "aggressive-lea", \ 99*03ce13f7SAndroid Build Coastguard Worker cl::desc("Convert additions to lea when it reduces code size"), \ 100*03ce13f7SAndroid Build Coastguard Worker cl::init(false)) \ 101*03ce13f7SAndroid Build Coastguard Worker \ 102*03ce13f7SAndroid Build Coastguard Worker X(BitcodeAsText, bool, dev_opt_flag, "bitcode-as-text", \ 103*03ce13f7SAndroid Build Coastguard Worker cl::desc("Accept textual form of PNaCl bitcode " \ 104*03ce13f7SAndroid Build Coastguard Worker "records (i.e. not .ll assembly)"), \ 105*03ce13f7SAndroid Build Coastguard Worker cl::init(false)) \ 106*03ce13f7SAndroid Build Coastguard Worker \ 107*03ce13f7SAndroid Build Coastguard Worker X(BuildOnRead, bool, dev_opt_flag, "build-on-read", \ 108*03ce13f7SAndroid Build Coastguard Worker cl::desc("Build ICE instructions when reading bitcode"), cl::init(true)) \ 109*03ce13f7SAndroid Build Coastguard Worker \ 110*03ce13f7SAndroid Build Coastguard Worker X(DataSections, bool, dev_opt_flag, "fdata-sections", \ 111*03ce13f7SAndroid Build Coastguard Worker cl::desc("Emit (global) data into separate sections")) \ 112*03ce13f7SAndroid Build Coastguard Worker \ 113*03ce13f7SAndroid Build Coastguard Worker X(DecorateAsm, bool, dev_opt_flag, "asm-verbose", \ 114*03ce13f7SAndroid Build Coastguard Worker cl::desc("Decorate textual asm output with register liveness info")) \ 115*03ce13f7SAndroid Build Coastguard Worker \ 116*03ce13f7SAndroid Build Coastguard Worker X(DefaultFunctionPrefix, std::string, dev_opt_flag, \ 117*03ce13f7SAndroid Build Coastguard Worker "default-function-prefix", \ 118*03ce13f7SAndroid Build Coastguard Worker cl::desc("Define default function prefix for naming unnamed functions"), \ 119*03ce13f7SAndroid Build Coastguard Worker cl::init("Function")) \ 120*03ce13f7SAndroid Build Coastguard Worker \ 121*03ce13f7SAndroid Build Coastguard Worker X(DefaultGlobalPrefix, std::string, dev_opt_flag, "default-global-prefix", \ 122*03ce13f7SAndroid Build Coastguard Worker cl::desc("Define default global prefix for naming unnamed globals"), \ 123*03ce13f7SAndroid Build Coastguard Worker cl::init("Global")) \ 124*03ce13f7SAndroid Build Coastguard Worker \ 125*03ce13f7SAndroid Build Coastguard Worker X(DisableHybridAssembly, bool, dev_opt_flag, "no-hybrid-asm", \ 126*03ce13f7SAndroid Build Coastguard Worker cl::desc("Disable hybrid assembly when -filetype=iasm"), cl::init(false)) \ 127*03ce13f7SAndroid Build Coastguard Worker \ 128*03ce13f7SAndroid Build Coastguard Worker X(DisableInternal, bool, dev_opt_flag, "externalize", \ 129*03ce13f7SAndroid Build Coastguard Worker cl::desc("Externalize all symbols")) \ 130*03ce13f7SAndroid Build Coastguard Worker \ 131*03ce13f7SAndroid Build Coastguard Worker X(DisableTranslation, bool, dev_opt_flag, "notranslate", \ 132*03ce13f7SAndroid Build Coastguard Worker cl::desc("Disable Subzero translation")) \ 133*03ce13f7SAndroid Build Coastguard Worker \ 134*03ce13f7SAndroid Build Coastguard Worker X(DumpStats, bool, dev_opt_flag, "szstats", \ 135*03ce13f7SAndroid Build Coastguard Worker cl::desc("Print statistics after translating each function")) \ 136*03ce13f7SAndroid Build Coastguard Worker \ 137*03ce13f7SAndroid Build Coastguard Worker X(DumpStrings, bool, dev_opt_flag, "dump-strings", \ 138*03ce13f7SAndroid Build Coastguard Worker cl::desc("Dump string pools during compilation"), cl::init(false)) \ 139*03ce13f7SAndroid Build Coastguard Worker \ 140*03ce13f7SAndroid Build Coastguard Worker X(EnableBlockProfile, bool, dev_opt_flag, "enable-block-profile", \ 141*03ce13f7SAndroid Build Coastguard Worker cl::desc("Instrument basic blocks, and output profiling " \ 142*03ce13f7SAndroid Build Coastguard Worker "information to stdout at the end of program execution."), \ 143*03ce13f7SAndroid Build Coastguard Worker cl::init(false)) \ 144*03ce13f7SAndroid Build Coastguard Worker \ 145*03ce13f7SAndroid Build Coastguard Worker X(LocalCSE, Ice::LCSEOptions, dev_opt_flag, "lcse", \ 146*03ce13f7SAndroid Build Coastguard Worker cl::desc("Local common subexpression elimination"), \ 147*03ce13f7SAndroid Build Coastguard Worker cl::init(Ice::LCSE_EnabledSSA), \ 148*03ce13f7SAndroid Build Coastguard Worker cl::values(clEnumValN(Ice::LCSE_Disabled, "0", "disabled"), \ 149*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::LCSE_EnabledSSA, "enabled", "assume-ssa"), \ 150*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::LCSE_EnabledNoSSA, "no-ssa", "no-assume-ssa") \ 151*03ce13f7SAndroid Build Coastguard Worker CLENUMVALEND)) \ 152*03ce13f7SAndroid Build Coastguard Worker \ 153*03ce13f7SAndroid Build Coastguard Worker X(EmitRevision, bool, dev_opt_flag, "emit-revision", \ 154*03ce13f7SAndroid Build Coastguard Worker cl::desc("Emit Subzero revision string into the output"), cl::init(true)) \ 155*03ce13f7SAndroid Build Coastguard Worker \ 156*03ce13f7SAndroid Build Coastguard Worker X(EnablePhiEdgeSplit, bool, dev_opt_flag, "phi-edge-split", \ 157*03ce13f7SAndroid Build Coastguard Worker cl::desc("Enable edge splitting for Phi lowering"), cl::init(true)) \ 158*03ce13f7SAndroid Build Coastguard Worker \ 159*03ce13f7SAndroid Build Coastguard Worker X(EnableShortCircuit, bool, dev_opt_flag, "enable-sc", \ 160*03ce13f7SAndroid Build Coastguard Worker cl::desc("Split Nodes for short circuit evaluation"), cl::init(false)) \ 161*03ce13f7SAndroid Build Coastguard Worker \ 162*03ce13f7SAndroid Build Coastguard Worker X(ExcludedRegisters, std::string, dev_list_flag, "reg-exclude", \ 163*03ce13f7SAndroid Build Coastguard Worker cl::CommaSeparated, cl::desc("Don't use specified registers")) \ 164*03ce13f7SAndroid Build Coastguard Worker \ 165*03ce13f7SAndroid Build Coastguard Worker X(ForceMemIntrinOpt, bool, dev_opt_flag, "fmem-intrin-opt", \ 166*03ce13f7SAndroid Build Coastguard Worker cl::desc("Force optimization of memory intrinsics.")) \ 167*03ce13f7SAndroid Build Coastguard Worker \ 168*03ce13f7SAndroid Build Coastguard Worker X(ForceO2String, std::string, dev_opt_flag, "force-O2", \ 169*03ce13f7SAndroid Build Coastguard Worker cl::desc("Force -O2 for certain functions (assumes -Om1)"), cl::init("")) \ 170*03ce13f7SAndroid Build Coastguard Worker \ 171*03ce13f7SAndroid Build Coastguard Worker X(SplitInstString, std::string, dev_opt_flag, "split-inst", \ 172*03ce13f7SAndroid Build Coastguard Worker cl::desc("Restrict local var splitting to specific insts"), cl::init(":")) \ 173*03ce13f7SAndroid Build Coastguard Worker \ 174*03ce13f7SAndroid Build Coastguard Worker X(FunctionSections, bool, dev_opt_flag, "ffunction-sections", \ 175*03ce13f7SAndroid Build Coastguard Worker cl::desc("Emit functions into separate sections")) \ 176*03ce13f7SAndroid Build Coastguard Worker \ 177*03ce13f7SAndroid Build Coastguard Worker X(GenerateBuildAtts, bool, release_opt_flag, "build-atts", \ 178*03ce13f7SAndroid Build Coastguard Worker cl::desc("Generate list of build attributes associated with " \ 179*03ce13f7SAndroid Build Coastguard Worker "this executable."), \ 180*03ce13f7SAndroid Build Coastguard Worker cl::init(false)) \ 181*03ce13f7SAndroid Build Coastguard Worker \ 182*03ce13f7SAndroid Build Coastguard Worker X(SplitGlobalVars, bool, dev_opt_flag, "split-global-vars", \ 183*03ce13f7SAndroid Build Coastguard Worker cl::desc("Global live range splitting"), cl::init(false)) \ 184*03ce13f7SAndroid Build Coastguard Worker \ 185*03ce13f7SAndroid Build Coastguard Worker X(InputFileFormat, llvm::NaClFileFormat, dev_opt_flag, "bitcode-format", \ 186*03ce13f7SAndroid Build Coastguard Worker cl::desc("Define format of input file:"), \ 187*03ce13f7SAndroid Build Coastguard Worker cl::values(clEnumValN(llvm::LLVMFormat, "llvm", "LLVM file (default)"), \ 188*03ce13f7SAndroid Build Coastguard Worker clEnumValN(llvm::PNaClFormat, "pnacl", "PNaCl bitcode file") \ 189*03ce13f7SAndroid Build Coastguard Worker CLENUMVALEND), \ 190*03ce13f7SAndroid Build Coastguard Worker cl::init(llvm::LLVMFormat)) \ 191*03ce13f7SAndroid Build Coastguard Worker \ 192*03ce13f7SAndroid Build Coastguard Worker X(KeepDeletedInsts, bool, dev_opt_flag, "keep-deleted-insts", \ 193*03ce13f7SAndroid Build Coastguard Worker cl::desc("Retain deleted instructions in the Cfg"), \ 194*03ce13f7SAndroid Build Coastguard Worker cl::init(Ice::BuildDefs::dump())) \ 195*03ce13f7SAndroid Build Coastguard Worker \ 196*03ce13f7SAndroid Build Coastguard Worker X(LLVMVerboseErrors, bool, dev_opt_flag, "verbose-llvm-parse-errors", \ 197*03ce13f7SAndroid Build Coastguard Worker cl::desc("Print out more descriptive PNaCl bitcode parse errors when " \ 198*03ce13f7SAndroid Build Coastguard Worker "building LLVM IR first"), \ 199*03ce13f7SAndroid Build Coastguard Worker cl::init(false)) \ 200*03ce13f7SAndroid Build Coastguard Worker \ 201*03ce13f7SAndroid Build Coastguard Worker X(LocalCseMaxIterations, uint32_t, dev_opt_flag, "lcse-max-iters", \ 202*03ce13f7SAndroid Build Coastguard Worker cl::desc("Number of times local-cse is run on a block"), cl::init(1)) \ 203*03ce13f7SAndroid Build Coastguard Worker \ 204*03ce13f7SAndroid Build Coastguard Worker X(LoopInvariantCodeMotion, bool, dev_opt_flag, "licm", \ 205*03ce13f7SAndroid Build Coastguard Worker cl::desc("Hoist loop invariant arithmetic operations"), cl::init(false)) \ 206*03ce13f7SAndroid Build Coastguard Worker \ 207*03ce13f7SAndroid Build Coastguard Worker X(LogFilename, std::string, dev_opt_flag, "log", \ 208*03ce13f7SAndroid Build Coastguard Worker cl::desc("Set log filename"), cl::init("-"), cl::value_desc("filename")) \ 209*03ce13f7SAndroid Build Coastguard Worker \ 210*03ce13f7SAndroid Build Coastguard Worker X(MaxNopsPerInstruction, int, dev_opt_flag, "max-nops-per-instruction", \ 211*03ce13f7SAndroid Build Coastguard Worker cl::desc("Max number of nops to insert per instruction"), cl::init(1)) \ 212*03ce13f7SAndroid Build Coastguard Worker \ 213*03ce13f7SAndroid Build Coastguard Worker X(MockBoundsCheck, bool, dev_opt_flag, "mock-bounds-check", \ 214*03ce13f7SAndroid Build Coastguard Worker cl::desc("Mock bounds checking on loads/stores")) \ 215*03ce13f7SAndroid Build Coastguard Worker \ 216*03ce13f7SAndroid Build Coastguard Worker X(NopProbabilityAsPercentage, int, dev_opt_flag, "nop-insertion-percentage", \ 217*03ce13f7SAndroid Build Coastguard Worker cl::desc("Nop insertion probability as percentage"), cl::init(10)) \ 218*03ce13f7SAndroid Build Coastguard Worker \ 219*03ce13f7SAndroid Build Coastguard Worker X(OutFileType, Ice::FileType, dev_opt_flag, "filetype", \ 220*03ce13f7SAndroid Build Coastguard Worker cl::desc("Output file type"), cl::init(Ice::FT_Iasm), \ 221*03ce13f7SAndroid Build Coastguard Worker cl::values( \ 222*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::FT_Elf, "obj", "Native ELF object ('.o') file"), \ 223*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::FT_Asm, "asm", "Assembly ('.s') file"), \ 224*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::FT_Iasm, "iasm", \ 225*03ce13f7SAndroid Build Coastguard Worker "Low-level integrated assembly ('.s') file") CLENUMVALEND)) \ 226*03ce13f7SAndroid Build Coastguard Worker \ 227*03ce13f7SAndroid Build Coastguard Worker X(ParseParallel, bool, dev_opt_flag, "parse-parallel", \ 228*03ce13f7SAndroid Build Coastguard Worker cl::desc("Parse function blocks in parallel"), cl::init(true)) \ 229*03ce13f7SAndroid Build Coastguard Worker \ 230*03ce13f7SAndroid Build Coastguard Worker X(SplitLocalVars, bool, dev_opt_flag, "split-local-vars", cl::init(true), \ 231*03ce13f7SAndroid Build Coastguard Worker cl::desc("Block-local variable splitting (O2 only)")) \ 232*03ce13f7SAndroid Build Coastguard Worker \ 233*03ce13f7SAndroid Build Coastguard Worker X(RegAllocReserve, bool, dev_opt_flag, "reg-reserve", \ 234*03ce13f7SAndroid Build Coastguard Worker cl::desc("Let register allocation use reserve registers"), \ 235*03ce13f7SAndroid Build Coastguard Worker cl::init(false)) \ 236*03ce13f7SAndroid Build Coastguard Worker \ 237*03ce13f7SAndroid Build Coastguard Worker X(RepeatRegAlloc, bool, dev_opt_flag, "regalloc-repeat", \ 238*03ce13f7SAndroid Build Coastguard Worker cl::desc("Repeat register allocation until convergence"), cl::init(true)) \ 239*03ce13f7SAndroid Build Coastguard Worker \ 240*03ce13f7SAndroid Build Coastguard Worker /* TODO(tlively): Generalize this to handle more sanitizers */ \ 241*03ce13f7SAndroid Build Coastguard Worker X(SanitizeAddresses, bool, dev_opt_flag, "fsanitize-address", \ 242*03ce13f7SAndroid Build Coastguard Worker cl::desc("Instrument compiled code with Address Sanitizer"), \ 243*03ce13f7SAndroid Build Coastguard Worker cl::init(false)) \ 244*03ce13f7SAndroid Build Coastguard Worker \ 245*03ce13f7SAndroid Build Coastguard Worker X(SkipUnimplemented, bool, dev_opt_flag, "skip-unimplemented", \ 246*03ce13f7SAndroid Build Coastguard Worker cl::desc("Skip through unimplemented lowering code instead of aborting."), \ 247*03ce13f7SAndroid Build Coastguard Worker cl::init(false)) \ 248*03ce13f7SAndroid Build Coastguard Worker \ 249*03ce13f7SAndroid Build Coastguard Worker X(SubzeroTimingEnabled, bool, dev_opt_flag, "timing", \ 250*03ce13f7SAndroid Build Coastguard Worker cl::desc("Enable breakdown timing of Subzero translation")) \ 251*03ce13f7SAndroid Build Coastguard Worker \ 252*03ce13f7SAndroid Build Coastguard Worker X(TargetInstructionSet, Ice::TargetInstructionSet, dev_opt_flag, "mattr", \ 253*03ce13f7SAndroid Build Coastguard Worker cl::desc("Target architecture attributes"), \ 254*03ce13f7SAndroid Build Coastguard Worker cl::init(Ice::BaseInstructionSet), \ 255*03ce13f7SAndroid Build Coastguard Worker cl::values( \ 256*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::BaseInstructionSet, "base", \ 257*03ce13f7SAndroid Build Coastguard Worker "Target chooses baseline instruction set (default)"), \ 258*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::X86InstructionSet_SSE2, "sse2", \ 259*03ce13f7SAndroid Build Coastguard Worker "Enable X86 SSE2 instructions"), \ 260*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::X86InstructionSet_SSE4_1, "sse4.1", \ 261*03ce13f7SAndroid Build Coastguard Worker "Enable X86 SSE 4.1 instructions"), \ 262*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::ARM32InstructionSet_Neon, "neon", \ 263*03ce13f7SAndroid Build Coastguard Worker "Enable ARM Neon instructions"), \ 264*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::ARM32InstructionSet_HWDivArm, "hwdiv-arm", \ 265*03ce13f7SAndroid Build Coastguard Worker "Enable ARM integer divide instructions in ARM mode") \ 266*03ce13f7SAndroid Build Coastguard Worker CLENUMVALEND)) \ 267*03ce13f7SAndroid Build Coastguard Worker \ 268*03ce13f7SAndroid Build Coastguard Worker X(TestPrefix, std::string, dev_opt_flag, "prefix", \ 269*03ce13f7SAndroid Build Coastguard Worker cl::desc("Prepend a prefix to symbol names for testing"), cl::init(""), \ 270*03ce13f7SAndroid Build Coastguard Worker cl::value_desc("prefix")) \ 271*03ce13f7SAndroid Build Coastguard Worker \ 272*03ce13f7SAndroid Build Coastguard Worker X(TestStackExtra, uint32_t, dev_opt_flag, "test-stack-extra", \ 273*03ce13f7SAndroid Build Coastguard Worker cl::desc("Extra amount of stack to add to the " \ 274*03ce13f7SAndroid Build Coastguard Worker "frame in bytes (for testing)."), \ 275*03ce13f7SAndroid Build Coastguard Worker cl::init(0)) \ 276*03ce13f7SAndroid Build Coastguard Worker \ 277*03ce13f7SAndroid Build Coastguard Worker X(TestStatusString, std::string, dev_opt_flag, "test-status", \ 278*03ce13f7SAndroid Build Coastguard Worker cl::desc("Testing flag for -verbose=status"), cl::init(":")) \ 279*03ce13f7SAndroid Build Coastguard Worker \ 280*03ce13f7SAndroid Build Coastguard Worker X(TimeEachFunction, bool, dev_opt_flag, "timing-funcs", \ 281*03ce13f7SAndroid Build Coastguard Worker cl::desc("Print total translation time for each function")) \ 282*03ce13f7SAndroid Build Coastguard Worker \ 283*03ce13f7SAndroid Build Coastguard Worker X(TimingFocusOnString, std::string, dev_opt_flag, "timing-focus", \ 284*03ce13f7SAndroid Build Coastguard Worker cl::desc("Break down timing for specific functions (use ':' for all)"), \ 285*03ce13f7SAndroid Build Coastguard Worker cl::init("")) \ 286*03ce13f7SAndroid Build Coastguard Worker \ 287*03ce13f7SAndroid Build Coastguard Worker X(TranslateOnlyString, std::string, dev_opt_flag, "translate-only", \ 288*03ce13f7SAndroid Build Coastguard Worker cl::desc("Translate only the given functions"), cl::init(":")) \ 289*03ce13f7SAndroid Build Coastguard Worker \ 290*03ce13f7SAndroid Build Coastguard Worker X(UseRestrictedRegisters, std::string, dev_list_flag, "reg-use", \ 291*03ce13f7SAndroid Build Coastguard Worker cl::CommaSeparated, \ 292*03ce13f7SAndroid Build Coastguard Worker cl::desc("Only use specified registers for corresponding register " \ 293*03ce13f7SAndroid Build Coastguard Worker "classes")) \ 294*03ce13f7SAndroid Build Coastguard Worker \ 295*03ce13f7SAndroid Build Coastguard Worker X(Verbose, Ice::VerboseItem, dev_list_flag, "verbose", cl::CommaSeparated, \ 296*03ce13f7SAndroid Build Coastguard Worker cl::desc("Verbose options (can be comma-separated):"), \ 297*03ce13f7SAndroid Build Coastguard Worker cl::values( \ 298*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_Instructions, "inst", \ 299*03ce13f7SAndroid Build Coastguard Worker "Print basic instructions"), \ 300*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_Deleted, "del", "Include deleted instructions"), \ 301*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_InstNumbers, "instnum", \ 302*03ce13f7SAndroid Build Coastguard Worker "Print instruction numbers"), \ 303*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_Preds, "pred", "Show predecessors"), \ 304*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_Succs, "succ", "Show successors"), \ 305*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_Liveness, "live", "Liveness information"), \ 306*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_RegOrigins, "orig", "Physical register origins"), \ 307*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_LinearScan, "regalloc", "Linear scan details"), \ 308*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_Frame, "frame", "Stack frame layout details"), \ 309*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_AddrOpt, "addropt", "Address mode optimization"), \ 310*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_Folding, "fold", "Instruction folding details"), \ 311*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_RMW, "rmw", "ReadModifyWrite optimization"), \ 312*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_Loop, "loop", "Loop nest depth analysis"), \ 313*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_Mem, "mem", "Memory usage details"), \ 314*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_ShufMat, "shufvec", \ 315*03ce13f7SAndroid Build Coastguard Worker "Shufflevector rematerialization"), \ 316*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_Status, "status", \ 317*03ce13f7SAndroid Build Coastguard Worker "Print the name of the function being translated"), \ 318*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_AvailableRegs, "registers", \ 319*03ce13f7SAndroid Build Coastguard Worker "Show available registers for register allocation"), \ 320*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_GlobalInit, "global_init", \ 321*03ce13f7SAndroid Build Coastguard Worker "Global initializers"), \ 322*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_ConstPoolStats, "cpool", \ 323*03ce13f7SAndroid Build Coastguard Worker "Constant pool counters"), \ 324*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_Wasm, "wasm", "WebAssembly builder"), \ 325*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_All, "all", "Use all verbose options"), \ 326*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_Most, "most", \ 327*03ce13f7SAndroid Build Coastguard Worker "Use all verbose options except 'regalloc,global_init'"), \ 328*03ce13f7SAndroid Build Coastguard Worker clEnumValN(Ice::IceV_None, "none", "No verbosity") CLENUMVALEND)) \ 329*03ce13f7SAndroid Build Coastguard Worker \ 330*03ce13f7SAndroid Build Coastguard Worker X(VerboseFocusOnString, std::string, dev_opt_flag, "verbose-focus", \ 331*03ce13f7SAndroid Build Coastguard Worker cl::desc("Override with -verbose=none except for specified functions"), \ 332*03ce13f7SAndroid Build Coastguard Worker cl::init(":")) \ 333*03ce13f7SAndroid Build Coastguard Worker \ 334*03ce13f7SAndroid Build Coastguard Worker X(WasmBoundsCheck, bool, dev_opt_flag, "wasm-bounds-check", \ 335*03ce13f7SAndroid Build Coastguard Worker cl::desc("Add bounds checking code in WASM frontend"), cl::init(true)) 336*03ce13f7SAndroid Build Coastguard Worker 337*03ce13f7SAndroid Build Coastguard Worker//#define X(Name, Type, ClType, ...) 338*03ce13f7SAndroid Build Coastguard Worker 339*03ce13f7SAndroid Build Coastguard Worker} // end of namespace Ice 340*03ce13f7SAndroid Build Coastguard Worker 341*03ce13f7SAndroid Build Coastguard Worker#endif // SUBZERO_SRC_ICECLFLAGS_DEF 342