Commit Graph

2345 Commits

Author SHA1 Message Date
Alexander Markov 346f5369e4 [vm] Cleanup _int64 marker interface
Closes https://github.com/dart-lang/sdk/issues/34955

Change-Id: I7323e17374bfdc11d7869e4713c2818927bc4c71
Reviewed-on: https://dart-review.googlesource.com/c/81880
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2018-10-29 23:01:44 +00:00
Zach Anderson 50a34608d2 [vm] Disable expensive timeline parameter in bytecode reader
Change-Id: Iddb9e5f7164a053116ad604d42c27c26be45aabb
Reviewed-on: https://dart-review.googlesource.com/c/81900
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-10-29 18:51:15 +00:00
Martin Kustermann 388c41de94 [VM] Extract common code from Assembler to new AssemblerBase base class
Issue https://github.com/dart-lang/sdk/issues/33274

Change-Id: Ie7189081b3acac53a80a399b1353261c2312da79
Reviewed-on: https://dart-review.googlesource.com/c/81641
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-10-29 15:36:22 +00:00
Zach Anderson ae2441337a Revert "Reland: [vm] Add a library and class cache to KernelProgramInfo"
This reverts commit c1e6140323.

Reason for revert:

On Windows

.\out\DebugX64\run_vm_tests.exe --dfe=out\DebugX64\gen\kernel-service.dart.snapshot IsolateReload_TearOff_List_Set

fails with:

sdk\runtime\vm\raw_object.cc: 231: error: Size mismatch: -2459565876494606883 from class vs 112 from tags c0718

Original change's description:
> Reland: [vm] Add a library and class cache to KernelProgramInfo
> 
> Relands with fixed locking to protect the caches.
> 
> Original message:
> Also create fewer handles in the KernelLoader.
> 
> GenKernelKernelReadAllBytecode improves a further
> 15-20% after removing the timeline event argument
> in the bytecode reader.
> 
> fixes #34939
> 
> Change-Id: I88c57bdb673392a7677c5c6bbb16cfed8c95c0d7
> Reviewed-on: https://dart-review.googlesource.com/c/81620
> Commit-Queue: Zach Anderson <zra@google.com>
> Reviewed-by: Alexander Markov <alexmarkov@google.com>

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

Change-Id: I4f3ff1866db2990b512b3ee7e59bf66bdc480dcc
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/81745
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-10-27 07:53:51 +00:00
Zach Anderson c1e6140323 Reland: [vm] Add a library and class cache to KernelProgramInfo
Relands with fixed locking to protect the caches.

Original message:
Also create fewer handles in the KernelLoader.

GenKernelKernelReadAllBytecode improves a further
15-20% after removing the timeline event argument
in the bytecode reader.

fixes #34939

Change-Id: I88c57bdb673392a7677c5c6bbb16cfed8c95c0d7
Reviewed-on: https://dart-review.googlesource.com/c/81620
Commit-Queue: Zach Anderson <zra@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-10-26 21:36:58 +00:00
Martin Kustermann 973c9519b7 [VM] Add a "kind" field to the entries of the Code::static_calls_target_table array
This is preparation for adding other kinds of static calls, e.g.
pc-relative calls.

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

Change-Id: Ief83aa3571036fabd72c2f82f946ca4757c76cb1
Reviewed-on: https://dart-review.googlesource.com/c/81407
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-10-26 14:29:34 +00:00
Samir Jindel e23acaaf90 [vm/aot] Fix obfuscation.
Test Plan:

Make vm-kernel-precomp-obfuscate-linux-release-x64-try green, ensuring status file changes
reflect design gaps and not bugs.

Tested locally that obfuscated Flutter Gallery runs.

Change-Id: Ifcdc334de58f43c310e15b58dbcf6fe1597206f2
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-obfuscate-linux-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/81009
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-10-26 13:00:33 +00:00
Martin Kustermann 12fe255ff5 Revert "Reland: [vm] Add a library and class cache to KernelProgramInfo"
This reverts commits
  - 47c55605b8
  - c362e4862f.

