Commit Graph

10912 Commits

Author SHA1 Message Date
Martin Kustermann dbfd00f44d [vm/compiler] Add new optimization pass which inlines typed data accesses
Based on the unified typed data layout, we can now inline accesses to
typed data interface classes if there are no 3rd party implementations
of those interfaces.

Example: If a receiver is of type Uint8List and we call `[]` or `[]=` we
will inline the byte access.

Instead of changing the existing inliner / call specializer we add this
as an extra pass: If the inliner / call specializer infer that the
receiver type is e.g. internal typed data then it will perform the
inlining itself using more optimized LoadIndexed instruction.

=> Only if those existing optimization passes have not been able to inline
   the access will we, later on in the compilation pipeline, run a
   specialized pass which will inline the accesses using LoadUntagged +
   LoadIndexed (which is slightly less efficient than using only LoadIndexed
   for internal typed data).

As a first step this is only done for AOT.

For ease of writing tests matching certain IR graphs this CL also adds a
IR pattern matcher.

Issue https://github.com/dart-lang/sdk/issues/35154

Cq-Include-Trybots: luci.dart.try:vm-canary-linux-debug-try, vm-dartkb-linux-debug-x64-try, vm-dartkb-linux-release-x64-try, vm-kernel-asan-linux-release-x64-try, vm-kernel-checked-linux-release-x64-try, vm-kernel-linux-debug-ia32-try, vm-kernel-linux-debug-simdbc64-try, vm-kernel-linux-debug-x64-try, vm-kernel-linux-product-x64-try, vm-kernel-linux-release-ia32-try, vm-kernel-linux-release-simarm-try, vm-kernel-linux-release-simarm64-try, vm-kernel-linux-release-simdbc64-try, vm-kernel-linux-release-x64-try, vm-kernel-optcounter-threshold-linux-release-ia32-try, vm-kernel-optcounter-threshold-linux-release-x64-try, vm-kernel-precomp-android-release-arm-try, vm-kernel-precomp-bare-linux-release-simarm-try, vm-kernel-precomp-bare-linux-release-simarm64-try, vm-kernel-precomp-bare-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-product-x64-try, vm-kernel-precomp-linux-release-simarm-try, vm-kernel-precomp-linux-release-simarm64-try, vm-kernel-precomp-linux-release-x64-try, vm-kernel-precomp-obfuscate-linux-release-x64-try, vm-kernel-precomp-win-release-simarm64-try, vm-kernel-precomp-win-release-x64-try, vm-kernel-reload-linux-debug-x64-try, vm-kernel-reload-linux-release-x64-try, vm-kernel-reload-rollback-linux-debug-x64-try, vm-kernel-reload-rollback-linux-release-x64-try, vm-kernel-win-debug-ia32-try, vm-kernel-win-debug-x64-try, vm-kernel-win-product-x64-try, vm-kernel-win-release-ia32-try, vm-kernel-win-release-x64-try

Change-Id: I5f2e01a55f46b473f64478b05679f65b9fd7c4c8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98662
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-04-05 15:51:34 +00:00
Samir Jindel a2709992a2 [vm] Support optcounter=1 and randomize it for testing.
Change-Id: I1d371ca9644a65f8fe9864ac708689c1469da17d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97242
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2019-04-05 10:15:44 +00:00
Alexander Markov 38dbddc90d [vm/bytecode] Add AllocateClosure bytecode
AllocateClosure bytecode is used to convey information about closure
function into an instance allocation site. This allows VM inliner to see
closure function very early at the optimization pipeline and enables
inlining of closure calls.

DeltaBlueClosures in JIT/bytecode mode (--use-bytecode-compiler):
Before: DeltaBlueClosures(RunTime): 1746.5404424083767 us.
After: DeltaBlueClosures(RunTime): 1291.4649496449324 us.

Issue: https://github.com/dart-lang/sdk/issues/36342
Issue: https://github.com/dart-lang/sdk/issues/36429
Issue: https://github.com/dart-lang/sdk/issues/36428
Change-Id: I6e94cdc2eb30110b0651a86bd2bdc40dcdd63207
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98439
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-04-05 00:00:13 +00:00
Martin Kustermann 9814cb1b9c [vm/compiler] Make new CheckBoundBase and allow range analysis contrain values after GenericCheckBound
Before this CL the range analysis was only constraining bounds for the
JIT-based CheckArrayBounds. This CL enables doing the same for
GenericCheckBound by extracting a common base class and make the range
analysis use it

Issue https://github.com/dart-lang/sdk/issues/35154

