Commit Graph

15405 Commits

Author SHA1 Message Date
Régis Crelier e5b3feb241 [VM interpreter] Fix broken interpreter build after commit 5d7ca9cd1e.
Change-Id: I3a9540593e9cdcaaf54740d160101eb74f8e56c8
Reviewed-on: https://dart-review.googlesource.com/71363
Reviewed-by: Régis Crelier <regis@google.com>
2018-08-23 19:10:26 +00:00
Samir Jindel 2beb05b829 [vm] Re-land use of multiple entrypoints for closure calls.
Original patchset is in revision 1.

Change-Id: I29ab0dbc3711f99895fd4f04a49d4185463a1602
Cq-Include-Trybots: luci.dart.try:vm-kernel-win-release-x64-try,vm-kernel-optcounter-threshold-linux-release-x64-try,vm-kernel-precomp-linux-debug-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-win-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-reload-linux-debug-x64-try,vm-kernel-reload-linux-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/71241
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-08-23 17:54:19 +00:00
Vyacheslav Egorov a69844cb19 [vm/compiler] Check for catch presence explicitly in optimizer.
Some optimizations were checking for a number of successors of graph
entry - but that count includes unchecked entry and indirect entries.

Change-Id: Ib163a7710aaba3e68023a9cd04ca194c03262c33
Reviewed-on: https://dart-review.googlesource.com/71302
Reviewed-by: Samir Jindel <sjindel@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
2018-08-23 17:19:00 +00:00
Martin Kustermann cbf1b94790 [VM] Do not include precompiler-related things on IA32/DBC
Issue https://github.com/dart-lang/sdk/issues/33274

Change-Id: Ic27c89f1cffbad6c58ab3758f455d24863d9d675
Reviewed-on: https://dart-review.googlesource.com/71168
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-08-23 11:54:58 +00:00
Martin Kustermann 2aca81450d [VM] Fix crash in x64-JIT: Disable exactness tracking for fields with FutureOr<> type
Closes https://github.com/dart-lang/sdk/issues/34238

Change-Id: I0cb00737b3d3aad5fa6ea6359272bd43f89dbad9
Reviewed-on: https://dart-review.googlesource.com/71244
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-08-23 09:09:52 +00:00
Martin Kustermann df2d187f74 [VM] Move the ObjectPoolWrapper out of the Assembler
Issue https://github.com/dart-lang/sdk/issues/33274

Change-Id: I2e295a357939bc7c966c0658c344fcc4268669c1
Reviewed-on: https://dart-review.googlesource.com/71166
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-08-23 08:00:15 +00:00
Martin Kustermann 5d7ca9cd1e [VM] Add "patchability" bit to ObjectPool objects
This allows initializing a new pool from an old pool while preserving
the patchability bit.

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

Change-Id: I369bb852aea8e183da2fbf7ca3571312dc5fda27
Reviewed-on: https://dart-review.googlesource.com/71162
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-08-23 07:06:26 +00:00
Ryan Macnak 81d296c593 [vm, x64] Avoid use of preserved register in Testb3.
Fixes crash when compiled with ASAN.

Change-Id: Ib457728f156d7a8d3beafa4ae134fc884ab2679b
Reviewed-on: https://dart-review.googlesource.com/71233
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2018-08-23 01:23:49 +00:00
Alexander Markov 0554eeb4bb [vm/bytecode] Check number of arguments in closures without optional arguments
This CL adds EntryFixed bytecode instruction in bytecode generator and
interpreter. The new instruction is used instead of Entry in prologues of
closures with fixed arguments in order to check number of arguments.

Fixes language_2/closure_call_wrong_argument_count_test in bytecode mode.

Change-Id: I873166a73c5f33e7faca8739cd6f210370e81b2e
Reviewed-on: https://dart-review.googlesource.com/71231
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-08-22 23:20:26 +00:00
Régis Crelier e434142df0 [VM interpreter] Isolate may be NULL in thread.
This fixes a crash in StackFrameIterator when using interpreter.
Prevent timeout in thread test when using interpreter.
Adjust kernel status file for known issue.

