Commit Graph

945 Commits

Author SHA1 Message Date
Martin Kustermann a350f6e57d [gardening] Always use Dart binary from checked-in sdk when running gen_kernel in vm/dart tests
This avoids using e.g. a out/DebugX64/dart VM (which is very slow).

This should fix some tests which started to time out.

Change-Id: I6a64e29e5376fbdc91f7170e75c68f90660fabc9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116962
Reviewed-by: Clement Skau <cskau@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2019-09-12 12:14:56 +00:00
Martin Kustermann a9a9765eb3 [gardening] Skip dart/run_appended_aot_snapshot_test on simarm_x64
This test assumes `gen_snapshot` is available in the build folder where
the test gets run from. Though simarm_x64 is special in that only
test.py knows about the location of the right `gen_snapshot`.

Therefore we skip this test on simarm_x64 (which is '$builder_tag ==
crossword").

Change-Id: I677c781a970dec358f593c4504051ac515d48d0f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116961
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-09-12 09:23:21 +00:00
Ben Konyi e6887536aa [ VM ] Ignore contexts which have been optimized out during stack overflow checks
Fixes https://github.com/dart-lang/sdk/issues/38182

Change-Id: I2b042b9a320e16fc88bee6ea2c0c93598e574c00
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115880
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2019-09-12 01:20:05 +00:00
Alexander Aprelev dabfda5770 Revert "[vm/compiler] Check def/use relation for PushArguments in environment."
This reverts commit 88e94994b1 as it breaks flutter:

```
[ +192 ms] executing: $FH/engine/src/out/ios_profile_arm/clang_x64/gen_snapshot --causal_async_stacks
--deterministic --snapshot_kind=app-aot-elf --elf=build/aot/app.so --strip --no-sim-use-hardfp
--no-use-integer-division build/aot/app.dill
[+12798 ms] ===== CRASH =====
[   +1 ms] si_signo=Segmentation fault: 11(11), si_code=1, si_addr=0x28
[        ] version=2.6.0-dev.0.0.flutter-88e94994b1 (Wed Sep 11 12:00:07 2019 +0000) on "macos_simarm"
[        ] thread=775, isolate=isolate(0x7fe116011200)
[        ]   pc 0x000000010afd1970 fp 0x00007ffee4e6cc30

dart::AotCallSpecializer::TryExpandCallThroughGetter(dart::Class const&, dart::InstanceCallInstr*)
[        ]   pc 0x000000010afd0ee0 fp 0x00007ffee4e6ccf0
dart::AotCallSpecializer::VisitInstanceCall(dart::InstanceCallInstr*)
[        ]   pc 0x000000010b047199 fp 0x00007ffee4e6cd30 dart::FlowGraphVisitor::VisitBlocks()
[        ]   pc 0x000000010b0f9e32 fp 0x00007ffee4e6cd50
dart::CompilerPass_ApplyICData::DoBody(dart::CompilerPassState*) const
[        ]   pc 0x000000010b0f8d84 fp 0x00007ffee4e6cde0 dart::CompilerPass::Run(dart::CompilerPassState*) const
[        ]   pc 0x000000010b0f8fc1 fp 0x00007ffee4e6ce00
dart::CompilerPass::RunInliningPipeline(dart::CompilerPass::PipelineMode, dart::CompilerPassState*)
[        ]   pc 0x000000010b0a3280 fp 0x00007ffee4e6d2f0 dart::CallSiteInliner::TryInlining(dart::Function const&,
dart::Array const&, dart::InlinedCallData*, bool)
[        ]   pc 0x000000010b0af278 fp 0x00007ffee4e6d3d0 dart::CallSiteInliner::InlineStaticCalls()
[        ]   pc 0x000000010b0aa115 fp 0x00007ffee4e6d4e0 dart::CallSiteInliner::InlineCalls()
[        ]   pc 0x000000010b0a9d01 fp 0x00007ffee4e6d5d0 dart::FlowGraphInliner::Inline()
[        ]   pc 0x000000010b0f9fdf fp 0x00007ffee4e6d640
dart::CompilerPass_Inlining::DoBody(dart::CompilerPassState*) const
[        ]   pc 0x000000010b0f8d84 fp 0x00007ffee4e6d6d0 dart::CompilerPass::Run(dart::CompilerPassState*) const
[        ]   pc 0x000000010b0f9271 fp 0x00007ffee4e6d700
dart::CompilerPass::RunPipeline(dart::CompilerPass::PipelineMode, dart::CompilerPassState*)
[        ]   pc 0x000000010afde14e fp 0x00007ffee4e6dd00
dart::PrecompileParsedFunctionHelper::Compile(dart::CompilationPipeline*)
[        ]   pc 0x000000010afdf725 fp 0x00007ffee4e6ded0 dart::PrecompileFunctionHelper(dart::Precompiler*,
dart::CompilationPipeline*, dart::Function const&, bool)
[        ]   pc 0x000000010afdb95c fp 0x00007ffee4e6df80 dart::Precompiler::CompileFunction(dart::Precompiler*,
dart::Thread*, dart::Zone*, dart::Function const&)
[        ]   pc 0x000000010afda83d fp 0x00007ffee4e6dfe0 dart::Precompiler::ProcessFunction(dart::Function const&)
[        ]   pc 0x000000010afd7294 fp 0x00007ffee4e6e010 dart::Precompiler::Iterate()
[        ]   pc 0x000000010afd5274 fp 0x00007ffee4e6e1c0 dart::Precompiler::DoCompileAll()
[        ]   pc 0x000000010afd4ddc fp 0x00007ffee4e6e570 dart::Precompiler::CompileAll()
[        ]   pc 0x000000010b200102 fp 0x00007ffee4e6e630 Dart_Precompile
[        ]   pc 0x000000010ad939cc fp 0x00007ffee4e6e7d0 dart::bin::main(int, char**)
[        ]   pc 0x00007fff5ae163d5 fp 0x00007ffee4e6e7e0 start
[        ] -- End of DumpStackTrace
[   +1 ms] Dart snapshot generator failed with exit code -6
```
Change-Id: I609493026eeed1fbe68adc9aa52a5b872d08bca0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116888
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2019-09-12 01:03:36 +00:00
Alexander Markov 315e9c13f5 [gardening] Avoid --deterministic in regress_merge_blocks_with_phis_test
regress_merge_blocks_with_phis_test test uses --deterministic and
low optimization counter threshold which considerably slows it down
and causes timeouts on vm-kernel-win-debug-x64 bot.
This test verifies compilation in OSR case, which doesn't involve
background compilation, so it doesn't need --deterministic.

Verified that the original problem (fixed in https://dart.googlesource.com/sdk/+/5999cd983801c6fc0c4c11f9263236470f569e9a)
still reproduces on this regression test after removing --deterministic.

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

Change-Id: I97ad08121e9864e7d52e4373c7d7fd8bc72e72c3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116745
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-09-11 21:54:59 +00:00
Clement Skau a7e71c3351 [test] Fixes run_appended_aot_snapshot_test in precompiled mode.
Change-Id: I883f3f4cc82df6c591d7c0dec8c71645467c193d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116766
Commit-Queue: Clement Skau <cskau@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-09-11 16:46:38 +00:00
Teagan Strickland 88e94994b1 [vm/compiler] Check def/use relation for PushArguments in environment.
Fix an AOT call specialization that broke this relationship.

When printing environments in the FlowGraphPrinter, also print the
underlying value for any PushArguments.

Change-Id: I39803b7d995abac720702ea4b9d6a78fcbc45d4c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115981
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-09-11 12:00:07 +00:00
Clement Skau 46b58397f8 [Runtime] Adds appended blob runtime mode.
The Dart runtime will be able to load snapshot blobs appended at the end of
itself.
This is a step on the way to a self-contained native executable.

Tested:
  $ dart2aot hello_world.dart hello_world.aot
  $ <Some steps to hand-craft appended binary ..>
  $ dartaotruntime_plus_hello_world.bin
  Hello, world!

  python tools/test.py -n dartk-linux-debug-x64 vm/dart/run_appended_aot_snapshot_test

Change-Id: I79d5500c4e2668da31cf1d27145296d17470e04c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/112382
Commit-Queue: Clement Skau <cskau@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-09-11 10:56:57 +00:00
Robert Nystrom 89ad636b58 Remove the old "preview Dart 2" flags from the test runner.
Dart 2 shipped a year ago, so we're pretty well past a "preview". :)

Change-Id: I6c5d21ae4181e4228cc1fc49b6344cdb8fc43794
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115544
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
Auto-Submit: Bob Nystrom <rnystrom@google.com>
2019-09-05 16:59:43 +00:00
Alexander Markov 5999cd9838 [vm/compiler] Account for phis in the successor block when merging blocks
This fixes language_2/control_flow_collections/for_inference_test
with bytecode and --optimization-counter-threshold=5.

Change-Id: I61ea83c92ea04a71edf564a9a68b57af1a17103f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115077
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-09-03 17:42:01 +00:00
Teagan Strickland 1f9bf308b2 [vm/compiler] Early work on IL deserializer.
At this point, we do get some successful deserializations (of
methods that are optimized into constant value returns).

Adds support for:
  GraphEntry (including constant pool)
  FunctionEntry
  TargetEntry
  Return

Results from compiling hello world program:

* Early round trip
    * Contains unhandled instructions: 4180
    * Failed during deserialization: 0
    * Successful round trip: 0
* Late round trip
    * Contains unhandled instructions: 4163
    * Failed during deserialization : 0
    * Successful round trip: 15

Bug: https://github.com/dart-lang/sdk/issues/36882
Change-Id: I9e0919f6ffbfe059ce0efd55f9a767c1ba805795
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113325
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
2019-08-29 15:49:59 +00:00
Samir Jindel 2e2d5bcca6 [vm] Make v8_snapshot_profile_writer_test less flaky and avoid user error with crossword config.
Fixes https://github.com/dart-lang/sdk/issues/37834

Change-Id: Ida9010a8294f2ab6e06969c671575f80c58b6697
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114850
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2019-08-29 12:03:43 +00:00
Martin Kustermann dfbb9083c6 [vm] Allow vm tests to import private platform libraries for testing purposes
Issue https://github.com/dart-lang/sdk/issues/36097

Change-Id: I1acec0b7c683ffa363e9b6f7056e76ea2f61d27d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114843
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2019-08-28 10:19:22 +00:00
Teagan Strickland ab54ea60e5 [vm/compiler] Add the framework for the IL deserializer.
This adds in a version of the IL deserializer that doesn't actually do
any deserialization yet.

However, it adds in a couple of compile passes that passes the FlowGraph
for compiled functions through the serializer and deserializer.  If the
deserialization step succeeds, then the FlowGraph stored in the
CompilerPassState is replaced with the new FlowGraph for the rest of the
compiler.

Also change the default zone handling in the FlowGraphSerializer to use
the zone for the current thread, instead of the zone stored in the
FlowGraph, so that it is appropriately affected by StackZone uses.

Bug: https://github.com/dart-lang/sdk/issues/36882
Change-Id: I8fa1c7af434f724ccec45ddb73263f84730af5b0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113184
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
2019-08-26 08:58:23 +00:00
Martin Kustermann 68e805f9f6 [vm/cocurrency] Add simple spawn function test and test with/without isolate groups
This fixes also an issue when running without isolate groups.

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

Change-Id: I0fb64b3f2b755ccab4c36c6a0fafee7edff239cf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114204
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2019-08-23 15:15:58 +00:00
Ben Konyi 1219c5e3ab [ VM / Service ] Use the name of the a function's defining mixin instead of the
mixin application to qualify function names in profiler and exception stack traces.

Given:

```
class Foo {
  foo() => "foo";
}

class Bar with Foo {}
```

The stack frame for `foo()` currently displays as `Bar&Foo.foo`. Now,
the stack frame for `foo()` will have the name `Foo.foo`.

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

Change-Id: Ic1c0d00f38725ee088812ff0926eef4f343ebdf1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/111482
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2019-08-15 21:10:47 +00:00
Alexander Markov 896c053803 Enable vm/cc tests on dartkb bots
Change-Id: Ibde7a25180c550b556b98ef70ed611d42f4acd97
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/112651
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-08-12 16:19:06 +00:00
Teagan Strickland 48f18231ba [vm/compiler] More serialization support for closures and instances.
* Adds non-static final field printing for `Instance`s
* Adds specialized printing for `Closure`s (tearoffs).
* Instances of `Mint` and `Type` can also appear in constant
  pools, so handle both in ObjectToSExp.
* DartValueToSExp is a wrapper method for ObjectToSExp that
  also checks to see if the value is defined in the constant
  pool. If it is, the object is serialized as a reference to
  that definition.
* Reworks the `tmp_*_` fields used for non-reentrant cases
  to be per function to make it easier to understand how they
  interact. (Only cross-function tmp field that remains is
  `tmp_string_`, since its contents are always immediately
  converted to a C string and then no longer needed.)

Bug: https://github.com/dart-lang/sdk/issues/36882
Change-Id: Ibad4bc2497dd1f580d1daa536c4a267818981c14
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/111425
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-08-07 08:28:18 +00:00
Teagan Strickland f822dfa3ea Reland "[vm/compiler] Implement new inlining pragmas."
This change introduces two new pragmas:

* `@pragma('vm:never-inline')`
* `@pragma('vm:prefer-inline')`

These replaces the old way of specifying AlwaysInline or NeverInline
annotations when the (now removed) --enable-inlining-annotations flag
was used.

Bug: https://github.com/dart-lang/sdk/issues/36571
Change-Id: Iee152c1d67abde8d58c58fa967449d36e77c8c93
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/110440
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Samir Jindel <sjindel@google.com>
2019-07-30 12:01:06 +00:00
Alexander Markov 575f5c8b90 Revert "[vm] Fix uri/path discrepancy preventing running snapshots via spawnUri"
This reverts commit c4b829ba2c.

Reason for revert: failures on several bots:

https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket.appspot.com/8906839588400817728/+/steps/test_results/0/logs/unapproved_failing_tests__logs_/0

https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket.appspot.com/8906839597885007504/+/steps/test_results/0/logs/unapproved_failing_tests__logs_/0

https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket.appspot.com/8906839588760701184/+/steps/test_results/0/logs/unapproved_failing_tests__logs_/0

Original change's description:
> [vm] Fix uri/path discrepancy preventing running snapshots via spawnUri
> 
> Change-Id: I718d7012d074b73eacfb0d4922fc744b6d2bd77b
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/110547
> Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>

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

Change-Id: Id43441d2259a17dff538c95d455a3839b284cad3
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/110800
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-07-26 21:27:23 +00:00
Mike Fairhurst c4b829ba2c [vm] Fix uri/path discrepancy preventing running snapshots via spawnUri
Change-Id: I718d7012d074b73eacfb0d4922fc744b6d2bd77b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/110547
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2019-07-26 20:27:11 +00:00
Alexander Markov fedd74669a [vm/bytecode] Support multiple entry points when compiling from bytecode
DeltaBlueClosures +26.54%

Closes https://github.com/dart-lang/sdk/issues/36889
Issue: https://github.com/dart-lang/sdk/issues/36429

Change-Id: I8920c7985366a2c955a06013aa9f58763fcbced9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109580
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-07-20 00:05:23 +00:00
Alexander Markov 09418f4402 [vm/tests] Re-enable tests for multiple entry points, take 2.
Closes https://github.com/dart-lang/sdk/issues/37144

This is a re-land of 00eb034de7.

Change-Id: Ib46d4590de460a520415280b3253e75d8f947b81
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109584
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-07-19 00:21:35 +00:00
Alexander Markov 38deecec39 Revert "[vm/tests] Re-enable tests for multiple entry points"
This reverts commit 00eb034de7.

Reason for revert: test failure on vm-kernel-optcounter-threshold-linux-release-x64 bot

Original change's description:
> [vm/tests] Re-enable tests for multiple entry points
> 
> Closes https://github.com/dart-lang/sdk/issues/37144
> 
> Change-Id: I9935db44cf01dda106c9211978dca33aac7fcb16
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109551
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Commit-Queue: Alexander Markov <alexmarkov@google.com>

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

Change-Id: I582c014c4e02216be1575609aa950e8afb7e0702
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109600
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-07-18 23:16:21 +00:00
Alexander Markov 00eb034de7 [vm/tests] Re-enable tests for multiple entry points
Closes https://github.com/dart-lang/sdk/issues/37144

Change-Id: I9935db44cf01dda106c9211978dca33aac7fcb16
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109551
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-07-18 22:11:10 +00:00
Teagan Strickland 2b3336b51e [vm/compiler] Initial IL serialization implementation.
Adds the --serialize_flow_graphs_to flag, which takes a
filename to which to serialize all compiled functions.
This flag is only active for the AOT compiler.

Bug: https://dartbug.com/36882
Change-Id: Ib7e328ad93373168806539f0a61ec0a07506a51d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107400
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-07-17 09:11:15 +00:00
Siva Annamalai 27001fb289 Revert "[vm/compiler] Implement new inlining pragmas."
This reverts commit 629f38cf87.

Reason for revert: This CL seems to depend on constant_update_2018 flag being turned on by default. The CL that turns on constant_update_2018 has been reverted, so this CL is also being reverted.

Original change's description:
> [vm/compiler] Implement new inlining pragmas.
> 
> This change introduces two new pragmas:
> 
> * `@pragma('vm:never-inline')`
> * `@pragma('vm:prefer-inline')`
> 
> These replaces the old way of specifying AlwaysInline or NeverInline
> annotations when the (now removed) --enable-inlining-annotations flag
> was used.
> 
> Bug: https://github.com/dart-lang/sdk/issues/36571
> Change-Id: I2495c72819d94e43cefc837d4eb454b7b3d4140c
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/99148
> Commit-Queue: Teagan Strickland <sstrickl@google.com>
> Reviewed-by: Samir Jindel <sjindel@google.com>

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

Change-Id: Idc8e8344adb026a308af20c8b0d0224edb891d9c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: https://github.com/dart-lang/sdk/issues/36571
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109320
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2019-07-16 22:33:00 +00:00
Teagan Strickland 629f38cf87 [vm/compiler] Implement new inlining pragmas.
This change introduces two new pragmas:

* `@pragma('vm:never-inline')`
* `@pragma('vm:prefer-inline')`

These replaces the old way of specifying AlwaysInline or NeverInline
annotations when the (now removed) --enable-inlining-annotations flag
was used.

Bug: https://github.com/dart-lang/sdk/issues/36571
Change-Id: I2495c72819d94e43cefc837d4eb454b7b3d4140c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/99148
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Samir Jindel <sjindel@google.com>
2019-07-16 09:41:12 +00:00
Ryan Macnak c6bc0031f3 [vm, bytecode] Field initializer for schema changes.
Bug: https://github.com/dart-lang/sdk/issues/32299
Change-Id: Id6359ad36db183f4cdd091e7fd778c879e868d99
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108901
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-07-15 22:58:16 +00:00
Alexander Aprelev 1112cc6bf5 [gardening] Skip vm/dart/transferable_test on debug win ia32 bot.
This is performance test and on this particular bot it's performance is
unpredictable.

Change-Id: I39465e50240f89904de7ee59de3a05966c90aa7b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108980
Reviewed-by: Alexander Aprelev <aam@google.com>
2019-07-12 20:22:29 +00:00
Zichang Guo 205b7787df skip tests in precompiled obfuscated bot
Change-Id: Ie9bd64ea77fb51c6df7b704a12a514ac7d6e14d2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108685
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
2019-07-10 22:36:50 +00:00
Zichang Guo 90088a386b [vm/kernel] Remove Function parameters from Local type parameters
When calling SetupFunctionParameters, Function type arguments were copied into local type parameters. Local type parameters = previous type parameter + function type parameters.
At BuildTypeParameterType(), local type parameters contains duplicated type parameter from function, which ends up with returning wrong type.

Bug: https://github.com/dart-lang/sdk/issues/37382
Change-Id: I8f486b0b9a9120845349fe1734bbfcc35f1126a1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108501
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
2019-07-10 14:43:43 +00:00
Ben Konyi 8d07009931 [ VM / Gardening ] Mark disassemble_determinism_test as slow on Windows
Test is consistently timing out and likely just needs a little extra
time to complete on slower bots.

TBR=asiva@google.com

Change-Id: Ib4bc67bf699947164494674437ef63005cbbbd91
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108440
Reviewed-by: Ben Konyi <bkonyi@google.com>
2019-07-09 15:01:58 +00:00
asiva 182a59cebb Skip all tests that use spawnUri when running in simulator mode as it makes no sense to run the CFE on the simulator.
Change-Id: Ie3457e67fe4ddb3170bf4654effdc5b21dff2450
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107942
Reviewed-by: Alexander Aprelev <aam@google.com>
2019-07-02 17:32:23 +00:00
Alexander Markov 0674955f48 [Test] Unskip vm/dart/issue_31959_31960_test on -sim* bots
The workload in the test was reduced, so it may be possible to run
it on sim* architectures.

Change-Id: I6eadae05081cf250f758bf0e79b3b0738ab62da2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107463
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-06-27 18:19:15 +00:00
Ryan Macnak 1cadf4bc58 [test] Skip vm/cc tests on opt-counter bots.
These tests started running with the opt-counter flags in 91c2c3537b. Previously they were repeating the work of non-opt-counter bots.

Change-Id: I95f236dd85650ccc3097fa3cc7fd939b41cc6373
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107456
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2019-06-27 01:12:54 +00:00
Todd Volkert ddfde57069 Update File.openRead to return Stream<Uint8List>
Bug: https://github.com/dart-lang/sdk/issues/36900
Change-Id: Ib2e417f4baa0048e2d4c2156c250d0cf454fdf87
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/104523
Commit-Queue: Todd Volkert <tvolkert@google.com>
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2019-06-27 00:22:17 +00:00
Ryan Macnak 91c2c3537b [vm, bytecode] Plumb bytecode mode flags to VM unit tests.
- Make tests using eval fail instead of timing out.
 - Collect allocation stats in the interpreter.
 - And various EnsureDeclarationLoaded.

Change-Id: I17377216cd6dde2615b205f1b28071e12e50e252
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107442
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2019-06-26 23:47:07 +00:00
Alexander Markov a68877f3f1 [test] Tweak vm/dart/issue_31959_31960_test to avoid timeout
Test vm/dart/issue_31959_31960_test is very slow in interpreter-only
debug mode and sometimes times out.

This change reduces sample list created in the test by 10x
(from 100 000 000 to 10 000 000 items). Also, static types are added to
improve its performance in interpreter-only mode.

Change-Id: Ib8eef973252d42120a0a365919f293a12a03b07e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107447
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-06-26 23:08:27 +00:00
Martin Kustermann 8b1efb2b76 [vm/aot] Only specialize devirtualized instance calls
Many instance calls get turned into static calls in our AOT compiler.
The typed data optimization pass accidentally tried to optimize all static
calls instead of only devirtualized instance calls.

Issue https://github.com/flutter/flutter/issues/35121

Change-Id: Ibe8a95ceed6abf5ff2608f076a98f55c40f43477
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107410
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2019-06-26 21:40:17 +00:00
Ryan Macnak 5c1d5444d6 [vm, bytecode] Fix some source position discrepancies.
Fix most cases of accessing metadata; parameter annotations still missing.

Change-Id: Ie78c3d817a86a656548cdc5775f837250a710095
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106967
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-06-25 00:57:26 +00:00
Nate Bosch cf03e96b90 Remove appJit and precompiled compiler options
Towards #37318

- appJit has been replaced by appJitk and is no longer.
- precompiled has been replaced by dartkp and is no longer used.
- For the precompiled runtime, default to dartkp.
- Remove status file references to these compiler options and normalize
  status files.

Change-Id: I48728db13dc84737092a92314e2f474a9309f4d9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106942
Reviewed-by: Alexander Thomas <athom@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-06-24 16:07:27 +00:00
Zichang Guo 2bc78f171f [vm/kernel] Fix reading of type parameters in factory constructors
VM will crash when factory constructor was passed typedef with type arguments. procedure_type_parameter_count should not include type argument for factory function, as factory function share the same type argument with class.
Bug:  https://github.com/dart-lang/sdk/issues/37264
Change-Id: I358c6d35cf217162d2b89f7d8fa9d303f981b713
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106563
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
2019-06-21 16:48:47 +00:00
Alexander Markov da8cb470cc [vm/bytecode] Represent classes, libraries, scripts and recursive types in bytecode
Size of a large application:
Before: 26628600
After: 21480120 (-19.3%)

Size of snapshots:

isolate_snapshot_framework.bin
Before: 9322496
After: 6782976 (-27.2%)

isolate_snapshot_product_framework.bin
Before: 9166848
After: 6602752 (-27.9%)

Regressions in tests:

1) Test language_2/type_alias_equality_test/04 fails similarly to default mode, as VM
does not implement comparison of function types according to the specification.
Previously this test was passing as function types were canonicalized in bytecode,
which was not always correct. This CL fixes the problem with canonicalization of
function types in bytecode and the test starts failing again.

2) Tests standalone_2/entrypoints_verification_test, standalone_2/io/test_extension_test,
standalone_2/io/test_extension_fail_test fail as native extensions are not supported
in bytecode yet. These tests start passing after df5e7aac17,
which switched bytecode tests to kernel service (on x64), because kernel service doesn't
drop ASTs. This CL switches from reading AST library declarations to bytecode even if
AST is not removed, so tests fail again.

