# Copyright (c) 2021-2022 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. module: name: compiler namespace: panda::compiler options: - name: compiler-non-optimizing type: bool default: false description: Skip all optimizations tags: [perf] - name: compiler-regex type: std::string default: ".*" description: A regular expression that specifies methods to compile. The grammar used is ECMA-262 RegExp grammar. tags: [perf] - name: compiler-visualizer-dump type: bool default: false description: Enable visualizer dump ir tags: [debug] - name: compiler-dump description: Enable dump ir tags: [debug] sub_options: - name: final type: bool default: false description: Dump ir only after last (codegen) pass - name: compact type: bool default: false description: Suppress dumping of some data (bc, SaveState instructions, etc) - name: life-intervals type: bool default: false description: Dump life intervals from regalloc - name: folder type: std::string default: ./ir_dump description: Set folder for dump ir - name: bytecode type: bool default: false description: Enable printing byte code instruction after ir instruction in dump ir - name: peepholes type: bool default: false description: Enable dumps each time peephole applies - name: compiler-disasm-dump description: Enable dump disasm to text files tags: [debug] sub_options: - name: single-file type: bool default: false description: Dump disasm files into single file, which is "disasm.txt" - name: stdout type: bool default: false description: Dump to the standard output - name: code type: bool default: true description: Dump generated assembly code. Default is true. - name: code-info type: bool default: false description: Dump code info - name: file-name type: std::string default: "disasm.txt" description: File name to dump. Used only when 'single-file' is set. - name: compiler-emit-asm type: bool default: false description: Enable dump assembly to disasm.txt file (do not emit binary) tags: [debug] - name: compiler-enable-tracing type: bool default: false description: Enable tracing for passes tags: [debug] - name: compiler-enable-tlab-events type: bool default: false description: Enable events for tlab allocation tags: [debug] - name: compiler-support-init-object-inst type: bool default: false description: Compiler don't create InitObject and GraphChecker checks this. The options are needed for bytecode optimizer. tags: [test] - name: compiler-log type: arg_list_t default: - none possible_values: - none - all - alias-analysis - balance-expr - branch-elim - checks-elim - codegen - code-sink - cse-opt - graph-cloner - deoptimize-elim - cleanup - ifconversion - inlining - ir-builder - licm-opt - liveness-analyzer - loop-transform - lowering - lse-opt - memory-coalescing - monitor-analysis - peephole - rle-opt - regalloc - split-resolver - scheduler - try-catch-resolving - vn-opt - pm description: Set log compiler components tags: [debug] delimiter: "," - name: compiler-check-graph type: bool default: true description: Enable Graph checking after each optimization tags: [debug] - name: compiler-check-final type: bool default: false description: Enable Graph checking only after last optimization(Codegen) tags: [debug] - name: compiler-encode-intrinsics type: bool default: true description: If false, we always call C impementation of an intrinsic tags: [test] - name: compiler-lowering type: bool default: true description: Enable Lowering Pass tags: [perf] - name: compiler-code-sink type: bool default: true description: Enable Code Sink Pass tags: [perf] - name: compiler-balance-expressions type: bool default: true description: Enable Balance Expressions Pass tags: [perf] - name: compiler-branch-elimination type: bool default: true description: Enable Branch Elimination Pass tags: [perf] - name: compiler-checks-elimination type: bool default: true description: Enable Checks Elimination Pass tags: [perf] - name: compiler-enable-replacing-checks-on-deoptimization type: bool default: true description: Enable replacing checks on deoptimization in checks elimination tags: [perf] - name: compiler-deoptimize-elimination type: bool default: true description: Enable Deoptimize Elimination Pass tags: [perf] - name: compiler-safepoint-elimination-limit type: uint64_t default: 50 description: Set the instructions limit in deoptimize elimination for removing safe points. recommended_values: [10,1000] tags: [perf] - name: compiler-implicit-null-check type: bool default: true description: Apply Implicit Null Check tags: [perf] - name: compiler-licm type: bool default: true description: Enable LICM Pass tags: [perf] - name: compiler-licm-hoist-limit type: uint32_t default: 8 description: Set the instructions limit which are hoisted by LICM recommended_values: [1,60] tags: [perf] - name: compiler-loop-peeling type: bool default: true description: Enable Loop peeling Pass tags: [perf] - name: compiler-loop-unroll type: bool default: true description: Enable Loop unroll Pass tags: [perf] - name: compiler-loop-unroll-factor type: uint32_t default: 6 description: Set loop unrolling factor recommended_values: [2,10] tags: [perf] - name: compiler-loop-unroll-inst-limit type: uint32_t default: 100 description: Set the instructions limit for the unrolling loop body recommended_values: [10,1000] tags: [perf] - name: compiler-unroll-loop-with-calls type: bool default: false description: Enable unroll for loops containing method calls tags: [perf] - name: compiler-unroll-with-side-exits type: bool default: true description: Enable unroll with side exits for not countable loop tags: [perf] - name: compiler-lse type: bool default: true description: Enable Load-Store Elimination Pass tags: [perf] - name: compiler-cse type: bool default: false description: Enable CSE Pass tags: [perf] - name: compiler-vn type: bool default: true description: Enable Value Numbering Pass tags: [perf] - name: compiler-memory-coalescing type: bool default: true description: Enable Memory Coalescing Pass tags: [perf] - name: compiler-memory-coalescing-objects type: bool default: true description: Apply Memory Coalescing to objects accesses tags: [perf] - name: compiler-memory-coalescing-aligned type: bool default: false description: Apply Memory Coalescing only to aligned accesses tags: [perf] - name: compiler-print-stats type: bool default: false description: Print optimizations statistics tags: [debug] - name: compiler-dump-stats-csv type: std::string default: "" description: Dump optimizations statistics in csv file tags: [debug] - name: compiler-enable-ir-stats type: bool default: false description: Enable collecting ir stats on compiler statistic tags: [debug] - name: compiler-use-safepoint type: bool default: true description: Build SafePoint instructions tags: [test] - name: compiler-inlining type: bool default: true description: Enable inlining optimization tags: [perf] - name: compiler-inline-external-methods type: bool default: true description: Enable inlining external methods in JIT mode tags: [perf] - name: compiler-inlining-blacklist type: arg_list_t default: [] description: Method names that should not be inlined delimiter: "," tags: [perf] - name: compiler-inlining-max-insts type: uint32_t default: 1024 description: Maximum number of the IR instructions to be inlined, including instructions of the current graph. recommended_values: [50,2000] tags: [perf] - name: compiler-inlining-max-depth type: uint32_t default: 4 description: Maximum depth of the inlining. recommended_values: [1,10] tags: [perf] - name: compiler-inlining-max-size type: uint32_t default: 200 description: Maximum bytecode size for inlined functions, in bytes. Avarage bytecode instruction size is 2.8 bytes. recommended_values: [10,1000] tags: [perf] - name: compiler-inline-simple-only type: bool default: false description: Inline only simple methods that don't contain calls to runtime tags: [perf] - name: compiler-inlining-skip-throw-blocks type: bool default: true description: Don't inline methods inside blocks throwing an exception or performing deoptimization tags: [perf] - name: compiler-inlining-skip-always-throw-methods type: bool default: true description: Don't inline methods that always throw an exception tags: [perf] - name: compiler-no-virtual-inlining type: bool default: false description: Disable inlining of the virtual calls tags: [perf] - name: compiler-no-cha-inlining type: bool default: false description: Don't use CHA in the inlining tags: [perf] - name: compiler-no-pic-inlining type: bool default: false description: Don't use Polymorphic Inline Caches in the inlining tags: [perf] - name: compiler-reset-local-allocator type: bool default: true description: Reset local allocator between passes runs tags: [test] - name: compiler-scheduling type: bool default: true description: Enable Scheduling Pass tags: [perf] - name: compiler-sched-latency type: uint32_t default: 2 description: Set default instruction latency recommended_values: [1,5] tags: [perf] - name: compiler-sched-latency-long type: uint32_t default: 7 description: Set loads latency recommended_values: [2,15] tags: [perf] - name: compiler-if-conversion type: bool default: true description: Enable IfConversion Pass tags: [perf] - name: compiler-if-conversion-limit type: uint32_t default: 2 description: Maximum amount of instructions in basicblock(s) for if-conversion recommended_values: [1,10] tags: [perf] - name: compiler-cross-arch type: std::string default: arm64 possible_values: - arm - arm64 - x86 - x86_64 description: On AMD64 enable creation of non-native code for testing purpose tags: [test] - name: compiler-enable-events type: bool default: false description: Enable optimizations events dump tags: [debug, test] - name: compiler-events-path type: std::string default: ./compiler/events.csv description: Set path for optimizations events dump tags: [debug] - name: compiler-save-only-live-registers type: bool default: true description: Save and Load only registers that contains live values when making calls. tags: [perf] - name: compiler-ignore-failures type: bool default: true description: Ignore failures occurred during compilation tags: [test] - name: compiler-allow-backend-failures type: bool default: true description: Ignore failures occurred during register allocation and code generation tags: [test] - name: compiler-max-gen-code-size type: uint32_t default: 66060288 description: Maximum size of the generated code in code-cache, default 63 M tags: [perf] - name: compiler-max-bytecode-size type: uint32_t default: 30000 description: Maximum size of the method's code to be compiled. recommended_values: [10000,500000] tags: [perf] - name: compiler-max-vregs-num type: uint32_t default: 65536 description: Maximum number of virtual registers in a method. tags: [perf] - name: compiler-compact-prologue type: bool default: true description: Omit unused callee-registers save/restore in prologue/epilogue when possible. tags: [perf] - name: compiler-js-filter-intrinsics type: bool default: true description: Enable intrinsics filter in JS Compiler tags: [test] - name: compiler-reg-acc-alloc type: bool default: true description: Enable accumulator register allocator pass tags: [test] - name: compiler-regalloc-reg-mask type: uint64_t default: 0 description: Mask of registers, avaliable for regalloc tags: [test] - name: compiler-verify-regalloc type: bool default: true description: Verify register allocation results in debug mode. tags: [debug] - name: compiler-move-constants type: bool default: true description: Enable move constants from start block closer to usage tags: [perf] - name: compiler-adjust-refs type: bool default: true description: Enable hoisting of array data address - name: compiler-aot-load-string-plt type: bool default: true description: Replace unconditional ResolveString runtime call with loading string reference from PLT slot for AOT. tags: [perf] - name: compiler-remat-const type: bool default: true description: Rematerialize constants instead of spilling them to the stack tags: [perf] - name: compiler-unfold-const-array-max-size type: uint32_t default: 20 description: Set the maximum size of the constant array to unfold a single LoadConstArray instruction to the initial instructions set. recommended_values: [2,1000] tags: [perf] - name: compiler-spill-fill-pair type: bool default: true description: Store and load values from successive stack slots as pair of values during SpillFill encoding. tags: [perf] - name: compiler-cpu-features type: arg_list_t default: [sse42] possible_values: - none - crc32 - sse42 description: Set compiler CPU features tags: [perf] delimiter: "," - name: compiler-emit-debug-info type: bool default: false description: Emit DWARF debug info for JIT/AOT code, PANDA_COMPILER_CFI should be set tags: [debug] - name: compiler-aot-ra type: bool default: true description: Enable AOT register allocation - name: compiler-freq-based-branch-reorder type: bool default: true description: Enables/disables frequency based branch reorder - name: compiler-freq-based-branch-reorder-threshold type: uint32_t default: 80 description: Threshold in percents for frequency based branch reorder - name: compiler-inline-full-intrinsics type: bool default: false description: Inline graph for dynamic insrinsics in IrBuilder events: - name: branch-elimination fields: - name: if_block_id type: uint32_t - name: if_block_pc type: uint32_t - name: cond_inst_id type: uint32_t - name: cond_inst_pc type: uint32_t - name: condition_type type: const char* - name: removed_edge_type type: bool - name: code-sink fields: - name: sunk_inst_id type: uint32_t - name: sunk_inst_pc type: uint32_t - name: from_bb_id type: uint32_t - name: to_bb_id type: uint32_t - name: checks-elimination fields: - name: name type: const char* - name: inst_id type: uint32_t - name: pc type: uint32_t - name: cleanup fields: - name: removed_inst_id type: uint32_t - name: removed_inst_pc type: uint32_t - name: cse fields: - name: removed_inst_id type: uint32_t - name: removed_inst_pc type: uint32_t - name: deoptimize-elimination fields: - name: name type: const char* - name: inst_id type: uint32_t - name: pc type: uint32_t - name: if-conversion fields: - name: merge_block_id type: uint32_t - name: merge_block_pc type: uint32_t - name: merge_type type: const char* - name: removed_block_id1 type: int32_t - name: removed_block_id2 type: int32_t - name: removed_block_id3 type: int32_t - name: inlining fields: - name: inlined_method type: const char* - name: lse fields: - name: removed_inst_id type: uint32_t - name: removed_inst_pc type: uint32_t - name: dominant_inst_id type: uint32_t - name: dominant_inst_pc type: uint32_t - name: code type: const char* - name: redundant-loop-elimination fields: - name: loop_id type: uint32_t - name: loop_head_pc type: uint32_t - name: loop-unroll fields: - name: loop_id type: uint32_t - name: loop_head_pc type: uint32_t - name: unroll_factor type: uint32_t - name: cloneable_inst_count type: uint32_t - name: loop-peeling fields: - name: loop_id type: uint32_t - name: loop_head_pc type: uint32_t - name: loop_exit_pc type: uint32_t - name: moved_inst_count type: uint32_t - name: memory-coalescing fields: - name: first_inst_id type: uint32_t - name: first_inst_pc type: uint32_t - name: second_inst_id type: uint32_t - name: second_inst_pc type: uint32_t - name: new_inst_id type: uint32_t - name: type type: const char * - name: peephole fields: - name: name type: const char* - name: inst_id type: uint32_t - name: pc type: uint32_t - name: scheduler fields: - name: block_id type: uint32_t - name: block_pc type: uint32_t - name: old_cycles type: uint32_t - name: num_barriers type: uint32_t - name: critical_path type: uint32_t - name: new_cycles type: uint32_t - name: gvn fields: - name: inst_id type: uint32_t - name: inst_pc type: uint32_t - name: equal_inst_id type: uint32_t - name: equal_inst_pc type: uint32_t - name: licm fields: - name: inst_id type: uint32_t - name: inst_pc type: uint32_t - name: old_loop_id type: uint32_t - name: new_loop_id type: uint32_t - name: lowering fields: - name: name type: const char* - name: inst_id type: uint32_t - name: pc type: uint32_t - name: reg-alloc fields: - name: sf_inst_id type: uint32_t - name: sf_purpose type: const char* - name: sf_type type: const char* - name: src type: uint32_t - name: dst type: uint32_t - name: reg_type type: const char* tags: perf: an option that affects the performance and/or codesize debug: debugging option (checkers, events, dumps, logs e.t.c) test: a test option or an option used by other components