Commit Graph

13143 Commits

Author SHA1 Message Date
Alexander Aprelev 0cc27b5db0 Reland "[vm, linux] Try to attach names to all VirtualMemory allocations using memfd."
This reverts commit 4dee4bd204 as it now has the fix for precompiled flow in patchsets 3, 7.

Change-Id: Ib99763a91073df7698e8b597a67e11e557fc131e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128574
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2019-12-18 18:02:41 +00:00
Samir Jindel 23bc053b0e [vm] Don't require inputs to be _Smi in InlineByteArrayBaseStore in AOT.
Fixes https://github.com/dart-lang/sdk/issues/39236

Change-Id: I0fe8899021d125d47b06b97a87813c18b31665e7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128060
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2019-12-18 17:30:01 +00:00
Teagan Strickland e835e7013b [vm] Reland "De-obfuscate function and file names in DWARF sections."
Note that when generating unstripped ELF snapshots with --obfuscate,
this means DWARF sections in the resulting snapshot will leak
otherwise obfuscated information. To avoid this, use both --strip
to strip the generated snapshot and --save-debugging-info=<...> to
save the unobfuscated DWARF information to a separate file.

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

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-precomp-mac-release-simarm64-try,vm-kernel-precomp-win-release-x64-try
Change-Id: I545a737bd58fcd99c329386a552bd8951acf38b9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128732
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-12-18 14:14:41 +00:00
Teagan Strickland 089aeedf56 [vm/compiler] Reland "Add --save-debugging-info flag to gen_snapshot."
Removes an unnecessary change to the names of type testing stubs that
allowed name collisions to happen.

Old commit message:

The flag can be used when creating AOT snapshots. The resulting file can be
used with package:vm/dwarf/convert.dart to convert DWARF-based stack traces
to stack traces with function, file, and line number information.

Currently the saved file will be an ELF file with DWARF debugging information,
but this is subject to change in the future. To avoid being affected by any
changes in format, read the DWARF information from the file using
Dwarf.fromFile() in package:vm/dwarf/dwarf.dart.

Also adds --dwarf-stack-traces to the VM global flag list, so its value at
compilation will be read out of snapshots by the precompiled runtime.

Fixes https://github.com/dart-lang/sdk/issues/39512, which was due to
a missing compiler::target:: prefix for Instructions::HeaderSize() in
BlobImageWriter::WriteText().

Exposes the information suggested in
https://github.com/dart-lang/sdk/issues/39490 so that package:vm/dwarf
can appropriately convert absolute PC addresses to the correct virtual
address for a given DWARF line number program.

Bug: https://github.com/dart-lang/sdk/issues/35851
Change-Id: I6723449dceb0b89c054a1f1e70e7acd7749baf14
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-precomp-mac-release-simarm64-try,vm-kernel-precomp-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128730
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-12-18 14:14:41 +00:00
Clement Skau 6fcd1de98c [SDK] Fixes missing stack trace line numbers.
CodeSourceMapBuilder::NoteDescriptor(..) would previously only emit
CSM entries if its stack_traces_only_ flag was set, which
FlowGraphCompiler would only do if compiled in PRODUCT mode:
runtime/vm/compiler/backend/flow_graph_compiler.cc:162

Bug: https://github.com/dart-lang/sdk/issues/39525
Change-Id: I78c56a18a5a95ef3c8c37a2d7eae6ab612e6674f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127464
Commit-Queue: Clement Skau <cskau@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-12-18 10:34:41 +00:00
Clement Skau 3764928769 [SDK] Switch to isSync to determine if async func. is running sync-async.
Bug: https://github.com/dart-lang/sdk/issues/39525
Change-Id: I1e23a726bf0fbff2c02891e25c714ea599330c47
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128666
Commit-Queue: Clement Skau <cskau@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-12-18 08:57:00 +00:00
asiva 8a4cac1ddb Reverting a chain of commits related to debug info splitting.
REASON: the first commit in the chain contains a change that breaks internal
Flutter roll due to duplicated symbols for type testing stubs in assembly
snapshots.

