Commit Graph

2345 Commits

Author SHA1 Message Date
Jens Johansen 164c7e3195 Debugging sync* and yield
Set position on yield in sync* functions; use yield position in VM.

Change-Id: I1c92fd47e3c8d4f747242e076007c122ea0d2186
Reviewed-on: https://dart-review.googlesource.com/68366
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2018-08-07 08:39:32 +00:00
Jens Johansen f609258f3f Use the position on as when issuing AssertAssignable for as
E.g. the following program gives a type error, but previously didn't
tell what line had an error. This CL fixes the issue.

```
import "dart:async";

Future<Object> foo() {
  return Future.value("hello");
}

main() async {
  int x = await foo();
}
```

Change-Id: I27ae483b8b7ca63b9efac555a5cbc651296f227a
Reviewed-on: https://dart-review.googlesource.com/68367
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2018-08-07 06:35:28 +00:00
Régis Crelier 35a982ba8f [VM kernel] Add missing type parameter finalization in type reader.
Change-Id: I09ae8dc759a4fb4d98c0c71ddda7d38de3525324
Reviewed-on: https://dart-review.googlesource.com/68431
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2018-08-03 22:40:40 +00:00
Aart Bik bfa890dcd1 [vm/compiler] Various 64-bit operator improvements.
Rationale:
Improves the slow path of 64-bit REM/TRUNCDIV on
X64 and ARM64. Also introduces 64-bit negate operator,
which was needed to expose negative contants
(viz. x / -3 was represented as x / - (3) first).
The negate operator is not recognized in AOT mode yet,
since shifts by out-of-range constants should learn
how to throw rather than deopt....


https://github.com/dart-lang/sdk/issues/33967
https://github.com/flutter/flutter/issues/19677

Change-Id: I7d81c9b1c72d99e8c4018f68c0501c7b599e073f
Reviewed-on: https://dart-review.googlesource.com/68280
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-08-03 19:49:56 +00:00
Samir Jindel 8d3d82ab39 [vm/kernel] Untangle the spaghetti-code in BuildGraphOfFunction and fix bugs.
Also remove Fragment initializer-list constructor.

Bugs:

1. We were always building the body of a constructor even if the initializers
   graph was closed. This would confuse the inliner exit collector which was
   informed about return instructions inside the body which were never linked
   into the graph.

2. We were not checking for stack overflow on each call to an sync-yielding
   closure; only on the first call.

3. Not a behavioral bug, but the prologue flow graph is no longer built out of
   order (dartbug.com/29737).

Change-Id: I467fbf171fd627492bf01cd96d6353c57e143eaa
Reviewed-on: https://dart-review.googlesource.com/67561
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-08-03 16:32:02 +00:00
Dmitry Stefantsov 637e55d4be [kernel] Add VariableDeclarations to represent formals of Typedefs
Change-Id: Ic1575dadb4fcf644dfdeb436612e2bed72d41a03
Reviewed-on: https://dart-review.googlesource.com/68083
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Dmitry Stefantsov <dmitryas@google.com>
2018-08-03 12:28:11 +00:00
Alexander Markov 4ab8408e00 [vm/kernel/bytecode] Support partial tear-off instantiation constants in bytecode generator and bytecode reader
Change-Id: I24855274df292903646844bb56ece0c35a62e9ef
Reviewed-on: https://dart-review.googlesource.com/68300
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-08-02 23:32:43 +00:00
Aart Bik 206f955c43 [vm/compiler] Non-speculative ARM64 long division/remainder.
Rationale:
Having a non-speculative implementation avoids deopting
under JIT and enables AOT. Done for X64 and now also ARM64.

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

Change-Id: I83302a5950aa2dc1a7220367755af748cfaa4393
Reviewed-on: https://dart-review.googlesource.com/67920
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-08-02 15:50:26 +00:00
Vyacheslav Egorov c5f933fdf7 [vm/lib] String._identityHashCode should be the same as String.get:hashCode
On 64-bit platforms we use a field in the header to cache results of
Object.get:_identityHashCode. The very same field is also used to
cache String.get:hashCode result. Which means that their implementations
must be the same.

Fixes https://github.com/flutter/flutter/issues/20122