Reason for revert:

Very likely the cause for flaky crashes where mutator and BG compiler are accessing the program info class cache concurrently without proper locking.

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

Original change's description:
> Reland: [vm] Add a library and class cache to KernelProgramInfo
>
> Relands with locks to protect the caches.
>
> Original message:
> Also create fewer handles in the KernelLoader.
>
> GenKernelKernelReadAllBytecode improves a further
> 15-20% after removing the timeline event argument
> in the bytecode reader.
>
> Change-Id: I6d796986a7773938e528271033385465e4f13468
> Reviewed-on: https://dart-review.googlesource.com/c/79380
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Commit-Queue: Zach Anderson <zra@google.com>

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

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

Change-Id: Ib242ecc9ece8a233441fc4d5512e4a20ce3e0d11
Reviewed-on: https://dart-review.googlesource.com/c/81601
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-10-26 11:32:34 +00:00
Aart Bik 8bdd5344ef Reland "[vm/compiler] Use loop framework for AOT inline heuristics"
This reverts commit 0170b8d529.

Reason for revert: 
The underlying problem has been fixed.


Original change's description:
> Revert "[vm/compiler] Use loop framework for AOT inline heuristics"
> 
> This reverts commit daae20d32e.
> 
> Reason for revert: 
> 
> The kernel-precomp bots are seeing this error:
> 
> ../../runtime/vm/object.h: 3134: error: Handle check failed: saw 2249186640 expected Function
> 
> Not sure what that is yet, but reverting to get bots green again while I investigate.
> 
> 
> Original change's description:
> > [vm/compiler] Use loop framework for AOT inline heuristics
> > 
> > Rationale:
> > Without proper execution counters, the inline AOT inliner
> > marks every call site "cold", effectively disabling inlining
> > altogether. This change introduces loop-based static heuristic
> > that assumes statements nested inside loops are executed more
> > frequently. This results in more inlining.
> > 
> > Note:
> > Conservative version is used for now which yields
> > more performance without increasing code size too much.
> > There is still a lot of performance left at the table
> > which we could exploit if we fine tune heuristics
> > regarding code size.
> > 
> > Bug:
> > https://github.com/dart-lang/sdk/issues/34473
> > https://github.com/dart-lang/sdk/issues/32167
> > 
> > 
> > Change-Id: I86ba60f93bdab363cd22ab6bdbcf6688f2042fea
> > Reviewed-on: https://dart-review.googlesource.com/c/81187
> > Commit-Queue: Aart Bik <ajcbik@google.com>
> > Reviewed-by: Alexander Markov <alexmarkov@google.com>
> 
> TBR=vegorov@google.com,alexmarkov@google.com,ajcbik@google.com
> 
> Change-Id: If5ca82966966ebef4ec0b4e921515d23f6bd492b
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Reviewed-on: https://dart-review.googlesource.com/c/81335
> Reviewed-by: Aart Bik <ajcbik@google.com>
> Commit-Queue: Aart Bik <ajcbik@google.com>

TBR=vegorov@google.com,alexmarkov@google.com,ajcbik@google.com

Change-Id: I8c160f59f8e91782f235cbcea607aef4227963f4
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/81500
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-10-25 21:21:14 +00:00
Alexander Markov 59e626e5c9 [vm/bytecode] Change encoding of MoveSpecial bytecode instruction
Previously MoveSpecial bytecode instruction used unsigned 8-bit A field
to encode target local variable index. This is too restrictive as we allow
signed 16-bit local variable indices.

After this change MoveSpecial has A_X encoding, with A field used for
special index (0 or 1), and signed 16-bit X field used for target local.