Change-Id: I9e28675a3532153df24456e65407a8ce73503928
Reviewed-on: https://dart-review.googlesource.com/71222
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2018-08-22 22:11:42 +00:00
Samir Jindel dd1b7005a6 [vm] Fix typo in 7e358186a
Change-Id: I682263fe4bfa5b2485d42dd28dc93d1450387070
Reviewed-on: https://dart-review.googlesource.com/71240
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-08-22 19:19:58 +00:00
Ryan Macnak d6edd45d9a [vm, x64] Add missing addressing mode for testb.
To be used by the incremental write barrier.

Bug: https://github.com/dart-lang/sdk/issues/34002
Change-Id: I1f5214b5abe348fbb4eaa399819b01e515b085fb
Reviewed-on: https://dart-review.googlesource.com/71060
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2018-08-22 19:08:17 +00:00
Alexander Markov bcbfc131ed [vm/build] Disable kernel service snapshot in interpreter mode
Training run of kernel service currently fails in interpreter mode.
This change disables creation of kernel service snapshot in order to
fix the build in --bytecode mode.

Change-Id: If5d7189a3f04fb027d34e094cbd8f95cbe4f4094
Reviewed-on: https://dart-review.googlesource.com/71185
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-08-22 18:06:09 +00:00
Samir Jindel 7e358186ab [vm] Fix resolution of native extensions imported within packages.
We need to use the actual file URL of the importing library to find the extension library,
such as "file:///library/lib.dart" rather than the package URL (like "package:library/lib.dart").


Change-Id: I32a36f7a67321f356c9af34d1a458aeb122d0c24
Reviewed-on: https://dart-review.googlesource.com/71167
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-08-22 17:45:34 +00:00
Alexander Aprelev b878c21046 [gardening] Mark coverage_optimized_function_test slow on arm64.
Change-Id: Iae9d3bb1721d84ff246a147cf2f44c7bb27c4d60
Reviewed-on: https://dart-review.googlesource.com/71181
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2018-08-22 16:14:07 +00:00
Martin Kustermann 23829adc21 [VM] Fix SEGV in inliner: Reading the metadata of a function can fail
In this particular case, the kernel-isolate, while executing 'main', was
killed during `Dart_Cleanup()`.  The kill is performed via an OOB message
which will trigger an exception to propagate up.  This will cause the
`Library::GetMetadata()` function to return an error object.

Change-Id: Ie400e50473972875eb338a688bb77c23a562c936
Reviewed-on: https://dart-review.googlesource.com/71163
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-08-22 14:37:10 +00:00
Martin Kustermann 8c30475728 [VM] Fix arm check for whether a branch distance can be encoded
Change-Id: I037b8a5877d5794f4a5b451ec577b8debc841511
Reviewed-on: https://dart-review.googlesource.com/71143
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-08-22 10:07:28 +00:00
Martin Kustermann 33632ade58 [VM] Fix arm64 native calls: the pool entries need to be patchable if we use lazy linking
Change-Id: Icad35a66c0209955141ab6ca5a249ecb5e07439e
Reviewed-on: https://dart-review.googlesource.com/71142
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-08-22 09:32:03 +00:00
Alexander Aprelev 41e720b486 [vm] Add support for a new source file format kernel file lists.
Given a source file that starts with '#@dill' on a new line, then if the rest of the lines are full paths to the kernel dill files, all kernel dill files will be loaded and executed as single program.

So, for example, given `mytest.dillref` with following content:
```
/projects/mytest/build/bin/main.vm.dill
/projects/mytest/build/packages/mytest/lib.vm.dill
```

invocation of `dart mytest.dillref` will result in loading two dill files and starting combined app.

Bug: dartbug.com/33952
Change-Id: I22a99ec9a018da1bc984bc0d716af94bc10e20d6

Add few tests

Change-Id: I22a99ec9a018da1bc984bc0d716af94bc10e20d6
Reviewed-on: https://dart-review.googlesource.com/67460
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2018-08-21 22:12:54 +00:00
asiva d1bd887d03 [VM/SDK] Switch kernel isolate to run in Dart 2 mode
- Switch the kernel isolate to run in Dart2 mode
- Refactor build rules so bootstrapping of the front end happens
  with a prebuilt dart sdk