Change-Id: I98eef9eddf833c0d7c4c6f452728fe48e232efdc
Reviewed-on: https://dart-review.googlesource.com/68042
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-08-02 11:24:25 +00:00
Vyacheslav Egorov 4fa139b4b8 [vm/compiler] Rework how logical expressions are compiled to IL.
When logical expression is evaluated in the control context (e.g. if (cond) { ... })
avoid materializing a boolean value and then dispatching on it. Instead connect
true and false successors directly to then and else branches.

This CL also improves IL generated when logical expression is evaluated for value
(e.g. x = (cond)): we similarly avoid materializing intermediate results and also
avoid comparisons that are not needed, e.g. when evaluating x = A && B we construct
graph x = A ? B : false, instead of x = A ? (B == true ? true : false) : false style
of graph.

Change-Id: I204d414cc6751949641b6c46423a6319f6e2d89b
Reviewed-on: https://dart-review.googlesource.com/67562
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-08-02 10:51:53 +00:00
Jens Johansen ac8fdb5a58 Add :controller_stream and call _asyncStarListenHelper
This changes how we step out of async* functions slightly to match how
Dart1 behaves.

Bug: #29158

Change-Id: I8ee2df5eee8167fd1907a6e9f30c9dc7ab6939b1
Reviewed-on: https://dart-review.googlesource.com/63625
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-08-02 06:49:47 +00:00
Alexander Markov c5ac5c0a2c [vm/kernel/bytecode] Fix serialization of closures with type arguments
Before this change, ConstantClosureFunction was holding a clone of original
FunctionNode without body (in order to omit body during serialization).
It is not correct: original FunctionNode, which is used to generate
closure's bytecode may reference original type parameters and those
type parameters could be used in types written into constant pool.
A cloned FunctionNode has its own cloned copies of type parameters
and it does not provide a sufficient serialization/deserialization context.
This resulted in 'Type parameter T is not indexed' errors.

This CL fixes this problem by removing cloning. In order to avoid
serialization of the FunctionNode body, body is temporarily dropped
while writing ConstantClosureFunction.

Also, this CL fixes type finalization of signature types of closure functions
read from bytecode. If signature type is not finalized, VM crashes with
'../../runtime/vm/object.cc: 18580: error: expected: IsFinalized()'.

Change-Id: Id88e99609ee387352fc011a8c297024d05e24037
Reviewed-on: https://dart-review.googlesource.com/67960
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-08-02 00:12:14 +00:00
Alexander Markov ff0327be67 [vm] Streamline passing of ICData through compilation pipeline
After this change, ICData map is always unpacked in CompileParsedFunctionHelper::Compile
regardless of the optimizing mode. The unpacked ICData array is passed
both to FlowGraphBuilder and to FlowGraphCompiler.

FlowGraphCompiler::FlowGraphCompiler no longer unpacks ICData array, and
the duplicated code for unpacking of ICData map is replaced with debug asserts.
Change-Id: Ib6864acdb6bcd02fe7acd1cb5bcf70d6c69808af
Reviewed-on: https://dart-review.googlesource.com/67505
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-08-02 00:00:59 +00:00
Aart Bik 8bad5c7b29 [vm/compiler] Non-speculative X64 long division/remainder.
Rationale:
Having a non-speculative implementation avoids deopting
under JIT and enables AOT.

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

Change-Id: Ib38200502f5a8f63912ff5d7a808ea6e27f9001d
Reviewed-on: https://dart-review.googlesource.com/67502
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-08-01 00:13:55 +00:00
Alexander Markov 07c462b471 [vm] Refactoring: extract BaseFlowGraphBuilder to a separate file
Also, a few methods (needed for bytecode compiler) moved from
FlowGraphBuilder to BaseFlowGraphBuilder

Change-Id: Ibee87e6d5fdc8143786fd41763a9fd4897d06cba
Reviewed-on: https://dart-review.googlesource.com/67504
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-07-31 16:53:14 +00:00
Ben Konyi 079bebb78b [ VM ] Added missing token position for assert statements
Fixes #33610

Change-Id: I9e7a286d63f051686a196134d49a100364f81fb9
Reviewed-on: https://dart-review.googlesource.com/67620
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2018-07-31 16:17:04 +00:00
Régis Crelier a98feb0f01 [VM interpreter] Fix exception handling.
Convert bytecode indices to pc offsets when reading bytecode exception tables.
Print pc descriptors and exception handlers in bytecode disassembly.
Propagate unhandled exceptions after calling interpreter.