Change-Id: Ib87992e192b2923a39a9968913c39476947d3ea5
Reviewed-on: https://dart-review.googlesource.com/c/81440
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
2018-10-25 19:07:19 +00:00
Samir Jindel d11b74d1f3 [vm] Use unchecked entry-point for super calls.
Change-Id: Ie1abd050203f2d9806ebeedbec47292892fc9b0e
Reviewed-on: https://dart-review.googlesource.com/c/79960
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-10-25 12:48:09 +00:00
Peter von der Ahé 45e7ff28e1 Kernel Binary Format: Reify originating TypedefType on FunctionType
Previously, we only stored a reference to the originating Typedef declaration
and is thus loosing the originating type arguments. We need these type arguments
in various places, including diagnostics and bounds checks.

Note: this CL maintains backwards compatibility wrt to the Dart API of
FunctionType. I'll update the API in a follow-up CL.
Change-Id: I896ce3c3b4522d542a82c5036f8a17ee098143dc
Reviewed-on: https://dart-review.googlesource.com/c/81367
Commit-Queue: Peter von der Ahé <ahe@google.com>
Auto-Submit: Peter von der Ahé <ahe@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-10-25 11:40:37 +00:00
Martin Kustermann dec268cfae [VM] Catch non-instantiated type arguments for constant partial instantiation expression
This makes us report the following error

  * in JIT:

  Unhandled exception:
  'test.dart': error: Type arguments must be instantiated in partial instantiation.
  #0      main (...)
  ...

  * in AOT:

  test.dart:7:28: Error: The type '#lib1::C::T' is not a constant, only instantiated types are ...
    const C({this.callback = _defaultCallback});
                           ^
  test.dart:7:17: Context: While analyzing:
    const C({this.callback = _defaultCallback});
                ^
  test.dart:5:37: Error: The type '#lib1::C::T' is not a constant, only instantiated types are ...
    void foo([dynamic Function(T) f = _defaultCallback]) {}
                                    ^
  test.dart:5:33: Context: While analyzing:
    void foo([dynamic Function(T) f = _defaultCallback]) {}
                                ^
  test.dart:11:38: Error: The type '#lib1::bar::T' is not a constant, only instantiated types are ...
  void bar<T>([dynamic Function(T) f = _defaultCallback]) {}
                                     ^
  test.dart:11:34: Context: While analyzing:
  void bar<T>([dynamic Function(T) f = _defaultCallback]) {}



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

Change-Id: I05c7019119a50a9cc38939d9cb41aeaa06c853bc
Reviewed-on: https://dart-review.googlesource.com/c/81278
Auto-Submit: Martin Kustermann <kustermann@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-10-25 09:23:18 +00:00
Aart Bik 0170b8d529 Revert "[vm/compiler] Use loop framework for AOT inline heuristics"
This reverts commit daae20d32e.

Reason for revert: 

The kernel-precomp bots are seeing this error:

../../runtime/vm/object.h: 3134: error: Handle check failed: saw 2249186640 expected Function

Not sure what that is yet, but reverting to get bots green again while I investigate.


Original change's description:
> [vm/compiler] Use loop framework for AOT inline heuristics
> 
> Rationale:
> Without proper execution counters, the inline AOT inliner
> marks every call site "cold", effectively disabling inlining
> altogether. This change introduces loop-based static heuristic
> that assumes statements nested inside loops are executed more
> frequently. This results in more inlining.
> 
> Note:
> Conservative version is used for now which yields
> more performance without increasing code size too much.
> There is still a lot of performance left at the table
> which we could exploit if we fine tune heuristics
> regarding code size.
> 
> Bug:
> https://github.com/dart-lang/sdk/issues/34473
> https://github.com/dart-lang/sdk/issues/32167
> 
> 
> Change-Id: I86ba60f93bdab363cd22ab6bdbcf6688f2042fea
> Reviewed-on: https://dart-review.googlesource.com/c/81187
> Commit-Queue: Aart Bik <ajcbik@google.com>
> Reviewed-by: Alexander Markov <alexmarkov@google.com>