Change-Id: Ie23b297ea0b133dd9dee2cff460cd9f24301152f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98460
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-04-04 12:53:50 +00:00
Aske Simon Christensen f63eaab3af [kernel] Add instance creation kernel node.
This is used in constant evaluation to represent const constructor
invocations with unevaluated field values or asserts.

Change-Id: I1d2d60a18f967a4dd195b3b5895db9a126c47803
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98561
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2019-04-04 12:22:50 +00:00
Martin Kustermann 76f3630d04 [vm/compiler] Remove polymorphic typed data access in inliner
This is the first CL which takes advantage of the newly added inner
pointer in the RawTypedDataBase in a polymorphic way (so far this
pointer was only used if we knew the object is external typed data).

Issue https://github.com/dart-lang/sdk/issues/35154

Change-Id: I80f915774aa650b7943bd6b4a1d5ffdcb7952b21
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98571
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2019-04-04 11:09:30 +00:00
Martin Kustermann 31d558c81c [vm/compiler] Add il_test_helper.h with support for running compilation pipelines for testing
The two existing places where IR is built are changed to use this new
helper. It supports running normal JIT/AOT passes as well as a
user-specified set of passes.

In order to allow vm/cc tests to make assertions about AOT pipeline this CL
enables the DART_PRECOMPILER define in run_vm_tests binary (similar to
gen_snapshot, run_vm_tests has now JIT and AOT support)

Change-Id: Ib51a024a81e0291e89d20860b8b9a2762611426c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98482
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
2019-04-04 05:58:29 +00:00
Alexander Markov bf293ea34c [vm/bytecode] Remove support for old version of bytecode format (v1)
Bytecode format version 2 was introduced Feb 05 2019 in
https://dart-review.googlesource.com/c/sdk/+/91108

This change cleans up code related to old constant pool entries which
were removed in v2.

Change-Id: Ic9cccd2fdec26758f377691bf4edc26d1309a524
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98610
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-04-03 22:44:21 +00:00
Aart Bik e9f5b85492 [vm/bytecode] fixed typo in stack test
Rationale:
We should test for *empty* stack. As written, we basically
never generate OSR points for the bytecode path except for
the cases we can' handle yet :-)

https://github.com/dart-lang/sdk/issues/36421

Change-Id: Ie70a626f9fd24d63442e681ab120087f9d1b010b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98625
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-04-03 22:38:41 +00:00
Ryan Macnak 603a57e4c2 [vm, interpreter] Increment implicit accessor usage counts.
Fixes NBody regression from 298dacfef5.

Change-Id: I04634750c76668376bf449f97c2f6b79a3a06b92
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98621
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-04-03 21:52:42 +00:00
Alexander Markov 4d37977473 [vm/bytecode] Do not mark null-initialized instance fields as nullable too early
In bytecode we track null-initialized fields for each constructor,
so there is no need to record stores to such fields eagerly.

This enables more accurate tracking of fields which don't have initializer
or initialized with null, but they are always overwritten by initializers
in constructors.

Change-Id: I08edc65c18a644f69109f0eced736e5e859f1715
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98624
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-04-03 21:35:23 +00:00
Ryan Macnak e3164c9078 [vm, reload] ResetICDatas may allocate, so it cannot run during heap iteration.
Change-Id: Ida3fc538bd7f7f05fa5451f5f0f37e9fccbdf769
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98447
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2019-04-03 19:00:51 +00:00
Vyacheslav Egorov 26c45e78a4 [vm/compiler] Prevent incorrect caching of mutable CompileType objects as reaching types.
In general we would like to keep previous results of type propagation passes, however this
leads to situations where CompileType objects owned by definitions are cached as reaching
types at uses that are no longer directly connected to the definition itself.

This leads to situations when type propagator updates the type of the definition in place
via Definition::UpdateType, but does not enqueue an instruction which uses this type which
leads to incorrect fix-point computation.

As a fix we make the fact that some CompileType objects are owned by definitions explicit
by assigning [CompileType::owner_] field. Whenever we encounter situation that reaching type's
owner does not match current definition flowing into use we clone compile type to disconnect
it from original owner and prevent hidden mutation.

This CL also fixes two minor issues:

- incorrect computation of non-nullable type from a nullable CompileType with a cid;
- assings CompileType to LoadIndexedUnsafe instructions emitted by prologue builder;

Fixes https://github.com/dart-lang/sdk/issues/36156