Change-Id: Idb3b5459165ab0a124877452b1d9865d27c06d56
Reviewed-on: https://dart-review.googlesource.com/67501
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2018-07-30 23:31:07 +00:00
Vyacheslav Egorov 24158b773d [vm/compiler] Do not LICM LoadStaticField for uninitialized fields.
We permit CSE for loads from final static fields because - however we should
not be permitting LICM for such loads unless field is already initialized.

This bug was only affecting programs running from app-jit snapshots because
under normal circumstances a static get would not be inlined.

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

Bug: 34016
Change-Id: I48f30013d1541d14812b8e17b6dd75037945227d
Reviewed-on: https://dart-review.googlesource.com/67322
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-07-30 12:29:35 +00:00
Vyacheslav Egorov 68bfaf3ac3 [vm/compiler] Avoid crashes when canonicalizing unreachable AssertAssignable.
Our IL graphs can contain portions that can not be reached due to execution
and all optimizations need to take that into account.

In this particular case AssertAssignable::Canonicalize should have taken
into account that constant instantiator type arguments might not necessarily
correspond to the correct class - because AssertAssignable is on the
path that will never be reached during execution.

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

Bug: http://dartbug.com/33999
Change-Id: Ia151a3902b2bc7f0f8d4aa6dcdb302fe6b1d626d
Reviewed-on: https://dart-review.googlesource.com/67321
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-07-30 11:57:55 +00:00
Martin Kustermann 6e81d74fcc [VM] Optimize generation of type testing stubs in JIT mode.
This CL introduces, similar to RawClass::direct_subclasses_, a
RawClass::direct_implementors field which is kept up-to-date.

The generation of type testing stubs uses this cached
reverse-relationship information for faster cid-range calculation (time
spent in type testing stub generation is decreased by an order of
magnitude).

This CL also enable type testing stubs for any instantiated type.

This seems to improve

  * analysis-server-cold-analysis by 6%
  * analysis-server-warm-analysis by 11%

as well as other non-analysis benchmarks in JIT mode.

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

Change-Id: If01ee06ac08251b2ed27f79d6b82ad7354c8336e
Reviewed-on: https://dart-review.googlesource.com/66576
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-07-28 20:22:05 +00:00
Ben Konyi 08f59e5de3 These changes are causing a segfault in DartEntry::InvokeFunction in dart_entry.cc in Flutter,
which was blocking the Dart SDK roll.

Revert "Take 3 for "[vm/kernel/precomp] Remove procedures from entry points files.""

This reverts commit 567109df7f.

Revert "[vm/precomp] Extend @pragma entry-points to classes."

This reverts commit 232698047c.

Change-Id: Ib63d1afb8a1c978be7ddf282af0e7d5547111cc3
Reviewed-on: https://dart-review.googlesource.com/67300
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-28 00:01:50 +00:00
Samir Jindel 01e69cc0c4 Take 3 for "[vm] Factor out more of the slow-path of the store barrier into the stubs."
There is no difference from the previous version of this CL.

This depends on https://dart-review.googlesource.com/c/sdk/+/67220/3 which fixes a bug
in `CompileType` that was causing `ShouldEmitStoreBarrier()` to return different results
across multiple calls on the same instruction.

The buildbot on which this caused a failure is run as a tryjob below.

Change-Id: I078b587f7e23e88d95f3b05c966019a433ba57d9
Reviewed-on: https://dart-review.googlesource.com/67221
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-27 18:51:20 +00:00
Samir Jindel 5c10a8328c [vm] Fix bug with cid_ caching in CompileType.
Test Plan:

Previously this caused the following assert to fail in
`StoreInstanceFieldInstr::MakeLocationSummary` on some tests:

```
ASSERT(ShouldEmitStoreBarrier() == ShouldEmitStoreBarrier())
```

I've confirmed that the assert now succeeds.

Change-Id: I5efb1d89ab1685c136d1947ae01ccb21136061a5
Reviewed-on: https://dart-review.googlesource.com/67220
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-07-27 18:23:49 +00:00
Alexander Markov cb70de8afa [vm/compiler] Fix negated integer comparisons in AOT
Fixes https://github.com/flutter/flutter/issues/19612

