f5d1229081
This change extends/fixes the exiting "pattern recognition" which tries to recognize the pattern v2 <- LoadClassIdInstr(v1) BranchIf v2 == IntegerConstant(cid) Furthermore we start inlining the recognized `ClassID.getID` method very early in the pipeline. This allows the VM to recognize the above pattern and insert redefinitions before the actual inlining pass. Furthermore we special-case two very hot methods in utf8 decoding by manually having two loops, one of which is guarded by a class-id check against the _Uint8ArrayView class, which is most common. (In the future we would like to unify the typed data layouts so we no longer need to use `ClassId.getID`, thereby also allowing non core library code to use this). This improves dart-aot by * 31%+ for a protobuf decoding benchmark we care about Issue https://github.com/dart-lang/sdk/issues/31954 Change-Id: I7181bbf096aabe303634fd3b2bff9cc96d69719c Reviewed-on: https://dart-review.googlesource.com/c/85443 Reviewed-by: Vyacheslav Egorov <vegorov@google.com> Commit-Queue: Martin Kustermann <kustermann@google.com>
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.