97369d0903
Speculative and non-speculative shift instructions have different representations of RHS input, so canonicalization of multiplication into a shift should account for that. Also, mark BinaryUint32Op instruction as always non-speculative - it never needs to speculate as it is inserted by range analysis after it can prove that it is valid to perform Uint32 op. This prevents insertion of a speculative shift instruction in AOT when BinaryUint32Op multiplication is canonicalized. Fixes https://github.com/dart-lang/sdk/issues/55003 TEST=vm/dart/regress_55003_test Change-Id: Ib1805ce2dc0e6f514e6f3b4a09be08808e75048b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/355820 Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Alexander Markov <alexmarkov@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.