[vm] Add type slot to SubtypeTestCache. This CL extends SubtypeTestCache entries with an additional slot that contains the type being checked, to allow for future uses where different runtime types can flow through a single checkpoint. This change is separated from those future uses to determine the impact of these changes only. Thus, most SubtypeTestCache checks require the type as an additional argument, and now the destination type register in TypeTestABI is now untouched in SubtypeTestCache checks. Since there are currently no plans for a dynamic InstanceOf test, the one argument SubtypeTestCache is left unchanged. Until we add cases in later CLs where the type can differ at the same AssertAssignable instruction, we could check the type last since it is currently guaranteed to be the same each time. However, we instead check it after the instance, which is when it should be checked once we have AssertAssignable instructions with types only known at runtime. This avoids having to change it later, but also ensures the measured impact of these changes can be compared to the impact of later changes. In addition, this CL also unifies most of the code used by GenerateInstanceOf (and also GenerateAssertAssignable via GenerateInlineInstanceof on IA32). This is possible since register use changes in the helper functions has eliminated the need to push the instantiator and function type argument registers from TypeTestABI on non-X64 architectures. By unifying these methods, we ensure that all architectures appropriately set TypeTestABI::kDstTypeReg when necessary. TEST=Existing tests on all architectures, change in object_test.cc. Cq-Include-Trybots: luci.dart.try:vm-kernel-linux-debug-x64-try,vm-kernel-nnbd-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-nnbd-linux-debug-ia32-try,vm-kernel-precomp-linux-debug-simarm_x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-nnbd-linux-debug-simarm_x64-try,vm-kernel-precomp-nnbd-linux-debug-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-nnbd-linux-release-simarm-try,vm-kernel-nnbd-linux-release-simarm64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm64-try,vm-kernel-precomp-nnbd-linux-release-simarm64-try Change-Id: I5d56de156e175758b3299ef1c776b848ac11f779 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/172503 Reviewed-by: Régis Crelier <regis@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
Dart is:
Optimized for UI: Develop with a programming language specialized around the needs of user interface creation
Productive: Make changes iteratively: use hot reload to see the result instantly in your running app
Fast on all platforms: Compile to ARM & x64 machine code for mobile, desktop, and backend. Or compile to JavaScript for the web
Dart's flexible compiler technology lets you run Dart code in different ways, depending on your target platform and goals:
Dart Native: For programs targeting devices (mobile, desktop, server, and more), Dart Native includes both a Dart VM with JIT (just-in-time) compilation and an AOT (ahead-of-time) compiler for producing machine code.
Dart Web: For programs targeting the web, Dart Web includes both a development time compiler (dartdevc) and a production time compiler (dart2js).
Dart is free and open source.
See LICENSE and PATENT_GRANT.
Visit dart.dev to learn more about the language, tools, getting started, and more.
Browse pub.dev for more packages and libraries contributed by the community and the Dart team.
If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.
There are more documents on our wiki.
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.