- Refactor application snapshot build rules so the kernel application
  snapshot rule does not get into a cyclic dependency during the
  bootstrap stage

Change-Id: Iccca3233f6cb8d6b307b4cf1ca3262f293f794a6
Reviewed-on: https://dart-review.googlesource.com/70841
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2018-08-21 20:28:06 +00:00
Ryan Macnak bfd86e5b22 [vm, gc] Make bypass_safepoints on helper threads sticky.
Allows concurrent marking and sweeping to continue during safepoints. However, the sweeper still cannot make much progress during a scavenge due to the scavenger holding the freelist lock.

Bug: https://github.com/dart-lang/sdk/issues/34002
Change-Id: I84f3f48feb81e8eeb67c418e918a6e12aa3178c9
Reviewed-on: https://dart-review.googlesource.com/70900
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2018-08-21 20:12:23 +00:00
Régis Crelier f69d2fd096 [VM runtime] Fix build. Missed one reference in previous commit.
Change-Id: I89b33221c4845cfd71b59c9fe9c3f4bd05a86782
Reviewed-on: https://dart-review.googlesource.com/70980
Reviewed-by: Régis Crelier <regis@google.com>
2018-08-21 19:50:40 +00:00
Ankur Mittal f0169f4fe0 [dart] Remove usage of ConnectToEnvironmentService.
CP-120 #comment
FL-98 #comment

TEST=CQ

Change-Id: I8a8bf31189923d4cbe3692429675901b3426ec25
Reviewed-on: https://dart-review.googlesource.com/70840
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-08-21 19:50:09 +00:00
Régis Crelier 14f3982a1f [VM runtime] Remove broken LongJumpScope::IsSafeToJump().
Over the years, this debug-only code evolved to check that the current stack
pointer is below the last exit frame, which is obviously always the case.

Change-Id: I9b5e1a5462df5b3392b4541e40a9c57d33d25055
Reviewed-on: https://dart-review.googlesource.com/70960
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2018-08-21 19:29:09 +00:00
Samir Jindel 569290dbf5 Revert "[vm] Use multiple entrypoints to remove unnecessary checks on statically-typed closure calls."
This reverts commit 19126e861e.

Reason for revert: Breaks several bots.

Original change's description:
> [vm] Use multiple entrypoints to remove unnecessary checks on statically-typed closure calls.
> 
> Test Plan:
> 
> Behavioral correctness should be ensured by existing tests. Tests in vm/dart/entrypoints
> ensure that the unchecked entrypoint is used in cases where the optimization should trigger.
> 
> Bug: https://github.com/dart-lang/sdk/issues/31798
> 
> Change-Id: Id25ecba86e20c22f0678c12986ad620db312ddaa
> Cq-Include-Trybots: luci.dart.try:vm-kernel-win-release-x64-try,vm-kernel-optcounter-threshold-linux-release-x64-try,vm-kernel-precomp-linux-debug-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-win-release-x64-try
> Reviewed-on: https://dart-review.googlesource.com/69743
> Commit-Queue: Samir Jindel <sjindel@google.com>
> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>

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

Change-Id: Ia33e9d141827d3c990c65d839333443c224dc85d
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: https://github.com/dart-lang/sdk/issues/31798
Cq-Include-Trybots: luci.dart.try:vm-kernel-win-release-x64-try, vm-kernel-optcounter-threshold-linux-release-x64-try, vm-kernel-precomp-linux-debug-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-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/70920
Reviewed-by: Samir Jindel <sjindel@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-08-21 17:10:56 +00:00
Samir Jindel 19126e861e [vm] Use multiple entrypoints to remove unnecessary checks on statically-typed closure calls.
Test Plan:

Behavioral correctness should be ensured by existing tests. Tests in vm/dart/entrypoints
ensure that the unchecked entrypoint is used in cases where the optimization should trigger.