TBR=vegorov@google.com,alexmarkov@google.com,ajcbik@google.com

Change-Id: If5ca82966966ebef4ec0b4e921515d23f6bd492b
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/81335
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-10-24 22:49:10 +00:00
Aart Bik daae20d32e [vm/compiler] Use loop framework for AOT inline heuristics
Rationale:
Without proper execution counters, the inline AOT inliner
marks every call site "cold", effectively disabling inlining
altogether. This change introduces loop-based static heuristic
that assumes statements nested inside loops are executed more
frequently. This results in more inlining.

Note:
Conservative version is used for now which yields
more performance without increasing code size too much.
There is still a lot of performance left at the table
which we could exploit if we fine tune heuristics
regarding code size.

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


Change-Id: I86ba60f93bdab363cd22ab6bdbcf6688f2042fea
Reviewed-on: https://dart-review.googlesource.com/c/81187
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-10-24 21:31:36 +00:00
Régis Crelier 11ad25a1c3 Reland "[VM runtime] Support Smi instances in type test cache."
This is a reland of 6ba3e55ecc

The issue was that SlowTypeTestStub used in precompiled mode did not handle a
Smi instance before calling the Subtype2TestCache stub which does not support
it. See PatchSet 2 for the fix.
Is there a more efficient solution?

Original change's description:
> [VM runtime] Support Smi instances in type test cache.
>
> This adds SubtypeTestCache-based optimizations for type tests against
>       * dst_type = FutureOr<T> (when T=int/num)
>       * dst_type = T (when T = FutureOr<int/num>)
>
> Remove dangerous LoadClass pseudo assembler instruction (does not work for Smi).
> Handle instantiated void in type tests (along with dynamic and Object).
>
> Change-Id: I0df0fc72ff173b9464d16cc971969132b055a429
> Reviewed-on: https://dart-review.googlesource.com/c/81182
> Commit-Queue: Régis Crelier <regis@google.com>
> Reviewed-by: Martin Kustermann <kustermann@google.com>

Change-Id: I333ca47aebd7f0b663059ab6afc5d1cd8d7d5210
Reviewed-on: https://dart-review.googlesource.com/c/81320
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-10-24 17:54:13 +00:00
Alexander Markov 1d10e037ef [vm/bytecode] Remove unreachable bytecode
Change-Id: I29393604547038cf359b8e19ea48078dd0eea3b1
Reviewed-on: https://dart-review.googlesource.com/c/81201
Reviewed-by: Zach Anderson <zra@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
2018-10-23 23:26:13 +00:00
Régis Crelier 6134ac8648 Revert "[VM runtime] Support Smi instances in type test cache."
This reverts commit 6ba3e55ecc.

Reason for revert: unhappy kernel-precomp bots

Original change's description:
> [VM runtime] Support Smi instances in type test cache.
> 
> This adds SubtypeTestCache-based optimizations for type tests against
>       * dst_type = FutureOr<T> (when T=int/num)
>       * dst_type = T (when T = FutureOr<int/num>)
> 
> Remove dangerous LoadClass pseudo assembler instruction (does not work for Smi).
> Handle instantiated void in type tests (along with dynamic and Object).
> 
> Change-Id: I0df0fc72ff173b9464d16cc971969132b055a429
> Reviewed-on: https://dart-review.googlesource.com/c/81182
> Commit-Queue: Régis Crelier <regis@google.com>
> Reviewed-by: Martin Kustermann <kustermann@google.com>

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

Change-Id: I73be5fc068cd24e0a13ba0872a99a24ab5a8eeca
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/81284
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2018-10-23 19:04:18 +00:00
Régis Crelier 6ba3e55ecc [VM runtime] Support Smi instances in type test cache.
This adds SubtypeTestCache-based optimizations for type tests against
      * dst_type = FutureOr<T> (when T=int/num)
      * dst_type = T (when T = FutureOr<int/num>)