Revert "[vm/compiler] Add --save-debugging-info flag to gen_snapshot."

This reverts commit c2b6c2e1db.

Revert "[vm] De-obfuscate function and file names in DWARF sections."

This reverts commit 4b8fd3c412.

Revert "[vm] Add docs for DWARF stack traces and related tools/libraries."

This reverts commit 5543e5ceb8.

Revert "[vm] Weaken dwarf_stack_trace expected stack trace."

This reverts commit 5824d3ed53.

Change-Id: I95ecd16fe493f61ae761dabfdd91a6ec0c2f0ca3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128776
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2019-12-18 01:02:05 +00:00
Liam Appelbe 44da51fc72 [vm] More fast paths in type equality intrinsic
Change-Id: I2a5b02c6803b15226ec4bdcab698043252500413
Bug: https://github.com/dart-lang/sdk/issues/39755
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128005
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Liam Appelbe <liama@google.com>
2019-12-17 20:39:14 +00:00
Clement Skau 8d74f6ee4a [SDK] Adds function name to CodeDescriptor dumps.
This makes --disassemble output more uniform (as other dump sections already
print their function names), and makes it easier to grep through:

Example output:

Code for optimized function 'dart:core__AbstractType@0150898__AbstractType@0150898.' {
[...]
}
Source positions for function 'dart:core__AbstractType@0150898__AbstractType@0150898.' {
[...]
}
PC Descriptors for function 'dart:core__AbstractType@0150898__AbstractType@0150898.' {
pc                      kind            deopt-id        tok-ix  try-ix  yield-idx
empty PcDescriptors
}
Code for optimized function 'dart:core__ImmutableMapKeyIterable@0150898__ImmutableMapKeyIterable@0150898.' {
[...]
}

Change-Id: I76957e0105a39e47d59d3166dfae6d4593ebd86a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128588
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Clement Skau <cskau@google.com>
2019-12-17 13:40:16 +00:00
Clement Skau 4dee4bd204 Revert "[vm, linux] Try to attach names to all VirtualMemory allocations using memfd."
This reverts commit f5e57f89d2.

Reason for revert: <INSERT REASONING HERE>

Original change's description:
> [vm, linux] Try to attach names to all VirtualMemory allocations using memfd.
> 
> For example,
> 
> $ cat /proc/<pid>/smaps
> ...
> 7fd2ad2e0000-7fd2ad2f0000 rw-s 00000000 00:05 15576579 /memfd:dart-zone (deleted)
> 7fd2b2b7f000-7fd2b2d7f000 rw-s 00000000 00:05 15695692 /memfd:dart-newspace (deleted)
> 7fd2b2f00000-7fd2b2f80000 r--s 00000000 00:05 15695687 /memfd:dart-codespace (deleted)
> 7fd2b2f80000-7fd2b3000000 r--s 00000000 00:05 15695685 /memfd:dart-oldspace (deleted)
> 7fd2b3163000-7fd2b3beb000 rw-s 00000000 00:05 15695684 /memfd:dart-profiler (deleted)
> 7fd2b3beb000-7fd2b3eb0000 rw-s 00000000 00:05 15695683 /memfd:dart-timeline (deleted)
> ...
> 
> Bug: b/144232910
> Change-Id: I9722247853b244daff63b7a631678d44e19c2d69
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128603
> Reviewed-by: Alexander Aprelev <aam@google.com>
> Commit-Queue: Ryan Macnak <rmacnak@google.com>

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

Change-Id: I8a983d4650ca10e9c7396536603af21c974dcb78
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: b/144232910
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128587
Reviewed-by: Clement Skau <cskau@google.com>
Commit-Queue: Clement Skau <cskau@google.com>
2019-12-17 11:14:19 +00:00
asiva b1afe2d0eb [VM/Runtime] - Ensure the comma separated options under --enable-experiment are stored as individual flags in the VM instead of as a single string. This ensures GetExperimentalFlag will return the correct value for an option.
Change-Id: I28c7a28bac9f9ffa5df8d561f2a21f2b0cc0ec57
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128569
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2019-12-17 01:42:29 +00:00
Ryan Macnak f5e57f89d2 [vm, linux] Try to attach names to all VirtualMemory allocations using memfd.
For example,

