commit | 1453eebebcc8b881ddb18d25573ad245b4c47c94 | [log] [tgz] |
---|---|---|
author | Martin Kustermann <kustermann@google.com> | Thu Mar 25 15:04:43 2021 +0000 |
committer | commit-bot@chromium.org <commit-bot@chromium.org> | Thu Mar 25 15:04:43 2021 +0000 |
tree | 8fd553b95a7e1b517268ba64156586bd9609a3d3 | |
parent | 9847e7fbe62a1e4104228922885926c7a92cacb1 [diff] |
Reland "[vm/compiler] Always allow CSE of LoadStaticField & loosen assertion in AllowsCSE" Loosening of assertion: There is no guarantee that a static-final field has been initialized by the time a function is compiled (in optimized mode) that uses such a field. We should therefore loosen the ASSERT to not require the field to be initialized and rather allows CSE Enabling of CSE: In the past we had separate InitStaticField and LoadStaticField. The load itself had no side-effects and could therefore be moved arbitrarily. Though we couldn't allow it to be moved before it's InitStaticField. This dependency was not explicitly made and we therefore disabled CSE / LICM if the actual field was not initialized (or field may be reset) - see [0]. Though after merging of InitStaticField and LoadStaticField in [1] there is no longer a need for tracking any dependencies: The side-effects of InitStaticField are now reported by LoadStaticField. => We can therefore always allow CSE of LoadStaticFieldinstr and any code motion would respect side-effects of the instruction. [0] https://codereview.chromium.org/1497783002 [1] https://dart-review.googlesource.com/c/sdk/+/148283 TEST=Fixes flaky test. Closes https://github.com/dart-lang/sdk/issues/45133 Closes https://github.com/dart-lang/sdk/issues/45446 Change-Id: I4a699e9b1dc9dfec9a91208ed78ed0a0c41f5cad Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/192924 Reviewed-by: Vyacheslav Egorov <vegorov@google.com> Commit-Queue: 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, and to find codelabs.
Browse pub.dev for more packages and libraries contributed by the community and the Dart team.
Our API reference documentation is published at api.dart.dev, based on the stable release. (We also publish docs from our beta and dev channels, as well as from the primary development branch).
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.