Remove dangerous LoadClass pseudo assembler instruction (does not work for Smi).
Handle instantiated void in type tests (along with dynamic and Object).

Change-Id: I0df0fc72ff173b9464d16cc971969132b055a429
Reviewed-on: https://dart-review.googlesource.com/c/81182
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-10-23 18:01:40 +00:00
Martin Kustermann d91e0ad3d7 [VM] Make method extractors call a stub for creation of tear-off closure
Issue https://github.com/dart-lang/sdk/issues/33274

Change-Id: I7ec37a57c968baa9a3099379cbecb306cd06b464
Reviewed-on: https://dart-review.googlesource.com/c/72780
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-10-23 15:51:37 +00:00
Zach Anderson 289d2b003a [vm] Don't re-enqueue functions after unoptimized compiles
Change-Id: I18ea0915971f073af14a99273fe75ed2ec32ed07
Reviewed-on: https://dart-review.googlesource.com/c/81161
Commit-Queue: Zach Anderson <zra@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-10-23 04:25:23 +00:00
Aart Bik 914065d80b [vm/compiler] Use loop framework for register allocator
Rationale:
Rather than relying on a separate loop detector, rely
on the new loop framework, which avoids code duplication
and ensures any improvement in loop detection/handling
will benefit this phase too. Note, most of the time, the
same loops are discovered with a few exceptions (which
is okay, since this is "just" heuristic usage). This CL
also simplifies loop detection a bit.

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

Change-Id: I1a1b19b99a698c74822473d2a1fe370287c1ade4
Reviewed-on: https://dart-review.googlesource.com/c/80523
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-10-22 19:29:30 +00:00
Alexander Markov 9406b7b44e [vm/bytecode] Add versioning to bytecode format
Change-Id: I35d86aec17aa0f6894a6380e4bb5ac7ca3092fac
Reviewed-on: https://dart-review.googlesource.com/c/80522
Reviewed-by: Zach Anderson <zra@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-10-22 18:03:20 +00:00
Zach Anderson e9b8e24891 [vm] Adds mutator thread asserts around bytecode reading
Change-Id: If5ee92e69f04da8c22983ccdb3d6d9006a2010a5
Reviewed-on: https://dart-review.googlesource.com/c/80562
Commit-Queue: Zach Anderson <zra@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-10-19 02:46:02 +00:00
Alexander Markov b10a36b8df [vm] Set WasCompiled at safepoint
Setting WasCompiled on a function after unoptimized compilation in the
background thread could race with other modifications of function tags.

To avoid this potential problem, setting of WasCompiled is moved to
FinalizeCompilation which is called at safepoint.

This is a possible fix for flaky assertion failure
../../runtime/vm/compiler/jit/compiler.cc: 901: error: expected: !optimized || function.WasCompiled()
on dartkb/debug bots.

Change-Id: Ia38ddf892438be3314e181cd77c8f8d6cf69978d
Reviewed-on: https://dart-review.googlesource.com/c/80381
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-10-17 16:53:37 +00:00
Martin Kustermann 8300248edb [VM] Ensure inferred types are set on parameters
Now parameter instructions are part of FunctionEntry/OsrEntry/CatchEntry
instead of GraphEntry.

Change-Id: I27338aaf1d2a9cc3ca61a3817bbb929d0ea6627c
Reviewed-on: https://dart-review.googlesource.com/c/80201
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-10-16 16:09:48 +00:00
Samir Jindel ab253a8a4e Review comments for "[vm/aot] Fix regressions from dynamic invocation forwarders in AOT."
Change-Id: I2ccf7db37e2b113404f839cf6ba4ad3ce6043671
Reviewed-on: https://dart-review.googlesource.com/c/80221
Reviewed-by: Samir Jindel <sjindel@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-10-16 14:10:52 +00:00
Samir Jindel af00f7c05d [vm/aot] Fix regressions from dynamic invocation forwarders in AOT.
Velocity tracker is improved by 2.1%.
Flutter gallery code size is regressed by 0.9%