Bug: https://github.com/dart-lang/sdk/issues/31798

Change-Id: Id25ecba86e20c22f0678c12986ad620db312ddaa
Cq-Include-Trybots: luci.dart.try:vm-kernel-win-release-x64-try,vm-kernel-optcounter-threshold-linux-release-x64-try,vm-kernel-precomp-linux-debug-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-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/69743
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-08-21 16:00:57 +00:00
Samir Jindel fe939f9433 [vm] Update status file after entrypoints change (again).
Change-Id: Id9829cf32985285a317bd379c37f95cae6932199
Reviewed-on: https://dart-review.googlesource.com/70863
Reviewed-by: Samir Jindel <sjindel@google.com>
2018-08-21 11:29:53 +00:00
Martin Kustermann b7790e3147 [VM] Make all of our compilation pipeline use a [FrameLayout] to generate code
This will allow us to have configurable frame layouts during
gen_snapshot/dart_bootstrap.

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

Change-Id: I18945189034be1a585c1e2edcf53a4b7537204c2
Reviewed-on: https://dart-review.googlesource.com/59880
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-08-21 10:26:12 +00:00
Aart Bik 7f88b64e0a [vm] buffer size based log flushing
Useful when debugging on Android, since adb logcat
truncates messages that are "too long" (and always
flushing would result in too many short messages).

Change-Id: I51978b4e352d65c9074ab1d830b042f68e06710d
Reviewed-on: https://dart-review.googlesource.com/70740
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-08-20 22:47:31 +00:00
Régis Crelier dec1da2437 [VM interpreter] Bytecode reader should make const list immutable.
Change-Id: If162c552e11b7be517cd3ef6991fbe09f07a9311
Reviewed-on: https://dart-review.googlesource.com/70800
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2018-08-20 22:40:21 +00:00
asiva 1f5f197e90 [VM] Do not start the kernel isolate when doing an app JIT snapshot training run if a kernel file is specified as the application.
Change-Id: Ib2d57accfb369676d907b0811b8c689dd1d5efbe
Reviewed-on: https://dart-review.googlesource.com/70782
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2018-08-20 21:32:21 +00:00
Régis Crelier a37496d24d [VM interpreter] Fix native call to growable list factory.
Mark a few failures as expected, due to lack of line numbers in stack traces.
Move restoring of pool pointer out of inlined macro after exception.

Change-Id: I8ef1e0f86a1eabe42e007968481e0133d0e5e360
Reviewed-on: https://dart-review.googlesource.com/70741
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2018-08-20 20:12:54 +00:00
Samir Jindel 47332ae3cb [vm] Update status file after entrypoints change.
Change-Id: I71dc21df6c752a46bdc6a284a0d743261b4a8beb
Reviewed-on: https://dart-review.googlesource.com/70720
Reviewed-by: Samir Jindel <sjindel@google.com>
2018-08-20 18:33:33 +00:00
Alexander Markov b97f885d1d Revert "[vm] Deep clone context when cloning closure"
This reverts commit 61b5ba7ecf.

Reason for revert: found a counter-example for deep cloning: https://dart-review.googlesource.com/c/sdk/+/70681

Original change's description:
> [vm] Deep clone context when cloning closure
> 
> _SyncIterable::iterator clones unerlying sync* closure to create a new
> Iterator using _Closure._clone(). _Closure._clone() was cloning only
> 1 level of context, relying on a particular context structure.
> 
> In bytecode, contexts are allocated in a different way, so sync*
> functions could have more then 1 level of contexts. In such case,
> parent contexts were not cloned in _Closure._clone() and were shared
> between Iterator instances.
> 
> This CL adds deep cloning of contexts into _Closure._clone() native method
> in order to handle arbitrary number of levels of contexts in a closure.
> 
> Fixes language_2/syncstar_yield_test test in bytecode mode.
> 
> Change-Id: Ic5ced4c32fc2e21726db76608cd3a7db7e553472
> Reviewed-on: https://dart-review.googlesource.com/70600
> Reviewed-by: Régis Crelier <regis@google.com>
> Commit-Queue: Alexander Markov <alexmarkov@google.com>

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

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