Bug: 36156
Change-Id: I6536cfe1fda033cba3524336bfbdb871b88a8b3f
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-android-release-arm-try, vm-kernel-precomp-bare-linux-release-simarm-try, vm-kernel-precomp-bare-linux-release-simarm64-try, vm-kernel-precomp-bare-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-product-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98358
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-04-03 17:53:36 +00:00
Ryan Macnak dc655d9e1a [vm, bytecode] Propagate interface targets to the flow graph and ICData.
Bug: https://github.com/dart-lang/sdk/issues/36342
Bug: https://github.com/dart-lang/sdk/issues/36428
Change-Id: I7a22537b83d500ebb0a764963a789720a64467ca
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98437
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-04-03 17:27:07 +00:00
Alexander Aprelev 1dd72d4309 Revert "[vm/build] Expose is_release/is_profile so they are available in third_party gn scripts." and different fix.
Patchset 1 reverts commit f3aaf8a770 as it will
present problems in other embedders which will have to deal with is_profile argument.

Patchset 2 fixes the build by switching from is_product to dart_runtime_mode

Change-Id: I167e6f531af3b0fb0f3e006b074ebdf1b69f3fe5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98601
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2019-04-03 17:06:47 +00:00
Aart Bik e64bd9a01a [vm/compiler] Fix incorrect labeling of stack slots
Rationale:
The "unoptimized code" representation is really a stack
machine that pushes and pops arguments. The intermediate
representation did not show the correct labeling for
"temporaries", in particular around push arguments.
This CL fixes that bug, making the human readable form
of the intermediate much easier to understand. Also,
it allows for proper stack depth computations.

First use:
Sharpen condition on OSR points a bit.
Simple control flow collections will now allow OSR.


https://github.com/dart-lang/sdk/issues/36421
https://github.com/dart-lang/sdk/issues/36409

Change-Id: I8be707af08462a22687b355b747ba85e42431ad5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98500
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-04-03 17:05:26 +00:00
Vyacheslav Egorov 9e81e4bfe5 [vm/compiler] Move BlockBuilder from graph_intrinsifier.cc to a header.
This helper class can be used for building IL in SSA form. It was
previously used to build intrinsic IL, but it can also be used to
build IL for tests.