Golem benchmarks are a wash, because they use dynamic calls very aggressively in ways
uncharacteristic of Dart 2 code.

Change-Id: Id9e248f7c15ea6a8f69be2a4bbc0e4fc64a8c188
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/c/79242
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-10-16 13:23:15 +00:00
Martin Kustermann 349adc5b1f Reland "[VM] Use c++/kernel2kernel constant evaluator for const StaticInvocation in the kernel IR"
Fixes https://github.com/dart-lang/sdk/issues/34770

Change-Id: I55b02e6ce327f4a08d96612fea44f7b03bddcbb5
Reviewed-on: https://dart-review.googlesource.com/c/79680
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-10-16 11:22:56 +00:00
Martin Kustermann 06f9a9e354 [VM] Introduce function and osr entrypoints to the VM's IR
Similar to how we treat catch entry instructions, this cl adds new
function and osr entry instructions. The [FunctionEntry] and
[OsrEntry] - just like [CatchBlockEntry] - have now their own initial
definitions. The [GraphEntry] has only initial definitions for
constants.

Explicit phis are inserted for all parameter / special parameter
instructions if necessary.

Future work is:

  a) Minimize parallel moves due to the phis on parameters
  b) Cleanup frame setup: Move it entirely into FunctionEntry/CatchEntry
    (instead of the split version we have now)

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

Change-Id: Iefa0280a709716f748d6fb0523b8d0f4d8de1fec
Reviewed-on: https://dart-review.googlesource.com/c/74782
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-10-15 13:02:51 +00:00
Siva Annamalai aabc26bafe Revert "[VM] Use c++/kernel2kernel constant evaluator for const StaticInvocation in the kernel IR"
This reverts commit 29ff9e4a6a.

Reason for revert: We seem to be seeing a number of dartkp failures after this commit.

Original change's description:
> [VM] Use c++/kernel2kernel constant evaluator for const StaticInvocation in the kernel IR
> 
> Fixes https://github.com/dart-lang/sdk/issues/34770
> 
> Change-Id: Ie0a3ea82992d70bfce04dcd8986b62f3e1dd5962
> Reviewed-on: https://dart-review.googlesource.com/c/79581
> Commit-Queue: Martin Kustermann <kustermann@google.com>
> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>

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

Change-Id: Ib3f67e869e6bfa87161f7c580b0142d676e5a631
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/79467
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2018-10-12 19:34:27 +00:00
Aart Bik 5b6220d44d [vm/compiler] Start of loop framework
Rationale:
Started a more structured implementation of detecting
loops and the loop hierarchy in the Dart flow graph.
This new framework can replace some of the more ad-hoc
approach taken now, as already started in this CL, and
also forms a foundation for more optimizations later.

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

Change-Id: I75130cb6863324910e3d068e4f2628c25fdf880c
Reviewed-on: https://dart-review.googlesource.com/c/79147
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-10-12 16:54:40 +00:00
Martin Kustermann 29ff9e4a6a [VM] Use c++/kernel2kernel constant evaluator for const StaticInvocation in the kernel IR
Fixes https://github.com/dart-lang/sdk/issues/34770

Change-Id: Ie0a3ea82992d70bfce04dcd8986b62f3e1dd5962
Reviewed-on: https://dart-review.googlesource.com/c/79581
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-10-12 16:08:46 +00:00
Zach Anderson 47c55605b8 Reland: [vm] Add a library and class cache to KernelProgramInfo
Relands with locks to protect the caches.

Original message:
Also create fewer handles in the KernelLoader.

GenKernelKernelReadAllBytecode improves a further
15-20% after removing the timeline event argument
in the bytecode reader.