$ cat /proc/<pid>/smaps
...
7fd2ad2e0000-7fd2ad2f0000 rw-s 00000000 00:05 15576579 /memfd:dart-zone (deleted)
7fd2b2b7f000-7fd2b2d7f000 rw-s 00000000 00:05 15695692 /memfd:dart-newspace (deleted)
7fd2b2f00000-7fd2b2f80000 r--s 00000000 00:05 15695687 /memfd:dart-codespace (deleted)
7fd2b2f80000-7fd2b3000000 r--s 00000000 00:05 15695685 /memfd:dart-oldspace (deleted)
7fd2b3163000-7fd2b3beb000 rw-s 00000000 00:05 15695684 /memfd:dart-profiler (deleted)
7fd2b3beb000-7fd2b3eb0000 rw-s 00000000 00:05 15695683 /memfd:dart-timeline (deleted)
...

Bug: b/144232910
Change-Id: I9722247853b244daff63b7a631678d44e19c2d69
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128603
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2019-12-16 23:30:03 +00:00
Régis Crelier f2618b0077 [VM/nnbd] Make type Never a regular type.
This is a follow-up CL to https://dart-review.googlesource.com/c/sdk/+/128001
 Type Never now also accepts legacy and nullable nullabilities.

Change-Id: I52c270bdca9afdad8193f797011774afae618b7e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128566
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Liam Appelbe <liama@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2019-12-16 22:25:43 +00:00
Ryan Macnak 6b5d9f1d1b [vm] Progress toward running without TSAN warnings.
- Ignore all data races on object headers. These are harmless because of higher-level constraints in the GC.
 - Make all concurrent marker tasks check-in with the monitor to indicate they are done marking roots, not just the last one. This establishes synchronization between the which ever task read the handle blocks and the mutator resuming and writing to the handle blocks.
 - When a helper thread exits the isolate, perform clearing of the reusable handles under the thread registry's lock so it doesn't race with the GC visiting thread roots.
 - Disable background compilation when running under TSAN. There are lots of races here. Many are harmless. It's hard to annotate these without effectively disabling TSAN checks for the entire Dart heap, so simply disabling the background compiler will give us the most TSAN coverage for the time being.
 - Fix race in abandoning TLABs during helper thread exit.
 - Remove harmless race between concurrent sweeper and allocation of new heap pages.
 - Suppress TSAN on known race in array truncation.
 - Remove racy access FLAG_stacktrace_every, which is no longer needed as compilation can no longer trigger execution to evaluate constants.

Bug: https://github.com/dart-lang/sdk/issues/39611
Change-Id: Ibaa101b4f12ff5fa30678471fb37e63608ba7f8b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128305
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2019-12-16 18:32:23 +00:00
Ryan Macnak 83eeab1e63 Miscellaneous documentation updates.
Change-Id: I9cc022443ba70b0a450a86943f7636dc6f8c975c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128373
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
2019-12-13 23:10:55 +00:00
Liam Appelbe 3166b7d976 [vm] Enable nnbd experiment when building the SDK with --nnbd
This is necessary as of https://dart-review.googlesource.com/c/sdk/+/127961
to use the experiment flag in the VM.

Tested: Late modifier tests that had stopped building now pass again.

Change-Id: I49a5f1e99f40c6e8d785b28a333b44e6fac67eca
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127984
Commit-Queue: Liam Appelbe <liama@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2019-12-13 20:13:20 +00:00
Ryan Macnak 9a43744f0e [vm, gc] Flatten promotion allocations.
Change-Id: I423885291aa17133c4409b265672792397387211
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127423
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2019-12-13 18:55:00 +00:00
Teagan Strickland 217e265b02 [vm/compiler] During DCE, remove PushArguments of non-live definitions.
In the current compiler pipeline, PushArgument instructions can
end up outliving the calls to which they are an argument in some
circumstances. For example, the PushArgument is left in the graph
if it also appears in the environments of interleaving instructions.