Change-Id: I5cf45b7243e4c2b50bb29f8b0f3dafc55a1f1838
Reviewed-on: https://dart-review.googlesource.com/67040
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-07-27 17:35:58 +00:00
Aart Bik 502b4ffea5 [vm/compiler] Non-speculative ARM long multiplication.
Rationale:
The former speculative long multiplication on 32-bit
achitectures is no longer necessary with 64-bit
arithmetic wrap-around semantics. Having a non-speculative
implementation avoids deopting under JIT and enables AOT.

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

Change-Id: I3543e5ed63e443aa21c1af84499e46c07880d462
Reviewed-on: https://dart-review.googlesource.com/67084
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-07-27 16:05:55 +00:00
Samir Jindel 9686636f6b Revert "Re-land "[vm] Factor out more of the slow-path of the store barrier into the stubs.""
This reverts commit 79ed0553e9.

Reason for revert: Issue with register allocator on SIMARM.

Original change's description:
> Re-land "[vm] Factor out more of the slow-path of the store barrier into the stubs."
> 
> When compiling instrinsic graphs on ARM and ARM64 we need to save LR when emitting
> the store barrier because the intrinsics don't have frames and won't restore it before
> returning.
> 
> Original revision is in Patchset 1.
> 
> Change-Id: I58cee3941c82efa22bd6ddbd00e00c489de53898
> Cq-Include-Trybots: luci.dart.try: vm-kernel-optcounter-threshold-linux-release-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try
> Reviewed-on: https://dart-review.googlesource.com/66382
> Commit-Queue: Samir Jindel <sjindel@google.com>
> Reviewed-by: Alexander Markov <alexmarkov@google.com>

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

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

Change-Id: If8f8bc1a508f300ab83b03a0be7e0c318e5f99fe
Cq-Include-Trybots: luci.dart.try: vm-kernel-optcounter-threshold-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-release-simarm-try, vm-kernel-precomp-linux-release-simarm64-try, vm-kernel-precomp-linux-release-x64-try, vm-kernel-precomp-win-release-x64-try, vm-kernel-linux-release-simarm-try, vm-kernel-linux-release-simarm64-try
Reviewed-on: https://dart-review.googlesource.com/67140
Reviewed-by: Samir Jindel <sjindel@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-07-27 15:01:44 +00:00
Aart Bik 8edd2d5eb0 [vm/compiler] Non-speculative IA32 long multiplication.
Rationale:
The former speculative long multiplication on 32-bit
achitectures is no longer necessary with 64-bit
arithmetic wrap-around semantics. Having a non-speculative
implementation avoids deopting under JIT and enables AOT.

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

Change-Id: Iedd641304b10d2bf55fc1f283eccdba4a836423c
Reviewed-on: https://dart-review.googlesource.com/66942
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-26 23:51:46 +00:00
Samir Jindel 232698047c [vm/precomp] Extend @pragma entry-points to classes.
Change-Id: I2233dd7552334b02f3c90f78163c1b5bdc159117
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/65702
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-26 17:45:26 +00:00
Samir Jindel 567109df7f Take 3 for "[vm/kernel/precomp] Remove procedures from entry points files."
I've updated the transformer test. The Windows build error appears to have been spurious.

Take 2 is in patchset 1.

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
Change-Id: I6ef8f70aaf4664e0411e776463e88c2a1068dbcc
Reviewed-on: https://dart-review.googlesource.com/65902
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-26 16:24:59 +00:00
Samir Jindel cf0a70e531 [vm] Remove unused NSM-forwarder bit.
The need for VM support for NSM forwarders was replaced by an elaboration in
the Kernel FE.

Change-Id: Ic9c0ecee47c7e7147c8055503956fc2550c7c224
Reviewed-on: https://dart-review.googlesource.com/66569
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-07-25 21:37:35 +00:00
Samir Jindel 79ed0553e9 Re-land "[vm] Factor out more of the slow-path of the store barrier into the stubs."
When compiling instrinsic graphs on ARM and ARM64 we need to save LR when emitting
the store barrier because the intrinsics don't have frames and won't restore it before
returning.

Original revision is in Patchset 1.

