• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2021-2025 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6# http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14module:
15  name: compiler
16  namespace: ark::compiler
17
18options:
19- name: compiler-non-optimizing
20  type: bool
21  default: false
22  description: Skip all optimizations
23  tags: [perf]
24
25- name: compiler-regex
26  description: >
27     A regular expression that specifies methods to compile (ECMA-262 grammar).
28     A method matches if its qualified name (e.g. 'Foo::bar') is fully matched.
29  type: std::string
30  tags: [perf]
31  default: ".*"
32
33- name: compiler-regex-with-signature
34  description: >
35     A regular expression that specifies methods to compile (ECMA-262 grammar).
36     A method matches if its full signature (e.g. 'void Foo::bar(i32)') is fully matched.
37  type: std::string
38  tags: [perf]
39  default: ".*"
40
41- name: compiler-visualizer-dump
42  type: bool
43  default: false
44  description: Enable visualizer dump ir
45  tags: [debug]
46
47- name: compiler-dump
48  description: Enable dump ir
49  tags: [debug]
50  sub_options:
51  - name: final
52    type: bool
53    default: false
54    description: Dump ir only after last (codegen) pass
55  - name: compact
56    type: bool
57    default: false
58    description: Suppress dumping of some data (bc, SaveState instructions, etc)
59  - name: no-checks
60    type: bool
61    default: false
62    description: Dump data-flow inputs instead of check instructions
63  - name: life-intervals
64    type: bool
65    default: false
66    description: Dump life intervals from regalloc
67  - name: folder
68    type: std::string
69    default: ./ir_dump
70    description: Set folder for dump ir
71  - name: bytecode
72    type: bool
73    default: false
74    description: Enable printing byte code instruction after ir instruction in dump ir
75  - name: peepholes
76    type: bool
77    default: false
78    description: Enable dumps each time peephole applies
79  - name: source-line
80    type: bool
81    default: false
82    description: Dump source line after instruction
83
84- name: compiler-disasm-dump
85  description: Enable dump disasm to text files
86  tags: [debug]
87  sub_options:
88  - name: single-file
89    type: bool
90    default: false
91    description: Dump disasm files into single file, which is "disasm.txt"
92  - name: stdout
93    type: bool
94    default: false
95    description: Dump to the standard output
96  - name: code
97    type: bool
98    default: true
99    description: Dump generated assembly code. Default is true.
100  - name: code-info
101    type: bool
102    default: false
103    description: Dump code info
104  - name: file-name
105    type: std::string
106    default: "disasm.txt"
107    description: File name to dump. Used only when 'single-file' is set.
108
109- name: compiler-emit-asm
110  type: bool
111  default: false
112  description: Enable dump assembly to disasm.txt file (do not emit binary)
113  tags: [debug]
114
115- name: compiler-enable-tracing
116  type: bool
117  default: false
118  description: Enable tracing for passes
119  tags: [debug]
120
121- name: compiler-enable-tlab-events
122  type: bool
123  default: false
124  description: Enable events for tlab allocation
125  tags: [debug]
126
127- name: compiler-support-init-object-inst
128  type: bool
129  default: false
130  description: Compiler don't create InitObject  and GraphChecker checks this. The options are needed for bytecode optimizer.
131  tags: [test]
132
133- name: compiler-log
134  type: arg_list_t
135  default:
136    - none
137  possible_values:
138    - none
139    - all
140    - alias-analysis
141    - balance-expr
142    - branch-elim
143    - checks-elim
144    - codegen
145    - code-sink
146    - cse-opt
147    - graph-cloner
148    - deoptimize-elim
149    - cleanup
150    - if-merging
151    - ifconversion
152    - inlining
153    - ir-builder
154    - licm-opt
155    - licm-cond-opt
156    - loop-unswitch
157    - liveness-analyzer
158    - loop-transform
159    - lowering
160    - lower-boxed-boolean
161    - lse-opt
162    - memory-coalescing
163    - monitor-analysis
164    - optimize-string-concat
165    - peephole
166    - rle-opt
167    - regalloc
168    - split-resolver
169    - scheduler
170    - simplify-sb
171    - reserve-sb-buffer
172    - savestate-opt
173    - try-catch-resolving
174    - type-propagation
175    - vn-opt
176    - bridges-ss
177    - pm
178    - pea
179    - interop-intrinsic-opt
180    - native-call-opt
181  description: Set log compiler components
182  tags: [debug]
183  delimiter: ","
184
185- name: compiler-check-graph
186  type: bool
187  default: true
188  description: Enable Graph checking after each optimization
189  tags: [debug]
190
191- name: compiler-check-final
192  type: bool
193  default: false
194  description: Enable Graph checking only after last optimization(Codegen)
195  tags: [debug]
196
197- name: compiler-encode-intrinsics
198  type: bool
199  default: true
200  description: If false, we always call C implementation of an intrinsic
201  tags: [test]
202
203- name: compiler-lowering
204  type: bool
205  default: true
206  description: Enable Lowering Pass
207  tags: [perf]
208
209- name: compiler-lower-boxed-boolean
210  type: bool
211  default: true
212  description: Enable LowerBoxedBoolean Pass
213  tags: [perf]
214
215- name: compiler-code-sink
216  type: bool
217  default: true
218  description: Enable Code Sink Pass
219  tags: [perf]
220
221- name: compiler-balance-expressions
222  type: bool
223  default: true
224  description: Enable Balance Expressions Pass
225  tags: [perf]
226
227- name: compiler-branch-elimination
228  type: bool
229  default: true
230  description: Enable Branch Elimination Pass
231  tags: [perf]
232
233- name: compiler-optimize-string-concat
234  type: bool
235  default: true
236  description: Enable Optimize String.concat Pass
237  tags: [perf]
238
239- name: compiler-simplify-string-builder
240  type: bool
241  default: true
242  description: Enable Simplify StringBuilder Pass
243  tags: [perf]
244
245- name: compiler-reserve-string-builder-buffer
246  type: bool
247  default: true
248  description: Enable Reserve StringBuilder Buffer Pass
249  tags: [perf]
250
251- name: compiler-checks-elimination
252  type: bool
253  default: true
254  description: Enable Checks Elimination Pass
255  tags: [perf]
256
257- name: compiler-enable-replacing-checks-on-deoptimization
258  type: bool
259  default: true
260  description: Enable replacing checks on deoptimization in checks elimination
261  tags: [perf]
262
263- name: compiler-deoptimize-elimination
264  type: bool
265  default: true
266  description: Enable Deoptimize Elimination Pass
267  tags: [perf]
268
269- name: compiler-save-state-elimination
270  type: bool
271  default: true
272  description: Enable SaveState Elimination Pass
273  tags: [perf]
274
275- name: compiler-safepoint-elimination-limit
276  type: uint64_t
277  default: 50
278  description: Set the instructions limit in deoptimize elimination for removing safe points.
279  recommended_values: [10,1000]
280  tags: [perf]
281
282- name: compiler-implicit-null-check
283  type: bool
284  default: true
285  description: Apply Implicit Null Check
286  tags: [perf]
287
288- name: compiler-licm
289  type: bool
290  default: true
291  description: Enable LICM Pass
292  tags: [perf]
293
294- name: compiler-licm-hoist-limit
295  type: uint32_t
296  default: 200
297  description: Set the instructions limit which are hoisted by LICM
298  recommended_values: [1,200]
299  tags: [perf]
300
301- name: compiler-licm-conditions
302  type: bool
303  default: true
304  description: Enable LICM conditions Pass
305  tags: [perf]
306
307- name: compiler-loop-unswitch
308  type: bool
309  default: true
310  description: Enable Loop unswitch Pass
311  tags: [perf]
312
313- name: compiler-loop-unswitch-max-level
314  type: uint32_t
315  default: 3
316  description: Max loop unswitch level
317  tags: [perf]
318
319- name: compiler-loop-unswitch-max-insts
320  type: uint32_t
321  default: 100
322  description: Max loop unswitch instructions
323  tags: [perf]
324
325- name: compiler-loop-idioms
326  type: bool
327  default: true
328  description: Enable Loop idioms Pass
329  tags: [perf]
330
331- name: compiler-loop-peeling
332  type: bool
333  default: true
334  description: Enable Loop peeling Pass
335  tags: [perf]
336
337- name: compiler-loop-unroll
338  type: bool
339  default: true
340  description: Enable Loop unroll Pass
341  tags: [perf]
342
343- name: compiler-loop-unroll-factor
344  type: uint32_t
345  default: 6
346  description: Set loop unrolling factor
347  recommended_values: [2,10]
348  tags: [perf]
349
350- name: compiler-loop-unroll-inst-limit
351  type: uint32_t
352  default: 100
353  description: Set the instructions limit for the unrolling loop body
354  recommended_values: [10,1000]
355  tags: [perf]
356
357- name: compiler-unroll-loop-with-calls
358  type: bool
359  default: false
360  description: Enable unroll for loops containing method calls
361  tags: [perf]
362
363- name: compiler-unroll-with-side-exits
364  type: bool
365  default: true
366  description: Enable unroll with side exits for not countable loop
367  tags: [perf]
368
369- name: compiler-unroll-unknown-trip-count
370  type: bool
371  default: true
372  description: Enable unroll for loops for which trip count is not known in advance
373  tags: [perf]
374
375- name: compiler-lse
376  type: bool
377  default: true
378  description: Enable Load-Store Elimination Pass
379  tags: [perf]
380
381- name: compiler-cse
382  type: bool
383  default: false
384  description: Enable CSE Pass
385  tags: [perf]
386
387- name: compiler-vn
388  type: bool
389  default: true
390  description: Enable Value Numbering Pass
391  tags: [perf]
392
393- name: compiler-memory-coalescing
394  type: bool
395  default: true
396  description: Enable Memory Coalescing Pass
397  tags: [perf]
398
399- name: compiler-memory-coalescing-objects
400  type: bool
401  default: true
402  description: Apply Memory Coalescing to objects accesses
403  tags: [perf]
404
405- name: compiler-memory-coalescing-aligned
406  type: bool
407  default: false
408  description: Apply Memory Coalescing only to aligned accesses
409  tags: [perf]
410
411- name: compiler-optimize-native-calls
412  type: bool
413  default: true
414  description: Optimize Native API methods (insert call without asm bridge)
415  tags: [perf]
416
417- name: compiler-print-stats
418  type: bool
419  default: false
420  description: Print optimizations statistics
421  tags: [debug]
422
423- name: compiler-dump-stats-csv
424  type: std::string
425  default: ""
426  description: Dump optimizations statistics in csv file
427  tags: [debug]
428
429- name: compiler-enable-ir-stats
430  type: bool
431  default: false
432  description: Enable collecting ir stats on compiler statistic
433  tags: [debug]
434
435- name: compiler-dump-jit-stats-csv
436  type: std::string
437  default: ""
438  description: Dump JIT compilation statistics in csv file
439  tags: [debug]
440
441- name: compiler-use-safepoint
442  type: bool
443  default: true
444  description: Build SafePoint instructions
445  tags: [test]
446
447- name: compiler-defer-preheader-transform
448  type: bool
449  default: true
450  description: Defer processing of loop preheader in peepholer and branch elimination until past unrolling
451  tags: [perf]
452
453- name: compiler-inlining
454  type: bool
455  default: true
456  description: Enable inlining optimization
457  tags: [perf]
458
459- name: compiler-inline-external-methods
460  type: bool
461  default: true
462  description: Enable inlining external methods in JIT mode
463  tags: [perf]
464
465- name: compiler-inlining-blacklist
466  type: arg_list_t
467  default: []
468  description: Method names that should not be inlined
469  delimiter: ","
470  tags: [perf]
471
472- name: compiler-inlining-max-insts
473  type: uint32_t
474  default: 512
475  description: Maximum number of the IR instructions to be inlined, including instructions of the current graph.
476  recommended_values: [50,2000]
477  tags: [perf]
478
479- name: compiler-inlining-max-depth
480  type: uint32_t
481  default: 12
482  description: Maximum depth of the inlining.
483  recommended_values: [1,20]
484  tags: [perf]
485
486- name: compiler-inlining-recursive-calls-limit
487  type: uint32_t
488  default: 4
489  description: Maximum count of recursive calls in inlined call stack.
490  recommended_values: [1,10]
491  tags: [perf]
492
493- name: compiler-inlining-insts-bc-ratio
494  type: double
495  default: 0.4
496  description: Ratio of IR insts count to 1 byte of bytecode. Used for inlining heuristic
497  recommended_values: [0.1,5]
498  tags: [perf]
499
500- name: compiler-inlining-max-bc-size
501  type: uint32_t
502  default: 200
503  description: Maximum bytecode size for inlined functions, in bytes. Average bytecode instruction size is 2.8 bytes.
504  recommended_values: [10,1000]
505  tags: [perf]
506
507- name: compiler-inlining-always-inline-bc-size
508  type: uint32_t
509  default: 12
510  description: Always inline methods with bytecode size less or equal than this limit.
511  recommended_values: [0,50]
512  tags: [perf]
513
514- name: compiler-inline-simple-only
515  type: bool
516  default: false
517  description: Inline only simple methods that don't contain calls to runtime
518  tags: [perf]
519
520- name: compiler-inlining-skip-throw-blocks
521  type: bool
522  default: true
523  description: Don't inline methods inside blocks throwing an exception or performing deoptimization
524  tags: [perf]
525
526- name: compiler-inlining-skip-always-throw-methods
527  type: bool
528  default: true
529  description: Don't inline methods that always throw an exception
530  tags: [perf]
531
532- name: compiler-no-virtual-inlining
533  type: bool
534  default: false
535  description: Disable inlining of the virtual calls
536  tags: [perf]
537
538- name: compiler-no-cha-inlining
539  type: bool
540  default: false
541  description: Don't use CHA in the inlining
542  tags: [perf]
543
544- name: compiler-no-pic-inlining
545  type: bool
546  default: false
547  description: Don't use Polymorphic Inline Caches in the inlining
548  tags: [perf]
549
550- name: compiler-reset-local-allocator
551  type: bool
552  default: true
553  description: Reset local allocator between passes runs
554  tags: [test]
555
556- name: compiler-scheduling
557  type: bool
558  default: true
559  description: Enable Scheduling Pass
560  tags: [perf]
561
562- name: compiler-sched-latency
563  type: uint32_t
564  default: 2
565  description: Set default instruction latency
566  recommended_values: [1,5]
567  tags: [perf]
568
569- name: compiler-sched-latency-long
570  type: uint32_t
571  default: 7
572  description: Set loads latency
573  recommended_values: [2,15]
574  tags: [perf]
575
576- name: compiler-if-conversion
577  type: bool
578  default: true
579  description: Enable IfConversion Pass
580  tags: [perf]
581
582- name: compiler-if-conversion-limit
583  type: uint32_t
584  default: 2
585  description: Maximum amount of instructions in basicblock(s) for if-conversion
586  recommended_values: [1,10]
587  tags: [perf]
588
589- name: compiler-if-conversion-incrase-limit-threshold
590  type: uint32_t
591  default: 40
592  description: If the execution of each of the edge branch is greater than threshold in percents, then the limit increases
593  recommended_values: [0,100]
594  tags: [perf]
595
596- name: compiler-cross-arch
597  type: std::string
598  default: arm64
599  possible_values:
600    - arm
601    - arm64
602    - x86
603    - x86_64
604  description: On AMD64 enable creation of non-native code for testing purpose
605  tags: [test]
606
607- name: compiler-enable-events
608  type: bool
609  default: false
610  description: Enable optimizations events dump
611  tags: [debug, test]
612
613- name: compiler-events-path
614  type: std::string
615  default: ./compiler/events.csv
616  description: Set path for optimizations events dump
617  tags: [debug]
618
619- name: compiler-save-only-live-registers
620  type: bool
621  default: true
622  description: Save and Load only registers that contains live values when making calls.
623  tags: [perf]
624
625- name: compiler-ignore-failures
626  type: bool
627  default: true
628  description: Ignore failures occurred during compilation
629  tags: [test]
630
631- name: compiler-allow-backend-failures
632  type: bool
633  default: true
634  description: Ignore failures occurred during register allocation and code generation
635  tags: [test]
636
637- name: compiler-max-gen-code-size
638  type: uint32_t
639  default: 66060288
640  description: Maximum size of the generated code in code-cache, default 63 M
641  tags: [perf]
642
643- name: compiler-max-bytecode-size
644  type: uint32_t
645  default: 30000
646  description: Maximum size of the method's code to be compiled.
647  recommended_values: [10000,500000]
648  tags: [perf]
649
650- name: compiler-max-vregs-num
651  type: uint32_t
652  default: 8188
653  description: Maximum number of virtual registers in a method. Can't be more than 32764.
654  tags: [perf]
655
656- name: compiler-compact-prologue
657  type: bool
658  default: true
659  description: Omit unused callee-registers save/restore in prologue/epilogue when possible.
660  tags: [perf]
661
662- name: compiler-js-filter-intrinsics
663  type: bool
664  default: true
665  description: Enable intrinsics filter in JS Compiler
666  tags: [test]
667
668- name: compiler-reg-acc-alloc
669  type: bool
670  default: true
671  description: Enable accumulator register allocator pass
672  tags: [test]
673
674- name: compiler-regalloc-reg-mask
675  type: uint64_t
676  default: 0
677  description: Mask of registers, avaliable for regalloc
678  tags: [test]
679
680- name: compiler-verify-regalloc
681  type: bool
682  default: true
683  description: Verify register allocation results in debug mode.
684  tags: [debug]
685
686- name: compiler-move-constants
687  type: bool
688  default: true
689  description: Enable move constants from start block closer to usage
690  tags: [perf]
691
692- name: compiler-adjust-refs
693  type: bool
694  default: true
695  description: Enable hoisting of array data address
696
697- name: compiler-aot-load-string-plt
698  type: bool
699  default: true
700  description: Replace unconditional ResolveString runtime call with loading string reference from PLT slot for AOT.
701  tags: [perf]
702
703- name: compiler-remat-const
704  type: bool
705  default: true
706  description: Rematerialize constants instead of spilling them to the stack
707  tags: [perf]
708
709- name: compiler-unfold-const-array-max-size
710  type: uint32_t
711  default: 20
712  description: Set the maximum size of the constant array to unfold a single LoadConstArray instruction to the initial instructions set.
713  recommended_values: [2,1000]
714  tags: [perf]
715
716- name: compiler-spill-fill-pair
717  type: bool
718  default: true
719  description: Store and load values from successive stack slots as pair of values during SpillFill encoding.
720  tags: [perf]
721
722- name: compiler-frame-size
723  type: std::string
724  default: default
725  possible_values:
726    - default
727    - large
728  description: Set virtual frame size. Large frame size is used for AbcKit tool. Default is used for other cases.
729  tags: [perf]
730
731- name: compiler-cpu-features
732  type: arg_list_t
733  default: [sse42]
734  possible_values:
735    - none
736    - crc32
737    - sse42
738    - jscvt
739    - atomics
740  description: Set compiler CPU features
741  tags: [perf]
742  delimiter: ","
743
744- name: compiler-emit-debug-info
745  type: bool
746  default: false
747  description: Emit DWARF debug info for JIT/AOT code, PANDA_COMPILER_DEBUG_INFO should be set
748  tags: [debug]
749
750- name: compiler-aot-ra
751  type: bool
752  default: true
753  description: Enable AOT register allocation
754
755- name: compiler-freq-based-branch-reorder
756  type: bool
757  default: true
758  description: Enables/disables frequency based branch reorder
759
760- name: compiler-freq-based-branch-reorder-threshold
761  type: uint32_t
762  default: 80
763  description: Threshold in percents for frequency based branch reorder
764
765- name: compiler-inline-full-intrinsics
766  type: bool
767  default: false
768  description: Inline graph for dynamic insrinsics in IrBuilder
769
770- name: compiler-safe-points-require-reg-map
771  type: bool
772  default: false
773  description: Emit virtual registers stack map for safe points
774
775- name: compiler-scalar-replacement
776  type: bool
777  default: true
778  description: Enable scalar replacement optimization
779
780- name: compiler-peepholes
781  type: bool
782  default: true
783  description: Enable peepholes optimizations
784
785- name: compiler-if-merging
786  type: bool
787  default: true
788  description: Enable if-merging optimization
789
790- name: compiler-redundant-loop-elimination
791  type: bool
792  default: true
793  description: Enable redundant-loop-elimination optimization
794
795- name: compiler-optimize-memory-barriers
796  type: bool
797  default: true
798  description: Enable optimize-memory-barriers optimization
799
800- name: compiler-profile
801  type: std::string
802  default: ""
803  description: Path to a file with profile information
804
805- name: compiler-force-unresolved
806  type: bool
807  default: false
808  description: Force the compiler to generate method and field resolvers whenever it is possible (Debug mode only)
809  tags: [debug]
810
811- name: compiler-enable-fast-interop
812  type: bool
813  default: true
814  description: Enable fast ArkTS->JS interop
815  tags: [perf]
816
817- name: compiler-interop-intrinsic-optimization
818  type: bool
819  default: true
820  description: Enable merging local scopes in fast ArkTS->EcmaScript interop
821  tags: [perf]
822
823- name: compiler-interop-scope-object-limit
824  type: uint32_t
825  default: 256
826  description: Object limit for merged local scope in ArkTS->EcmaScript interop
827  tags: [perf]
828
829- name: compiler-interop-try-single-scope
830  type: bool
831  default: false
832  description: Try to create single scope for method in ArkTS->EcmaScript interop whenever possible
833  tags: [perf]
834
835- name: compiler-inst-graph-coloring-limit
836  type: uint32_t
837  default: 5000
838  description: Maximum number of the IR instructions to be chosen for graph coloring algorithm of register allocator
839  tags: [perf]
840
841- name: compiler-enforce-safepoint-placement
842  type: bool
843  default: false
844  description: Inserting safepoints at the beginning of every basic block and after every Nth IR instruction. N is determined by compiler-safepoint-distance-limit option
845  tags: [debug]
846
847- name: compiler-safepoint-distance-limit
848  type: uint32_t
849  default: 50
850  description: Distance limit between inserted safepoints
851  tags: [debug]
852
853events:
854- name: branch-elimination
855  fields:
856    - name: if_block_id
857      type: uint32_t
858    - name: if_block_pc
859      type: uint32_t
860    - name: cond_inst_id
861      type: uint32_t
862    - name: cond_inst_pc
863      type: uint32_t
864    - name: condition_type
865      type: const char*
866    - name: removed_edge_type
867      type: bool
868
869- name: code-sink
870  fields:
871    - name: sunk_inst_id
872      type: uint32_t
873    - name: sunk_inst_pc
874      type: uint32_t
875    - name: from_bb_id
876      type: uint32_t
877    - name: to_bb_id
878      type: uint32_t
879
880- name: checks-elimination
881  fields:
882    - name: name
883      type: const char*
884    - name: inst_id
885      type: uint32_t
886    - name: pc
887      type: uint32_t
888
889- name: cleanup
890  fields:
891    - name: removed_inst_id
892      type: uint32_t
893    - name: removed_inst_pc
894      type: uint32_t
895
896- name: cse
897  fields:
898    - name: removed_inst_id
899      type: uint32_t
900    - name: removed_inst_pc
901      type: uint32_t
902
903- name: deoptimize-elimination
904  fields:
905    - name: name
906      type: const char*
907    - name: inst_id
908      type: uint32_t
909    - name: pc
910      type: uint32_t
911
912- name: save-state-optimization
913  fields:
914    - name: name
915      type: const char*
916    - name: inst_id
917      type: uint32_t
918    - name: pc
919      type: uint32_t
920
921- name: if-conversion
922  fields:
923    - name: merge_block_id
924      type: uint32_t
925    - name: merge_block_pc
926      type: uint32_t
927    - name: merge_type
928      type: const char*
929    - name: removed_block_id1
930      type: int32_t
931    - name: removed_block_id2
932      type: int32_t
933    - name: removed_block_id3
934      type: int32_t
935
936- name: inlining
937  fields:
938    - name: inlined_method
939      type: const char*
940
941- name: lse
942  fields:
943    - name: removed_inst_id
944      type: uint32_t
945    - name: removed_inst_pc
946      type: uint32_t
947    - name: dominant_inst_id
948      type: uint32_t
949    - name: dominant_inst_pc
950      type: uint32_t
951    - name: code
952      type: const char*
953
954- name: redundant-loop-elimination
955  fields:
956    - name: loop_id
957      type: uint32_t
958    - name: loop_head_pc
959      type: uint32_t
960
961- name: loop-unroll
962  fields:
963    - name: loop_id
964      type: uint32_t
965    - name: loop_head_pc
966      type: uint32_t
967    - name: unroll_factor
968      type: uint32_t
969    - name: cloneable_inst_count
970      type: uint32_t
971    - name: unroll_type
972      type: const char*
973
974- name: loop-peeling
975  fields:
976    - name: loop_id
977      type: uint32_t
978    - name: loop_head_pc
979      type: uint32_t
980    - name: loop_exit_pc
981      type: uint32_t
982    - name: moved_inst_count
983      type: uint32_t
984
985- name: memory-coalescing
986  fields:
987    - name: first_inst_id
988      type: uint32_t
989    - name: first_inst_pc
990      type: uint32_t
991    - name: second_inst_id
992      type: uint32_t
993    - name: second_inst_pc
994      type: uint32_t
995    - name: new_inst_id
996      type: uint32_t
997    - name: type
998      type: const char *
999
1000- name: peephole
1001  fields:
1002    - name: name
1003      type: const char*
1004    - name: inst_id
1005      type: uint32_t
1006    - name: pc
1007      type: uint32_t
1008
1009- name: scheduler
1010  fields:
1011    - name: block_id
1012      type: uint32_t
1013    - name: block_pc
1014      type: uint32_t
1015    - name: old_cycles
1016      type: uint32_t
1017    - name: num_barriers
1018      type: uint32_t
1019    - name: critical_path
1020      type: uint32_t
1021    - name: new_cycles
1022      type: uint32_t
1023
1024- name: gvn
1025  fields:
1026    - name: inst_id
1027      type: uint32_t
1028    - name: inst_pc
1029      type: uint32_t
1030    - name: equal_inst_id
1031      type: uint32_t
1032    - name: equal_inst_pc
1033      type: uint32_t
1034
1035- name: licm
1036  fields:
1037    - name: inst_id
1038      type: uint32_t
1039    - name: inst_pc
1040      type: uint32_t
1041    - name: old_loop_id
1042      type: uint32_t
1043    - name: new_loop_id
1044      type: uint32_t
1045
1046- name: lowering
1047  fields:
1048    - name: name
1049      type: const char*
1050    - name: inst_id
1051      type: uint32_t
1052    - name: pc
1053      type: uint32_t
1054
1055- name: reg-alloc
1056  fields:
1057    - name: sf_inst_id
1058      type: uint32_t
1059    - name: sf_purpose
1060      type: const char*
1061    - name: sf_type
1062      type: const char*
1063    - name: src
1064      type: uint32_t
1065    - name: dst
1066      type: uint32_t
1067    - name: reg_type
1068      type: const char*
1069
1070tags:
1071  perf: an option that affects the performance and/or codesize
1072  debug: debugging option (checkers, events, dumps, logs e.t.c)
1073  test: a test option or an option used by other components
1074