8c0df46887
With this cl hashCode function for integers which used to be identity function becomes `uint128_t hash = value * constant; hash ^= hash >> 64; hash ^= hash >> 32; hash &= 0x3fffffff`. Note that the hashCode has to stay the same across platforms(64-bit/32-bit). This dramatically improves performance of integer HashSet/HashMap lookups when integers differ in higher bits only(see the issue referenced below). AOT ARM64 benchmarks: === WordSolverIdentity -3.630% (-0.9 noise) BigInt.parse.0064.bits 15.43% (0.9 noise) BigInt.parse.4096.bits 40.80% (1.6 noise) BigInt.parse.0256.bits 42.01% (2.3 noise) BigInt.parse.1024.bits 50.91% (2.6 noise) IntegerSetLookup.DefaultHashSet 549916% (14727.6 noise) IntegerSetLookup.DefaultHashSet 597150% (55520.2 noise) IntegerSetLookup.HashSet 846924% (78126.7 noise) IntegerSetLookup.HashSet 791864% (107221.1 noise) === AOT x64: === Havlak -14.25% (-1.7 noise) DartMicroBench.Int64Div -7.091% (-1.2 noise) ObjectHash.manual.5 -9.541% (-0.8 noise) AsyncLiveVars.LiveInt1 4.726% (0.8 noise) IsolateJson.SendAndExit_Decode1MBx1 9.067% (0.8 noise) SplayHarderLatency 4.629% (0.9 noise) TypedDataDuplicate.Float64List.32.loop 35.01% (1.8 noise) IntegerSetLookup.DefaultHashSet 627996% (124823.6 noise) IntegerSetLookup.HashSet 1245362% (244705.3 noise) === JIT ARM64: === IntegerSetLookup.DefaultHashSet_Random 73.80% (1.2 noise) IntegerSetLookup.DefaultHashSet 344999% (6202.9 noise) IntegerSetLookup.HashSet 483731% (7845.7 noise) === JIT x64: === CollectionSieves-Set-removeLoop -6.294% (-0.9 noise) Utf8Encode.ru.10M 59.11% (0.8 noise) Utf8Encode.ru.10k 71.62% (0.9 noise) Utf8Encode.zh.10M 53.93% (0.9 noise) Utf8Encode.ne.10k 71.34% (0.9 noise) Utf8Encode.zh.10k 72.52% (0.9 noise) Utf8Encode.ne.10M 53.17% (0.9 noise) IntegerSetLookup.HashSet_Random 27.80% (1.1 noise) String.replaceAll.String.Zero 8.659% (1.2 noise) IntegerSetLookup.DefaultHashSet_Random 96.20% (1.3 noise) IntegerSetLookup.HashSet 481037% (18028.8 noise) IntegerSetLookup.DefaultHashSet 454450% (31501.3 noise) == Fixes https://github.com/dart-lang/sdk/issues/48641 TEST=ci Change-Id: Id982e4aa30cd1d6a63f93c73917a8b921ad464a3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/258600 Reviewed-by: Ryan Macnak <rmacnak@google.com> Commit-Queue: Alexander Aprelev <aam@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.