Change-Id: I58cee3941c82efa22bd6ddbd00e00c489de53898
Cq-Include-Trybots: luci.dart.try: vm-kernel-optcounter-threshold-linux-release-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-precomp-linux-release-simarm64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try
Reviewed-on: https://dart-review.googlesource.com/66382
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-25 14:11:05 +00:00
Aart Bik e7c98d4439 [vm/compiler] Refined type analysis for check class.
Rationale:
Existence check on receiver cid in ICData was a bit
too convervative. Both receiver cid as well as owner
need to be checked for better results. Note that in
the long run, a better interaction with codegen
would be desirable.

Bug: https://github.com/dart-lang/sdk/issues/33664
Change-Id: I1bcbb76e0fa0f0d9be8fa4b7345b8c7e38d8d4fb
Reviewed-on: https://dart-review.googlesource.com/66300
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-07-24 02:16:22 +00:00
Alexander Markov 2eba6faa30 Revert "[vm] Factor out more of the slow-path of the store barrier into the stubs."
This reverts commit b3e289a95e.

Reason for revert: multiple failures on *-simarm, *-simarm64 and vm-precomp-android-release-2-3-be bots.

Original change's description:
> [vm] Factor out more of the slow-path of the store barrier into the stubs.
> 
> This delivers a 2.1% code size reduction on Flutter Gallery, and roughly 1.6% speed
> improvement on dart2js(dart2js).
> 
> Cq-Include-Trybots: luci.dart.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
> Change-Id: I2d2ceca8707d5e6fba79c558624d611f9e17d21a
> Reviewed-on: https://dart-review.googlesource.com/65060
> Commit-Queue: Samir Jindel <sjindel@google.com>
> Reviewed-by: Alexander Markov <alexmarkov@google.com>

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

Change-Id: Iae83a5108d56cbd30e5727217b5ee043449f82ff
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Cq-Include-Trybots: luci.dart.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/66360
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-07-24 00:44:01 +00:00
Samir Jindel b3e289a95e [vm] Factor out more of the slow-path of the store barrier into the stubs.
This delivers a 2.1% code size reduction on Flutter Gallery, and roughly 1.6% speed
improvement on dart2js(dart2js).

Cq-Include-Trybots: luci.dart.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
Change-Id: I2d2ceca8707d5e6fba79c558624d611f9e17d21a
Reviewed-on: https://dart-review.googlesource.com/65060
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-23 22:07:39 +00:00
Aart Bik c76e071b79 [vm/compiler] Improved integer power specialized inlining.
Rationale:
"Inlines" special cases of int pow() in strong mode
(viz. x^y for either small constant x or y).

History: revert^2 of
https://dart-review.googlesource.com/c/sdk/+/65576
https://dart-review.googlesource.com/c/sdk/+/66041

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

Change-Id: I779e18432a28e82db739cef77d6e6b82148eb70a
Reviewed-on: https://dart-review.googlesource.com/66120
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-22 20:59:48 +00:00
Aart Bik ac73b8e198 [vm/compiler] Improved type analysis for check class.
Rationale:
Improves the analysis if instance calls need checks
(check class or check null) combined with CHA.

History: revert^2 of original
https://dart-review.googlesource.com/c/sdk/+/65220
https://dart-review.googlesource.com/c/sdk/+/64440

Bug: https://github.com/dart-lang/sdk/issues/33664
Change-Id: I21ea857b68ba136d2bd4c9714ab557401ae7c7b8
Reviewed-on: https://dart-review.googlesource.com/66023
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-07-20 23:26:45 +00:00
Aart Bik 9791508d90 Revert "[vm/compiler] Improved integer power specialized inlining."
This reverts commit cadc4c33ca.

Reason for revert: simarm is not happy with power, even without the opt

Original change's description:
> [vm/compiler] Improved integer power specialized inlining.
> 
> Rationale:
> "Inlines" special cases of int pow() in strong mode
> (viz. x^y for either small constant x or y).
> 
> https://github.com/dart-lang/sdk/issues/33861
> 
> Change-Id: I2e52784f82e39bb0ce33733aef70cbc56f27e451
> Reviewed-on: https://dart-review.googlesource.com/65576
> Commit-Queue: Aart Bik <ajcbik@google.com>
> Reviewed-by: Alexander Markov <alexmarkov@google.com>

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

