flag-definitions.h 55.8 KB
Newer Older
1
// Copyright 2012 the V8 project authors. All rights reserved.
2 3
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
4 5 6 7 8 9 10 11 12

// This file defines all of the flags.  It is separated into different section,
// for Debug, Release, Logging and Profiling, etc.  To add a new flag, find the
// correct section, and use one of the DEFINE_ macros, without a trailing ';'.
//
// This include does not have a guard, because it is a template-style include,
// which can be included multiple times in different modes.  It expects to have
// a mode defined before it's included.  The modes are FLAG_MODE_... below:

13 14 15 16 17 18
#define DEFINE_IMPLICATION(whenflag, thenflag)              \
  DEFINE_VALUE_IMPLICATION(whenflag, thenflag, true)

#define DEFINE_NEG_IMPLICATION(whenflag, thenflag)          \
  DEFINE_VALUE_IMPLICATION(whenflag, thenflag, false)

19 20 21
#define DEFINE_NEG_NEG_IMPLICATION(whenflag, thenflag) \
  DEFINE_NEG_VALUE_IMPLICATION(whenflag, thenflag, false)

22 23 24 25
// We want to declare the names of the variables for the header file.  Normally
// this will just be an extern declaration, but for a readonly flag we let the
// compiler make better optimizations by giving it the value.
#if defined(FLAG_MODE_DECLARE)
26 27
#define FLAG_FULL(ftype, ctype, nam, def, cmt) \
  V8_EXPORT_PRIVATE extern ctype FLAG_##nam;
28 29 30 31 32 33
#define FLAG_READONLY(ftype, ctype, nam, def, cmt) \
  static ctype const FLAG_##nam = def;

// We want to supply the actual storage and value for the flag variable in the
// .cc file.  We only do this for writable flags.
#elif defined(FLAG_MODE_DEFINE)
34 35 36 37 38 39 40
#ifdef USING_V8_SHARED
#define FLAG_FULL(ftype, ctype, nam, def, cmt) \
  V8_EXPORT_PRIVATE extern ctype FLAG_##nam;
#else
#define FLAG_FULL(ftype, ctype, nam, def, cmt) \
  V8_EXPORT_PRIVATE ctype FLAG_##nam = def;
#endif
41 42 43 44 45 46 47 48 49 50 51

// We need to define all of our default values so that the Flag structure can
// access them by pointer.  These are just used internally inside of one .cc,
// for MODE_META, so there is no impact on the flags interface.
#elif defined(FLAG_MODE_DEFINE_DEFAULTS)
#define FLAG_FULL(ftype, ctype, nam, def, cmt) \
  static ctype const FLAGDEFAULT_##nam = def;