When the dead code eliminator calculates liveness of a definition,
it ignores appearances in PushArgument instructions. Instead, it
looks for uses of the definition either directly or via
PushArgument in the arguments of calls and environments of other
instructions in the graph. An separate pass run before DCE
removes environments from instructions, so a definition used only
in PushArguments that have outlived their calls is considered dead.

The current DCE removes dead definitions but leaves PushArgument
instructions be. For orphaned PushArguments of dead definitions,
this means after DCE they now reference definitions no longer in
the graph.

This change instead checks the definitions referenced by
PushArgument instructions for liveness. If a PushArgument
references a dead definition, then the DCE removes the PushArgument
instruction, as its call must have already been removed (else
the definition would still be live), and environments, and thus
environmental uses, have already been removed from the graph.

Bug: https://github.com/dart-lang/sdk/issues/39767
Change-Id: I74c8e92a0d93f2aae42f8ff6f06ee70899b2f794
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128403
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Teagan Strickland <sstrickl@google.com>
2019-12-13 18:15:04 +00:00
Martin Kustermann 6f6bdfac3a Reland "[vm/compiler] Fix TypeTestingStub -> SubtypeTestCache fallback code if dst_type = TypeParameter"
If the dst_type of an AssertAssignable is a type parameter, the AssertAssignable
implementation will load the value of the type parameter using
the (instantiator or function) type arguments. It will then call the
type testing stub (TTS) of that type.

If the TTS is not exhaustive (e.g. because `T = X<..>` wher `X` is
implemented), it can fall back to the slower SubTypeTestCache implementation.

Right now the STC fallback will get the loaded value of the type
parameter for `dst_type` instead of the type parameter. Doing so is
incorrect.

  => This CL ensures we preserve dst_type = TypeParameter for the STC
  fallback.

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

Change-Id: Id5b318ed4940b4d749f6ab8b4c2a4efc295d9dde
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127888
Auto-Submit: Martin Kustermann <kustermann@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2019-12-13 15:03:18 +00:00
yuanhuihui fe9f30c389 [timeline] support vm events available to systrace
more detail: https://github.com/dart-lang/sdk/issues/39757

Signed-off-by: yuanhuihui <gityuan@gmail.com>
Bug: https://github.com/dart-lang/sdk/issues/39757
Change-Id: I6174500796289ffcfb7a53d3f897c5d7f82932ae
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128200
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2019-12-13 00:41:46 +00:00
Zichang Guo 11b35c166b [vm/debugger] --trace-debugger-stacktrace prints async causal stack trace
Allow --trace-debugger-stacktrace to print frames in async causal stack trace.

Change-Id: I52bcbcbb22ed939074b682ce18e328df775ea0b0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128282
Commit-Queue: Zichang Guo <zichangguo@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2019-12-12 23:05:51 +00:00
Victor Lima 45db297095 [vm/precomp] Reduce arm32 code size for BoxInt64Instr
Change-Id: I018ddd6add8b8ff447019cc61bff579104084f00
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128072
Commit-Queue: Victor Agnez Lima <victoragnez@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-12-12 18:00:31 +00:00
Teagan Strickland 4b8fd3c412 [vm] De-obfuscate function and file names in DWARF sections.
Note that when generating unstripped ELF snapshots with --obfuscate,
this means DWARF sections in the resulting snapshot will leak
otherwise obfuscated information. To avoid this, use both --strip
to strip the generated snapshot and --save-debugging-info=<...> to
save the unobfuscated DWARF information to a separate file.

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