Change-Id: I33daaf15fe7b7cac53ec5eeff76e867ee31d2451
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/66041
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-07-20 23:24:46 +00:00
Aart Bik a3ec4fec1d [vm/compiler] Bug fix on background to foreground passing.
Rationale:
Fixes a bug when JIT compiler sets is_background_optimizable
to false on a function to ensure it is no longer compiled on
the background but on the foreground. Before background
thread would directly put it back on its own queue which,
in some cases, could cause a compilation retry storm.

The new code correctly removes it from the queue so
that, with the higher usage count, the foreground thread
will soon pick it up.


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

Change-Id: I6e6041f571c2b32b13911c3b46b8688625d0834e
Reviewed-on: https://dart-review.googlesource.com/66000
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2018-07-20 21:29:06 +00:00
Alexander Markov 6bc1cdb5b1 [vm] Add unsafe mode to VM
This CL adds experimental --experimental-unsafe-mode-use-at-your-own-risk
VM option which does the following:
* Dart 2 strong mode type and bool checks are omitted.
* VM compiler optimizations which rely on strong mode types are disabled.

Applications which do not fail any strong mode checks at run time
should behave exactly the same in strong and weak modes.
Applications with failing strong mode checks will not see corresponding
errors but VM should not crash.

This option can be used for experiments, or as a temporary remedy for
regressions caused by expensive strong mode type checks.

Change-Id: I042cbccba83c105b61b3e11c659a35c20e0329cd
Reviewed-on: https://dart-review.googlesource.com/65484
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-07-20 20:31:19 +00:00
Aart Bik cadc4c33ca [vm/compiler] Improved integer power specialized inlining.
Rationale:
"Inlines" special cases of int pow() in strong mode
(viz. x^y for either small constant x or y).

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

Change-Id: I2e52784f82e39bb0ce33733aef70cbc56f27e451
Reviewed-on: https://dart-review.googlesource.com/65576
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-20 20:14:28 +00:00
Samir Jindel 98356d3ed8 Revert "Re-land "[vm/kernel/precomp] Remove procedures from entry points files.""
This reverts commit a437b4b469.

Reason for revert: Build on Windows appears broken.

Original change's description:
> Re-land "[vm/kernel/precomp] Remove procedures from entry points files."
> 
> The original revision is in Patchset 1.
> 
> Due to idiosyncrasies of the legacy VM parser, we need to put the @pragma definition
> on both the original and patched definition. Hopefully we can remove these extra definitions
> once Dart 1 AOT is fully obsolete.
> 
> Cq-Include-Trybots: luci.dart.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
> Change-Id: I2515dee2bbf14cece5e75450b1951d45f1250959
> Reviewed-on: https://dart-review.googlesource.com/65545
> Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
> Reviewed-by: Alexander Markov <alexmarkov@google.com>
> Commit-Queue: Samir Jindel <sjindel@google.com>

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

Change-Id: I783dcd6f00d1f31907d90651ffbf80a6af1fb98d
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Cq-Include-Trybots: luci.dart.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/65960
Reviewed-by: Samir Jindel <sjindel@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-07-20 16:57:30 +00:00
Samir Jindel a437b4b469 Re-land "[vm/kernel/precomp] Remove procedures from entry points files."
The original revision is in Patchset 1.

Due to idiosyncrasies of the legacy VM parser, we need to put the @pragma definition
on both the original and patched definition. Hopefully we can remove these extra definitions
once Dart 1 AOT is fully obsolete.

Cq-Include-Trybots: luci.dart.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
Change-Id: I2515dee2bbf14cece5e75450b1951d45f1250959
Reviewed-on: https://dart-review.googlesource.com/65545
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-07-20 14:19:33 +00:00
Samir Jindel 17cca798e5 Revert "[vm/kernel/precomp] Remove procedures from entry points files."
This reverts commit 91dcf654a4.

Reason for revert: Many failures across Dart 1 precompiler bots.

Original change's description:
> [vm/kernel/precomp] Remove procedures from entry points files.
> 
> entry_points_extra_standalone.json is completely removed.
> 
> Cq-Include-Trybots: luci.dart.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
> Change-Id: Ia4fb18aebbb09752e3795cda3a9c66f9c502b23a
> Reviewed-on: https://dart-review.googlesource.com/65325
> Commit-Queue: Samir Jindel <sjindel@google.com>
> Reviewed-by: Alexander Markov <alexmarkov@google.com>

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

