1b1994897Sopenharmony_ci# Copyright (c) 2021-2022 Huawei Device Co., Ltd.
2b1994897Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
3b1994897Sopenharmony_ci# you may not use this file except in compliance with the License.
4b1994897Sopenharmony_ci# You may obtain a copy of the License at
5b1994897Sopenharmony_ci#
6b1994897Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0
7b1994897Sopenharmony_ci#
8b1994897Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
9b1994897Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
10b1994897Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11b1994897Sopenharmony_ci# See the License for the specific language governing permissions and
12b1994897Sopenharmony_ci# limitations under the License.
13b1994897Sopenharmony_ci
14b1994897Sopenharmony_cimodule:
15b1994897Sopenharmony_ci  name: compiler
16b1994897Sopenharmony_ci  namespace: panda::compiler
17b1994897Sopenharmony_ci
18b1994897Sopenharmony_cioptions:
19b1994897Sopenharmony_ci- name: compiler-non-optimizing
20b1994897Sopenharmony_ci  type: bool
21b1994897Sopenharmony_ci  default: false
22b1994897Sopenharmony_ci  description: Skip all optimizations
23b1994897Sopenharmony_ci  tags: [perf]
24b1994897Sopenharmony_ci
25b1994897Sopenharmony_ci- name: compiler-regex
26b1994897Sopenharmony_ci  type: std::string
27b1994897Sopenharmony_ci  default: ".*"
28b1994897Sopenharmony_ci  description: A regular expression that specifies methods to compile. The grammar used is ECMA-262 RegExp grammar.
29b1994897Sopenharmony_ci  tags: [perf]
30b1994897Sopenharmony_ci
31b1994897Sopenharmony_ci- name: compiler-visualizer-dump
32b1994897Sopenharmony_ci  type: bool
33b1994897Sopenharmony_ci  default: false
34b1994897Sopenharmony_ci  description: Enable visualizer dump ir
35b1994897Sopenharmony_ci  tags: [debug]
36b1994897Sopenharmony_ci
37b1994897Sopenharmony_ci- name: compiler-dump
38b1994897Sopenharmony_ci  description: Enable dump ir
39b1994897Sopenharmony_ci  tags: [debug]
40b1994897Sopenharmony_ci  sub_options:
41b1994897Sopenharmony_ci  - name: final
42b1994897Sopenharmony_ci    type: bool
43b1994897Sopenharmony_ci    default: false
44b1994897Sopenharmony_ci    description: Dump ir only after last (codegen) pass
45b1994897Sopenharmony_ci  - name: compact
46b1994897Sopenharmony_ci    type: bool
47b1994897Sopenharmony_ci    default: false
48b1994897Sopenharmony_ci    description: Suppress dumping of some data (bc, SaveState instructions, etc)
49b1994897Sopenharmony_ci  - name: life-intervals
50b1994897Sopenharmony_ci    type: bool
51b1994897Sopenharmony_ci    default: false
52b1994897Sopenharmony_ci    description: Dump life intervals from regalloc
53b1994897Sopenharmony_ci  - name: folder
54b1994897Sopenharmony_ci    type: std::string
55b1994897Sopenharmony_ci    default: ./ir_dump
56b1994897Sopenharmony_ci    description: Set folder for dump ir
57b1994897Sopenharmony_ci  - name: bytecode
58b1994897Sopenharmony_ci    type: bool
59b1994897Sopenharmony_ci    default: false
60b1994897Sopenharmony_ci    description: Enable printing byte code instruction after ir instruction in dump ir
61b1994897Sopenharmony_ci  - name: peepholes
62b1994897Sopenharmony_ci    type: bool
63b1994897Sopenharmony_ci    default: false
64b1994897Sopenharmony_ci    description: Enable dumps each time peephole applies
65b1994897Sopenharmony_ci
66b1994897Sopenharmony_ci- name: compiler-disasm-dump
67b1994897Sopenharmony_ci  description: Enable dump disasm to text files
68b1994897Sopenharmony_ci  tags: [debug]
69b1994897Sopenharmony_ci  sub_options:
70b1994897Sopenharmony_ci  - name: single-file
71b1994897Sopenharmony_ci    type: bool
72b1994897Sopenharmony_ci    default: false
73b1994897Sopenharmony_ci    description: Dump disasm files into single file, which is "disasm.txt"
74b1994897Sopenharmony_ci  - name: stdout
75b1994897Sopenharmony_ci    type: bool
76b1994897Sopenharmony_ci    default: false
77b1994897Sopenharmony_ci    description: Dump to the standard output
78b1994897Sopenharmony_ci  - name: code
79b1994897Sopenharmony_ci    type: bool
80b1994897Sopenharmony_ci    default: true
81b1994897Sopenharmony_ci    description: Dump generated assembly code. Default is true.
82b1994897Sopenharmony_ci  - name: code-info
83b1994897Sopenharmony_ci    type: bool
84b1994897Sopenharmony_ci    default: false
85b1994897Sopenharmony_ci    description: Dump code info
86b1994897Sopenharmony_ci  - name: file-name
87b1994897Sopenharmony_ci    type: std::string
88b1994897Sopenharmony_ci    default: "disasm.txt"
89b1994897Sopenharmony_ci    description: File name to dump. Used only when 'single-file' is set.
90b1994897Sopenharmony_ci
91b1994897Sopenharmony_ci- name: compiler-emit-asm
92b1994897Sopenharmony_ci  type: bool
93b1994897Sopenharmony_ci  default: false
94b1994897Sopenharmony_ci  description: Enable dump assembly to disasm.txt file (do not emit binary)
95b1994897Sopenharmony_ci  tags: [debug]
96b1994897Sopenharmony_ci
97b1994897Sopenharmony_ci- name: compiler-enable-tracing
98b1994897Sopenharmony_ci  type: bool
99b1994897Sopenharmony_ci  default: false
100b1994897Sopenharmony_ci  description: Enable tracing for passes
101b1994897Sopenharmony_ci  tags: [debug]
102b1994897Sopenharmony_ci
103b1994897Sopenharmony_ci- name: compiler-enable-tlab-events
104b1994897Sopenharmony_ci  type: bool
105b1994897Sopenharmony_ci  default: false
106b1994897Sopenharmony_ci  description: Enable events for tlab allocation
107b1994897Sopenharmony_ci  tags: [debug]
108b1994897Sopenharmony_ci
109b1994897Sopenharmony_ci- name: compiler-support-init-object-inst
110b1994897Sopenharmony_ci  type: bool
111b1994897Sopenharmony_ci  default: false
112b1994897Sopenharmony_ci  description: Compiler don't create InitObject  and GraphChecker checks this. The options are needed for bytecode optimizer.
113b1994897Sopenharmony_ci  tags: [test]
114b1994897Sopenharmony_ci
115b1994897Sopenharmony_ci- name: compiler-log
116b1994897Sopenharmony_ci  type: arg_list_t
117b1994897Sopenharmony_ci  default:
118b1994897Sopenharmony_ci    - none
119b1994897Sopenharmony_ci  possible_values:
120b1994897Sopenharmony_ci    - none
121b1994897Sopenharmony_ci    - all
122b1994897Sopenharmony_ci    - alias-analysis
123b1994897Sopenharmony_ci    - balance-expr
124b1994897Sopenharmony_ci    - branch-elim
125b1994897Sopenharmony_ci    - checks-elim
126b1994897Sopenharmony_ci    - codegen
127b1994897Sopenharmony_ci    - code-sink
128b1994897Sopenharmony_ci    - cse-opt
129b1994897Sopenharmony_ci    - graph-cloner
130b1994897Sopenharmony_ci    - deoptimize-elim
131b1994897Sopenharmony_ci    - cleanup
132b1994897Sopenharmony_ci    - ifconversion
133b1994897Sopenharmony_ci    - inlining
134b1994897Sopenharmony_ci    - ir-builder
135b1994897Sopenharmony_ci    - licm-opt
136b1994897Sopenharmony_ci    - liveness-analyzer
137b1994897Sopenharmony_ci    - loop-transform
138b1994897Sopenharmony_ci    - lowering
139b1994897Sopenharmony_ci    - lse-opt
140b1994897Sopenharmony_ci    - memory-coalescing
141b1994897Sopenharmony_ci    - monitor-analysis
142b1994897Sopenharmony_ci    - peephole
143b1994897Sopenharmony_ci    - rle-opt
144b1994897Sopenharmony_ci    - regalloc
145b1994897Sopenharmony_ci    - split-resolver
146b1994897Sopenharmony_ci    - scheduler
147b1994897Sopenharmony_ci    - try-catch-resolving
148b1994897Sopenharmony_ci    - vn-opt
149b1994897Sopenharmony_ci    - pm
150b1994897Sopenharmony_ci  description: Set log compiler components
151b1994897Sopenharmony_ci  tags: [debug]
152b1994897Sopenharmony_ci  delimiter: ","
153b1994897Sopenharmony_ci
154b1994897Sopenharmony_ci- name: compiler-check-graph
155b1994897Sopenharmony_ci  type: bool
156b1994897Sopenharmony_ci  default: true
157b1994897Sopenharmony_ci  description: Enable Graph checking after each optimization
158b1994897Sopenharmony_ci  tags: [debug]
159b1994897Sopenharmony_ci
160b1994897Sopenharmony_ci- name: compiler-check-final
161b1994897Sopenharmony_ci  type: bool
162b1994897Sopenharmony_ci  default: false
163b1994897Sopenharmony_ci  description: Enable Graph checking only after last optimization(Codegen)
164b1994897Sopenharmony_ci  tags: [debug]
165b1994897Sopenharmony_ci
166b1994897Sopenharmony_ci- name: compiler-encode-intrinsics
167b1994897Sopenharmony_ci  type: bool
168b1994897Sopenharmony_ci  default: true
169b1994897Sopenharmony_ci  description: If false, we always call C impementation of an intrinsic
170b1994897Sopenharmony_ci  tags: [test]
171b1994897Sopenharmony_ci
172b1994897Sopenharmony_ci- name: compiler-lowering
173b1994897Sopenharmony_ci  type: bool
174b1994897Sopenharmony_ci  default: true
175b1994897Sopenharmony_ci  description: Enable Lowering Pass
176b1994897Sopenharmony_ci  tags: [perf]
177b1994897Sopenharmony_ci
178b1994897Sopenharmony_ci- name: compiler-code-sink
179b1994897Sopenharmony_ci  type: bool
180b1994897Sopenharmony_ci  default: true
181b1994897Sopenharmony_ci  description: Enable Code Sink Pass
182b1994897Sopenharmony_ci  tags: [perf]
183b1994897Sopenharmony_ci
184b1994897Sopenharmony_ci- name: compiler-balance-expressions
185b1994897Sopenharmony_ci  type: bool
186b1994897Sopenharmony_ci  default: true
187b1994897Sopenharmony_ci  description: Enable Balance Expressions Pass
188b1994897Sopenharmony_ci  tags: [perf]
189b1994897Sopenharmony_ci
190b1994897Sopenharmony_ci- name: compiler-branch-elimination
191b1994897Sopenharmony_ci  type: bool
192b1994897Sopenharmony_ci  default: true
193b1994897Sopenharmony_ci  description: Enable Branch Elimination Pass
194b1994897Sopenharmony_ci  tags: [perf]
195b1994897Sopenharmony_ci
196b1994897Sopenharmony_ci- name: compiler-checks-elimination
197b1994897Sopenharmony_ci  type: bool
198b1994897Sopenharmony_ci  default: true
199b1994897Sopenharmony_ci  description: Enable Checks Elimination Pass
200b1994897Sopenharmony_ci  tags: [perf]
201b1994897Sopenharmony_ci
202b1994897Sopenharmony_ci- name: compiler-enable-replacing-checks-on-deoptimization
203b1994897Sopenharmony_ci  type: bool
204b1994897Sopenharmony_ci  default: true
205b1994897Sopenharmony_ci  description: Enable replacing checks on deoptimization in checks elimination
206b1994897Sopenharmony_ci  tags: [perf]
207b1994897Sopenharmony_ci
208b1994897Sopenharmony_ci- name: compiler-deoptimize-elimination
209b1994897Sopenharmony_ci  type: bool
210b1994897Sopenharmony_ci  default: true
211b1994897Sopenharmony_ci  description: Enable Deoptimize Elimination Pass
212b1994897Sopenharmony_ci  tags: [perf]
213b1994897Sopenharmony_ci
214b1994897Sopenharmony_ci- name: compiler-safepoint-elimination-limit
215b1994897Sopenharmony_ci  type: uint64_t
216b1994897Sopenharmony_ci  default: 50
217b1994897Sopenharmony_ci  description: Set the instructions limit in deoptimize elimination for removing safe points.
218b1994897Sopenharmony_ci  recommended_values: [10,1000]
219b1994897Sopenharmony_ci  tags: [perf]
220b1994897Sopenharmony_ci
221b1994897Sopenharmony_ci- name: compiler-implicit-null-check
222b1994897Sopenharmony_ci  type: bool
223b1994897Sopenharmony_ci  default: true
224b1994897Sopenharmony_ci  description: Apply Implicit Null Check
225b1994897Sopenharmony_ci  tags: [perf]
226b1994897Sopenharmony_ci
227b1994897Sopenharmony_ci- name: compiler-licm
228b1994897Sopenharmony_ci  type: bool
229b1994897Sopenharmony_ci  default: true
230b1994897Sopenharmony_ci  description: Enable LICM Pass
231b1994897Sopenharmony_ci  tags: [perf]
232b1994897Sopenharmony_ci
233b1994897Sopenharmony_ci- name: compiler-licm-hoist-limit
234b1994897Sopenharmony_ci  type: uint32_t
235b1994897Sopenharmony_ci  default: 8
236b1994897Sopenharmony_ci  description: Set the instructions limit which are hoisted by LICM
237b1994897Sopenharmony_ci  recommended_values: [1,60]
238b1994897Sopenharmony_ci  tags: [perf]
239b1994897Sopenharmony_ci
240b1994897Sopenharmony_ci- name: compiler-loop-peeling
241b1994897Sopenharmony_ci  type: bool
242b1994897Sopenharmony_ci  default: true
243b1994897Sopenharmony_ci  description: Enable Loop peeling Pass
244b1994897Sopenharmony_ci  tags: [perf]
245b1994897Sopenharmony_ci
246b1994897Sopenharmony_ci- name: compiler-loop-unroll
247b1994897Sopenharmony_ci  type: bool
248b1994897Sopenharmony_ci  default: true
249b1994897Sopenharmony_ci  description: Enable Loop unroll Pass
250b1994897Sopenharmony_ci  tags: [perf]
251b1994897Sopenharmony_ci
252b1994897Sopenharmony_ci- name: compiler-loop-unroll-factor
253b1994897Sopenharmony_ci  type: uint32_t
254b1994897Sopenharmony_ci  default: 6
255b1994897Sopenharmony_ci  description: Set loop unrolling factor
256b1994897Sopenharmony_ci  recommended_values: [2,10]
257b1994897Sopenharmony_ci  tags: [perf]
258b1994897Sopenharmony_ci
259b1994897Sopenharmony_ci- name: compiler-loop-unroll-inst-limit
260b1994897Sopenharmony_ci  type: uint32_t
261b1994897Sopenharmony_ci  default: 100
262b1994897Sopenharmony_ci  description: Set the instructions limit for the unrolling loop body
263b1994897Sopenharmony_ci  recommended_values: [10,1000]
264b1994897Sopenharmony_ci  tags: [perf]
265b1994897Sopenharmony_ci
266b1994897Sopenharmony_ci- name: compiler-unroll-loop-with-calls
267b1994897Sopenharmony_ci  type: bool
268b1994897Sopenharmony_ci  default: false
269b1994897Sopenharmony_ci  description: Enable unroll for loops containing method calls
270b1994897Sopenharmony_ci  tags: [perf]
271b1994897Sopenharmony_ci
272b1994897Sopenharmony_ci- name: compiler-unroll-with-side-exits
273b1994897Sopenharmony_ci  type: bool
274b1994897Sopenharmony_ci  default: true
275b1994897Sopenharmony_ci  description: Enable unroll with side exits for not countable loop
276b1994897Sopenharmony_ci  tags: [perf]
277b1994897Sopenharmony_ci
278b1994897Sopenharmony_ci- name: compiler-lse
279b1994897Sopenharmony_ci  type: bool
280b1994897Sopenharmony_ci  default: true
281b1994897Sopenharmony_ci  description: Enable Load-Store Elimination Pass
282b1994897Sopenharmony_ci  tags: [perf]
283b1994897Sopenharmony_ci
284b1994897Sopenharmony_ci- name: compiler-cse
285b1994897Sopenharmony_ci  type: bool
286b1994897Sopenharmony_ci  default: false
287b1994897Sopenharmony_ci  description: Enable CSE Pass
288b1994897Sopenharmony_ci  tags: [perf]
289b1994897Sopenharmony_ci
290b1994897Sopenharmony_ci- name: compiler-vn
291b1994897Sopenharmony_ci  type: bool
292b1994897Sopenharmony_ci  default: true
293b1994897Sopenharmony_ci  description: Enable Value Numbering Pass
294b1994897Sopenharmony_ci  tags: [perf]
295b1994897Sopenharmony_ci
296b1994897Sopenharmony_ci- name: compiler-memory-coalescing
297b1994897Sopenharmony_ci  type: bool
298b1994897Sopenharmony_ci  default: true
299b1994897Sopenharmony_ci  description: Enable Memory Coalescing Pass
300b1994897Sopenharmony_ci  tags: [perf]
301b1994897Sopenharmony_ci
302b1994897Sopenharmony_ci- name: compiler-memory-coalescing-objects
303b1994897Sopenharmony_ci  type: bool
304b1994897Sopenharmony_ci  default: true
305b1994897Sopenharmony_ci  description: Apply Memory Coalescing to objects accesses
306b1994897Sopenharmony_ci  tags: [perf]
307b1994897Sopenharmony_ci
308b1994897Sopenharmony_ci- name: compiler-memory-coalescing-aligned
309b1994897Sopenharmony_ci  type: bool
310b1994897Sopenharmony_ci  default: false
311b1994897Sopenharmony_ci  description: Apply Memory Coalescing only to aligned accesses
312b1994897Sopenharmony_ci  tags: [perf]
313b1994897Sopenharmony_ci
314b1994897Sopenharmony_ci- name: compiler-print-stats
315b1994897Sopenharmony_ci  type: bool
316b1994897Sopenharmony_ci  default: false
317b1994897Sopenharmony_ci  description: Print optimizations statistics
318b1994897Sopenharmony_ci  tags: [debug]
319b1994897Sopenharmony_ci
320b1994897Sopenharmony_ci- name: compiler-dump-stats-csv
321b1994897Sopenharmony_ci  type: std::string
322b1994897Sopenharmony_ci  default: ""
323b1994897Sopenharmony_ci  description: Dump optimizations statistics in csv file
324b1994897Sopenharmony_ci  tags: [debug]
325b1994897Sopenharmony_ci
326b1994897Sopenharmony_ci- name: compiler-enable-ir-stats
327b1994897Sopenharmony_ci  type: bool
328b1994897Sopenharmony_ci  default: false
329b1994897Sopenharmony_ci  description: Enable collecting ir stats on compiler statistic
330b1994897Sopenharmony_ci  tags: [debug]
331b1994897Sopenharmony_ci
332b1994897Sopenharmony_ci
333b1994897Sopenharmony_ci- name: compiler-use-safepoint
334b1994897Sopenharmony_ci  type: bool
335b1994897Sopenharmony_ci  default: true
336b1994897Sopenharmony_ci  description: Build SafePoint instructions
337b1994897Sopenharmony_ci  tags: [test]
338b1994897Sopenharmony_ci
339b1994897Sopenharmony_ci- name: compiler-inlining
340b1994897Sopenharmony_ci  type: bool
341b1994897Sopenharmony_ci  default: true
342b1994897Sopenharmony_ci  description: Enable inlining optimization
343b1994897Sopenharmony_ci  tags: [perf]
344b1994897Sopenharmony_ci
345b1994897Sopenharmony_ci- name: compiler-inline-external-methods
346b1994897Sopenharmony_ci  type: bool
347b1994897Sopenharmony_ci  default: true
348b1994897Sopenharmony_ci  description: Enable inlining external methods in JIT mode
349b1994897Sopenharmony_ci  tags: [perf]
350b1994897Sopenharmony_ci
351b1994897Sopenharmony_ci- name: compiler-inlining-blacklist
352b1994897Sopenharmony_ci  type: arg_list_t
353b1994897Sopenharmony_ci  default: []
354b1994897Sopenharmony_ci  description: Method names that should not be inlined
355b1994897Sopenharmony_ci  delimiter: ","
356b1994897Sopenharmony_ci  tags: [perf]
357b1994897Sopenharmony_ci
358b1994897Sopenharmony_ci- name: compiler-inlining-max-insts
359b1994897Sopenharmony_ci  type: uint32_t
360b1994897Sopenharmony_ci  default: 1024
361b1994897Sopenharmony_ci  description: Maximum number of the IR instructions to be inlined, including instructions of the current graph.
362b1994897Sopenharmony_ci  recommended_values: [50,2000]
363b1994897Sopenharmony_ci  tags: [perf]
364b1994897Sopenharmony_ci
365b1994897Sopenharmony_ci- name: compiler-inlining-max-depth
366b1994897Sopenharmony_ci  type: uint32_t
367b1994897Sopenharmony_ci  default: 4
368b1994897Sopenharmony_ci  description: Maximum depth of the inlining.
369b1994897Sopenharmony_ci  recommended_values: [1,10]
370b1994897Sopenharmony_ci  tags: [perf]
371b1994897Sopenharmony_ci
372b1994897Sopenharmony_ci- name: compiler-inlining-max-size
373b1994897Sopenharmony_ci  type: uint32_t
374b1994897Sopenharmony_ci  default: 200
375b1994897Sopenharmony_ci  description: Maximum bytecode size for inlined functions, in bytes. Avarage bytecode instruction size is 2.8 bytes.
376b1994897Sopenharmony_ci  recommended_values: [10,1000]
377b1994897Sopenharmony_ci  tags: [perf]
378b1994897Sopenharmony_ci
379b1994897Sopenharmony_ci- name: compiler-inline-simple-only
380b1994897Sopenharmony_ci  type: bool
381b1994897Sopenharmony_ci  default: false
382b1994897Sopenharmony_ci  description: Inline only simple methods that don't contain calls to runtime
383b1994897Sopenharmony_ci  tags: [perf]
384b1994897Sopenharmony_ci
385b1994897Sopenharmony_ci- name: compiler-inlining-skip-throw-blocks
386b1994897Sopenharmony_ci  type: bool
387b1994897Sopenharmony_ci  default: true
388b1994897Sopenharmony_ci  description: Don't inline methods inside blocks throwing an exception or performing deoptimization
389b1994897Sopenharmony_ci  tags: [perf]
390b1994897Sopenharmony_ci
391b1994897Sopenharmony_ci- name: compiler-inlining-skip-always-throw-methods
392b1994897Sopenharmony_ci  type: bool
393b1994897Sopenharmony_ci  default: true
394b1994897Sopenharmony_ci  description: Don't inline methods that always throw an exception
395b1994897Sopenharmony_ci  tags: [perf]
396b1994897Sopenharmony_ci
397b1994897Sopenharmony_ci- name: compiler-no-virtual-inlining
398b1994897Sopenharmony_ci  type: bool
399b1994897Sopenharmony_ci  default: false
400b1994897Sopenharmony_ci  description: Disable inlining of the virtual calls
401b1994897Sopenharmony_ci  tags: [perf]
402b1994897Sopenharmony_ci
403b1994897Sopenharmony_ci- name: compiler-no-cha-inlining
404b1994897Sopenharmony_ci  type: bool
405b1994897Sopenharmony_ci  default: false
406b1994897Sopenharmony_ci  description: Don't use CHA in the inlining
407b1994897Sopenharmony_ci  tags: [perf]
408b1994897Sopenharmony_ci
409b1994897Sopenharmony_ci- name: compiler-no-pic-inlining
410b1994897Sopenharmony_ci  type: bool
411b1994897Sopenharmony_ci  default: false
412b1994897Sopenharmony_ci  description: Don't use Polymorphic Inline Caches in the inlining
413b1994897Sopenharmony_ci  tags: [perf]
414b1994897Sopenharmony_ci
415b1994897Sopenharmony_ci- name: compiler-reset-local-allocator
416b1994897Sopenharmony_ci  type: bool
417b1994897Sopenharmony_ci  default: true
418b1994897Sopenharmony_ci  description: Reset local allocator between passes runs
419b1994897Sopenharmony_ci  tags: [test]
420b1994897Sopenharmony_ci
421b1994897Sopenharmony_ci- name: compiler-scheduling
422b1994897Sopenharmony_ci  type: bool
423b1994897Sopenharmony_ci  default: true
424b1994897Sopenharmony_ci  description: Enable Scheduling Pass
425b1994897Sopenharmony_ci  tags: [perf]
426b1994897Sopenharmony_ci
427b1994897Sopenharmony_ci- name: compiler-sched-latency
428b1994897Sopenharmony_ci  type: uint32_t
429b1994897Sopenharmony_ci  default: 2
430b1994897Sopenharmony_ci  description: Set default instruction latency
431b1994897Sopenharmony_ci  recommended_values: [1,5]
432b1994897Sopenharmony_ci  tags: [perf]
433b1994897Sopenharmony_ci
434b1994897Sopenharmony_ci- name: compiler-sched-latency-long
435b1994897Sopenharmony_ci  type: uint32_t
436b1994897Sopenharmony_ci  default: 7
437b1994897Sopenharmony_ci  description: Set loads latency
438b1994897Sopenharmony_ci  recommended_values: [2,15]
439b1994897Sopenharmony_ci  tags: [perf]
440b1994897Sopenharmony_ci
441b1994897Sopenharmony_ci- name: compiler-if-conversion
442b1994897Sopenharmony_ci  type: bool
443b1994897Sopenharmony_ci  default: true
444b1994897Sopenharmony_ci  description: Enable IfConversion Pass
445b1994897Sopenharmony_ci  tags: [perf]
446b1994897Sopenharmony_ci
447b1994897Sopenharmony_ci- name: compiler-if-conversion-limit
448b1994897Sopenharmony_ci  type: uint32_t
449b1994897Sopenharmony_ci  default: 2
450b1994897Sopenharmony_ci  description: Maximum amount of instructions in basicblock(s) for if-conversion
451b1994897Sopenharmony_ci  recommended_values: [1,10]
452b1994897Sopenharmony_ci  tags: [perf]
453b1994897Sopenharmony_ci
454b1994897Sopenharmony_ci- name: compiler-cross-arch
455b1994897Sopenharmony_ci  type: std::string
456b1994897Sopenharmony_ci  default: arm64
457b1994897Sopenharmony_ci  possible_values:
458b1994897Sopenharmony_ci    - arm
459b1994897Sopenharmony_ci    - arm64
460b1994897Sopenharmony_ci    - x86
461b1994897Sopenharmony_ci    - x86_64
462b1994897Sopenharmony_ci  description: On AMD64 enable creation of non-native code for testing purpose
463b1994897Sopenharmony_ci  tags: [test]
464b1994897Sopenharmony_ci
465b1994897Sopenharmony_ci- name: compiler-enable-events
466b1994897Sopenharmony_ci  type: bool
467b1994897Sopenharmony_ci  default: false
468b1994897Sopenharmony_ci  description: Enable optimizations events dump
469b1994897Sopenharmony_ci  tags: [debug, test]
470b1994897Sopenharmony_ci
471b1994897Sopenharmony_ci- name: compiler-events-path
472b1994897Sopenharmony_ci  type: std::string
473b1994897Sopenharmony_ci  default: ./compiler/events.csv
474b1994897Sopenharmony_ci  description: Set path for optimizations events dump
475b1994897Sopenharmony_ci  tags: [debug]
476b1994897Sopenharmony_ci
477b1994897Sopenharmony_ci- name: compiler-save-only-live-registers
478b1994897Sopenharmony_ci  type: bool
479b1994897Sopenharmony_ci  default: true
480b1994897Sopenharmony_ci  description: Save and Load only registers that contains live values when making calls.
481b1994897Sopenharmony_ci  tags: [perf]
482b1994897Sopenharmony_ci
483b1994897Sopenharmony_ci- name: compiler-ignore-failures
484b1994897Sopenharmony_ci  type: bool
485b1994897Sopenharmony_ci  default: true
486b1994897Sopenharmony_ci  description: Ignore failures occurred during compilation
487b1994897Sopenharmony_ci  tags: [test]
488b1994897Sopenharmony_ci
489b1994897Sopenharmony_ci- name: compiler-allow-backend-failures
490b1994897Sopenharmony_ci  type: bool
491b1994897Sopenharmony_ci  default: true
492b1994897Sopenharmony_ci  description: Ignore failures occurred during register allocation and code generation
493b1994897Sopenharmony_ci  tags: [test]
494b1994897Sopenharmony_ci
495b1994897Sopenharmony_ci- name: compiler-max-gen-code-size
496b1994897Sopenharmony_ci  type: uint32_t
497b1994897Sopenharmony_ci  default: 66060288
498b1994897Sopenharmony_ci  description: Maximum size of the generated code in code-cache, default 63 M
499b1994897Sopenharmony_ci  tags: [perf]
500b1994897Sopenharmony_ci
501b1994897Sopenharmony_ci- name: compiler-max-bytecode-size
502b1994897Sopenharmony_ci  type: uint32_t
503b1994897Sopenharmony_ci  default: 30000
504b1994897Sopenharmony_ci  description: Maximum size of the method's code to be compiled.
505b1994897Sopenharmony_ci  recommended_values: [10000,500000]
506b1994897Sopenharmony_ci  tags: [perf]
507b1994897Sopenharmony_ci
508b1994897Sopenharmony_ci- name: compiler-max-vregs-num
509b1994897Sopenharmony_ci  type: uint32_t
510b1994897Sopenharmony_ci  default: 65536
511b1994897Sopenharmony_ci  description: Maximum number of virtual registers in a method.
512b1994897Sopenharmony_ci  tags: [perf]
513b1994897Sopenharmony_ci
514b1994897Sopenharmony_ci- name: compiler-compact-prologue
515b1994897Sopenharmony_ci  type: bool
516b1994897Sopenharmony_ci  default: true
517b1994897Sopenharmony_ci  description: Omit unused callee-registers save/restore in prologue/epilogue when possible.
518b1994897Sopenharmony_ci  tags: [perf]
519b1994897Sopenharmony_ci
520b1994897Sopenharmony_ci- name: compiler-js-filter-intrinsics
521b1994897Sopenharmony_ci  type: bool
522b1994897Sopenharmony_ci  default: true
523b1994897Sopenharmony_ci  description: Enable intrinsics filter in JS Compiler
524b1994897Sopenharmony_ci  tags: [test]
525b1994897Sopenharmony_ci
526b1994897Sopenharmony_ci- name: compiler-reg-acc-alloc
527b1994897Sopenharmony_ci  type: bool
528b1994897Sopenharmony_ci  default: true
529b1994897Sopenharmony_ci  description: Enable accumulator register allocator pass
530b1994897Sopenharmony_ci  tags: [test]
531b1994897Sopenharmony_ci
532b1994897Sopenharmony_ci- name: compiler-regalloc-reg-mask
533b1994897Sopenharmony_ci  type: uint64_t
534b1994897Sopenharmony_ci  default: 0
535b1994897Sopenharmony_ci  description: Mask of registers, avaliable for regalloc
536b1994897Sopenharmony_ci  tags: [test]
537b1994897Sopenharmony_ci
538b1994897Sopenharmony_ci- name: compiler-verify-regalloc
539b1994897Sopenharmony_ci  type: bool
540b1994897Sopenharmony_ci  default: true
541b1994897Sopenharmony_ci  description: Verify register allocation results in debug mode.
542b1994897Sopenharmony_ci  tags: [debug]
543b1994897Sopenharmony_ci
544b1994897Sopenharmony_ci- name: compiler-move-constants
545b1994897Sopenharmony_ci  type: bool
546b1994897Sopenharmony_ci  default: true
547b1994897Sopenharmony_ci  description: Enable move constants from start block closer to usage
548b1994897Sopenharmony_ci  tags: [perf]
549b1994897Sopenharmony_ci
550b1994897Sopenharmony_ci- name: compiler-adjust-refs
551b1994897Sopenharmony_ci  type: bool
552b1994897Sopenharmony_ci  default: true
553b1994897Sopenharmony_ci  description: Enable hoisting of array data address
554b1994897Sopenharmony_ci
555b1994897Sopenharmony_ci- name: compiler-aot-load-string-plt
556b1994897Sopenharmony_ci  type: bool
557b1994897Sopenharmony_ci  default: true
558b1994897Sopenharmony_ci  description: Replace unconditional ResolveString runtime call with loading string reference from PLT slot for AOT.
559b1994897Sopenharmony_ci  tags: [perf]
560b1994897Sopenharmony_ci
561b1994897Sopenharmony_ci- name: compiler-remat-const
562b1994897Sopenharmony_ci  type: bool
563b1994897Sopenharmony_ci  default: true
564b1994897Sopenharmony_ci  description: Rematerialize constants instead of spilling them to the stack
565b1994897Sopenharmony_ci  tags: [perf]
566b1994897Sopenharmony_ci
567b1994897Sopenharmony_ci- name: compiler-unfold-const-array-max-size
568b1994897Sopenharmony_ci  type: uint32_t
569b1994897Sopenharmony_ci  default: 20
570b1994897Sopenharmony_ci  description: Set the maximum size of the constant array to unfold a single LoadConstArray instruction to the initial instructions set.
571b1994897Sopenharmony_ci  recommended_values: [2,1000]
572b1994897Sopenharmony_ci  tags: [perf]
573b1994897Sopenharmony_ci
574b1994897Sopenharmony_ci- name: compiler-spill-fill-pair
575b1994897Sopenharmony_ci  type: bool
576b1994897Sopenharmony_ci  default: true
577b1994897Sopenharmony_ci  description: Store and load values from successive stack slots as pair of values during SpillFill encoding.
578b1994897Sopenharmony_ci  tags: [perf]
579b1994897Sopenharmony_ci
580b1994897Sopenharmony_ci- name: compiler-cpu-features
581b1994897Sopenharmony_ci  type: arg_list_t
582b1994897Sopenharmony_ci  default: [sse42]
583b1994897Sopenharmony_ci  possible_values:
584b1994897Sopenharmony_ci    - none
585b1994897Sopenharmony_ci    - crc32
586b1994897Sopenharmony_ci    - sse42
587b1994897Sopenharmony_ci  description: Set compiler CPU features
588b1994897Sopenharmony_ci  tags: [perf]
589b1994897Sopenharmony_ci  delimiter: ","
590b1994897Sopenharmony_ci
591b1994897Sopenharmony_ci- name: compiler-emit-debug-info
592b1994897Sopenharmony_ci  type: bool
593b1994897Sopenharmony_ci  default: false
594b1994897Sopenharmony_ci  description: Emit DWARF debug info for JIT/AOT code, PANDA_COMPILER_CFI should be set
595b1994897Sopenharmony_ci  tags: [debug]
596b1994897Sopenharmony_ci
597b1994897Sopenharmony_ci- name: compiler-aot-ra
598b1994897Sopenharmony_ci  type: bool
599b1994897Sopenharmony_ci  default: true
600b1994897Sopenharmony_ci  description: Enable AOT register allocation
601b1994897Sopenharmony_ci
602b1994897Sopenharmony_ci- name: compiler-freq-based-branch-reorder
603b1994897Sopenharmony_ci  type: bool
604b1994897Sopenharmony_ci  default: true
605b1994897Sopenharmony_ci  description: Enables/disables frequency based branch reorder
606b1994897Sopenharmony_ci
607b1994897Sopenharmony_ci- name: compiler-freq-based-branch-reorder-threshold
608b1994897Sopenharmony_ci  type: uint32_t
609b1994897Sopenharmony_ci  default: 80
610b1994897Sopenharmony_ci  description: Threshold in percents for frequency based branch reorder
611b1994897Sopenharmony_ci
612b1994897Sopenharmony_ci- name: compiler-inline-full-intrinsics
613b1994897Sopenharmony_ci  type: bool
614b1994897Sopenharmony_ci  default: false
615b1994897Sopenharmony_ci  description: Inline graph for dynamic insrinsics in IrBuilder
616b1994897Sopenharmony_ci
617b1994897Sopenharmony_cievents:
618b1994897Sopenharmony_ci- name: branch-elimination
619b1994897Sopenharmony_ci  fields:
620b1994897Sopenharmony_ci    - name: if_block_id
621b1994897Sopenharmony_ci      type: uint32_t
622b1994897Sopenharmony_ci    - name: if_block_pc
623b1994897Sopenharmony_ci      type: uint32_t
624b1994897Sopenharmony_ci    - name: cond_inst_id
625b1994897Sopenharmony_ci      type: uint32_t
626b1994897Sopenharmony_ci    - name: cond_inst_pc
627b1994897Sopenharmony_ci      type: uint32_t
628b1994897Sopenharmony_ci    - name: condition_type
629b1994897Sopenharmony_ci      type: const char*
630b1994897Sopenharmony_ci    - name: removed_edge_type
631b1994897Sopenharmony_ci      type: bool
632b1994897Sopenharmony_ci
633b1994897Sopenharmony_ci- name: code-sink
634b1994897Sopenharmony_ci  fields:
635b1994897Sopenharmony_ci    - name: sunk_inst_id
636b1994897Sopenharmony_ci      type: uint32_t
637b1994897Sopenharmony_ci    - name: sunk_inst_pc
638b1994897Sopenharmony_ci      type: uint32_t
639b1994897Sopenharmony_ci    - name: from_bb_id
640b1994897Sopenharmony_ci      type: uint32_t
641b1994897Sopenharmony_ci    - name: to_bb_id
642b1994897Sopenharmony_ci      type: uint32_t
643b1994897Sopenharmony_ci      
644b1994897Sopenharmony_ci- name: checks-elimination
645b1994897Sopenharmony_ci  fields:
646b1994897Sopenharmony_ci    - name: name
647b1994897Sopenharmony_ci      type: const char*
648b1994897Sopenharmony_ci    - name: inst_id
649b1994897Sopenharmony_ci      type: uint32_t
650b1994897Sopenharmony_ci    - name: pc
651b1994897Sopenharmony_ci      type: uint32_t
652b1994897Sopenharmony_ci
653b1994897Sopenharmony_ci- name: cleanup
654b1994897Sopenharmony_ci  fields:
655b1994897Sopenharmony_ci    - name: removed_inst_id
656b1994897Sopenharmony_ci      type: uint32_t
657b1994897Sopenharmony_ci    - name: removed_inst_pc
658b1994897Sopenharmony_ci      type: uint32_t
659b1994897Sopenharmony_ci
660b1994897Sopenharmony_ci- name: cse
661b1994897Sopenharmony_ci  fields:
662b1994897Sopenharmony_ci    - name: removed_inst_id
663b1994897Sopenharmony_ci      type: uint32_t
664b1994897Sopenharmony_ci    - name: removed_inst_pc
665b1994897Sopenharmony_ci      type: uint32_t
666b1994897Sopenharmony_ci
667b1994897Sopenharmony_ci- name: deoptimize-elimination
668b1994897Sopenharmony_ci  fields:
669b1994897Sopenharmony_ci    - name: name
670b1994897Sopenharmony_ci      type: const char*
671b1994897Sopenharmony_ci    - name: inst_id
672b1994897Sopenharmony_ci      type: uint32_t
673b1994897Sopenharmony_ci    - name: pc
674b1994897Sopenharmony_ci      type: uint32_t
675b1994897Sopenharmony_ci
676b1994897Sopenharmony_ci- name: if-conversion
677b1994897Sopenharmony_ci  fields:
678b1994897Sopenharmony_ci    - name: merge_block_id
679b1994897Sopenharmony_ci      type: uint32_t
680b1994897Sopenharmony_ci    - name: merge_block_pc
681b1994897Sopenharmony_ci      type: uint32_t
682b1994897Sopenharmony_ci    - name: merge_type
683b1994897Sopenharmony_ci      type: const char*
684b1994897Sopenharmony_ci    - name: removed_block_id1
685b1994897Sopenharmony_ci      type: int32_t
686b1994897Sopenharmony_ci    - name: removed_block_id2
687b1994897Sopenharmony_ci      type: int32_t
688b1994897Sopenharmony_ci    - name: removed_block_id3
689b1994897Sopenharmony_ci      type: int32_t
690b1994897Sopenharmony_ci
691b1994897Sopenharmony_ci- name: inlining
692b1994897Sopenharmony_ci  fields:
693b1994897Sopenharmony_ci    - name: inlined_method
694b1994897Sopenharmony_ci      type: const char*
695b1994897Sopenharmony_ci
696b1994897Sopenharmony_ci- name: lse
697b1994897Sopenharmony_ci  fields:
698b1994897Sopenharmony_ci    - name: removed_inst_id
699b1994897Sopenharmony_ci      type: uint32_t
700b1994897Sopenharmony_ci    - name: removed_inst_pc
701b1994897Sopenharmony_ci      type: uint32_t
702b1994897Sopenharmony_ci    - name: dominant_inst_id
703b1994897Sopenharmony_ci      type: uint32_t
704b1994897Sopenharmony_ci    - name: dominant_inst_pc
705b1994897Sopenharmony_ci      type: uint32_t
706b1994897Sopenharmony_ci    - name: code
707b1994897Sopenharmony_ci      type: const char*
708b1994897Sopenharmony_ci
709b1994897Sopenharmony_ci- name: redundant-loop-elimination
710b1994897Sopenharmony_ci  fields:
711b1994897Sopenharmony_ci    - name: loop_id
712b1994897Sopenharmony_ci      type: uint32_t
713b1994897Sopenharmony_ci    - name: loop_head_pc
714b1994897Sopenharmony_ci      type: uint32_t
715b1994897Sopenharmony_ci
716b1994897Sopenharmony_ci- name: loop-unroll
717b1994897Sopenharmony_ci  fields:
718b1994897Sopenharmony_ci    - name: loop_id
719b1994897Sopenharmony_ci      type: uint32_t
720b1994897Sopenharmony_ci    - name: loop_head_pc
721b1994897Sopenharmony_ci      type: uint32_t
722b1994897Sopenharmony_ci    - name: unroll_factor
723b1994897Sopenharmony_ci      type: uint32_t
724b1994897Sopenharmony_ci    - name: cloneable_inst_count
725b1994897Sopenharmony_ci      type: uint32_t      
726b1994897Sopenharmony_ci
727b1994897Sopenharmony_ci- name: loop-peeling
728b1994897Sopenharmony_ci  fields:
729b1994897Sopenharmony_ci    - name: loop_id
730b1994897Sopenharmony_ci      type: uint32_t
731b1994897Sopenharmony_ci    - name: loop_head_pc
732b1994897Sopenharmony_ci      type: uint32_t
733b1994897Sopenharmony_ci    - name: loop_exit_pc
734b1994897Sopenharmony_ci      type: uint32_t
735b1994897Sopenharmony_ci    - name: moved_inst_count
736b1994897Sopenharmony_ci      type: uint32_t      
737b1994897Sopenharmony_ci
738b1994897Sopenharmony_ci- name: memory-coalescing
739b1994897Sopenharmony_ci  fields:
740b1994897Sopenharmony_ci    - name: first_inst_id
741b1994897Sopenharmony_ci      type: uint32_t
742b1994897Sopenharmony_ci    - name: first_inst_pc
743b1994897Sopenharmony_ci      type: uint32_t
744b1994897Sopenharmony_ci    - name: second_inst_id
745b1994897Sopenharmony_ci      type: uint32_t
746b1994897Sopenharmony_ci    - name: second_inst_pc
747b1994897Sopenharmony_ci      type: uint32_t
748b1994897Sopenharmony_ci    - name: new_inst_id
749b1994897Sopenharmony_ci      type: uint32_t
750b1994897Sopenharmony_ci    - name: type
751b1994897Sopenharmony_ci      type: const char *
752b1994897Sopenharmony_ci
753b1994897Sopenharmony_ci- name: peephole
754b1994897Sopenharmony_ci  fields:
755b1994897Sopenharmony_ci    - name: name
756b1994897Sopenharmony_ci      type: const char*
757b1994897Sopenharmony_ci    - name: inst_id
758b1994897Sopenharmony_ci      type: uint32_t 
759b1994897Sopenharmony_ci    - name: pc
760b1994897Sopenharmony_ci      type: uint32_t  
761b1994897Sopenharmony_ci  
762b1994897Sopenharmony_ci- name: scheduler
763b1994897Sopenharmony_ci  fields:
764b1994897Sopenharmony_ci    - name: block_id
765b1994897Sopenharmony_ci      type: uint32_t
766b1994897Sopenharmony_ci    - name: block_pc
767b1994897Sopenharmony_ci      type: uint32_t
768b1994897Sopenharmony_ci    - name: old_cycles
769b1994897Sopenharmony_ci      type: uint32_t
770b1994897Sopenharmony_ci    - name: num_barriers
771b1994897Sopenharmony_ci      type: uint32_t
772b1994897Sopenharmony_ci    - name: critical_path
773b1994897Sopenharmony_ci      type: uint32_t
774b1994897Sopenharmony_ci    - name: new_cycles
775b1994897Sopenharmony_ci      type: uint32_t
776b1994897Sopenharmony_ci
777b1994897Sopenharmony_ci- name: gvn
778b1994897Sopenharmony_ci  fields:
779b1994897Sopenharmony_ci    - name: inst_id
780b1994897Sopenharmony_ci      type: uint32_t
781b1994897Sopenharmony_ci    - name: inst_pc
782b1994897Sopenharmony_ci      type: uint32_t
783b1994897Sopenharmony_ci    - name: equal_inst_id
784b1994897Sopenharmony_ci      type: uint32_t
785b1994897Sopenharmony_ci    - name: equal_inst_pc
786b1994897Sopenharmony_ci      type: uint32_t
787b1994897Sopenharmony_ci
788b1994897Sopenharmony_ci- name: licm
789b1994897Sopenharmony_ci  fields:
790b1994897Sopenharmony_ci    - name: inst_id
791b1994897Sopenharmony_ci      type: uint32_t
792b1994897Sopenharmony_ci    - name: inst_pc
793b1994897Sopenharmony_ci      type: uint32_t
794b1994897Sopenharmony_ci    - name: old_loop_id
795b1994897Sopenharmony_ci      type: uint32_t
796b1994897Sopenharmony_ci    - name: new_loop_id
797b1994897Sopenharmony_ci      type: uint32_t
798b1994897Sopenharmony_ci
799b1994897Sopenharmony_ci- name: lowering
800b1994897Sopenharmony_ci  fields:
801b1994897Sopenharmony_ci    - name: name
802b1994897Sopenharmony_ci      type: const char*
803b1994897Sopenharmony_ci    - name: inst_id
804b1994897Sopenharmony_ci      type: uint32_t
805b1994897Sopenharmony_ci    - name: pc
806b1994897Sopenharmony_ci      type: uint32_t
807b1994897Sopenharmony_ci
808b1994897Sopenharmony_ci- name: reg-alloc
809b1994897Sopenharmony_ci  fields:
810b1994897Sopenharmony_ci    - name: sf_inst_id
811b1994897Sopenharmony_ci      type: uint32_t
812b1994897Sopenharmony_ci    - name: sf_purpose
813b1994897Sopenharmony_ci      type: const char*
814b1994897Sopenharmony_ci    - name: sf_type
815b1994897Sopenharmony_ci      type: const char*
816b1994897Sopenharmony_ci    - name: src
817b1994897Sopenharmony_ci      type: uint32_t
818b1994897Sopenharmony_ci    - name: dst
819b1994897Sopenharmony_ci      type: uint32_t
820b1994897Sopenharmony_ci    - name: reg_type
821b1994897Sopenharmony_ci      type: const char*
822b1994897Sopenharmony_ci
823b1994897Sopenharmony_citags:
824b1994897Sopenharmony_ci  perf: an option that affects the performance and/or codesize
825b1994897Sopenharmony_ci  debug: debugging option (checkers, events, dumps, logs e.t.c)
826b1994897Sopenharmony_ci  test: a test option or an option used by other components
827