Change-Id: I8b7ba44bfa49d0b1599b2509553ff7c831a4e244
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/104700
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-06-20 18:27:21 +00:00
Martin Kustermann be260fef93 Skip vm/dart/disassemble_determinism_test on hot-reload, it's too slow
Change-Id: I2e147ecc2f9c0f09e1f6f4eaf5e97b2b2efcef31
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106901
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
Auto-Submit: Martin Kustermann <kustermann@google.com>
2019-06-20 13:17:20 +00:00
Nate Bosch 2b56c2c58a Normalize status files
Run `pkg/status_file/bin/normalize.dart` across all status files.

This should solve most presubmit warnings about "existing and possibly
new status file issues".

There are remaining issues in pkg/front_end/testcases/strong.status and
pkg/front_end/testcases/text_serialization.status which will need to be
fixed manually.

Change-Id: Iceae8992c4907442481590d75c1b0a84ce29521b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106726
Reviewed-by: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Bob Nystrom <rnystrom@google.com>
Auto-Submit: Nate Bosch <nbosch@google.com>
2019-06-19 23:04:01 +00:00
Ryan Macnak 240f25a940 [vm] Add --disassemble-relative to use PC offsets instead of absolute PCs in --disassemble's output.
Makes it much easier to compare the output when making VM changes.