Change-Id: I6d796986a7773938e528271033385465e4f13468
Reviewed-on: https://dart-review.googlesource.com/c/79380
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-10-12 14:54:48 +00:00
Alexander Markov 6b67cd784b [vm] Make UBSAN happy for the code in Range::BitwiseOp
Change-Id: I3f3ca03a0930f9feac1e7e94cdb5c50ece8d7856
Reviewed-on: https://dart-review.googlesource.com/c/79420
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2018-10-11 20:02:53 +00:00
Alexander Markov 97ffcd9a3d [vm] Disable incorrect widening of smis to int32
The optimization of widening smi operations to int32 does not account
for uses which depend on the range of operation (e.g. BinarySmiOp
which uses the result of widened operation becomes incorrect).

Closes https://github.com/dart-lang/sdk/issues/32619

Change-Id: Ia419c7bbec93679a5cdd1d16ffa3f51824fc08bb
Reviewed-on: https://dart-review.googlesource.com/c/47661
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-10-11 18:13:42 +00:00
Zach Anderson 58c90dc488 [vm] Fix bytecode in core-jit for simarm64
simarm64 doesn't support --enable_interpreter, so we need
another way to get bytecode into the core-jit snapshot.
For this it makes sense to use --use_bytecode_compiler
since we'll need to switch to the bytecode-only pipeline
at some point anyway.

Change-Id: I761acd0439663cb488c3d2143cbaa8f96f9a0a4b
Reviewed-on: https://dart-review.googlesource.com/c/79180
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-10-11 17:59:15 +00:00
Alexander Markov 3cf0008b13 [vm/bytecode] Remove dependencies on ASTs when running with bytecode
Also, enable dropping ASTs from kernel files when testing in dartkb mode.

Change-Id: Iec82f1b76e3b8a9eb692de325d7645d8f271e03e
Reviewed-on: https://dart-review.googlesource.com/c/79087
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
2018-10-11 15:11:26 +00:00
Martin Kustermann f0a30bc8d1 Revert "[vm] Add a library and class cache to KernelProgramInfo"
This reverts commit b99bcfd309.

Reason for revert: Causes flaky crashes.

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


Original change's description:
> [vm] Add a library and class cache to KernelProgramInfo
> 
> Also create fewer handles in the KernelLoader.
> 
> GenKernelKernelReadAllBytecode improves a further
> 15-20% after removing the timeline event argument
> in the bytecode reader.
> 
> Change-Id: Ida7e74129ccb4c997bb74e7bb51cdae053587254
> Reviewed-on: https://dart-review.googlesource.com/c/78710
> Commit-Queue: Zach Anderson <zra@google.com>
> Reviewed-by: Alexander Markov <alexmarkov@google.com>
> Reviewed-by: Siva Annamalai <asiva@google.com>

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

Change-Id: I13f118862764ebc7d8d36b482b11082348b80f39
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/79204
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-10-11 09:21:15 +00:00
Ryan Macnak 235a918233 [vm] Remove Dart_LoadScript, Dart_LoadLibrary, Dart_LoadSource, etc.
Change-Id: I9c19625702f1df48c03de2eb3a0f7bb581d2e0b3
Reviewed-on: https://dart-review.googlesource.com/c/79140
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2018-10-11 00:38:37 +00:00
Ryan Macnak 662ff7f112 [vm] Remove TokenStream, TokenValue, CompilerStats.
(CompilerStats timers have been replaced with the timeline events.)

Change-Id: Iddcb752c085de9762eb802371b6d2905fa608a76
Reviewed-on: https://dart-review.googlesource.com/c/79086
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2018-10-10 21:39:45 +00:00
asiva a933f42b9e [VM] Use Symbols::Empty() when there is no source for a script instead of creating new empty string objects.
Change-Id: I8ec6702557b07c4c4ede2aece5a3f25b4cde1a5b
Reviewed-on: https://dart-review.googlesource.com/c/79060
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2018-10-10 21:25:46 +00:00
Zach Anderson b99bcfd309 [vm] Add a library and class cache to KernelProgramInfo
Also create fewer handles in the KernelLoader.