Change-Id: I8795e2a5623ad5fc5362257007f677e622a7700b
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-precomp-mac-release-simarm_x64-try,vm-kernel-precomp-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127166
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-12-12 17:54:20 +00:00
Teagan Strickland c2b6c2e1db [vm/compiler] Add --save-debugging-info flag to gen_snapshot.
The flag can be used when creating AOT snapshots. The resulting file can be
used with package:vm/dwarf/convert.dart to convert DWARF-based stack traces
to stack traces with function, file, and line number information.

Currently the saved file will be an ELF file with DWARF debugging information,
but this is subject to change in the future. To avoid being affected by any
changes in format, read the DWARF information from the file using
Dwarf.fromFile() in package:vm/dwarf/dwarf.dart.

Also adds --dwarf-stack-traces to the VM global flag list, so its value at
compilation will be read out of snapshots by the precompiled runtime.

Fixes https://github.com/dart-lang/sdk/issues/39512, which was due to
a missing compiler::target:: prefix for Instructions::HeaderSize() in
BlobImageWriter::WriteText().

Exposes the information suggested in
https://github.com/dart-lang/sdk/issues/39490 so that package:vm/dwarf
can appropriately convert absolute PC addresses to the correct virtual
address for a given DWARF line number program.

Bug: https://github.com/dart-lang/sdk/issues/35851
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-precomp-mac-release-simarm_x64-try,vm-kernel-precomp-win-release-x64-try
Change-Id: I80d900fd9e5f1e2399ad3f2fd25c85131a7ea43c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121857
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-12-12 14:18:59 +00:00
Ryan Macnak a8d8a18642 [vm, arm64] Fix heap corruption in PushArrayOfArguments.
The store barrier may clobber condition flags, causing the loop to copy past the last argument.

Bug: https://github.com/dart-lang/sdk/issues/36906
Change-Id: Ia863ec88aaa26c4193cadba26df62b43e68c377e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128108
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2019-12-12 01:52:48 +00:00
yuanhuihui 5908fc4d33 [timeline] Add support for timeline asynchronous events in android platform trace
systrace don't support async timeline events, when define sync event can
show in timeline, but not including systrace.
more details, see https://github.com/dart-lang/sdk/issues/39726

Bug:https://github.com/dart-lang/sdk/issues/39726
Change-Id: Iea705f7a4f67e540411ef2cb81ccff9b3b793b31
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127920
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2019-12-11 19:36:18 +00:00
Alexander Markov ad1a26b90b Reland "[vm/compiler] Dead code elimination"
This is a reland of b69596bb1b

Original change's description:
> [vm/compiler] Dead code elimination
> 
> flutter_gallery total size -0.9% (arm), -0.77% (arm64)
> flutter_gallery instructions size -1.27% (arm), -1.11% (arm64)
> 
> Fixes https://github.com/dart-lang/sdk/issues/33414
> 
> Change-Id: I9de07ac866ba8a6bf3575df85b790e26a2753750
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127381
> Commit-Queue: Alexander Markov <alexmarkov@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>

Change-Id: Id53dddfe22af4d48673e30a3f66e63ed878523ac
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128010
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-12-11 19:23:48 +00:00
Ryan Macnak e29a6d6f8d [vm] Initialize the handle vtable table during VM initialization instead of during class registration in each isolate's initialization.
Removes a (harmless) race initializing this table to appease TSAN.

Bug: https://github.com/dart-lang/sdk/issues/39611
Change-Id: I9f7bdd0edf2be5e87e56e453601641a9550d157a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127965
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2019-12-11 18:54:08 +00:00
Ryan Macnak 7679924ece [vm] Reduce frame size for the functions with the largest frame sizes.
Cf. -Wframe-larger-than.

Change-Id: I47e3144bdf7f8fd8c6f308d5552a7ce4f3f990ec
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128008
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2019-12-11 18:15:27 +00:00
Teagan Strickland f6d433dc5e [vm] Remove the unchecked entry point offset field from RawInstructions.
There's just one case where we can't get the offset for Instructions
from somewhere else, and that's when we reset active_instructions_ to
instructions_ in Code::Enable(). Thus, we add a caching field for the
uncached offset to RawCode, but only when the active_instructions_
field is added (when not running in the precompiled runtime).

