mirror of
https://github.com/dart-lang/sdk
synced 2024-09-19 21:01:50 +00:00
a44d1eefe6
If an IR instruction lazy-deopts it usually continues in unoptimized code in the same IR instruction after-call. Though in certain situations we want to continue before-call in unoptimized code. Two cases relevant in this CL: * An instruction gets LICMed: If it lazy-deopts it will continue at the Goto instruction outside the loop. * A recognized method which got it's InstanceCall replaced by several IR instructions. If any of them (except the last one) lazy-deopts it should re-try the call in unoptimized code (e.g. []=) In order to faciliate this we add a bit to the [Environment] which encodes whether the continuation point in unoptimized code is before-call - if so, we issue corresponding metadata. Issue https://github.com/dart-lang/sdk/issues/45213 Issue https://github.com/dart-lang/sdk/issues/46070 TEST=runtime/tests/vm/dart{,_2}/regress_46070_test.dart Change-Id: Ib824081768a2fd6293751a8fe09753e0d8155c87 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/200644 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> |
||
---|---|---|
.. | ||
aot | ||
api | ||
assembler | ||
backend | ||
ffi | ||
frontend | ||
jit | ||
asm_intrinsifier.cc | ||
asm_intrinsifier.h | ||
asm_intrinsifier_arm.cc | ||
asm_intrinsifier_arm64.cc | ||
asm_intrinsifier_ia32.cc | ||
asm_intrinsifier_x64.cc | ||
call_specializer.cc | ||
call_specializer.h | ||
cha.cc | ||
cha.h | ||
cha_test.cc | ||
compiler_pass.cc | ||
compiler_pass.h | ||
compiler_sources.gni | ||
compiler_state.cc | ||
compiler_state.h | ||
compiler_timings.cc | ||
compiler_timings.h | ||
graph_intrinsifier.cc | ||
graph_intrinsifier.h | ||
graph_intrinsifier_arm.cc | ||
graph_intrinsifier_arm64.cc | ||
graph_intrinsifier_ia32.cc | ||
graph_intrinsifier_x64.cc | ||
intrinsifier.cc | ||
intrinsifier.h | ||
method_recognizer.cc | ||
method_recognizer.h | ||
offsets_extractor.cc | ||
README.md | ||
recognized_methods_list.h | ||
relocation.cc | ||
relocation.h | ||
relocation_test.cc | ||
runtime_api.cc | ||
runtime_api.h | ||
runtime_offsets_extracted.h | ||
runtime_offsets_list.h | ||
stub_code_compiler.cc | ||
stub_code_compiler.h | ||
stub_code_compiler_arm.cc | ||
stub_code_compiler_arm64.cc | ||
stub_code_compiler_ia32.cc | ||
stub_code_compiler_x64.cc | ||
type_testing_stubs_arm.cc | ||
type_testing_stubs_arm64.cc | ||
type_testing_stubs_x64.cc | ||
write_barrier_elimination.cc | ||
write_barrier_elimination.h | ||
write_barrier_elimination_test.cc |
Dart VM Compilation Pipeline
This folder contains Dart VM compilation pipeline.
Compilation pipeline is mainly responsible for converting AST or Kernel AST into IL flow graphs and then generating native code from IL.
It has the following structure:
Directory | What goes there |
---|---|
assembler/ |
Assemblers and disassemblers |
backend/ |
IL based compilation backend: optimization passes and architecture specific code generation rules |
frontend/ |
Frontends responsible for converting AST into IL |
jit/ |
JIT specific passes and compilation pipeline entry points |
aot/ |
AOT specific passes and compilation pipeline entry points |
. |
Shared code or code without clear designation. |
Currently there are no layering restrictions and components from different subfolders can reference each other.