Change-Id: I9f6116069cbec022ad86ef4cbf6801c603b4ab15
Reviewed-on: https://dart-review.googlesource.com/70700
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-08-20 18:30:12 +00:00
Vyacheslav Egorov 2e22f7b247 [vm] Fix a bug in the field exactness tracking state machine.
We were returning without initializing the state of the static
type exactness.

Change-Id: I447597cbe383470297a7f660addb60d0031cabba
Reviewed-on: https://dart-review.googlesource.com/70661
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
2018-08-20 16:58:32 +00:00
Samir Jindel dea7de23bd [vm] Use multiple entrypoints to remove unnecessary checks on calls against "this".
Test Plan:

Behavioral correctness should be ensured by existing tests. Tests in vm/dart/entrypoints
ensure that the unchecked entrypoint is used in cases where the optimization should trigger.

Bug: https://github.com/dart-lang/sdk/issues/31798

Change-Id: I5b880b2dfa6343b4bb0a96ad23562facff73e41f
Cq-Include-Trybots: luci.dart.try:vm-kernel-win-release-x64-try,vm-kernel-optcounter-threshold-linux-release-x64-try,vm-kernel-precomp-linux-debug-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-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/69741
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-08-20 16:56:22 +00:00
Aart Bik c082761e09 [vm/compiler] improve type progagation
Rationale:
Two improvements
(1) using class hierarchy during union operation
    provides a better type progation lattice, e.g.
    taking the union of B,C now yields A.
       A
      / \
      B C
    this immediately benefits propagation over
    phis, but also helps the new (2).
(2) check class with cid ranges now take union
    too (in contrast before only singletons were
    handled by propagation).

Impact:
About 40-80% improvement on covariant typecheck benchmarks.

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

Change-Id: Ie84bc266a52a26bed9e7709371c638cabe3863b8
Reviewed-on: https://dart-review.googlesource.com/70300
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-08-20 16:28:48 +00:00
Vyacheslav Egorov 69fce633b7 [vm/compiler] Omit implicit result type check for recognized natives.
We will still type check returns from native methods but everything
that is explicitly handled by graph builder would be trusted.

Bug: https://github.com/dart-lang/sdk/issues/31798
Change-Id: Ia2f5dfba63349bef7578ca4774686f47b5e484b1
Reviewed-on: https://dart-review.googlesource.com/70644
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
2018-08-20 14:18:47 +00:00
Vyacheslav Egorov 8629563009 [vm] Fix few issues with field exactness tracking.
- Don't add dependency on fields that are either unitialized or already marked
as non guarded (guarded cid is kIllegalCid in the first case and kDynamicCid
in the second case).
- Exit early from FieldStore if guarded_cid is kDynamicCid (or we are storing
null into a nullable field).
- Don't track exactness of fields which have function type type.

Also move logic for starting to track fields into class_finalizer because we
need resolved field types to make our decisions.

Change-Id: I164b42abe3108a70b0769f4c78d92459b4e78883
Reviewed-on: https://dart-review.googlesource.com/70620
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-08-20 14:08:04 +00:00
Vyacheslav Egorov 7708989538 [vm/intrinsics] Introduce dart:_internal.uncheckedCast.
This function can be used to avoid checked down casts in the parts
of the code where we know by construction that the type of the
value matches expectations.

Use it to avoid down-cast in the _LinkedHashMap.operator[].

Bug: https://github.com/dart-lang/sdk/issues/31798
Change-Id: I80949bfb84dde7716fc23aeba311931970ce16aa
Reviewed-on: https://dart-review.googlesource.com/70511
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-08-20 13:25:10 +00:00
Jens Johansen 03d68355d6 More observatory fixes
Change-Id: I0a31f70a6c3e1472859c9ae8798dd498e221d672
Reviewed-on: https://dart-review.googlesource.com/70505
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2018-08-20 07:11:33 +00:00
Jens Johansen 06a785bf1e Speedup calculation of toplist by retained memory in Observatory
When clicking the "toplist by retained memory" button in Observatory
it always asks to find 10 objects of a specific size.
The previous implementation did this by taking all objects (millions if
using a lot of memory), sorting it (O(n log n)), filtering it (O(n)),
and ".take"ing the 10 we wanted. Total runtime should be O(n log n)
where n is the number of objects in the heap.