We also output the unchecked offset in snapshots for Code objects so
we can recalculate the entry point cache on loading. (For full JIT
snapshots, we output both the cached offset and the offset for
active_instructions_.)

Bug: https://github.com/dart-lang/sdk/issues/38451
Change-Id: I78572ec83d1574b00820df148bccb57e5c79eaaa
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/125400
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Teagan Strickland <sstrickl@google.com>
2019-12-11 10:00:29 +00:00
Martin Kustermann 922a74c96a Revert "[vm/compiler] Fix TypeTestingStub -> SubtypeTestCache fallback code if dst_type = TypeParameter"
This reverts commit 20ec71d447.

Reason for revert: Performance regressions and seemingly broken TypedData.* benchmarks.

Original change's description:
> [vm/compiler] Fix TypeTestingStub -> SubtypeTestCache fallback code if dst_type = TypeParameter
> 
> If the dst_type of an AssertAssignable is a type parameter, the AssertAssignable
> implementation will load the value of the type parameter using
> the (instantiator or function) type arguments. It will then call the
> type testing stub (TTS) of that type.
> 
> If the TTS is not exhaustive (e.g. because `T = X<..>` wher `X` is
> implemented), it can fall back to the slower SubTypeTestCache implementation.
> 
> Right now the STC fallback will get the loaded value of the type
> parameter for `dst_type` instead of the type parameter. Doing so is
> incorrect.
> 
>   => This CL ensures we preserve dst_type = TypeParameter for the STC
>   fallback.
> 
> Issue https://github.com/dart-lang/sdk/issues/39716
> 
> Change-Id: Idea2405efbdc01c031ee68dbb345820e721533eb
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127640
> Commit-Queue: Martin Kustermann <kustermann@google.com>
> Reviewed-by: Régis Crelier <regis@google.com>

TBR=vegorov@google.com,kustermann@google.com,regis@google.com

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

Change-Id: I79f2d7db8747743a778126088e375bb4d268c91a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128020
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2019-12-10 23:56:06 +00:00
Régis Crelier 8caaf3b7fd [VM/nnbd] Map nullable Never type to Null type.
Map nullable Never type to Null type when reading kernel files and also during
type parameter instantiation.

Change-Id: Iea2d895631661fc01adac65bfd6234e9adeecb1b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128001
Reviewed-by: Liam Appelbe <liama@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2019-12-10 23:22:46 +00:00
Alexander Markov 3a456fb3cc Revert "[vm/compiler] Dead code elimination"
This reverts commit b69596bb1b.

Reason for revert: failures on vm-kernel-precomp-win-release-x64 bot.

Original change's description:
> [vm/compiler] Dead code elimination
> 
> flutter_gallery total size -0.9% (arm), -0.77% (arm64)
> flutter_gallery instructions size -1.27% (arm), -1.11% (arm64)
> 
> Fixes https://github.com/dart-lang/sdk/issues/33414
> 
> Change-Id: I9de07ac866ba8a6bf3575df85b790e26a2753750
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127381
> Commit-Queue: Alexander Markov <alexmarkov@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>

TBR=vegorov@google.com,kustermann@google.com,rmacnak@google.com,alexmarkov@google.com,sjindel@google.com

Change-Id: I0bf0e27cc13b4d0708be19304e278977c7eb6558
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128003
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-12-10 22:59:26 +00:00
Liam Appelbe e1ef70fad4 [vm] Add nnbd-experiment to the snapshot feature string
This means that when snapshots are loaded, the nnbd experiment flag they
were compiled with must match the flag the VM currently has.