GenKernelKernelReadAllBytecode improves a further
15-20% after removing the timeline event argument
in the bytecode reader.

Change-Id: Ida7e74129ccb4c997bb74e7bb51cdae053587254
Reviewed-on: https://dart-review.googlesource.com/c/78710
Commit-Queue: Zach Anderson <zra@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2018-10-10 20:19:14 +00:00
Ryan Macnak b8760fed67 [vm, compiler] Remove ASTs and AST flow graph builder.
Change-Id: I4d3c6500577d5285ced327954040dab42ba92341
Reviewed-on: https://dart-review.googlesource.com/c/78823
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2018-10-10 18:00:21 +00:00
Martin Kustermann 16ddfc1565 [VM] Use assert assignable implementation for explicit downcasts
This makes explicit downcasts more efficient by re-using the
optimizations we already have for implicit downcasts.

For implicit/explicit as checks we use the symbol to distinguish which
exception to throw if the check fails.  So this does not actually
require unification of _CastError and _TypeError.

Issue https://github.com/dart-lang/sdk/issues/34582
Issue https://github.com/dart-lang/sdk/issues/30632
Issue https://github.com/dart-lang/sdk/issues/30571

Change-Id: I7b8818d2698e249c90a3e1b8790bad69ada649a9
Reviewed-on: https://dart-review.googlesource.com/c/78748
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-10-10 12:36:42 +00:00
asiva 32c484bb71 [VM] Fix typo in BitTestImmediate unit test.
Change-Id: Id2dc17e0df20a17c3f37dbf7640f21250b72c88a
Reviewed-on: https://dart-review.googlesource.com/c/78861
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2018-10-09 18:22:40 +00:00
Ryan Macnak 7f55e52888 [vm, x64] Use short forms for object pool loads.
We now patch object pool entries instead of pool load indices.

dart2js release
AOT X64 Instructions(CodeSize): 10171808 -> 9567168 (-5.94%)
JIT X64 Instructions(CodeSize): 14298624 -> 13163968 (-7.94%)

Bug: https://github.com/dart-lang/sdk/issues/29077
Change-Id: I84938a5717b79d65e941141539d7f82e02c89858
Reviewed-on: https://dart-review.googlesource.com/c/78185
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
2018-10-09 17:30:25 +00:00
Samir Jindel a66cae48fc [vm/aot] Dynamic invocation forwarders in AOT.
Significant improvements to several benchmarks, including Tracer, Sudoku and DeltaBlue,
see internal dashboard for details.

Flutter Gallery code size +0.7%.

Change-Id: I5df30bbfdd83a54e739ef6b64044141a80688d75
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/c/77805
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-10-09 17:23:43 +00:00
Aart Bik ce08911515 [vm/compiler] Minor improvements to loop detection
Rationale:
(1) reset loop_info of block entries,
    since recomputing on a modified graph
    may encounter blocks that are no longer headers
(2) replaced O(n) linear scan over loop headers just
    to test membership of the current block with
    an O(1) test
(3) added some comments

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

Change-Id: I9e24a76bac9cf0225d8f1c996adfa6d82c175504
Reviewed-on: https://dart-review.googlesource.com/c/78703
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-10-09 16:07:24 +00:00
Alexander Markov 4486bf5f6b [vm/bytecode] Fix return value for several BigInt intrinsics
If these intrinsics are called from interpreter and return garbage,
the interpreter might crash in Interpreter::InvokeCompiled while
inspecting the result.

Also, this CL contains a fix for the slow path of Int64 box
allocation in the interpreter.

Change-Id: I27143d38ed39fdc234520c57e85bff066cc8cde3
Reviewed-on: https://dart-review.googlesource.com/c/78187
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
2018-10-08 21:38:48 +00:00