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