Bug: https://github.com/dart-lang/sdk/issues/37479
Change-Id: I907a68f49c7c1ac4467c4c39ce033075eba457a1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127961
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Liam Appelbe <liama@google.com>
2019-12-10 19:04:15 +00:00
Alexander Markov b69596bb1b [vm/compiler] Dead code elimination
flutter_gallery total size -0.9% (arm), -0.77% (arm64)
flutter_gallery instructions size -1.27% (arm), -1.11% (arm64)

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

Change-Id: I9de07ac866ba8a6bf3575df85b790e26a2753750
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127381
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-12-10 18:50:35 +00:00
Alexander Markov d03a7686d2 [vm/compiler] Fix inlining of SIMD shuffle operations
When trying to inline SIMD shuffle operation in InlineSimdOp
(inliner.cc), FunctionEntry instruction was created and inherited
deopt_id and environment from call. Inheriting environment also
added FunctionEntry into env_use_list of other instructions.
If inlining didn't actualy happen due to invalid mask argument,
created FunctionEntry still left in the env_use_list.
Later optimization passes (for example AllocationSinking) may crash
while trying to update environment uses of instructions.

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

Change-Id: I6bdb7c6f7a7947259ea5ad097d05eebe5d73269b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127802
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-12-10 16:40:35 +00:00
Victor Lima 98c13ba18f [vm/precomp] Reduce arm-32 code size in BoxInt64Instr
Change-Id: Id544f20493c0baffb154ee1ea235247ddd844a60
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127146
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Samir Jindel <sjindel@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-12-10 15:28:45 +00:00
Samir Jindel a846098c18 [vm] Enable ELF loader to read snapshots from memory without any backing file.
Also build Dart_LoadELF_Fd on Linux as well to get minimal coverage for Fuchsia.

Change-Id: I4be3eeae3e4559e95413fd60a26b9e6d2edabb32
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127644
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-12-10 12:26:05 +00:00
Ryan Macnak 617933c3c1 [vm, gc] As a debugging aid, remember the previous object during heap iteration.
Bug: https://github.com/dart-lang/sdk/issues/36906
Change-Id: Id7214aaa475929e33e5e5ae5bc58c99eb927b74b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127743
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2019-12-10 00:57:23 +00:00
Martin Kustermann 20ec71d447 [vm/compiler] Fix TypeTestingStub -> SubtypeTestCache fallback code if dst_type = TypeParameter
If the dst_type of an AssertAssignable is a type parameter, the AssertAssignable
implementation will load the value of the type parameter using
the (instantiator or function) type arguments. It will then call the
type testing stub (TTS) of that type.

If the TTS is not exhaustive (e.g. because `T = X<..>` wher `X` is
implemented), it can fall back to the slower SubTypeTestCache implementation.

Right now the STC fallback will get the loaded value of the type
parameter for `dst_type` instead of the type parameter. Doing so is
incorrect.

  => This CL ensures we preserve dst_type = TypeParameter for the STC
  fallback.

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

Change-Id: Idea2405efbdc01c031ee68dbb345820e721533eb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127640
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2019-12-09 21:02:12 +00:00
Liam Appelbe a17884aff0 [vm] Fix late final local variables in AST mode
- Modify setter logic for late final local variables.
- Remove extra visitVariableDeclaration in late_var_init_transformer
  that was causing nodes to be visited multiple times.

Bug: https://github.com/dart-lang/sdk/issues/38841
Change-Id: Id39925e4b9560a1da1b01e1cf14ef20c515f3928
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127720
Commit-Queue: Liam Appelbe <liama@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-12-09 20:36:12 +00:00
Régis Crelier b37f391f34 [VM/nnbd] Make runtimeType return a non-nullable type when the NNBD experiment is enabled.
The nullability of runtimeType must be consistent with the nullability of
a class DeclarationType. Currently, it is always kLegacy. However, this
needs to be set to kNonNullable when the NNBD experiment is enabled.
Note that the nullability of the null instance remains kNullable.

Change-Id: I4ba974c2551c3a7fbd190b02175804090f9b48b4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/125721
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2019-12-09 18:27:04 +00:00
Régis Crelier 8894b88467 [VM/nnbd] Implement syntactic type equality.
Legacy types are considered equal to their non-nullable variant.
Type hash is modified to be consistent with the new definition.

