in Jit/pyjit.cpp [220:523]
void initFlagProcessor() {
use_jit = 0;
write_profile_file = "";
jit_profile_interp = 0;
jl_fn = "";
jit_help = 0;
if (!xarg_flag_processor.hasOptions()) {
// flags are inspected in order of definition below
xarg_flag_processor.addOption(
"jit", "PYTHONJIT", use_jit, "Enable the JIT");
xarg_flag_processor.addOption(
"jit-debug",
"PYTHONJITDEBUG",
[](string) {
g_debug = 1;
g_debug_verbose = 1;
},
"JIT debug and extra logging");
xarg_flag_processor
.addOption(
"jit-log-file",
"PYTHONJITLOGFILE",
[](string log_filename) { setJitLogFile(log_filename); },
"write log entries to <filename> rather than stderr")
.withFlagParamName("filename");
xarg_flag_processor
.addOption(
"jit-asm-syntax",
"PYTHONJITASMSYNTAX",
[](string asm_syntax) { setASMSyntax(asm_syntax); },
"set the assembly syntax used in log files")
.withFlagParamName("intel|att")
.withDebugMessageOverride("Sets the assembly syntax used in log files");
xarg_flag_processor
.addOption(
"jit-debug-refcount",
"PYTHONJITDEBUGREFCOUNT",
g_debug_refcount,
"JIT refcount insertion debug mode")
.withDebugMessageOverride("Enabling");
xarg_flag_processor
.addOption(
"jit-dump-hir",
"PYTHONJITDUMPHIR",
g_dump_hir,
"log the HIR representation of all functions after initial "
"lowering from bytecode")
.withDebugMessageOverride("Dump initial HIR of JITted functions");
xarg_flag_processor
.addOption(
"jit-dump-hir-passes",
"PYTHONJITDUMPHIRPASSES",
g_dump_hir_passes,
"log the HIR after each optimization pass")
.withDebugMessageOverride(
"Dump HIR of JITted functions after each individual optimization "
"pass");
xarg_flag_processor
.addOption(
"jit-dump-final-hir",
"PYTHONJITDUMPFINALHIR",
g_dump_final_hir,
"log the HIR after all optimizations")
.withDebugMessageOverride(
"Dump final HIR of JITted functions after all optimizations");
xarg_flag_processor
.addOption(
"jit-dump-lir",
"PYTHONJITDUMPLIR",
g_dump_lir,
"log the LIR representation of all functions after lowering from "
"HIR")
.withDebugMessageOverride("Dump initial LIR of JITted functions");
xarg_flag_processor.addOption(
"jit-dump-lir-no-origin",
"PYTHONJITDUMPLIRNOORIGIN",
[](string) {
g_dump_lir = 1;
g_dump_lir_no_origin = 1;
},
"JIT dump-lir mode without origin data");
xarg_flag_processor.addOption(
"jit-dump-c-helper",
"PYTHONJITDUMPCHELPER",
g_dump_c_helper,
"dump all c invocations");
xarg_flag_processor.addOption(
"jit-disas-funcs",
"PYTHONJITDISASFUNCS",
g_dump_asm,
"jit-disas-funcs/PYTHONJITDISASFUNCS are deprecated and will soon be "
"removed. Use jit-dump-asm and PYTHONJITDUMPASM instead");
xarg_flag_processor
.addOption(
"jit-dump-asm",
"PYTHONJITDUMPASM",
g_dump_asm,
"log the final compiled code, annotated with HIR instructions")
.withDebugMessageOverride("Dump asm of JITted functions");
xarg_flag_processor.addOption(
"jit-gdb-support",
"PYTHONJITGDBSUPPORT",
[](string) {
g_debug = 1;
g_gdb_support = 1;
},
"GDB support and JIT debug mode");
xarg_flag_processor.addOption(
"jit-gdb-stubs-support",
"PYTHONJITGDBSTUBSSUPPORT",
g_gdb_stubs_support,
"GDB support for stubs");
xarg_flag_processor.addOption(
"jit-gdb-write-elf",
"PYTHONJITGDBWRITEELF",
[](string) {
g_debug = 1;
g_gdb_support = 1;
g_gdb_write_elf_objects = 1;
},
"Debugging aid, GDB support with ELF output");
xarg_flag_processor.addOption(
"jit-dump-stats",
"PYTHONJITDUMPSTATS",
g_dump_stats,
"Dump JIT runtime stats at shutdown");
xarg_flag_processor.addOption(
"jit-disable-lir-inliner",
"PYTHONJITDISABLELIRINLINER",
g_disable_lir_inliner,
"disable JIT lir inlining");
xarg_flag_processor.addOption(
"jit-disable-huge-pages",
"PYTHONJITDISABLEHUGEPAGES",
[](string) { jit_config.use_huge_pages = false; },
"disable huge page support");
xarg_flag_processor.addOption(
"jit-enable-jit-list-wildcards",
"PYTHONJITENABLEJITLISTWILDCARDS",
jit_config.allow_jit_list_wildcards,
"allow wildcards in JIT list");
xarg_flag_processor.addOption(
"jit-all-static-functions",
"PYTHONJITALLSTATICFUNCTIONS",
jit_config.compile_all_static_functions,
"JIT-compile all static functions");
xarg_flag_processor
.addOption(
"jit-list-file",
"PYTHONJITLISTFILE",
[](string listFile) {
jl_fn = listFile;
use_jit = 1;
},
"Load list of functions to compile from <filename>")
.withFlagParamName("filename");
xarg_flag_processor
.addOption(
"jit-read-profile",
"PYTHONJITREADPROFILE",
[](string read_profile_file) {
JIT_LOG("Loading profile data from %s", read_profile_file);
readProfileData(read_profile_file);
},
"Load profile data from <filename>")
.withFlagParamName("filename");
xarg_flag_processor
.addOption(
"jit-write-profile",
"PYTHONJITWRITEPROFILE",
write_profile_file,
"Write profiling data to <filename>")
.withFlagParamName("filename");
xarg_flag_processor.addOption(
"jit-profile-interp",
"PYTHONJITPROFILEINTERP",
jit_profile_interp,
"interpreter profiling");
xarg_flag_processor.addOption(
"jit-disable",
"PYTHONJITDISABLE",
[](int val) { use_jit = !val; },
"disable the JIT");
// these are only set if use_jit == 1
xarg_flag_processor.addOption(
"jit-shadow-frame",
"PYTHONJITSHADOWFRAME",
[](int val) {
if (use_jit) {
jit_config.frame_mode = val ? SHADOW_FRAME : PY_FRAME;
}
},
"enable shadow frame mode");
xarg_flag_processor.addOption(
"jit-no-type-slots",
"PYTHONJITNOTYPESLOTS",
[](int val) {
if (use_jit) {
jit_config.are_type_slots_enabled = !val;
}
},
"turn off type slots");
xarg_flag_processor
.addOption(
"jit-batch-compile-workers",
"PYTHONJITBATCHCOMPILEWORKERS",
jit_config.batch_compile_workers,
"set the number of batch compile workers to <COUNT>")
.withFlagParamName("COUNT");
xarg_flag_processor
.addOption(
"jit-multithreaded-compile-test",
"PYTHONJITMULTITHREADEDCOMPILETEST",
[](int val) {
if (use_jit) {
jit_config.multithreaded_compile_test = val;
}
},
"JIT multithreaded compile test")
.isHiddenFlag(true);
xarg_flag_processor.addOption(
"jit-list-match-line-numbers",
"PYTHONJITLISTMATCHLINENUMBERS",
[](int val) {
if (use_jit) {
jitlist_match_line_numbers(val);
}
},
"JIT list match line numbers");
xarg_flag_processor
.addOption(
"jit-time",
"",
[](string flag_value) { parseAndSetFuncList(flag_value); },
"Measure time taken in compilation phases and output summary to "
"stderr or approperiate logfile. Only functions in comma seperated "
"<function_list> list will be included. Comma seperated list may "
"include wildcards, * and ?. Wildcards are processed in glob "
"fashion and not as regex.")
.withFlagParamName("function_list")
.withDebugMessageOverride(
"Will capture time taken in compilation phases and output summary");
;
xarg_flag_processor.addOption(
"jit-enable-hir-inliner",
"PYTHONJITENABLEHIRINLINER",
[](int val) {
if (use_jit && val) {
_PyJIT_EnableHIRInliner();
}
},
"Enable the JIT's HIR inliner");
xarg_flag_processor.addOption(
"jit-dump-hir-passes-json",
"PYTHONJITDUMPHIRPASSESJSON",
[](string json_output_dir) {
g_dump_hir_passes_json = ::strdup(json_output_dir.c_str());
int mkdir_result = ::mkdir(g_dump_hir_passes_json, 0755);
JIT_CHECK(
mkdir_result == 0 || errno == EEXIST,
"could not make JSON directory");
},
"Dump IR passes as JSON to the directory specified by this flag's "
"value");
xarg_flag_processor.addOption(
"jit-help", "", jit_help, "print all available JIT flags and exits");
}
xarg_flag_processor.setFlags(PySys_GetXOptions());
}