This CL optimizes this for the (to my knowledge) only case there exists,
and instead, while iterationg over all elements (O(n)) keeps a sorted
working list of the top m objects (this is 10 for all intents and purpose
as far as I can see; I've if-cased it to be at most 20). Total runtime
should be O(n log m) where n is the number of objects in the heap and m
is the requested number, which - as said - is at most 20, i.e. a constant,
maying that the runtime is more like O(n).

Instrumenting the code slightly to measure how long it takes:
```
diff --git a/runtime/observatory/lib/src/repositories/top_retaining_instances.dart b/runtime/observatory/lib/src/repositories/top_retaining_instances.dart
index 400ac1427ed..b7e5c429fac 100644
--- a/runtime/observatory/lib/src/repositories/top_retaining_instances.dart
+++ b/runtime/observatory/lib/src/repositories/top_retaining_instances.dart
@@ -7,6 +7,8 @@ part of repositories;
 class TopRetainingInstancesRepository
     implements M.TopRetainingInstancesRepository {
   Future<Iterable<M.RetainingObject>> get(M.IsolateRef i, M.ClassRef c) async {
+    Stopwatch stopwatch = new Stopwatch()..start();
+    try {
       S.Isolate isolate = i as S.Isolate;
       S.Class cls = c as S.Class;
       assert(isolate != null);
@@ -18,5 +20,9 @@ class TopRetainingInstancesRepository
       return (await Future.wait(
               snapshot.getMostRetained(isolate, classId: cls.vmCid, limit: 10)))
           .map((object) => new S.RetainingObject(object));
+    } finally {
+      int ms = stopwatch.elapsedMilliseconds;
+      print("TopRetainingInstancesRepository took $ms ms.");
+    }
   }
 }
```

I ran this program:
```
import "dart:isolate";

List<Object> data = [];

main() {
  RawReceivePort preventClose = new RawReceivePort();
  for(int i = 0; i < 10000000; i++) {
    data.add(new List<int>()..add(i));
  }
  for(int i = 0; i < 100000; i++) {
    data.add(new Foo(i));
  }
}

class Foo {
  final int i;
  Foo(this.i);
}
```

and requested the toplist by retained memory for class `Foo`.
What before took 121778 ms now takes 81026 ms.

(For smaller numbers in the same test it went from ~10 seconds to ~8 seconds).

Change-Id: I6aee4b0c91af8a9ade116b79e56d1e6cbbee5d09
Reviewed-on: https://dart-review.googlesource.com/70502
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2018-08-20 07:07:15 +00:00
Jens Johansen 3290f60a31 Fix 'toplist by retained memory' in observatory
Prior to this fix I get errors like

```
TypeError: Instance of 'b2<bQ>': type 'b2<bQ>' is not a subtype of type 'List<bQ>'

StackTrace:

main.dart.js 1631:3    Object.m
main.dart.js 2001:9    Object.p
[...]
```

Change-Id: I2fc6329c05cb76bff76929aeee1eca3954fbc0a9
Reviewed-on: https://dart-review.googlesource.com/70501
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2018-08-20 07:03:25 +00:00
Vyacheslav Egorov 032037681e Revert "[VM/SDK] Switch kernel isolate to run in Dart 2 mode"
This reverts commit 499761f0da.

Reason for revert: crashes when building SDK, red bots, broken Flutter 3xHEAD bot

Original change's description:
> [VM/SDK] Switch kernel isolate to run in Dart 2 mode
> 
> - Switch the kernel isolate to run in Dart2 mode
> - Refactor build rules so bootstrapping of the front end happens
>   with a prebuilt dart sdk
> - Refactor application snapshot build rules so the kernel application
>   snapshot rule does not get into a cyclic dependency during the
>   bootstrap stage
> 
> Change-Id: I067c5f1165fb93811dcc8e390a8bf381db721e5b
> Reviewed-on: https://dart-review.googlesource.com/70461
> Reviewed-by: Siva Annamalai <asiva@google.com>
> Commit-Queue: Siva Annamalai <asiva@google.com>

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

Change-Id: Ibf6d526fb5132b766f063fcf873cde661ae895d7
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/70516
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
2018-08-19 19:58:32 +00:00
asiva 499761f0da [VM/SDK] Switch kernel isolate to run in Dart 2 mode
- Switch the kernel isolate to run in Dart2 mode
- Refactor build rules so bootstrapping of the front end happens
  with a prebuilt dart sdk
- Refactor application snapshot build rules so the kernel application
  snapshot rule does not get into a cyclic dependency during the
  bootstrap stage

Change-Id: I067c5f1165fb93811dcc8e390a8bf381db721e5b
Reviewed-on: https://dart-review.googlesource.com/70461
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2018-08-18 22:50:09 +00:00
Alexander Markov 61b5ba7ecf [vm] Deep clone context when cloning closure
_SyncIterable::iterator clones unerlying sync* closure to create a new
Iterator using _Closure._clone(). _Closure._clone() was cloning only
1 level of context, relying on a particular context structure.

In bytecode, contexts are allocated in a different way, so sync*
functions could have more then 1 level of contexts. In such case,
parent contexts were not cloned in _Closure._clone() and were shared
between Iterator instances.

This CL adds deep cloning of contexts into _Closure._clone() native method
in order to handle arbitrary number of levels of contexts in a closure.

Fixes language_2/syncstar_yield_test test in bytecode mode.

Change-Id: Ic5ced4c32fc2e21726db76608cd3a7db7e553472
Reviewed-on: https://dart-review.googlesource.com/70600
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-08-17 22:28:51 +00:00
Vyacheslav Egorov 4dc7b30058 [vm] Fix test failures introduced by 6e7bf5efae
* Make sure to use Original field when generating code;
* Make sure to keep invariant that field with known cid should have
known fixed length or no fixed length. This invariant was always
violated by the precompiler - but it only surfaced now because
we started hitting the code path with assertion during disassembly
test.

TBR=kustermann@google.com

Change-Id: Ide86a8b9c334e6b2c75c67f466f9cf145ab9bdae
Reviewed-on: https://dart-review.googlesource.com/70510
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
2018-08-17 15:20:45 +00:00
Samir Jindel 0dd7ce49c1 [vm] Make sure constant pool usage is allowed when entry point block is not emitted first.
Change-Id: I511d5da4595e75aec37a7aaf6de4daad0a9f7278
Reviewed-on: https://dart-review.googlesource.com/70507
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-08-17 13:51:54 +00:00
Vyacheslav Egorov 6e7bf5efae [vm] Dynamically track exactness of the field's static type on X64.
We say that field's static type G<T0, ..., Tn> is exact if for
any value that can be loaded from this field, its runtime type
T is such that T at G has type arguments exactly equal to
<T0, ..., Tn>.

Know if field's static type is exact allows us to apply optimizations
that require knowing type arguments e.g.

- we can fold o.f.:type_arguments
to a constant value if we know that o.f is trivially exact;
- for method invocations o.f.m(...) we can skip argument type checks
on the callee if we know that o.f is invariant (this optimization will
be enabled once multiple entry points CLs will land).

Bug: https://github.com/dart-lang/sdk/issues/31798

Change-Id: Id565046d45a842625d41feb002b65db48451034c
Reviewed-on: https://dart-review.googlesource.com/69969
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-08-17 13:22:02 +00:00
Samir Jindel 37056ccc82 [vm] Disable unchecked entrypoints to implicit closures in precompiled mode.
The check which disables entrypoints in precompiled mode currently only triggers for
regular functions. Here we make it trigger for implicit closures as well.

Change-Id: I68749a2109bb24ee5d299e4b139e3b63e3be5f72
Reviewed-on: https://dart-review.googlesource.com/70340
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-08-17 12:37:58 +00:00