Change-Id: If90f7f13cf77e519d5b90b57d9dbf4988f71be13
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/126283
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-12-09 18:18:59 +00:00
Ben Konyi 16e7647c86 [ VM / dart:typed_data ] Fixed issue where null could be passed for simd types in AOT
Arguments to simd type constructors were being checked in the bootstrap
natives entrypoint but not elsewhere. Checking for null in Dart code
ensures that we don't accidentally miss these checks in AOT.

The changes to sdk_nnbd are required in order to ensure the number of
arguments passed to native code match the number of arguments from the
non-NNBD implementation (we needed to remove the implicit type args
parameter).

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

Change-Id: Iaf7d8790c154f1e85db613b6dc84004c8013df9a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/126905
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2019-12-09 15:29:27 +00:00
Samir Jindel 8b8894648f [vm] Fix Meteor regression in "[vm] Enable multiple entry-points for unoptimized calls."
Change-Id: I3ffcdd67ae80b05339861a3376a56b0a6ce642c7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127462
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-12-09 13:45:47 +00:00
Daco Harkes bd8da4757e [vm/ffi] Remove simulator code
DBC is deprecated, and we're unlikely to implement simarm FFI support.

Removing templating as suggested in https://dart-review.googlesource.com/c/sdk/+/124136/3/runtime/vm/compiler/ffi.cc

Change-Id: I39753129739430093db3b53fb530829c6af936b1
Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-precomp-mac-release-simarm_x64-try,dart-sdk-linux-try,flutter-engine-linux-try,analyzer-analysis-server-linux-try,analyzer-linux-release-try,front-end-linux-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127466
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Auto-Submit: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-12-07 17:10:45 +00:00
Ryan Macnak 98da22a11f [observatory] Display process-wide memory usage with heap snapshots.
Include major memory users known to the VM: isolate heaps, profiling buffers, timeline buffers.

Change-Id: I2580ad74b5d4d07c5c75fde28bb7a5d71fddb09b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127382
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
2019-12-07 00:28:15 +00:00
Liam Appelbe de53a2c33c [vm] Fix late local variables in AST mode
- Set a flag on LocalVariable if it's late, and store its initializer offset
 - Visit late var init in when visiting var get in scope builder
 - Initialize late vars to the sentinel
 - Check the sentinel and run the initializer in late var get

Bug: https://github.com/dart-lang/sdk/issues/38841
Change-Id: I5500ed133537ab663e2b3d8cfb5cca04233be25e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/126982
Commit-Queue: Liam Appelbe <liama@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2019-12-06 19:54:42 +00:00
Ben Konyi 6267a8194e [ VM / dart:io ] Fix issue where SIGPROF is disabled in processes spawned via Process on POSIX
On POSIX platforms, execvp was being run wrapped in
`VOID_TEMP_FAILURE_RETRY` which blocked SIGPROF, resulting in SIGPROF
being blocked in the new application. This would cause Dart applications
spawned through dart:io as a new process to not receive profiler ticks.
This should fix the issue where `flutter run -d {linux,macos}` would
result in profiling being broken for the spawned desktop application.

Change-Id: I7b176ce48144bcbca29d4ae63c82599623ce3c35
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127451
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2019-12-06 19:46:31 +00:00
Liam Appelbe e20ff1e054 [vm] Prevent late fields from being unboxed
When unboxed doubles are assigned to late fields, it conflicts with the
late field logic and causes a crash.

Bug: https://github.com/dart-lang/sdk/issues/38841
Bug: https://github.com/dart-lang/sdk/issues/39658
Change-Id: I641f597006114f02473a20f8c2526eeaf4fe813f
Fixes: https://github.com/dart-lang/sdk/issues/39658
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127442
Commit-Queue: Liam Appelbe <liama@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-12-05 22:19:00 +00:00