This move required introducing a constant that describes offset
of the last parameter from SP value on entry (kLastParamFrom

This CL also changes the meaning of ParameterInstr(index, SPREG) to be
[SP + index + kLastParamSlotFromEntrySp], where previously it was
something like [SP + (index - 1) + kLastParamSlotFromEntrySp].

Change-Id: Ib75ecb3a94f9cde74d6f91028d3cbea8f5e4bc42
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98336
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-04-03 15:42:56 +00:00
Samir Jindel 28734c5f23 [vm] Deoptimize when encountering uninitialized guard state for final field in optimized code.
Fixes dartbug.com/36373.
Addresses dartbug.com/35196.

Change-Id: I59328b91702b68d90b086cc8c15718365f683377
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98329
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
Auto-Submit: Samir Jindel <sjindel@google.com>
2019-04-03 13:54:13 +00:00
Martin Kustermann 592aee4838 Revert "Reland "Temporary revert of two changes which potentially caused performance regressions in Flutter.""
The change was already reverted and I accidentally relanded this.

Change-Id: I62ff3367db7aaaf3a470727fdb587830a23fe53c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98566
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-04-03 12:50:57 +00:00
Ben Konyi debd918696 Reland "Temporary revert of two changes which potentially caused performance regressions in Flutter."
This is a reland of 49c94d3600

It appears that the major regressions were introduced not by the typed data unification
changes but rather by 3fd124db1f "[vm] Repair the resolver abstraction." which got
reverted in e979895efb "Revert "[vm] Repair the resolver abstraction."


Original change's description:
> Temporary revert of two changes which potentially caused performance regressions in Flutter.
>
> Revert "[vm] Re-number class ids for internal/external typed data and typed data views"
>
> This reverts commit a062221b76.
>
> Revert "[vm] Unify internal/external/view typed data into new RawTypedDataBase class"
>
> This reverts commit 94362f1af0.
>
> Change-Id: I7189c976aa86cdcf0a3802631bff754baf3ca2cc
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98521
> Reviewed-by: Ben Konyi <bkonyi@google.com>

Change-Id: I758775ccc426a02bce538d07ea04d9c67e8933d2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98562
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
Auto-Submit: Martin Kustermann <kustermann@google.com>
2019-04-03 12:04:23 +00:00
asiva dc9370a07d [vm/runtime] Create separate background compilation queues for optimized and unoptimized compilations.
- create separate compilation queues for optimized and compilation
queues
- remove option FLAG_background_compilation_stop_alot doesn't seem to be used in any format testing
- remove some class finalization checks before starting the background compiler

Change-Id: I98f1773987e33a43e7b43ace4c383d17bd0a1710
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98453
Reviewed-by: Zach Anderson <zra@google.com>
2019-04-03 00:58:43 +00:00
Ben Konyi d63d0b4bcd Revert "Temporary revert of two changes which potentially caused performance regressions in Flutter."
This reverts commit 49c94d3600.

Reason for revert: Relanding

Original change's description:
> Temporary revert of two changes which potentially caused performance regressions in Flutter.
> 
> Revert "[vm] Re-number class ids for internal/external typed data and typed data views"
> 
> This reverts commit a062221b76.
> 
> Revert "[vm] Unify internal/external/view typed data into new RawTypedDataBase class"
> 
> This reverts commit 94362f1af0.
> 
> Change-Id: I7189c976aa86cdcf0a3802631bff754baf3ca2cc
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98521
> Reviewed-by: Ben Konyi <bkonyi@google.com>

TBR=bkonyi@google.com,asiva@google.com

Change-Id: I5c5be67fcec05434283153cb2592ba41afd1f41f
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98505
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2019-04-02 23:53:42 +00:00
Ben Konyi 49c94d3600 Temporary revert of two changes which potentially caused performance regressions in Flutter.
Revert "[vm] Re-number class ids for internal/external typed data and typed data views"

This reverts commit a062221b76.

Revert "[vm] Unify internal/external/view typed data into new RawTypedDataBase class"

This reverts commit 94362f1af0.

Change-Id: I7189c976aa86cdcf0a3802631bff754baf3ca2cc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98521
Reviewed-by: Ben Konyi <bkonyi@google.com>
2019-04-02 23:53:12 +00:00
Ryan Macnak d77a6064a9 [vm, profiler] Improve profiler stacks and VM backtraces.
- Fix duplication of top frame from the native stack walker
 - Include frame pointer, useful for debugging stack overflows
 - Print dso name and offset when no symbol is available at runtime to allow offline symbolification

Change-Id: I150d508e7c370c26ddd836b9dd50c2a465c19ebf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98432
Reviewed-by: Zach Anderson <zra@google.com>
2019-04-02 22:45:24 +00:00
Ryan Macnak 3379eefd5f [vm] Remove DART_CHECK_VALID; add check for a current isolate to Dart_PropagateError.
Use DART_CHECK_VALID has been incorrect since the introduction of Isolate.kill and Dart_Cleanup because it crashes when given an unwind error.

Remove long-broken FullSnapshot1 test.

Change-Id: I1427249349e8138427bc7833980b5eff6ac466db
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98263
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2019-04-02 20:06:19 +00:00
Alexander Aprelev 5bbfc06b83 [vm/build] Pass predefined environment variables to compile_platform.
This is needed for correct frontend constant evaluation of [type].fromEnvironment() expressions.

Fixes https://github.com/dart-lang/sdk/issues/36307.

Change-Id: I0332bdcc432148ce2338c6591b18387d835add6e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98434
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2019-04-02 19:53:09 +00:00
Alexander Markov 8fb77ec84d [vm/bytecode] Preliminary support for new language features in bytecode
Issue: https://github.com/dart-lang/sdk/issues/36214
Issue: https://github.com/dart-lang/sdk/issues/36218

Change-Id: I39149b82cb93c1cb87c64cf9c41c56b753bba13a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98400
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
2019-04-02 19:11:09 +00:00
Ryan Macnak 6d934b94c5 [vm, service] Remove _getCrashDump.
This has been broken since Dart 2.

Bug: https://github.com/dart-lang/sdk/issues/36281
Change-Id: I1b92c079ca3d7720a654c56457fd5aebeb7b8df4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97445
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2019-04-02 18:00:49 +00:00
Clement Skau 405bd06725 [VM] Refactors metrics variables to avoid multiple instances per compiled unit.
This moves the definition of the global static VM metric variables
out of the header to avoid defining them multiple times.
This could cause multiple instances which defeats the whole purpose.

Bug: None
Change-Id: Idb8b2da1c2b4591c4824e2bb4b1474437231b3c6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98324
Commit-Queue: Clement Skau <cskau@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-04-02 11:49:18 +00:00
Siva Annamalai 057497e57b Revert "[vm/runtime] Create separate background compilation queues for optimized and unoptimized compilations."
This reverts commit bcb6df13b9.

Reason for revert: <INSERT REASONING HERE>

Original change's description:
> [vm/runtime] Create separate background compilation queues for optimized and unoptimized compilations.
> 
> - create separate compilation queues for optimized and compilation
> queues
> - remove option FLAG_background_compilation_stop_alot doesn't seem to be used in any format testing
> - remove some class finalization checks before starting the background compiler
> 
> Change-Id: I09feb500c2a5cc9c6e93347f63bfca41b83b35cf
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98301
> Reviewed-by: Zach Anderson <zra@google.com>
> Commit-Queue: Siva Annamalai <asiva@google.com>

TBR=zra@google.com,asiva@google.com

Change-Id: I3faf74c95dce7741c75f8836cce30f9dba2e154c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98448
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2019-04-02 01:17:24 +00:00
asiva bcb6df13b9 [vm/runtime] Create separate background compilation queues for optimized and unoptimized compilations.
- create separate compilation queues for optimized and compilation
queues
- remove option FLAG_background_compilation_stop_alot doesn't seem to be used in any format testing
- remove some class finalization checks before starting the background compiler

Change-Id: I09feb500c2a5cc9c6e93347f63bfca41b83b35cf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98301
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2019-04-02 00:32:33 +00:00
Zichang Guo c2f014064e [vm/debugger] Ensure TopLevel class is finalized when setting breakpoint
Following the revert #98360, make sure the finalizing happens only in debugger.
Create the test cases to demonstrate the behavior.

Bug: https://github.com/dart-lang/sdk/issues/35859
Change-Id: Ib27fef18a7c0696ec6dc6d045fa06f60677333c8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98422
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
2019-04-01 23:36:33 +00:00
Ryan Macnak e979895efb Revert "[vm] Repair the resolver abstraction."
This reverts commit 3fd124db1f.

Reason for revert: Provokes existing bug in hot reload call site reset

Original change's description:
> [vm] Repair the resolver abstraction.
> 
>  - Move resolution logic that accumulated in the runtime entries into Resolver.
>  - Improve NoSuchMethodError for closures when --no-lazy-dispatchers
>  - Fix concurrent modification of Null class by nullability propagation.
> 
> Change-Id: Id979459bea43d318a4bb8fd904ef7f23e2711342
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97846
> Commit-Queue: Ryan Macnak <rmacnak@google.com>
> Reviewed-by: Régis Crelier <regis@google.com>

TBR=rmacnak@google.com,alexmarkov@google.com,asiva@google.com,regis@google.com

Change-Id: Ife28f28fff7394dca3fc27e2745370030572720e
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98427
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2019-04-01 21:57:06 +00:00
Ryan Macnak 3fd124db1f [vm] Repair the resolver abstraction.
- Move resolution logic that accumulated in the runtime entries into Resolver.
 - Improve NoSuchMethodError for closures when --no-lazy-dispatchers
 - Fix concurrent modification of Null class by nullability propagation.

Change-Id: Id979459bea43d318a4bb8fd904ef7f23e2711342
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97846
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2019-04-01 16:22:53 +00:00
Alexander Markov 4ae5b272cb [vm/bytecode/compiler] Fix dropping of expression stack values when generating Throw
Fixes https://github.com/dart-lang/sdk/issues/36374

Change-Id: I1477ddb110c19674b82de4edbd7a71b7fbaba090
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98220
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
2019-04-01 15:49:23 +00:00
Martin Kustermann a062221b76 [vm] Re-number class ids for internal/external typed data and typed data views
Currently internal cids for all element sizes are packed together, so
are external cids and view cids.

This change re-orders them to make internal/external/view for the same
element size be packed together.

This allows is/as checks for those classes to be performed with
continuous cid-range check. For example "<obj> is Uint8List" becomes
one range check.

(For most applications internal/external/view classes are the only
non-abstract implementations of those interfaces)

Issue https://github.com/dart-lang/sdk/issues/35154

Cq-Include-Trybots: luci.dart.try:vm-canary-linux-debug-try, vm-dartkb-linux-debug-x64-try, vm-dartkb-linux-release-x64-try, vm-kernel-asan-linux-release-x64-try, vm-kernel-checked-linux-release-x64-try, vm-kernel-linux-debug-ia32-try, vm-kernel-linux-debug-simdbc64-try, vm-kernel-linux-debug-x64-try, vm-kernel-linux-product-x64-try, vm-kernel-linux-release-ia32-try, vm-kernel-linux-release-simarm-try, vm-kernel-linux-release-simarm64-try, vm-kernel-linux-release-simdbc64-try, vm-kernel-linux-release-x64-try, vm-kernel-optcounter-threshold-linux-release-ia32-try, vm-kernel-optcounter-threshold-linux-release-x64-try, vm-kernel-precomp-android-release-arm-try, vm-kernel-precomp-bare-linux-release-simarm-try, vm-kernel-precomp-bare-linux-release-simarm64-try, vm-kernel-precomp-bare-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-product-x64-try, vm-kernel-precomp-linux-release-simarm-try, vm-kernel-precomp-linux-release-simarm64-try, vm-kernel-precomp-linux-release-x64-try, vm-kernel-precomp-obfuscate-linux-release-x64-try, vm-kernel-precomp-win-release-simarm64-try, vm-kernel-precomp-win-release-x64-try, vm-kernel-reload-linux-debug-x64-try, vm-kernel-reload-linux-release-x64-try, vm-kernel-reload-rollback-linux-debug-x64-try, vm-kernel-reload-rollback-linux-release-x64-try, vm-kernel-win-debug-ia32-try, vm-kernel-win-debug-x64-try, vm-kernel-win-product-x64-try, vm-kernel-win-release-ia32-try, vm-kernel-win-release-x64-try
Change-Id: If27cbc68dcd1bb93e26fc943e2b2a92ad9c43305
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98323
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-04-01 08:06:57 +00:00
Martin Kustermann 94362f1af0 [vm] Unify internal/external/view typed data into new RawTypedDataBase class
This moves the length field as well as an inner pointer to the start of
the data into the RawTypedDataBase class.  The inner pointer is updated
on allocation, scavenges and old space compactions.

To avoid writing more assembly the typed data view factory constructors
will be generated using IL, which will update the inner pointer. This
required adding new IR instructions and changing the existing
UnboxedIntConverter instruction.

This is the foundation work to de-virtualize calls on the public typed
data types, e.g. Uint8List.


Issue https://github.com/dart-lang/sdk/issues/35154

Cq-Include-Trybots: luci.dart.try:vm-canary-linux-debug-try, vm-dartkb-linux-debug-x64-try, vm-dartkb-linux-release-x64-try, vm-kernel-asan-linux-release-x64-try, vm-kernel-checked-linux-release-x64-try, vm-kernel-linux-debug-ia32-try, vm-kernel-linux-debug-simdbc64-try, vm-kernel-linux-debug-x64-try, vm-kernel-linux-product-x64-try, vm-kernel-linux-release-ia32-try, vm-kernel-linux-release-simarm-try, vm-kernel-linux-release-simarm64-try, vm-kernel-linux-release-simdbc64-try, vm-kernel-linux-release-x64-try, vm-kernel-optcounter-threshold-linux-release-ia32-try, vm-kernel-optcounter-threshold-linux-release-x64-try, vm-kernel-precomp-android-release-arm-try, vm-kernel-precomp-bare-linux-release-simarm-try, vm-kernel-precomp-bare-linux-release-simarm64-try, vm-kernel-precomp-bare-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-product-x64-try, vm-kernel-precomp-linux-release-simarm-try, vm-kernel-precomp-linux-release-simarm64-try, vm-kernel-precomp-linux-release-x64-try, vm-kernel-precomp-obfuscate-linux-release-x64-try, vm-kernel-precomp-win-release-simarm64-try, vm-kernel-precomp-win-release-x64-try, vm-kernel-reload-linux-debug-x64-try, vm-kernel-reload-linux-release-x64-try, vm-kernel-reload-rollback-linux-debug-x64-try, vm-kernel-reload-rollback-linux-release-x64-try, vm-kernel-win-debug-ia32-try, vm-kernel-win-debug-x64-try, vm-kernel-win-product-x64-try, vm-kernel-win-release-ia32-try, vm-kernel-win-release-x64-try
Change-Id: I1aab0dd93fa0f06a05299ab4cb019cf898b9e1ef
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97960
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-03-30 14:02:50 +00:00
Zach Anderson e46fa1cf1d Revert "[VM] Ensure Top level class is finalized for loadedscripts in library"
This reverts commit 9f00d1b384.

Reason for revert: This change triggered some incorrect runtime typecheck failures in Fuchsia.

Original change's description:
> [VM] Ensure Top level class is finalized for loadedscripts in library
> 
> The breakpoints sent from IDE will be checked with existing scripts.
> Because the loadedscripts() doesn't contain the scripts info for part/part of.
> Then the breakpoint will be considerred as a latent breakpoint and didn't get
> resolved later. The solution is to finalize the toplevel class before loadedscripts()
> uses Dictionary iterator.
> 
> Bug: https://github.com/dart-lang/sdk/issues/35859
> Change-Id: I90b67ee9e9e6afe2556ca806cdd87eb5661304a8
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97402
> Reviewed-by: Alexander Markov <alexmarkov@google.com>
> Commit-Queue: Zichang Guo <zichangguo@google.com>

TBR=alexmarkov@google.com,asiva@google.com,zichangguo@google.com

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: https://github.com/dart-lang/sdk/issues/35859
Change-Id: Ib28c2257f94b8d7ee0a3607be4a92153b7229e54
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98360
Reviewed-by: Zach Anderson <zra@google.com>
2019-03-29 18:36:23 +00:00
Martin Kustermann c185945507 [vm/aot] Ensure global object pool is relocated by compactor and reloaded when returning from natives
When the compactor moves the global object pool the pointer in Thread
was not updated because it was in a macro list which can only hold
objects inside the read-only VM isolate.

All calls into dart need to populate PP as well as all calls returning
from C++ need to restore PP.  There was a missing case where we return
from natives and don't restore PP (i.e. not normal runtime calls).

This started to be an issue after we started moving old space objects.

Cq-Include-Trybots: luci.dart.try:vm-canary-linux-debug-try, vm-dartkb-linux-debug-x64-try, vm-dartkb-linux-release-x64-try, vm-kernel-asan-linux-release-x64-try, vm-kernel-checked-linux-release-x64-try, vm-kernel-linux-debug-ia32-try, vm-kernel-linux-debug-simdbc64-try, vm-kernel-linux-debug-x64-try, vm-kernel-linux-product-x64-try, vm-kernel-linux-release-ia32-try, vm-kernel-linux-release-simarm-try, vm-kernel-linux-release-simarm64-try, vm-kernel-linux-release-simdbc64-try, vm-kernel-linux-release-x64-try, vm-kernel-optcounter-threshold-linux-release-ia32-try, vm-kernel-optcounter-threshold-linux-release-x64-try, vm-kernel-precomp-android-release-arm-try, vm-kernel-precomp-bare-linux-release-simarm-try, vm-kernel-precomp-bare-linux-release-simarm64-try, vm-kernel-precomp-bare-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-product-x64-try, vm-kernel-precomp-linux-release-simarm-try, vm-kernel-precomp-linux-release-simarm64-try, vm-kernel-precomp-linux-release-x64-try, vm-kernel-precomp-obfuscate-linux-release-x64-try, vm-kernel-precomp-win-release-simarm64-try, vm-kernel-precomp-win-release-x64-try, vm-kernel-reload-linux-debug-x64-try, vm-kernel-reload-linux-release-x64-try, vm-kernel-reload-rollback-linux-debug-x64-try, vm-kernel-reload-rollback-linux-release-x64-try, vm-kernel-win-debug-ia32-try, vm-kernel-win-debug-x64-try, vm-kernel-win-product-x64-try, vm-kernel-win-release-ia32-try, vm-kernel-win-release-x64-try
Change-Id: I14776be226431e2c53ae888b3c98a1b8c540c4ec
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98343
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-03-29 15:13:25 +00:00
Vyacheslav Egorov d23909802e [vm/compiler] Eliminate dead CatchBlockEntry Parameter-s
Parameter instructions inside CatchBlockEntry's initial definitions
are similar to Phi instructions: Parameter value at entry to the
catch would be taken from corresponding slot in the environment
attached to the instruction which threw the exception which is
being caught.

Thus similarly to Phi-s Parameter instructions can be redundant (if they
always evaluate to the same value - no matter where control arrives
from) or dead (if their value never reaches real instruction).

We already had an analysis to discover subset of redundant Parameter-s
which always evaluate to a constant value.

This CL introduces analysis to eliminate dead Parameter-s.

This should significantly reduce size of metadata generated for try/catch
and reduce spilling within functions with try/catch.

On Flutter Gallery: reduces Isolate part of snapshot by 15k (0.7%), Instructions
part is reduced by 2.7K (0.06%).

Change-Id: I345813e326152ca2ed2d4d5353bb64730d7545d4
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-android-release-arm-try, vm-kernel-precomp-bare-linux-release-simarm-try, vm-kernel-precomp-bare-linux-release-simarm64-try, vm-kernel-precomp-bare-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-product-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97110
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
2019-03-29 14:15:42 +00:00
Ryan Macnak ae62f7fefe [vm, gc] Make incremental write-barrier elimination safe.
If generated code allocates an old object during concurrent marking, add this object to the deferred marking stack to be (re)scanned when marking is finalized to catch stores missed by the barrier elimination.

Bug: https://github.com/dart-lang/sdk/issues/36341
Change-Id: Ifc744fdf720446f14b68268383e1fe5c92d9b5a5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97861
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2019-03-28 18:00:10 +00:00
Ben Konyi ac2c934563 Reland "[ VM / dart:isolate ] Added ability to set names for spawned isolates."
This reverts commit 638f13ff3d.

Change-Id: Ib5015539b1c93791c2469be6995789f8f0362806
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97845
Commit-Queue: Ben Konyi <bkonyi@google.com>
Auto-Submit: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2019-03-28 16:39:50 +00:00
Jens Johansen 3e4a1de6e9 Use dart:foo-patch import uri for patches; remove VM workaround for sdk uris
Closes #32087.

Change-Id: I93a757125bf29bc283bf6536fa5e53a4f9334891
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97311
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-03-28 10:00:51 +00:00
Jens Johansen ef168de000 [vm/kernel] Index all source and line starts before using them (2nd try)
By indexing all sources in a concatenated dill file and then using that
index to find the sources and line starts we can fix missing information
(leading to crashes when collecting coverage) in for instance circular
instances.

This reverts commit 57321c1590 and adds a
fix.

Change-Id: I7a91801fb318cad0218cf3101d6a15f1ec929175
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98006
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-03-28 08:36:51 +00:00
Ryan Macnak cf32584870 [vm] Support compiling static field initializers and dynamic invocation forwarders from a compilation trace.
Clean up creating static field initializers.

Change-Id: I914263f532be1d1a7216d3b5e35d05c4f0fdf167
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97547
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2019-03-28 00:48:30 +00:00
Ben Konyi ca2f03c5f8 [ VM / Service ] Allow for breakpoints to be set using either file: or package: URIs for packages.
Additional minor changes:
- Sorted list of Symbols in symbols.h by name
- Added Symbol::PackageScheme() to symbol list

Change-Id: I2f739bfb5c8cbbe1e318614124695ae45dee4f23
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/98043
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2019-03-27 20:38:20 +00:00
Alexander Markov 994f535e03 [vm/bytecode/compiler] Remove excessive stack overflow checks when inlining
Megamorphic benchmark in bytecode/JIT-only mode:

Before:
MegaNeverOverridden(RunTime): 1847.3550369344412 us.
MegaNeverOverriddenIndirect(RunTime): 2054.2040605749485 us.
MegaOnlyOverriddenOnceIndirect(RunTime): 3444.1204027538724 us.
MegaFieldIndirect(RunTime): 2334.6812497082847 us.
MegaFieldHasGetterOnceIndirect(RunTime): 3212.210929373997 us.

After:
MegaNeverOverridden(RunTime): 1393.4616984679665 us.
MegaNeverOverriddenIndirect(RunTime): 1363.8226980231766 us.
MegaOnlyOverriddenOnceIndirect(RunTime): 2814.319476793249 us.
MegaFieldIndirect(RunTime): 1893.1759697256387 us.
MegaFieldHasGetterOnceIndirect(RunTime): 2782.111602225313 us.


https://github.com/dart-lang/sdk/issues/36342

Change-Id: Ibb73c1339f5b8f859531c8ed29aca4054d733ce0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97843
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-03-27 17:46:40 +00:00
Ryan Macnak b7a5e478bb [vm, service] Allow choice of tags and code-verus-function when getting profile samples as timeline events.
Change-Id: Ie0cf3d43d5ccc748216ba2b45a9466ce60dcf239
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97176
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
2019-03-26 22:52:40 +00:00
Keerti Parthasarathy 57321c1590 Revert "[vm/kernel] Index all source and line starts before using them"
This reverts commit a7ab99dd84.

Reason for revert: <INSERT REASONING HERE>

Original change's description:
> [vm/kernel] Index all source and line starts before using them
> 
> By indexing all sources in a concatenated dill file and then using that
> index to find the sources and line starts we can fix missing information
> (leading to crashes when collecting coverage) in for instance circular
> instances.
> 
> Change-Id: I454cff57f84f21de72f6486e1cecf15d1389a498
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/96901
> Commit-Queue: Jens Johansen <jensj@google.com>
> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>

TBR=vegorov@google.com,jensj@google.com

# Not skipping CQ checks because original CL landed > 1 day ago.

Change-Id: Iea75c9dd56e74fa0e98c90ea6841ed66b39d40cc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97941
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
Commit-Queue: Keerti Parthasarathy <keertip@google.com>
2019-03-26 22:13:10 +00:00
Alexander Markov 61f0f5bc43 [vm/bytecode] Declare members in bytecode
This change replaces kernel AST declarations of fields and functions
with bytecode declarations.

Size of dilp files is reduced by 11-12%.

Startup latency:
Time to the first full frame: 1.945s -> 1.687s
FinalizeClass: 554ms -> 277ms
FinishClassLoading: 296ms -> 156ms

There are following regressions in bytecode mode, which will be fixed
in future:

* dart:mirrors are not supported yet (implementation of mirrors relies
  on reading kernel AST in certain cases).

  As the result, lib_2/mirrors/* tests fail.

* native extensions are not supported yet (annotations on libraries
  and classes in AST are cleaned up as they could reference members
  which are now removed from AST).

  As the result, standalone_2/entrypoints_verification_test test fails.

* language_2/spread_collections/const_error_test/* tests fail
  due to https://github.com/dart-lang/sdk/issues/36286.

Change-Id: I5130f401fd7b84038b136136e7ccc1a6e51b6cea
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97561
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2019-03-26 21:40:10 +00:00