--disassemble:
        ;; Invocation Count Check
0x7f82b8900320    498b7c2437             movq rdi,[r12+0x37]
0x7f82b8900325    ff8783000000           incl [rdi+0x83]
0x7f82b890032b    81bf8300000030750000   cmpl [rdi+0x83],0x7530
0x7f82b8900335    7c07                   jl 0x00007f82b890033e
0x7f82b8900337    41ffa6b8010000         jmp [thr+0x1b8]

--disassemble --disassemble-relative:
        ;; Invocation Count Check
0x0    498b7c2437             movq rdi,[r12+0x37]
0x5    ff8783000000           incl [rdi+0x83]
0xb    81bf8300000030750000   cmpl [rdi+0x83],0x7530
0x15    7c07                   jl +9
0x17    41ffa6b8010000         jmp [thr+0x1b8]

Change-Id: Ie05c532f830027b928d7d1d57509eb237157a127
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106600
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
2019-06-19 22:36:00 +00:00
Ryan Macnak 1e24fe7d69 [vm, compiler] Specialize unoptimized monomorphic and megamorphic calls.
dart-bytecode, arm64:            +4.742% geomean
dart-bytecode-jit-unopt, arm64: +12.73% geomean
dart2js-compile, x64:            +3.635% geomean

In the polymorphic and unlinked cases, call to a stub the does a linear scan against an ICData.

