Rationale:
Rather than forced inlining of clamped convertors
(the "saturated" method _toClampedUint8() from
dart:typed_data), exposing the fact that it always
returns smi values (since they check fail on null inputs)
yields much better Uint8ClampedListView performance
(it avoids re-compilation due to a speculative CheckSmi).
Note:
In the long run, we may still want them inlined
and improve range analysis to deal with clamping.
Performance:
About 2.8x faster than previous optimized version,
about 4.5x faster than original.
https://github.com/dart-lang/sdk/issues/33205
Change-Id: I86a06525d2f2ea0476effd3c3d856ff8d9ab1d87
Reviewed-on: https://dart-review.googlesource.com/60201
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
For example, by default 64-bit architectures now grow as 2, 4, 8, 16 instead of 2, 8, 32.
This change is to reduce memory usage and maximum minor GC time for Flutter and Fuchsia.
It would negatively impact batch applications, which prefer throughput,
so the new defaults are overriden by the command-line Dart VM in
runtime/bin/main.cc
Change-Id: Ie56a7599d4011a629c8c57bd88fec3ee8f277a9f
Reviewed-on: https://dart-review.googlesource.com/54305
Commit-Queue: Zach Anderson <zra@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Rationale:
Handles remaining polymorphic reason for typed_data
setters and getters (internal vs. external) during inlining.
Also introduces high level flow graph utilities that
can be reused throughout the compiler to reduce
future code duplication. Disables type speculation
for 64-bit AOT Dart2 to make all work.
Performance:
About 4x speedup on micro benchmarks (AOT64).
https://github.com/dart-lang/sdk/issues/33205
Change-Id: I678426719e49cd8aa1e5051523da12178120b3ba
Reviewed-on: https://dart-review.googlesource.com/59000
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
The new version of zx_cprng_draw either succeeds in reading the
requested amount of data or fails entirely. A future CL will rename
zx_cprng_draw_new to zx_cprng_draw once zx_cprng_draw has this new
behavior.
Change-Id: I08acad6a3443cb295f7855afdd63010dcf872820
Reviewed-on: https://dart-review.googlesource.com/59861
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Adam Barth <abarth@google.com>
To reduce size, PC descriptors corresponding to deoptimization points
were omitted if FLAG_optimization_counter_threshold < 0.
However, even if generation of optimized code is disabled with
'--optimization-counter-threshold=-1' option, we could still load optimized
code from snapshot. The loaded code can trigger deoptimization and
PC descriptors corresponding to deoptimization points could be needed.
This change removes this incorrect optimization of PC descriptors size when
optimizing compiler is disabled.
Fixes https://github.com/dart-lang/sdk/issues/33389
Change-Id: I74b0fab34ca1a46672e5a8d5c45ea9b506eab9b1
Reviewed-on: https://dart-review.googlesource.com/59481
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
The `@pragma` annotation on `vmservice_io.main` is modified to only mark it as a
root on non-product builds. Since the annotation is evaluated in the constant
transformation, we need to thread a flag through `gen_kernel.dart` indicating
whether the Kernel produced should target a product precompiler.
# Test Plan
Tested locally on Flutter. Unfortunately it's not possible to test the scenario where
`vmservice_io` is not included, since we don't have any "product" bots. Soon the
flag will be introduced into Flutter, and we will have some coverage from there.
Change-Id: I39f12343038fa221aafe5a55241bff4b8d14ec19
Reviewed-on: https://dart-review.googlesource.com/57501
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Simplifies evaluating the policy on each page growth and external allocation. Does not change the growth policy for synchronous GC.
Update the policy for idle GC to use capacity instead of used for consistency.
Change-Id: I3340399f7b97626e6b33bd8086ad408a9ff20ed4
Reviewed-on: https://dart-review.googlesource.com/58640
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
So far the frontend (parser, flow graph builder, ssa construction) were
aware of the actual frame layout.
This CL makes the indices we assign to [LocalVariable]s logical
indices, assigning:
* M parameters the indices 1 ... M
* N local variables the indices 0 -1 ... -(N-1)
The scope building, flow graph builder and ssa construction operate on
those logical indices.
When emitting actual code, the backend will translate those indices into
actual FP relative indices. This allows us to be more flexible in the
backend which frame layout we choose.
Issue https://github.com/dart-lang/sdk/issues/33274
Change-Id: I9a504bf97821c257aafd2b3430df9f4c9da4b442
Reviewed-on: https://dart-review.googlesource.com/57321
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
In Dart 2.0 AOT compilations we give dart_bootstrap/gen_snapshot the
fully linked Kernel IR file (*.dill file) with evaluated constants.
This CL will make the 2.0 AOT compiler
* only accept .dill files as input
* no longer invoke various functions during startup
* no longer start the VM service
* hit unreachable in DartEntry::InvokeFunction()
Issue https://github.com/dart-lang/sdk/issues/33185
Change-Id: Iaba44386633856774a0c29be043780b9b262df0f
Reviewed-on: https://dart-review.googlesource.com/56520
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
In most cases the correct fix is to simply drop the generic comment
syntax (e.g. replace "List/*<Map>*/" with "List"). We can't use the
more precise type because the runtime type is actually more general
(e.g. when processing an object that came from the JSON parser, all
lists have runtime type List<dynamic>, even if their elements happen
to be uniform). But we can introduce more precise types when handling
substructures.
Exception: all JSON-derived maps have type Map<String, dynamic> (since
JSON maps always have string keys), so we can use a more precise type
when dealing with JSON maps.
Change-Id: I48c9dbdda97c11530978212146f74db7b43f5197
Reviewed-on: https://dart-review.googlesource.com/58320
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
Rationale:
Always inline int convertors that don't do
much more than testing and anding.
For example, force inline
v26 <- StaticCall:66( _toUint8@6027147<0> v4 T{Type: class 'int'?}) T{Type: class 'int'?}
to
v47 <- Constant(#255)
..
CheckSmi:10(v4 T{Type: class 'int'?})
v45 <- BinarySmiOp:10(&, v4 T{_Smi}, v47 T{_Smi}) T{_Smi}
https://github.com/dart-lang/sdk/issues/33205
Change-Id: I595d9a64365e16ae244480b5e27f8be23c43d164
Reviewed-on: https://dart-review.googlesource.com/58061
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
If there is registered expression compiler, VM debugger uses it to compile expressions. Otherwise, it will fallback to use kernel service compiler.
This is needed to support Flutter use case where compiler is running on developer's host machine, not on the device where VM is running.
Bug: dartbug.com/31981
Change-Id: I8bdfc8ab45a57c306169abe189f1e24e1b0bcf40
Reviewed-on: https://dart-review.googlesource.com/57520
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
- Remove a level of indirection when accessing code units.
- Require a finalizer when constructing an external string.
Change-Id: I3f65246bf0ac50ffad900e2c338623a7684a9d3d
Reviewed-on: https://dart-review.googlesource.com/54300
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>