Change-Id: I0df74807fcc8e8fa75a45a411ddf23e385cfc8d5
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Cq-Include-Trybots: luci.dart.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/65580
Reviewed-by: Samir Jindel <sjindel@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-07-18 16:10:21 +00:00
Samir Jindel 91dcf654a4 [vm/kernel/precomp] Remove procedures from entry points files.
entry_points_extra_standalone.json is completely removed.

Cq-Include-Trybots: luci.dart.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
Change-Id: Ia4fb18aebbb09752e3795cda3a9c66f9c502b23a
Reviewed-on: https://dart-review.googlesource.com/65325
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-18 15:22:41 +00:00
Samir Jindel c1df0d4c10 [vm] Very basic store barrier elimination.
If the left-hand side of the store is an allocation and no GC-triggering
instructions have been executed since, it is safe to elide the store barrier.

This gives a 1.4% code size reduction on Flutter Gallery ARM32.

Change-Id: Ib7227d3ef9d798d5e30f238f3f789f9a2e637d6a
Cq-Include-Trybots: luci.dart.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/64687
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2018-07-17 22:59:28 +00:00
Alexander Markov 253660db21 [vm/kernel/bytecode] Support corner cases of super calls in bytecode generator
* Super tear-offs: 'super.foo' where foo() is a method.
* Super calls of abstract members (useful with super-mixins).

Change-Id: I373b11c9773c7535e703cdc4e1bb9e632eef8dd2
Reviewed-on: https://dart-review.googlesource.com/64980
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-07-17 20:23:50 +00:00
Aart Bik 19002bf094 [vm/compiler] Improve AOT decision on speculation.
Rationale:
The previous change to avoid speculation altogether
in AOT strong mode (to improve typed data performance)
was a bit too conservative. We only need to avoid
speculation that introduces deopting checks, not ones
with a fast/slow path where the fast path is very likely.
In the long run, better analysis may help even more.

Performance impact (restores prior drop):
Meteor                 +40%
JsonParseCustomReviver + 6%

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

Change-Id: I1735d8e642285cb2df538fc49468cf64a99d7f72
Reviewed-on: https://dart-review.googlesource.com/65383
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-07-17 18:22:12 +00:00
Alexander Markov 8245707b4c [vm] Refactoring: remove misuses of StreamingFlowGraphBuilder
In certain cases StreamingFlowGraphBuilder was used not for building
flow graph, but as an advanced kernel reader. This CL extracts all such
functionality from StreamingFlowGraphBuilder and revises all such uses.

StreamingFlowGraphBuilder constructors without FlowGraphBuilder are
removed. After this CL StreamingFlowGraphBuilder is only used to build
flow graph, as intended.

Change-Id: I69b08e24d37f8f2f336bee85334af11be1639b24
Reviewed-on: https://dart-review.googlesource.com/64821
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-07-17 16:36:50 +00:00
Aart Bik 8ed9345ccd Revert "[vm/compiler] Improved type analysis for check class."
This reverts commit 5333dd7f0f.

Reason for revert:

vm-kernel-optcounter-threshold-linux-release-x64
started to timeout on buildbot, see:

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

Original change's description:
> [vm/compiler] Improved type analysis for check class.
> 
> Rationale:
> Improves the analysis if instance calls need checks
> (check class or check null) combined with CHA.
> 
> Bug: https://github.com/dart-lang/sdk/issues/33664
> 
> 
> Change-Id: I0a4761f8816bf5a5aaf5d17ca56d8bf4e3b79fc3
> Reviewed-on: https://dart-review.googlesource.com/64440
> Commit-Queue: Aart Bik <ajcbik@google.com>
> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
> Reviewed-by: Alexander Markov <alexmarkov@google.com>

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

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

Bug: https://github.com/dart-lang/sdk/issues/33664
Change-Id: Iac1e630e55ffbbb0b635c28bbfd5211c2ae6751d
Reviewed-on: https://dart-review.googlesource.com/65220
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-07-16 22:58:53 +00:00
Régis Crelier 9be82b92ab [VM interpreter] Support inline type check of implicit setter value.
Change-Id: I2c357a638308f15d83d284a85623b550395a6f4e
Reviewed-on: https://dart-review.googlesource.com/64825
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-16 20:33:41 +00:00