In the monomorphic case, call to a prologue of the expected target function that checks the expected receiver class. There is additional indirection in the JIT version compared to the AOT version to also tick a usage counter so the inliner can make good decisions.

In the megamorphic case, call to a stub that does a hash table lookup against a MegamorphicCache.

Megamorphic call sites face a loss of precision in usage counts. The call site count is not recorded and the usage counter of the target function is used as an approximation.

Monomorphic and megamorphic calls sites are reset to the polymorphic/unlinked state on hot reload.

Monomorphic and megamorphic calls sites do not check the stepping state, so they are reset to the polymorphic/unlinked state when stepping begins and disabled.

Back-edges now increment the usage counter in addition to checking it. This ensures function with loops containing monomorphic calls will eventually cross the optimization threshold.

Fixed backwards use of kMonomorphicEntryOffset and kPolymorphicEntryOffset.

Fixed C stack overflow when bouncing between the KBC interpreter and a simulator.

Bug: https://github.com/dart-lang/sdk/issues/26780
Bug: https://github.com/dart-lang/sdk/issues/36409
Bug: https://github.com/dart-lang/sdk/issues/36731
Change-Id: I78a49cccd962703a459288e71ce246ed845df474
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/102820
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-06-12 21:56:53 +00:00
Zach Anderson 97f91fecdb [vm] Mark Profiler_StringInterpolation Fail in vm.status
Change-Id: Ie2341b3d326209586852e541131e3a450c67fee9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105473
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2019-06-10 22:17:34 +00:00
Ben Konyi 2b76cdf1d7 [ VM ] Remove bad status file entries for data_uri_import_test/utf16
Change-Id: Ie983b82eabcafbf8ba38e3932eed581f4c049997
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/105468
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2019-06-10 19:00:26 +00:00