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