// We want to write entries into our meta data table, for internal parsing and
// printing / etc in the flag parser code.  We only do this for writable flags.
#elif defined(FLAG_MODE_META)
52 53 54 55 56 57 58 59 60
#define FLAG_FULL(ftype, ctype, nam, def, cmt)                              \
  { Flag::TYPE_##ftype, #nam, &FLAG_##nam, &FLAGDEFAULT_##nam, cmt, false } \
  ,
#define FLAG_ALIAS(ftype, ctype, alias, nam)                     \
  {                                                              \
    Flag::TYPE_##ftype, #alias, &FLAG_##nam, &FLAGDEFAULT_##nam, \
        "alias for --" #nam, false                               \
  }                                                              \
  ,
61 62 63

// We produce the code to set flags when it is implied by another flag.
#elif defined(FLAG_MODE_DEFINE_IMPLICATIONS)
64 65
#define DEFINE_VALUE_IMPLICATION(whenflag, thenflag, value) \
  if (FLAG_##whenflag) FLAG_##thenflag = value;
66

67 68 69
#define DEFINE_NEG_VALUE_IMPLICATION(whenflag, thenflag, value) \
  if (!FLAG_##whenflag) FLAG_##thenflag = value;

70 71 72 73
#else
#error No mode supplied when including flags.defs
#endif

74 75 76 77 78 79 80 81 82 83 84 85 86
// Dummy defines for modes where it is not relevant.
#ifndef FLAG_FULL
#define FLAG_FULL(ftype, ctype, nam, def, cmt)
#endif

#ifndef FLAG_READONLY
#define FLAG_READONLY(ftype, ctype, nam, def, cmt)
#endif

#ifndef FLAG_ALIAS
#define FLAG_ALIAS(ftype, ctype, alias, nam)
#endif

87 88
#ifndef DEFINE_VALUE_IMPLICATION
#define DEFINE_VALUE_IMPLICATION(whenflag, thenflag, value)
89 90
#endif

91 92 93 94
#ifndef DEFINE_NEG_VALUE_IMPLICATION
#define DEFINE_NEG_VALUE_IMPLICATION(whenflag, thenflag, value)
#endif

95
#define COMMA ,
96

97 98 99
#ifdef FLAG_MODE_DECLARE
// Structure used to hold a collection of arguments to the JavaScript code.
struct JSArguments {
100 101
 public:
  inline const char*& operator[](int idx) const { return argv[idx]; }
102 103
  static JSArguments Create(int argc, const char** argv) {
    JSArguments args;
104 105
    args.argc = argc;
    args.argv = argv;
106 107
    return args;
  }
108 109 110 111 112 113 114 115 116 117
  int argc;
  const char** argv;
};

struct MaybeBoolFlag {
  static MaybeBoolFlag Create(bool has_value, bool value) {
    MaybeBoolFlag flag;
    flag.has_value = has_value;
    flag.value = value;
    return flag;
118
  }
119 120
  bool has_value;
  bool value;
121 122 123
};
#endif

124 125 126 127 128
#ifdef DEBUG
#define DEBUG_BOOL true
#else
#define DEBUG_BOOL false
#endif
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145

// Supported ARM configurations are:
//  "armv6":       ARMv6 + VFPv2
//  "armv7":       ARMv7 + VFPv3-D32 + NEON
//  "armv7+sudiv": ARMv7 + VFPv4-D32 + NEON + SUDIV
//  "armv8":       ARMv8 (including all of the above)
#if !defined(ARM_TEST_NO_FEATURE_PROBE) ||                            \
    (defined(CAN_USE_ARMV8_INSTRUCTIONS) &&                           \
     defined(CAN_USE_ARMV7_INSTRUCTIONS) && defined(CAN_USE_SUDIV) && \
     defined(CAN_USE_NEON) && defined(CAN_USE_VFP3_INSTRUCTIONS))
#define ARM_ARCH_DEFAULT "armv8"
#elif defined(CAN_USE_ARMV7_INSTRUCTIONS) && defined(CAN_USE_SUDIV) && \
    defined(CAN_USE_NEON) && defined(CAN_USE_VFP3_INSTRUCTIONS)
#define ARM_ARCH_DEFAULT "armv7+sudiv"
#elif defined(CAN_USE_ARMV7_INSTRUCTIONS) && defined(CAN_USE_NEON) && \
    defined(CAN_USE_VFP3_INSTRUCTIONS)
#define ARM_ARCH_DEFAULT "armv7"
146
#else
147
#define ARM_ARCH_DEFAULT "armv6"
148
#endif
149

150 151 152 153 154
#ifdef V8_OS_WIN
# define ENABLE_LOG_COLOUR false
#else
# define ENABLE_LOG_COLOUR true
#endif
155

156
#define DEFINE_BOOL(nam, def, cmt) FLAG(BOOL, bool, nam, def, cmt)
157 158
#define DEFINE_BOOL_READONLY(nam, def, cmt) \
  FLAG_READONLY(BOOL, bool, nam, def, cmt)
159 160 161
#define DEFINE_MAYBE_BOOL(nam, cmt) \
  FLAG(MAYBE_BOOL, MaybeBoolFlag, nam, {false COMMA false}, cmt)
#define DEFINE_INT(nam, def, cmt) FLAG(INT, int, nam, def, cmt)
162
#define DEFINE_UINT(nam, def, cmt) FLAG(UINT, unsigned int, nam, def, cmt)
163 164 165 166 167 168 169 170
#define DEFINE_FLOAT(nam, def, cmt) FLAG(FLOAT, double, nam, def, cmt)
#define DEFINE_STRING(nam, def, cmt) FLAG(STRING, const char*, nam, def, cmt)
#define DEFINE_ARGS(nam, cmt) FLAG(ARGS, JSArguments, nam, {0 COMMA NULL}, cmt)

#define DEFINE_ALIAS_BOOL(alias, nam) FLAG_ALIAS(BOOL, bool, alias, nam)
#define DEFINE_ALIAS_INT(alias, nam) FLAG_ALIAS(INT, int, alias, nam)
#define DEFINE_ALIAS_FLOAT(alias, nam) FLAG_ALIAS(FLOAT, double, alias, nam)
#define DEFINE_ALIAS_STRING(alias, nam) \
171
  FLAG_ALIAS(STRING, const char*, alias, nam)
172
#define DEFINE_ALIAS_ARGS(alias, nam) FLAG_ALIAS(ARGS, JSArguments, alias, nam)
173 174 175 176 177 178

//
// Flags in all modes.
//
#define FLAG FLAG_FULL

179 180 181
DEFINE_BOOL(experimental_extras, false,
            "enable code compiled in via v8_experimental_extra_library_files")

182
// Flags for language modes and experimental language features.
183
DEFINE_BOOL(use_strict, false, "enforce strict mode")
184

185 186
DEFINE_BOOL(es_staging, false,
            "enable test-worthy harmony features (for internal use only)")
187
DEFINE_BOOL(harmony, false, "enable all completed harmony features")
188
DEFINE_BOOL(harmony_shipping, true, "enable all shipped harmony features")
dslomov's avatar
dslomov committed
189
DEFINE_IMPLICATION(es_staging, harmony)
190

191
// Features that are still work in progress (behind individual flags).
192
#define HARMONY_INPROGRESS_BASE(V)                                    \
193 194 195 196 197
  V(harmony_array_prototype_values, "harmony Array.prototype.values") \
  V(harmony_function_sent, "harmony function.sent")                   \
  V(harmony_do_expressions, "harmony do-expressions")                 \
  V(harmony_class_fields, "harmony public fields in class literals")  \
  V(harmony_promise_finally, "harmony Promise.prototype.finally")
198

199
#ifdef V8_INTL_SUPPORT
200 201 202 203 204
#define HARMONY_INPROGRESS(V)                    \
  HARMONY_INPROGRESS_BASE(V)                     \
  V(harmony_number_format_to_parts,              \
    "Intl.NumberFormat.prototype.formatToParts") \
  V(harmony_plural_rules, "Intl.PluralRules")
205 206 207 208
#else
#define HARMONY_INPROGRESS(V) HARMONY_INPROGRESS_BASE(V)
#endif

209
// Features that are complete (but still behind --harmony/es-staging flag).
210 211 212
#define HARMONY_STAGED(V)                                               \
  V(harmony_function_tostring, "harmony Function.prototype.toString")   \
  V(harmony_regexp_named_captures, "harmony regexp named captures")     \
213
  V(harmony_regexp_property, "harmony Unicode regexp property classes") \
214 215
  V(harmony_restrict_constructor_return,                                \
    "harmony disallow non undefined primitive return value from class " \
216
    "constructor")                                                      \
217 218
  V(harmony_dynamic_import, "harmony dynamic import")                   \
  V(harmony_async_iteration, "harmony async iteration")                 \
219

220
// Features that are shipping (turned on by default, but internal flag remains).
221
#define HARMONY_SHIPPING(V)                                              \
222 223
  V(harmony_strict_legacy_accessor_builtins,                             \
    "treat __defineGetter__ and related functions as strict")            \
224 225 226
  V(harmony_restrictive_generators,                                      \
    "harmony restrictions on generator declarations")                    \
  V(harmony_object_rest_spread, "harmony object rest spread properties") \
227
  V(harmony_sharedarraybuffer, "harmony sharedarraybuffer")              \
228
  V(harmony_regexp_dotall, "harmony regexp dotAll flag")                 \
229 230 231
  V(harmony_regexp_lookbehind, "harmony regexp lookbehind")              \
  V(harmony_template_escapes,                                            \
    "harmony invalid escapes in tagged template literals")
232

233 234 235 236
// Once a shipping feature has proved stable in the wild, it will be dropped
// from HARMONY_SHIPPING, all occurrences of the FLAG_ variable are removed,
// and associated tests are moved from the harmony directory to the appropriate
// esN directory.
237 238


239 240 241 242
#define FLAG_INPROGRESS_FEATURES(id, description) \
  DEFINE_BOOL(id, false, "enable " #description " (in progress)")
HARMONY_INPROGRESS(FLAG_INPROGRESS_FEATURES)
#undef FLAG_INPROGRESS_FEATURES
243

244 245
#define FLAG_STAGED_FEATURES(id, description) \
  DEFINE_BOOL(id, false, "enable " #description) \
246
  DEFINE_IMPLICATION(harmony, id)
247
HARMONY_STAGED(FLAG_STAGED_FEATURES)
248 249
#undef FLAG_STAGED_FEATURES

250 251 252
#define FLAG_SHIPPING_FEATURES(id, description) \
  DEFINE_BOOL(id, true, "enable " #description) \
  DEFINE_NEG_NEG_IMPLICATION(harmony_shipping, id)
253
HARMONY_SHIPPING(FLAG_SHIPPING_FEATURES)
254 255
#undef FLAG_SHIPPING_FEATURES

256
#ifdef V8_INTL_SUPPORT
257 258 259 260
DEFINE_BOOL(icu_timezone_data, false,
            "get information about timezones from ICU")
#endif

261 262 263 264 265 266
#ifdef V8_ENABLE_FUTURE
#define FUTURE_BOOL true
#else
#define FUTURE_BOOL false
#endif
DEFINE_BOOL(future, FUTURE_BOOL,
267 268
            "Implies all staged features that we want to ship in the "
            "not-too-far future")
269

270 271
DEFINE_IMPLICATION(future, preparser_scope_analysis)

272
// Flags for experimental implementation features.
273
DEFINE_BOOL(allocation_site_pretenuring, true,
274
            "pretenure with allocation sites")
275 276 277
DEFINE_BOOL(page_promotion, true, "promote pages based on utilization")
DEFINE_INT(page_promotion_threshold, 70,
           "min percentage of live bytes on a page to enable fast evacuation")
278
DEFINE_BOOL(trace_pretenuring, false,
279
            "trace pretenuring decisions of HAllocate instructions")
280
DEFINE_BOOL(trace_pretenuring_statistics, false,
281
            "trace allocation site pretenuring statistics")
282 283 284 285 286 287 288 289 290 291
DEFINE_BOOL(track_fields, true, "track fields with only smi values")
DEFINE_BOOL(track_double_fields, true, "track fields with double values")
DEFINE_BOOL(track_heap_object_fields, true, "track fields with heap values")
DEFINE_BOOL(track_computed_fields, true, "track computed boilerplate fields")
DEFINE_IMPLICATION(track_double_fields, track_fields)
DEFINE_IMPLICATION(track_heap_object_fields, track_fields)
DEFINE_IMPLICATION(track_computed_fields, track_fields)
DEFINE_BOOL(track_field_types, true, "track field types")
DEFINE_IMPLICATION(track_field_types, track_fields)
DEFINE_IMPLICATION(track_field_types, track_heap_object_fields)
franzih's avatar
franzih committed
292
DEFINE_BOOL(type_profile, false, "collect type information")
293
DEFINE_BOOL(block_coverage, true, "enable block code coverage")
294 295 296
DEFINE_BOOL(trace_block_coverage, false,
            "trace collected block coverage information")
DEFINE_IMPLICATION(trace_block_coverage, block_coverage)
297 298
DEFINE_BOOL(feedback_normalization, false,
            "feed back normalization to constructors")
299 300 301
// TODO(jkummerow): This currently adds too much load on the stub cache.
DEFINE_BOOL_READONLY(internalize_on_the_fly, false,
                     "internalize string keys for generic keyed ICs on the fly")
302

303
// Flags for optimization types.
304
DEFINE_BOOL(optimize_for_size, false,
305
            "Enables optimizations which favor memory size over execution "
306
            "speed")
307

308 309
DEFINE_VALUE_IMPLICATION(optimize_for_size, max_semi_space_size, 1)

310
// Flags for data representation optimizations
311 312
DEFINE_BOOL(unbox_double_arrays, true, "automatically unbox arrays of doubles")
DEFINE_BOOL(string_slices, true, "use string slices")
313

314
// Flags for Ignition.
315 316
DEFINE_BOOL(ignition_elide_noneffectful_bytecodes, true,
            "elide bytecodes which won't have any external effect")
317
DEFINE_BOOL(ignition_reo, true, "use ignition register equivalence optimizer")
318 319
DEFINE_BOOL(ignition_filter_expression_positions, true,
            "filter expression positions before the bytecode pipeline")
320 321
DEFINE_BOOL(print_bytecode, false,
            "print bytecode generated by ignition interpreter")
322 323
DEFINE_STRING(print_bytecode_filter, "*",
              "filter for selecting which functions to print bytecode")
324
#ifdef V8_TRACE_IGNITION
325 326
DEFINE_BOOL(trace_ignition, false,
            "trace the bytecodes executed by the ignition interpreter")
327
#endif
328 329
DEFINE_BOOL(trace_ignition_codegen, false,
            "trace the codegen of ignition interpreter bytecode handlers")
330 331 332
DEFINE_BOOL(trace_ignition_dispatches, false,
            "traces the dispatches to bytecode handlers by the ignition "
            "interpreter")
333
DEFINE_STRING(trace_ignition_dispatches_output_file, nullptr,
334
              "the file to which the bytecode handler dispatch table is "
335
              "written (by default, the table is not written to a file)")
336

337 338
DEFINE_BOOL(fast_math, true, "faster (but maybe less accurate) math functions")
DEFINE_BOOL(trace_track_allocation_sites, false,
339
            "trace the tracking of allocation sites")
340 341
DEFINE_BOOL(trace_migration, false, "trace object migration")
DEFINE_BOOL(trace_generalization, false, "trace map generalization")
342

343
// Flags for concurrent recompilation.
344
DEFINE_BOOL(concurrent_recompilation, true,
345
            "optimizing hot functions asynchronously on a separate thread")
346
DEFINE_BOOL(trace_concurrent_recompilation, false,
347
            "track concurrent recompilation")
348
DEFINE_INT(concurrent_recompilation_queue_length, 8,
349
           "the length of the concurrent compilation queue")
350
DEFINE_INT(concurrent_recompilation_delay, 0,
351
           "artificial compilation delay in ms")
352
DEFINE_BOOL(block_concurrent_recompilation, false,
353
            "block queued jobs until released")
354

355 356 357 358 359
// Flags for stress-testing the compiler.
DEFINE_INT(stress_runs, 0, "number of stress runs")
DEFINE_INT(deopt_every_n_times, 0,
           "deoptimize every n times a deopt point is passed")
DEFINE_BOOL(print_deopt_stress, false, "print number of possible deopt points")
360

361
// Flags for TurboFan.
362 363
DEFINE_BOOL(turbo_sp_frame_access, false,
            "use stack pointer-relative access to frame wherever possible")
364
DEFINE_BOOL(turbo_preprocess_ranges, true,
365
            "run pre-register allocation heuristics")
366
DEFINE_STRING(turbo_filter, "*", "optimization filter for TurboFan compiler")
367
DEFINE_BOOL(trace_turbo, false, "trace generated TurboFan IR")
368
DEFINE_BOOL(trace_turbo_graph, false, "trace generated TurboFan graphs")
369 370
DEFINE_BOOL(trace_turbo_scheduled, false, "trace TurboFan IR with schedule")
DEFINE_IMPLICATION(trace_turbo_scheduled, trace_turbo_graph)
371 372
DEFINE_STRING(trace_turbo_cfg_file, NULL,
              "trace turbo cfg graph (for C1 visualizer) to a given file name")
373 374 375
DEFINE_BOOL(trace_turbo_types, true, "trace TurboFan's types")
DEFINE_BOOL(trace_turbo_scheduler, false, "trace TurboFan's scheduler")
DEFINE_BOOL(trace_turbo_reduction, false, "trace TurboFan's various reducers")
376
DEFINE_BOOL(trace_turbo_trimming, false, "trace TurboFan's graph trimmer")
377
DEFINE_BOOL(trace_turbo_jt, false, "trace TurboFan's jump threading")
378
DEFINE_BOOL(trace_turbo_ceq, false, "trace TurboFan's control equivalence")
379
DEFINE_BOOL(trace_turbo_loop, false, "trace TurboFan's loop optimizations")
380 381 382
DEFINE_BOOL(trace_alloc, false, "trace register allocator")
DEFINE_BOOL(trace_all_uses, false, "trace all use positions")
DEFINE_BOOL(trace_representation, false, "trace representation types")
383
DEFINE_BOOL(turbo_verify, DEBUG_BOOL, "verify TurboFan graphs at each phase")
384 385
DEFINE_STRING(turbo_verify_machine_graph, nullptr,
              "verify TurboFan machine graph before instruction selection")
386 387
#ifdef ENABLE_VERIFY_CSA
DEFINE_BOOL(verify_csa, DEBUG_BOOL,
388
            "verify TurboFan machine graph of code stubs")
389 390 391 392 393 394 395
#else
// Define the flag as read-only-false so that code still compiles even in the
// non-ENABLE_VERIFY_CSA configuration.
DEFINE_BOOL_READONLY(verify_csa, false,
                     "verify TurboFan machine graph of code stubs")
#endif
DEFINE_BOOL(trace_verify_csa, false, "trace code stubs verification")
396 397 398
DEFINE_STRING(csa_trap_on_node, nullptr,
              "trigger break point when a node with given id is created in "
              "given stub. The format is: StubName,NodeId")
399
DEFINE_BOOL(turbo_stats, false, "print TurboFan statistics")
400 401
DEFINE_BOOL(turbo_stats_nvp, false,
            "print TurboFan statistics in machine-readable format")
402
DEFINE_BOOL(turbo_splitting, true, "split nodes during scheduling in TurboFan")
403 404
DEFINE_BOOL(function_context_specialization, false,
            "enable function context specialization in TurboFan")
405
DEFINE_BOOL(turbo_inlining, true, "enable inlining in TurboFan")
406 407 408 409 410 411 412 413 414 415 416 417 418 419
DEFINE_INT(max_inlining_levels, 5, "maximum number of inlining levels")
DEFINE_INT(max_inlined_bytecode_size, 500,
           "maximum size of bytecode for a single inlining")
DEFINE_INT(max_inlined_bytecode_size_absolute, 4000,
           "maximum absolute size of bytecode considered for inlining "
           "(incl. small functions)")
DEFINE_INT(max_inlined_bytecode_size_cumulative, 1000,
           "maximum cumulative size of bytecode considered for inlining")
DEFINE_FLOAT(reserve_inline_budget_scale_factor, 1.2,
             "maximum cumulative size of bytecode considered for inlining")
DEFINE_INT(max_inlined_bytecode_size_small, 30,
           "maximum size of bytecode considered for small function inlining")
DEFINE_FLOAT(min_inlining_frequency, 0.15, "minimum frequency for inlining")
DEFINE_BOOL(polymorphic_inlining, true, "polymorphic inlining")
420
DEFINE_BOOL(trace_turbo_inlining, false, "trace TurboFan inlining")
421 422
DEFINE_BOOL(inline_accessors, true, "inline JavaScript accessors")
DEFINE_BOOL(inline_into_try, true, "inline into try blocks")
423
DEFINE_BOOL(turbo_inline_array_builtins, true,
424
            "inline array builtins in TurboFan code")
425 426 427 428 429 430
DEFINE_BOOL(use_osr, true, "use on-stack replacement")
DEFINE_BOOL(trace_osr, false, "trace on-stack replacement")
DEFINE_BOOL(analyze_environment_liveness, true,
            "analyze liveness of environment slots and zap dead values")
DEFINE_BOOL(trace_environment_liveness, false,
            "trace liveness of local variable slots")
431 432 433
DEFINE_BOOL(turbo_load_elimination, true, "enable load elimination in TurboFan")
DEFINE_BOOL(trace_turbo_load_elimination, false,
            "trace TurboFan load elimination")
434
DEFINE_BOOL(turbo_profiling, false, "enable profiling in TurboFan")
435 436
DEFINE_BOOL(turbo_verify_allocation, DEBUG_BOOL,
            "verify register allocation in TurboFan")
437
DEFINE_BOOL(turbo_move_optimization, true, "optimize gap moves in TurboFan")
438
DEFINE_BOOL(turbo_jt, true, "enable jump threading in TurboFan")
439
DEFINE_BOOL(turbo_loop_peeling, true, "Turbofan loop peeling")
440
DEFINE_BOOL(turbo_loop_variable, true, "Turbofan loop variable optimization")
441
DEFINE_BOOL(turbo_cf_optimization, true, "optimize control flow in TurboFan")
442
DEFINE_BOOL(turbo_frame_elision, true, "elide frames in TurboFan")
443
DEFINE_BOOL(turbo_escape, true, "enable escape analysis")
444 445
DEFINE_BOOL(turbo_instruction_scheduling, false,
            "enable instruction scheduling in TurboFan")
446 447
DEFINE_BOOL(turbo_stress_instruction_scheduling, false,
            "randomly schedule instructions to stress dependency tracking")
448
DEFINE_BOOL(turbo_store_elimination, true,
449
            "enable store-store elimination in TurboFan")
450
DEFINE_BOOL(trace_store_elimination, false, "trace store elimination")
451 452
DEFINE_BOOL(turbo_experimental, false,
            "enable crashing features, for testing purposes only")
453 454
DEFINE_BOOL(turbo_rewrite_far_jumps, true,
            "rewrite far to near jumps (ia32,x64)")
455

456 457 458
// Flags to help platform porters
DEFINE_BOOL(minimal, false,
            "simplifies execution model to make porting "
459
            "easier (e.g. always use Ignition, never optimize)")
Mythri's avatar
Mythri committed
460
DEFINE_NEG_IMPLICATION(minimal, opt)
461 462
DEFINE_NEG_IMPLICATION(minimal, use_ic)

463
// Flags for native WebAssembly.
464
DEFINE_BOOL(expose_wasm, true, "expose wasm interface to JavaScript")
465 466
DEFINE_BOOL(assume_asmjs_origin, false,
            "force wasm decoder to assume input is internal asm-wasm format")
467
DEFINE_BOOL(wasm_disable_structured_cloning, false,
468
            "disable wasm structured cloning")
469
DEFINE_INT(wasm_num_compilation_tasks, 10,
470
           "number of parallel compilation tasks for wasm")
471
DEFINE_BOOL(wasm_async_compilation, true,
472
            "enable actual asynchronous compilation for WebAssembly.compile")
473 474
// Parallel compilation confuses turbo_stats, force single threaded.
DEFINE_VALUE_IMPLICATION(turbo_stats, wasm_num_compilation_tasks, 0)
475 476 477 478
DEFINE_UINT(wasm_max_mem_pages, v8::internal::wasm::kV8MaxWasmMemoryPages,
            "maximum memory size of a wasm instance")
DEFINE_UINT(wasm_max_table_size, v8::internal::wasm::kV8MaxWasmTableSize,
            "maximum table size of a wasm instance")
479
DEFINE_BOOL(trace_wasm_decoder, false, "trace decoding of wasm code")
480
DEFINE_BOOL(trace_wasm_decode_time, false, "trace decoding time of wasm code")
481
DEFINE_BOOL(trace_wasm_compiler, false, "trace compiling of wasm code")
482
DEFINE_BOOL(trace_wasm_interpreter, false, "trace interpretation of wasm code")
483
DEFINE_INT(trace_wasm_ast_start, 0,
484 485
           "start function for wasm AST trace (inclusive)")
DEFINE_INT(trace_wasm_ast_end, 0, "end function for wasm AST trace (exclusive)")
486
DEFINE_UINT(skip_compiling_wasm_funcs, 0, "start compiling at function N")
487 488 489
DEFINE_BOOL(wasm_break_on_decoder_error, false,
            "debug break when wasm decoder encounters an error")

490
DEFINE_BOOL(validate_asm, true, "validate asm.js modules before compiling")
491 492
DEFINE_BOOL(suppress_asm_messages, false,
            "don't emit asm.js related messages (for golden file testing)")
493
DEFINE_BOOL(trace_asm_time, false, "log asm.js timing info to the console")
494 495
DEFINE_BOOL(trace_asm_scanner, false,
            "log tokens encountered by asm.js scanner")
496
DEFINE_BOOL(trace_asm_parser, false, "verbose logging of asm.js parse failures")
497
DEFINE_BOOL(stress_validate_asm, false, "try to validate everything as asm.js")
498

499
DEFINE_BOOL(dump_wasm_module, false, "dump wasm module bytes")
jfb's avatar
jfb committed
500
DEFINE_STRING(dump_wasm_module_path, NULL, "directory to dump wasm modules to")
501

502 503
DEFINE_INT(typed_array_max_size_in_heap, 64,
           "threshold for in-heap typed array")
504

505
DEFINE_BOOL(experimental_wasm_simd, false,
506
            "enable prototype simd opcodes for wasm")
507
DEFINE_BOOL(experimental_wasm_eh, false,
508
            "enable prototype exception handling opcodes for wasm")
509
DEFINE_BOOL(experimental_wasm_mv, false,
510
            "enable prototype multi-value support for wasm")
511 512
DEFINE_BOOL(experimental_wasm_threads, false,
            "enable prototype threads for wasm")
513

514
DEFINE_BOOL(wasm_opt, false, "enable wasm optimization")
515 516 517 518 519
DEFINE_BOOL(wasm_no_bounds_checks, false,
            "disable bounds checks (performance testing only)")
DEFINE_BOOL(wasm_no_stack_checks, false,
            "disable stack checks (performance testing only)")

520 521
DEFINE_BOOL(wasm_trap_handler, false,
            "use signal handlers to catch out of bounds memory access in wasm"
522 523 524 525 526
            " (experimental, currently Linux x86_64 only)")
DEFINE_BOOL(wasm_guard_pages, false,
            "add guard pages to the end of WebWassembly memory"
            " (experimental, no effect on 32-bit)")
DEFINE_IMPLICATION(wasm_trap_handler, wasm_guard_pages)
527 528
DEFINE_BOOL(wasm_code_fuzzer_gen_test, false,
            "Generate a test case when running the wasm-code fuzzer")
529
DEFINE_BOOL(print_wasm_code, false, "Print WebAssembly code")
530 531
DEFINE_BOOL(wasm_interpret_all, false,
            "Execute all wasm code in the wasm interpreter")
532 533
DEFINE_BOOL(asm_wasm_lazy_compilation, false,
            "enable lazy compilation for asm-wasm modules")
534
DEFINE_IMPLICATION(validate_asm, asm_wasm_lazy_compilation)
535 536
DEFINE_BOOL(wasm_lazy_compilation, false,
            "enable lazy compilation for all wasm modules")
537 538 539
// wasm-interpret-all resets {asm-,}wasm-lazy-compilation.
DEFINE_NEG_IMPLICATION(wasm_interpret_all, asm_wasm_lazy_compilation)
DEFINE_NEG_IMPLICATION(wasm_interpret_all, wasm_lazy_compilation)
540

541
// Profiler flags.
542
DEFINE_INT(frame_count, 1, "number of stack frames inspected by the profiler")
543
DEFINE_INT(type_info_threshold, 25,
544
           "percentage of ICs that must have type info to allow optimization")
545 546
DEFINE_INT(generic_ic_threshold, 30,
           "max percentage of megamorphic/generic ICs to allow optimization")
547
DEFINE_INT(self_opt_count, 130, "call count before self-optimization")
548

549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589
// Garbage collections flags.
DEFINE_INT(min_semi_space_size, 0,
           "min size of a semi-space (in MBytes), the new space consists of two"
           "semi-spaces")
DEFINE_INT(max_semi_space_size, 0,
           "max size of a semi-space (in MBytes), the new space consists of two"
           "semi-spaces")
DEFINE_INT(semi_space_growth_factor, 2, "factor by which to grow the new space")
DEFINE_BOOL(experimental_new_space_growth_heuristic, false,
            "Grow the new space based on the percentage of survivors instead "
            "of their absolute value.")
DEFINE_INT(max_old_space_size, 0, "max size of the old space (in Mbytes)")
DEFINE_INT(initial_old_space_size, 0, "initial old space size (in Mbytes)")
DEFINE_BOOL(gc_global, false, "always perform global GCs")
DEFINE_INT(gc_interval, -1, "garbage collect after <n> allocations")
DEFINE_INT(retain_maps_for_n_gc, 2,
           "keeps maps alive for <n> old space garbage collections")
DEFINE_BOOL(trace_gc, false,
            "print one trace line following each garbage collection")
DEFINE_BOOL(trace_gc_nvp, false,
            "print one detailed trace line in name=value format "
            "after each garbage collection")
DEFINE_BOOL(trace_gc_ignore_scavenger, false,
            "do not print trace line after scavenger collection")
DEFINE_BOOL(trace_idle_notification, false,
            "print one trace line following each idle notification")
DEFINE_BOOL(trace_idle_notification_verbose, false,
            "prints the heap state used by the idle notification")
DEFINE_BOOL(trace_gc_verbose, false,
            "print more details following each garbage collection")
DEFINE_INT(trace_allocation_stack_interval, -1,
           "print stack trace after <n> free-list allocations")
DEFINE_BOOL(trace_fragmentation, false, "report fragmentation for old space")
DEFINE_BOOL(trace_fragmentation_verbose, false,
            "report fragmentation for old space (detailed)")
DEFINE_BOOL(trace_evacuation, false, "report evacuation statistics")
DEFINE_BOOL(trace_mutator_utilization, false,
            "print mutator utilization, allocation speed, gc speed")
DEFINE_BOOL(incremental_marking, true, "use incremental marking")
DEFINE_BOOL(incremental_marking_wrappers, true,
            "use incremental marking for marking wrappers")
590
DEFINE_BOOL(parallel_scavenge, true, "parallel scavenge")
591
DEFINE_BOOL(trace_parallel_scavenge, false, "trace parallel scavenge")
592 593 594 595 596 597 598
#ifdef V8_CONCURRENT_MARKING
#define V8_CONCURRENT_MARKING_BOOL true
#else
#define V8_CONCURRENT_MARKING_BOOL false
#endif
DEFINE_BOOL(concurrent_marking, V8_CONCURRENT_MARKING_BOOL,
            "use concurrent marking")
599
DEFINE_BOOL(trace_concurrent_marking, false, "trace concurrent marking")
600 601 602 603
DEFINE_BOOL(minor_mc_parallel_marking, true,
            "use parallel marking for the young generation")
DEFINE_BOOL(trace_minor_mc_parallel_marking, false,
            "trace parallel marking for the young generation")
604 605 606 607 608 609 610
DEFINE_INT(min_progress_during_incremental_marking_finalization, 32,
           "keep finalizing incremental marking as long as we discover at "
           "least this many unmarked objects")
DEFINE_INT(max_incremental_marking_finalization_rounds, 3,
           "at most try this many times to finalize incremental marking")
DEFINE_BOOL(minor_mc, false, "perform young generation mark compact GCs")
DEFINE_BOOL(black_allocation, true, "use black allocation")
611 612
DEFINE_BOOL(concurrent_store_buffer, true,
            "use concurrent store buffer processing")
613 614 615 616 617 618 619 620 621 622
DEFINE_BOOL(concurrent_sweeping, true, "use concurrent sweeping")
DEFINE_BOOL(parallel_compaction, true, "use parallel compaction")
DEFINE_BOOL(parallel_pointer_update, true,
            "use parallel pointer update during compaction")
DEFINE_BOOL(trace_incremental_marking, false,
            "trace progress of the incremental marking")
DEFINE_BOOL(track_gc_object_stats, false,
            "track object counts and memory usage")
DEFINE_BOOL(trace_gc_object_stats, false,
            "trace object counts and memory usage")
623 624
DEFINE_BOOL(track_retaining_path, false,
            "enable support for tracking retaining path")
625 626 627 628 629
DEFINE_INT(gc_stats, 0, "Used by tracing internally to enable gc statistics")
DEFINE_IMPLICATION(trace_gc_object_stats, track_gc_object_stats)
DEFINE_VALUE_IMPLICATION(track_gc_object_stats, gc_stats, 1)
DEFINE_VALUE_IMPLICATION(trace_gc_object_stats, gc_stats, 1)
DEFINE_NEG_IMPLICATION(trace_gc_object_stats, incremental_marking)
630 631
DEFINE_NEG_IMPLICATION(track_retaining_path, incremental_marking)
DEFINE_NEG_IMPLICATION(track_retaining_path, concurrent_marking)
632 633 634 635 636 637 638
DEFINE_BOOL(track_detached_contexts, true,
            "track native contexts that are expected to be garbage collected")
DEFINE_BOOL(trace_detached_contexts, false,
            "trace native contexts that are expected to be garbage collected")
DEFINE_IMPLICATION(trace_detached_contexts, track_detached_contexts)
#ifdef VERIFY_HEAP
DEFINE_BOOL(verify_heap, false, "verify heap pointers before and after GC")
639 640
DEFINE_BOOL(verify_heap_skip_remembered_set, false,
            "disable remembered set verification")
641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661
#endif
DEFINE_BOOL(move_object_start, true, "enable moving of object starts")
DEFINE_BOOL(memory_reducer, true, "use memory reducer")
DEFINE_INT(heap_growing_percent, 0,
           "specifies heap growing factor as (1 + heap_growing_percent/100)")
DEFINE_INT(v8_os_page_size, 0, "override OS page size (in KBytes)")
DEFINE_BOOL(always_compact, false, "Perform compaction on every full GC")
DEFINE_BOOL(never_compact, false,
            "Never perform compaction on full GC - testing only")
DEFINE_BOOL(compact_code_space, true, "Compact code space on full collections")
DEFINE_BOOL(cleanup_code_caches_at_gc, true,
            "Flush code caches in maps during mark compact cycle.")
DEFINE_BOOL(use_marking_progress_bar, true,
            "Use a progress bar to scan large objects in increments when "
            "incremental marking is active.")
DEFINE_BOOL(force_marking_deque_overflows, false,
            "force overflows of marking deque by reducing it's size "
            "to 64 words")
DEFINE_BOOL(stress_compaction, false,
            "stress the GC compactor to flush out bugs (implies "
            "--force_marking_deque_overflows)")
662
DEFINE_BOOL(stress_incremental_marking, false,
663
            "force incremental marking for small heaps and run it more often")
664 665 666 667 668 669
DEFINE_BOOL(manual_evacuation_candidates_selection, false,
            "Test mode only flag. It allows an unit test to select evacuation "
            "candidates pages (requires --stress_compaction).")
DEFINE_BOOL(fast_promotion_new_space, false,
            "fast promote new space on high survival rates")

670
// assembler-ia32.cc / assembler-arm.cc / assembler-x64.cc
671 672
DEFINE_BOOL(debug_code, DEBUG_BOOL,
            "generate extra code (assertions) for debugging")
673 674 675
DEFINE_BOOL(code_comments, false,
            "emit comments in code disassembly; for more readable source "
            "positions you should add --no-concurrent_recompilation")
676
DEFINE_BOOL(enable_sse3, true, "enable use of SSE3 instructions if available")
677
DEFINE_BOOL(enable_ssse3, true, "enable use of SSSE3 instructions if available")
678
DEFINE_BOOL(enable_sse4_1, true,
679
            "enable use of SSE4.1 instructions if available")
680
DEFINE_BOOL(enable_sahf, true,
681
            "enable use of SAHF instruction if available (X64 only)")
682 683
DEFINE_BOOL(enable_avx, true, "enable use of AVX instructions if available")
DEFINE_BOOL(enable_fma3, true, "enable use of FMA3 instructions if available")
684 685 686 687 688
DEFINE_BOOL(enable_bmi1, true, "enable use of BMI1 instructions if available")
DEFINE_BOOL(enable_bmi2, true, "enable use of BMI2 instructions if available")
DEFINE_BOOL(enable_lzcnt, true, "enable use of LZCNT instruction if available")
DEFINE_BOOL(enable_popcnt, true,
            "enable use of POPCNT instruction if available")
689 690 691
DEFINE_STRING(arm_arch, ARM_ARCH_DEFAULT,
              "generate instructions for the selected ARM architecture if "
              "available: armv6, armv7, armv7+sudiv or armv8")
692
DEFINE_BOOL(enable_vldr_imm, false,
693
            "enable use of constant pools for double immediate (ARM only)")
694
DEFINE_BOOL(force_long_branches, false,
695
            "force all emitted branches to be in long mode (MIPS/PPC only)")
696
DEFINE_STRING(mcpu, "auto", "enable optimization for specific cpu")
697

698 699 700 701 702 703 704 705
// Deprecated ARM flags (replaced by arm_arch).
DEFINE_MAYBE_BOOL(enable_armv7, "deprecated (use --arm_arch instead)")
DEFINE_MAYBE_BOOL(enable_vfp3, "deprecated (use --arm_arch instead)")
DEFINE_MAYBE_BOOL(enable_32dregs, "deprecated (use --arm_arch instead)")
DEFINE_MAYBE_BOOL(enable_neon, "deprecated (use --arm_arch instead)")
DEFINE_MAYBE_BOOL(enable_sudiv, "deprecated (use --arm_arch instead)")
DEFINE_MAYBE_BOOL(enable_armv8, "deprecated (use --arm_arch instead)")

706 707 708 709
// regexp-macro-assembler-*.cc
DEFINE_BOOL(enable_regexp_unaligned_accesses, true,
            "enable unaligned accesses for the regexp engine")

710 711
// api.cc
DEFINE_BOOL(script_streaming, true, "enable parsing on background")
712 713 714
DEFINE_BOOL(disable_old_api_accessors, false,
            "Disable old-style API accessors whose setters trigger through the "
            "prototype chain")
715

716
// bootstrapper.cc
717 718 719 720
DEFINE_STRING(expose_natives_as, NULL, "expose natives in global object")
DEFINE_BOOL(expose_free_buffer, false, "expose freeBuffer extension")
DEFINE_BOOL(expose_gc, false, "expose gc extension")
DEFINE_STRING(expose_gc_as, NULL,
721
              "expose gc extension under the specified name")
722 723
DEFINE_IMPLICATION(expose_gc_as, expose_gc)
DEFINE_BOOL(expose_externalize_string, false,
724
            "expose externalize string extension")
725 726 727
DEFINE_BOOL(expose_trigger_failure, false, "expose trigger-failure extension")
DEFINE_INT(stack_trace_limit, 10, "number of stack frames to capture")
DEFINE_BOOL(builtins_in_stack_traces, false,
728
            "show built-in functions in stack traces")
729

730 731 732 733
// builtins.cc
DEFINE_BOOL(allow_unsafe_function_constructor, false,
            "allow invoking the function constructor without security checks")

734
// builtins-ia32.cc
735
DEFINE_BOOL(inline_new, true, "use fast inline allocation")
736 737

// codegen-ia32.cc / codegen-arm.cc
738
DEFINE_BOOL(trace_codegen, false,
739
            "print name of functions for which code is generated")
740
DEFINE_BOOL(trace, false, "trace function calls")
741 742

// codegen.cc
743 744
DEFINE_BOOL(lazy, true, "use lazy compilation")
DEFINE_BOOL(trace_opt, false, "trace lazy optimization")
745 746
DEFINE_BOOL(trace_opt_verbose, false, "extra verbose compilation tracing")
DEFINE_IMPLICATION(trace_opt_verbose, trace_opt)
747
DEFINE_BOOL(trace_opt_stats, false, "trace lazy optimization statistics")
748
DEFINE_BOOL(trace_deopt, false, "trace optimize function deoptimization")
749 750
DEFINE_BOOL(trace_file_names, false,
            "include file names in trace-opt/trace-deopt output")
751
DEFINE_BOOL(trace_interrupts, false, "trace interrupts when they are handled")
752 753 754 755
DEFINE_BOOL(opt, true, "use adaptive optimizations")
DEFINE_BOOL(always_opt, false, "always try to optimize functions")
DEFINE_BOOL(always_osr, false, "always try to OSR functions")
DEFINE_BOOL(prepare_always_opt, false, "prepare for turning on always opt")
756

757
DEFINE_BOOL(serialize_toplevel, true, "enable caching of toplevel scripts")
758
DEFINE_BOOL(serialize_eager, false, "compile eagerly when caching scripts")
759
DEFINE_BOOL(trace_serializer, false, "print code serializer trace")
760 761 762 763
#ifdef DEBUG
DEFINE_BOOL(external_reference_stats, false,
            "print statistics on external references used during serialization")
#endif  // DEBUG
764

765
// compilation-cache.cc
766
DEFINE_BOOL(compilation_cache, true, "enable compilation cache")
767

768
DEFINE_BOOL(cache_prototype_transitions, true, "cache prototype transitions")
769

770 771
// compiler-dispatcher.cc
DEFINE_BOOL(compiler_dispatcher, false, "enable compiler dispatcher")
772 773 774 775 776 777 778
DEFINE_BOOL(trace_compiler_dispatcher, false,
            "trace compiler dispatcher activity")

// compiler-dispatcher-job.cc
DEFINE_BOOL(
    trace_compiler_dispatcher_jobs, false,
    "trace progress of individual jobs managed by the compiler dispatcher")
779

780
// cpu-profiler.cc
781
DEFINE_INT(cpu_profiler_sampling_interval, 1000,
782 783
           "CPU profiler sampling interval in microseconds")

784
// Array abuse tracing
785
DEFINE_BOOL(trace_js_array_abuse, false,
786
            "trace out-of-bounds accesses to JS arrays")
787
DEFINE_BOOL(trace_external_array_abuse, false,
788
            "trace out-of-bounds-accesses to external arrays")
789
DEFINE_BOOL(trace_array_abuse, false,
790
            "trace out-of-bounds accesses to all arrays")
791 792
DEFINE_IMPLICATION(trace_array_abuse, trace_js_array_abuse)
DEFINE_IMPLICATION(trace_array_abuse, trace_external_array_abuse)
793 794

// debugger
795
DEFINE_BOOL(enable_liveedit, true, "enable liveedit experimental feature")
796 797 798
DEFINE_BOOL(
    trace_side_effect_free_debug_evaluate, false,
    "print debug messages for side-effect-free debug-evaluate for testing")
799
DEFINE_BOOL(hard_abort, true, "abort by crashing")
800

801 802 803 804
// inspector
DEFINE_BOOL(expose_inspector_scripts, false,
            "expose injected-script-source.js for debugging")

805
// execution.cc
806 807
DEFINE_INT(stack_size, V8_DEFAULT_STACK_SIZE_KB,
           "default size of stack region v8 is allowed to use (in kBytes)")
808

809
// frames.cc
810
DEFINE_INT(max_stack_trace_source_length, 300,
811 812
           "maximum length of function source code printed in a stack trace.")

813
// execution.cc, messages.cc
814
DEFINE_BOOL(clear_exceptions_on_js_entry, false,
815 816
            "clear pending exceptions when entering JavaScript")

817 818 819 820
// counters.cc
DEFINE_INT(histogram_interval, 600000,
           "time interval in ms for aggregating memory histograms")

821
// heap-snapshot-generator.cc
822
DEFINE_BOOL(heap_profiler_trace_objects, false,
823 824 825
            "Dump heap object allocations/movements/size_updates")


826 827 828 829 830
// sampling-heap-profiler.cc
DEFINE_BOOL(sampling_heap_profiler_suppress_randomness, false,
            "Use constant sample intervals to eliminate test flakiness")


831
// v8.cc
832
DEFINE_BOOL(use_idle_notification, true,
833
            "Use idle notification to reduce memory footprint.")
834
// ic.cc
835
DEFINE_BOOL(use_ic, true, "use inline caching")
836 837
DEFINE_BOOL(trace_ic, false,
            "trace inline cache state transitions for tools/ic-processor")
838
DEFINE_IMPLICATION(trace_ic, log_code)
839 840
DEFINE_INT(ic_stats, 0, "inline cache state transitions statistics")
DEFINE_VALUE_IMPLICATION(trace_ic, ic_stats, 1)
841 842
DEFINE_BOOL_READONLY(track_constant_fields, false,
                     "enable constant field tracking")
843
DEFINE_BOOL_READONLY(modify_map_inplace, false, "enable in-place map updates")
844 845

// macro-assembler-ia32.cc
846
DEFINE_BOOL(native_code_counters, false,
847 848
            "generate extra code for manipulating stats counters")

849
// objects.cc
850
DEFINE_BOOL(thin_strings, true, "Enable ThinString support")
851 852 853
DEFINE_BOOL(trace_weak_arrays, false, "Trace WeakFixedArray usage")
DEFINE_BOOL(trace_prototype_users, false,
            "Trace updates to prototype user tracking")
854
DEFINE_BOOL(use_verbose_printer, true, "allows verbose printing")
855
DEFINE_BOOL(trace_for_in_enumerate, false, "Trace for-in enumerate slow-paths")
856
#if V8_TRACE_MAPS
857 858
DEFINE_BOOL(trace_maps, false, "trace map creation")
#endif
859

860
// parser.cc
861 862
DEFINE_BOOL(allow_natives_syntax, false, "allow natives syntax")
DEFINE_BOOL(trace_parse, false, "trace parsing and preparsing")
863
DEFINE_BOOL(trace_preparse, false, "trace preparsing decisions")
864
DEFINE_BOOL(lazy_inner_functions, true, "enable lazy parsing inner functions")
865
DEFINE_BOOL(aggressive_lazy_inner_functions, false,
866 867
            "even lazier inner function parsing")
DEFINE_IMPLICATION(aggressive_lazy_inner_functions, lazy_inner_functions)
868
DEFINE_BOOL(preparser_scope_analysis, true,
869
            "perform scope analysis for preparsed inner functions")
870
DEFINE_IMPLICATION(preparser_scope_analysis, aggressive_lazy_inner_functions)
871

872
// simulator-arm.cc, simulator-arm64.cc and simulator-mips.cc
873 874 875
DEFINE_BOOL(trace_sim, false, "Trace simulator execution")
DEFINE_BOOL(debug_sim, false, "Enable debugging the simulator")
DEFINE_BOOL(check_icache, false,
876
            "Check icache flushes in ARM and MIPS simulator")
877
DEFINE_INT(stop_sim_at, 0, "Simulator stop after x number of instructions")
878 879
#if defined(V8_TARGET_ARCH_ARM64) || defined(V8_TARGET_ARCH_MIPS64) || \
    defined(V8_TARGET_ARCH_PPC64)
880
DEFINE_INT(sim_stack_alignment, 16,
881 882 883
           "Stack alignment in bytes in simulator. This must be a power of two "
           "and it must be at least 16. 16 is default.")
#else
884
DEFINE_INT(sim_stack_alignment, 8,
885
           "Stack alingment in bytes in simulator (4 or 8, 8 is default)")
886
#endif
887
DEFINE_INT(sim_stack_size, 2 * MB / KB,
888
           "Stack size of the ARM64, MIPS64 and PPC64 simulator "
889
           "in kBytes (default is 2 MB)")
890
DEFINE_BOOL(log_regs_modified, true,
891
            "When logging register values, only print modified registers.")
892 893
DEFINE_BOOL(log_colour, ENABLE_LOG_COLOUR,
            "When logging, try to use coloured output.")
894
DEFINE_BOOL(ignore_asm_unimplemented_break, false,
895
            "Don't break for ASM_UNIMPLEMENTED_BREAK macros.")
896
DEFINE_BOOL(trace_sim_messages, false,
897
            "Trace simulator debug messages. Implied by --trace-sim.")
898

899
// isolate.cc
900
DEFINE_BOOL(stack_trace_on_illegal, false,
901
            "print stack trace when an illegal exception is thrown")
902
DEFINE_BOOL(abort_on_uncaught_exception, false,
903
            "abort program (dump core) when an uncaught exception is thrown")
904 905 906 907 908
DEFINE_BOOL(abort_on_stack_or_string_length_overflow, false,
            "Abort program when the stack overflows or a string exceeds "
            "maximum length (as opposed to throwing RangeError). This is "
            "useful for fuzzing where the spec behaviour would introduce "
            "nondeterminism.")
909
DEFINE_BOOL(randomize_hashes, true,
910
            "randomize hashes to avoid predictable hash collisions "
911
            "(with snapshots this option cannot override the baked-in seed)")
912 913
DEFINE_BOOL(rehash_snapshot, true,
            "rehash strings from the snapshot to override the baked-in seed")
914
DEFINE_INT(hash_seed, 0,
915
           "Fixed seed to use to hash property keys (0 means random)"
916
           "(with snapshots this option cannot override the baked-in seed)")
917 918 919
DEFINE_INT(random_seed, 0,
           "Default seed for initializing random generator "
           "(0, the default, means to use system random).")
hpayer's avatar
hpayer committed
920
DEFINE_BOOL(trace_rail, false, "trace RAIL mode")
921 922
DEFINE_BOOL(print_all_exceptions, false,
            "print exception object and stack trace on each thrown exception")
923

924 925
// runtime.cc
DEFINE_BOOL(runtime_call_stats, false, "report runtime call counts and times")
926 927 928
DEFINE_INT(runtime_stats, 0,
           "internal usage only for controlling runtime statistics")
DEFINE_VALUE_IMPLICATION(runtime_call_stats, runtime_stats, 1)
929

930
// snapshot-common.cc
931 932 933
DEFINE_BOOL(lazy_deserialization, false,
            "Deserialize code lazily from the snapshot.")
DEFINE_BOOL(trace_lazy_deserialization, false, "Trace lazy deserialization.")
934
DEFINE_BOOL(profile_deserialization, false,
935
            "Print the time it takes to deserialize the snapshot.")
936 937
DEFINE_BOOL(serialization_statistics, false,
            "Collect statistics on serialized objects.")
938

erik.corry@gmail.com's avatar
erik.corry@gmail.com committed
939
// Regexp
940
DEFINE_BOOL(regexp_optimization, true, "generate optimized regexp code")
941

942
// Testing flags test/cctest/test-{flags,api,serialization}.cc
943 944 945 946 947 948
DEFINE_BOOL(testing_bool_flag, true, "testing_bool_flag")
DEFINE_MAYBE_BOOL(testing_maybe_bool_flag, "testing_maybe_bool_flag")
DEFINE_INT(testing_int_flag, 13, "testing_int_flag")
DEFINE_FLOAT(testing_float_flag, 2.5, "float-flag")
DEFINE_STRING(testing_string_flag, "Hello, world!", "string-flag")
DEFINE_INT(testing_prng_seed, 42, "Seed used for threading test randomness")
949

950
// mksnapshot.cc
951 952
DEFINE_STRING(startup_src, NULL,
              "Write V8 startup as C++ src. (mksnapshot only)")
953
DEFINE_STRING(startup_blob, NULL,
954
              "Write V8 startup blob file. (mksnapshot only)")
955

956 957 958
//
// Dev shell flags
//
959

960 961
DEFINE_BOOL(help, false, "Print usage message, including flags, on console")
DEFINE_BOOL(dump_counters, false, "Dump counters on exit")
962 963
DEFINE_BOOL(dump_counters_nvp, false,
            "Dump counters as name-value pairs on exit")
964
DEFINE_BOOL(use_external_strings, false, "Use external strings for source code")
965

966 967
DEFINE_STRING(map_counters, "", "Map counters to a file")
DEFINE_ARGS(js_arguments,
968
            "Pass all remaining arguments to the script. Alias for \"--\".")
969

970 971 972
//
// GDB JIT integration flags.
//
973 974 975 976 977 978
#undef FLAG
#ifdef ENABLE_GDB_JIT_INTERFACE
#define FLAG FLAG_FULL
#else
#define FLAG FLAG_READONLY
#endif
979

980
DEFINE_BOOL(gdbjit, false, "enable GDBJIT interface")
981 982 983
DEFINE_BOOL(gdbjit_full, false, "enable GDBJIT interface for all code objects")
DEFINE_BOOL(gdbjit_dump, false, "dump elf objects with debug info to disk")
DEFINE_STRING(gdbjit_dump_filter, "",
984
              "dump only objects containing this substring")
985

986 987 988 989 990
#ifdef ENABLE_GDB_JIT_INTERFACE
DEFINE_IMPLICATION(gdbjit_full, gdbjit)
DEFINE_IMPLICATION(gdbjit_dump, gdbjit)
#endif
DEFINE_NEG_IMPLICATION(gdbjit, compact_code_space)
991

992 993 994 995 996 997 998 999 1000 1001 1002
//
// Debug only flags
//
#undef FLAG
#ifdef DEBUG
#define FLAG FLAG_FULL
#else
#define FLAG FLAG_READONLY
#endif

// checks.cc
1003
#ifdef ENABLE_SLOW_DCHECKS
1004
DEFINE_BOOL(enable_slow_asserts, false,
1005
            "enable asserts that are slow to execute")
1006
#endif
1007

1008
// codegen-ia32.cc / codegen-arm.cc / macro-assembler-*.cc
1009 1010 1011
DEFINE_BOOL(print_ast, false, "print source AST")
DEFINE_BOOL(print_builtin_ast, false, "print source AST for builtins")
DEFINE_BOOL(trap_on_abort, false, "replace aborts by breakpoints")
1012 1013

// compiler.cc
1014 1015
DEFINE_BOOL(print_builtin_scopes, false, "print scopes for builtins")
DEFINE_BOOL(print_scopes, false, "print scopes")
1016 1017

// contexts.cc
1018
DEFINE_BOOL(trace_contexts, false, "trace contexts operations")
1019 1020

// heap.cc
1021 1022 1023 1024
DEFINE_BOOL(gc_verbose, false, "print stuff during garbage collection")
DEFINE_BOOL(heap_stats, false, "report heap statistics before and after GC")
DEFINE_BOOL(code_stats, false, "report code statistics after GC")
DEFINE_BOOL(print_handles, false, "report handles after GC")
1025 1026
DEFINE_BOOL(check_handle_count, false,
            "Check that there are not too many handles at GC")
1027
DEFINE_BOOL(print_global_handles, false, "report global handles after GC")
1028

1029
// TurboFan debug-only flags.
1030
DEFINE_BOOL(trace_turbo_escape, false, "enable tracing in escape analysis")
1031

1032
// objects.cc
1033 1034
DEFINE_BOOL(trace_module_status, false,
            "Trace status transitions of ECMAScript modules")
1035
DEFINE_BOOL(trace_normalization, false,
1036 1037 1038
            "prints when objects are turned into dictionaries.")

// runtime.cc
1039
DEFINE_BOOL(trace_lazy, false, "trace lazy compilation")
1040 1041

// spaces.cc
1042
DEFINE_BOOL(collect_heap_spill_statistics, false,
1043 1044
            "report heap spill statistics along with heap_stats "
            "(requires heap_stats)")
1045 1046
DEFINE_BOOL(trace_live_bytes, false,
            "trace incrementing and resetting of live bytes")
1047
DEFINE_BOOL(trace_isolates, false, "trace isolate state changes")
1048

erik.corry@gmail.com's avatar
erik.corry@gmail.com committed
1049
// Regexp
1050
DEFINE_BOOL(regexp_possessive_quantifier, false,
1051
            "enable possessive quantifier syntax for testing")
1052 1053
DEFINE_BOOL(trace_regexp_bytecodes, false, "trace regexp bytecode execution")
DEFINE_BOOL(trace_regexp_assembler, false,
erik.corry@gmail.com's avatar
erik.corry@gmail.com committed
1054
            "trace regexp macro assembler calls.")
1055
DEFINE_BOOL(trace_regexp_parser, false, "trace regexp parsing")
1056

1057 1058 1059
// Debugger
DEFINE_BOOL(print_break_location, false, "print source location on debug break")

1060 1061 1062 1063
// wasm instance management
DEFINE_BOOL(trace_wasm_instances, false,
            "trace creation and collection of wasm instances")

1064
//
1065
// Logging and profiling flags
1066 1067 1068 1069 1070
//
#undef FLAG
#define FLAG FLAG_FULL

// log.cc
1071
DEFINE_BOOL(log, false,
1072
            "Minimal logging (no API, code, GC, suspect, or handles samples).")
1073 1074 1075
DEFINE_BOOL(log_all, false, "Log all events to the log file.")
DEFINE_BOOL(log_api, false, "Log API events to the log file.")
DEFINE_BOOL(log_code, false,
1076
            "Log code events to the log file without profiling.")
1077
DEFINE_BOOL(log_gc, false,
1078
            "Log heap samples on garbage collection for the hp2ps tool.")
1079 1080
DEFINE_BOOL(log_handles, false, "Log global handle events.")
DEFINE_BOOL(log_suspect, false, "Log suspect operations.")
1081
DEFINE_BOOL(log_source_code, false, "Log source code.")
1082
DEFINE_BOOL(prof, false,
1083
            "Log statistical profiling information (implies --log-code).")
1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095

#if defined(ANDROID)
// Phones and tablets have processors that are much slower than desktop
// and laptop computers for which current heuristics are tuned.
#define DEFAULT_PROF_SAMPLING_INTERVAL 5000
#else
#define DEFAULT_PROF_SAMPLING_INTERVAL 1000
#endif
DEFINE_INT(prof_sampling_interval, DEFAULT_PROF_SAMPLING_INTERVAL,
           "Interval for --prof samples (in microseconds).")
#undef DEFAULT_PROF_SAMPLING_INTERVAL

jkummerow's avatar
jkummerow committed
1096 1097
DEFINE_BOOL(prof_cpp, false, "Like --prof, but ignore generated code.")
DEFINE_IMPLICATION(prof, prof_cpp)
1098
DEFINE_BOOL(prof_browser_mode, true,
1099
            "Used with --prof, turns on browser-compatible mode for profiling.")
1100 1101 1102 1103
DEFINE_STRING(logfile, "v8.log", "Specify the name of the log file.")
DEFINE_BOOL(logfile_per_isolate, true, "Separate log files for each isolate.")
DEFINE_BOOL(ll_prof, false, "Enable low-level linux profiler.")
DEFINE_BOOL(perf_basic_prof, false,
1104
            "Enable perf linux profiler (basic support).")
1105
DEFINE_NEG_IMPLICATION(perf_basic_prof, compact_code_space)
1106 1107 1108
DEFINE_BOOL(perf_basic_prof_only_functions, false,
            "Only report function code ranges to perf (i.e. no stubs).")
DEFINE_IMPLICATION(perf_basic_prof_only_functions, perf_basic_prof)
1109 1110 1111
DEFINE_BOOL(perf_prof, false,
            "Enable perf linux profiler (experimental annotate support).")
DEFINE_NEG_IMPLICATION(perf_prof, compact_code_space)
1112 1113
DEFINE_BOOL(perf_prof_unwinding_info, false,
            "Enable unwinding info for perf linux profiler (experimental).")
1114
DEFINE_IMPLICATION(perf_prof, perf_prof_unwinding_info)
1115
DEFINE_STRING(gc_fake_mmap, "/tmp/__v8_gc__",
1116
              "Specify the name of the file for fake gc mmap used in ll_prof")
1117 1118
DEFINE_BOOL(log_internal_timer_events, false, "Time internal events.")
DEFINE_BOOL(log_timer_events, false,
1119
            "Time events including external callbacks.")
1120 1121 1122 1123
DEFINE_IMPLICATION(log_timer_events, log_internal_timer_events)
DEFINE_IMPLICATION(log_internal_timer_events, prof)
DEFINE_BOOL(log_instruction_stats, false, "Log AArch64 instruction statistics.")
DEFINE_STRING(log_instruction_file, "arm64_inst.csv",
1124
              "AArch64 instruction statistics log file.")
1125
DEFINE_INT(log_instruction_period, 1 << 22,
1126
           "AArch64 instruction statistics logging period.")
1127

1128
DEFINE_BOOL(redirect_code_traces, false,
1129 1130
            "output deopt information and disassembly into file "
            "code-<pid>-<isolate id>.asm")
1131 1132
DEFINE_STRING(redirect_code_traces_to, NULL,
              "output deopt information and disassembly into the given file")
1133

1134 1135 1136
DEFINE_BOOL(print_opt_source, false,
            "print source code of optimized and inlined functions")

1137 1138 1139 1140 1141 1142 1143 1144 1145 1146
//
// Disassembler only flags
//
#undef FLAG
#ifdef ENABLE_DISASSEMBLER
#define FLAG FLAG_FULL
#else
#define FLAG FLAG_READONLY
#endif

1147
// elements.cc
1148
DEFINE_BOOL(trace_elements_transitions, false, "trace elements transitions")
1149

1150
DEFINE_BOOL(trace_creation_allocation_sites, false,
1151 1152
            "trace the creation of allocation sites")

1153
// code-stubs.cc
1154 1155
DEFINE_BOOL(print_code_stubs, false, "print code stubs")
DEFINE_BOOL(test_secondary_stub_cache, false,
1156 1157
            "test secondary stub cache by disabling the primary one")

1158
DEFINE_BOOL(test_primary_stub_cache, false,
1159
            "test primary stub cache by disabling the secondary one")
1160

1161 1162 1163
DEFINE_BOOL(test_small_max_function_context_stub_size, false,
            "enable testing the function context size overflow path "
            "by making the maximum size smaller")
1164

1165
// codegen-ia32.cc / codegen-arm.cc
1166 1167
DEFINE_BOOL(print_code, false, "print generated code")
DEFINE_BOOL(print_opt_code, false, "print optimized code")
1168
DEFINE_STRING(print_opt_code_filter, "*", "filter for printing optimized code")
1169 1170
DEFINE_BOOL(print_code_verbose, false, "print more information for code")
DEFINE_BOOL(print_builtin_code, false, "print generated code for builtins")
1171
DEFINE_BOOL(print_builtin_size, false, "print code size for builtins")
1172

1173
#ifdef ENABLE_DISASSEMBLER
1174 1175
DEFINE_BOOL(sodium, false,
            "print generated code output suitable for use with "
1176 1177
            "the Sodium code viewer")

1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189
DEFINE_IMPLICATION(sodium, print_code_stubs)
DEFINE_IMPLICATION(sodium, print_code)
DEFINE_IMPLICATION(sodium, print_opt_code)
DEFINE_IMPLICATION(sodium, code_comments)

DEFINE_BOOL(print_all_code, false, "enable all flags related to printing code")
DEFINE_IMPLICATION(print_all_code, print_code)
DEFINE_IMPLICATION(print_all_code, print_opt_code)
DEFINE_IMPLICATION(print_all_code, print_code_verbose)
DEFINE_IMPLICATION(print_all_code, print_builtin_code)
DEFINE_IMPLICATION(print_all_code, print_code_stubs)
DEFINE_IMPLICATION(print_all_code, code_comments)
1190
#ifdef DEBUG
1191
DEFINE_IMPLICATION(print_all_code, trace_codegen)
1192
#endif
1193 1194
#endif

mlippautz's avatar
mlippautz committed
1195 1196
#undef FLAG
#define FLAG FLAG_FULL
1197

1198 1199 1200 1201 1202 1203 1204
//
// Predictable mode related flags.
//

DEFINE_BOOL(predictable, false, "enable predictable mode")
DEFINE_IMPLICATION(predictable, single_threaded)
DEFINE_NEG_IMPLICATION(predictable, memory_reducer)
1205
DEFINE_VALUE_IMPLICATION(single_threaded, wasm_num_compilation_tasks, 0)
1206

1207
//
mlippautz's avatar
mlippautz committed
1208 1209 1210 1211 1212
// Threading related flags.
//

DEFINE_BOOL(single_threaded, false, "disable the use of background tasks")
DEFINE_NEG_IMPLICATION(single_threaded, concurrent_recompilation)
1213
DEFINE_NEG_IMPLICATION(single_threaded, concurrent_marking)
mlippautz's avatar
mlippautz committed
1214
DEFINE_NEG_IMPLICATION(single_threaded, concurrent_sweeping)
1215
DEFINE_NEG_IMPLICATION(single_threaded, minor_mc_parallel_marking)
mlippautz's avatar
mlippautz committed
1216
DEFINE_NEG_IMPLICATION(single_threaded, parallel_compaction)
1217
DEFINE_NEG_IMPLICATION(single_threaded, parallel_pointer_update)
1218
DEFINE_NEG_IMPLICATION(single_threaded, parallel_scavenge)
1219
DEFINE_NEG_IMPLICATION(single_threaded, concurrent_store_buffer)
1220
DEFINE_NEG_IMPLICATION(single_threaded, compiler_dispatcher)
mlippautz's avatar
mlippautz committed
1221

1222 1223 1224 1225 1226 1227 1228 1229
#undef FLAG

#ifdef VERIFY_PREDICTABLE
#define FLAG FLAG_FULL
#else
#define FLAG FLAG_READONLY
#endif

1230
DEFINE_BOOL(verify_predictable, false,
1231
            "this mode is used for checking that V8 behaves predictably")
1232
DEFINE_INT(dump_allocations_digest_at_alloc, -1,
1233
           "dump allocations digest each n-th allocation")
1234

1235 1236 1237 1238 1239 1240
//
// Read-only flags
//
#undef FLAG
#define FLAG FLAG_READONLY

1241
// assembler.h
1242
DEFINE_BOOL(enable_embedded_constant_pool, V8_EMBEDDED_CONSTANT_POOL,
1243
            "enable use of embedded constant pools (PPC only)")
1244

1245 1246 1247 1248
DEFINE_BOOL(unbox_double_fields, V8_DOUBLE_FIELDS_UNBOXING,
            "enable in-object double fields unboxing (64-bit only)")
DEFINE_IMPLICATION(unbox_double_fields, track_double_fields)

1249 1250 1251 1252
// Cleanup...
#undef FLAG_FULL
#undef FLAG_READONLY
#undef FLAG
1253
#undef FLAG_ALIAS
1254

1255 1256 1257 1258 1259 1260 1261 1262
#undef DEFINE_BOOL
#undef DEFINE_MAYBE_BOOL
#undef DEFINE_INT
#undef DEFINE_STRING
#undef DEFINE_FLOAT
#undef DEFINE_ARGS
#undef DEFINE_IMPLICATION
#undef DEFINE_NEG_IMPLICATION
1263
#undef DEFINE_NEG_VALUE_IMPLICATION
1264
#undef DEFINE_VALUE_IMPLICATION
1265 1266 1267 1268 1269
#undef DEFINE_ALIAS_BOOL
#undef DEFINE_ALIAS_INT
#undef DEFINE_ALIAS_STRING
#undef DEFINE_ALIAS_FLOAT
#undef DEFINE_ALIAS_ARGS
1270 1271 1272 1273 1274

#undef FLAG_MODE_DECLARE
#undef FLAG_MODE_DEFINE
#undef FLAG_MODE_DEFINE_DEFAULTS
#undef FLAG_MODE_META
1275
#undef FLAG_MODE_DEFINE_IMPLICATIONS
1276 1277

#undef COMMA