Commit Graph

2345 Commits

Author SHA1 Message Date
Aart Bik 5333dd7f0f [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>
2018-07-15 03:51:36 +00:00
Vyacheslav Egorov 7da3fe2ca2 [vm/compiler] Inline implicit setters in call specializer in strong mode.
Previously we relegated this to the inliner which interfers with inlining
heuristics.

Additionally avoid emitting assert assignable when specializing assignments
on the receiver.

This improves the following microbenchmark by a factor of 3:

int sumList(List<A> l) {
  var sum = 0;
  for (var obj in l) {  // this would generate AssertAssignable for
    sum += obj.field;   // _ListIterator._current
  }
  return sum;
}

Bug: https://github.com/dart-lang/sdk/issues/33257
Change-Id: Ib2fff8be7c953981bdf5967baf7fcd5f6f648dcf
Reviewed-on: https://dart-review.googlesource.com/64842
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-07-14 11:22:55 +00:00
Ryan Macnak 7ebe83fda1 [vm] Don't need to preserve ICData past the dispatching stubs.
Change-Id: I0752c4d09c836d64c8ef43b4f65b2763a550aee8
Reviewed-on: https://dart-review.googlesource.com/64666
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2018-07-13 23:26:29 +00:00
Alexander Markov 7f8db8d06f [vm] Refactoring: extract constant evaluator and fingerprints helper
This CL continues refactoring aimed at isolating StreamingFlowGraphBuilder.

StreamingFlowGraphBuilder dependency is removed from classes
* StreamingConstantEvaluator (it still depends on FlowGraphBuilder)
* ConstantHelper
* SimpleExpressionConverter
and several methods in object.cc.

StreamingConstantEvaluator and ConstantHelper are moved from
kernel_binary_flowgraph{.h, .cc} to a new source file
constant_evaluator{.h, .cc}. StreamingConstantEvaluator is renamed
to ConstantEvaluator.

KernelFingerprintHelper and KernelSourceFingerprintHelper are moved to
a new source file kernel_fingerprints{.h, .cc}.

Instances of kernel::FlowGraphBuilder no longer contain back reference
to a StreamingFlowGraphBuilder. In order to drop this circular dependency
TranslateFinallyFinalizers() is moved from FlowGraphBuilder to
StreamingFlowGraphBuilder.

Change-Id: Id550d22b3567dea9512328a900935bd6145a8107
Reviewed-on: https://dart-review.googlesource.com/64463
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2018-07-11 21:30:13 +00:00
Alexander Markov e5d31282eb [vm] Support Dart metadata on libraries and library dependencies in Dart 2 mode
Fixes https://github.com/dart-lang/sdk/issues/33774

Change-Id: I0b34cdf2bee099076e29bec6cfb849b0b250f690
Reviewed-on: https://dart-review.googlesource.com/64245
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-07-09 23:58:26 +00:00
Alexander Markov 4aacaeb684 [vm/compiler] Fix handling of exception-throwing instructions in DSE
Fixes https://github.com/dart-lang/sdk/issues/33794

Change-Id: Icf87eb79d5afd15112079964aaba5d0ed41e2476
Reviewed-on: https://dart-review.googlesource.com/64182
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
2018-07-09 21:28:55 +00:00
Jens Johansen d26dba1619 More positions in dart2 constant evaluator
Use positions already available in for instance AsExpressions,
also adds new offsets in the kernel format to
SuperInitializer and RedirectingInitializer.

Bug: #33216
Change-Id: I542967ddc6ec782e6513d62fce038a49239e1622
Reviewed-on: https://dart-review.googlesource.com/63883
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-07-09 07:31:44 +00:00
Alexander Markov 98391f2737 [vm] Refactoring: move StreamingScopeBuilder out of kernel_binary_flowgraph
After previous refactoring, StreamingScopeBuilder no longer depends on
StreamingFlowGraphBuilder.

This CL moves StreamingScopeBuilder to a separate file
vm/compiler/frontend/scope_builder{.h, .cc}.

Also:
* StreamingScopeBuilder is renamed to ScopeBuilder.
* IntMap is moved to hash_map.h.
* Minor cleanup of unused forward declarations and friend classes.
Change-Id: I5e780a53f37935c0a1d563d4fbaec3a92ae13d6a
Reviewed-on: https://dart-review.googlesource.com/63692
Reviewed-by: Zach Anderson <zra@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-07-07 19:00:12 +00:00
Aart Bik e3323ae918 [vm/inliner] Inline typed data on 32-bit archs.
Rationale:
All recent improvements, now for 32-bit too.

Performance:
Many large improvements on micro benchmarks.
Meteor down as expected.


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

Change-Id: Ie9ebcfdfe9c5e265595c95d5e943ae35c5700a97
Reviewed-on: https://dart-review.googlesource.com/63685
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-07-06 16:32:26 +00:00
Alexander Markov 620ab34de6 [vm] Implement reading of parameter annotations from kernel
Fixes https://github.com/dart-lang/sdk/issues/33207

Change-Id: I201d262bb913c342b705a607b0d88ba345e759e0
Reviewed-on: https://dart-review.googlesource.com/63644
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-07-03 23:23:06 +00:00
Alexander Markov f39eaf937c [vm] Refactoring: remove dependency of StreamingScopeBuilder on StreamingFlowGraphBuilder
StreamingScopeBuilder does not build a flow graph, but it was creating
and using StreamingFlowGraphBuilder under the hood (in order to read kernel).

This change makes StreamingScopeBuilder independent of StreamingFlowGraphBuilder
and prepares StreamingScopeBuilder to be moved out of kernel_binary_flowgraph.

Also, several unused classes, fields and parameters are removed.

Change-Id: I40ff983caf0e548529b3c52f44dcb785bd4e9f40
Reviewed-on: https://dart-review.googlesource.com/63305
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-07-03 21:04:06 +00:00
Alexander Markov 8c63d578a6 [vm] Refactoring: move out classes independent of StreamingFlowGraphBuilder
This change continues refactoring to split kernel_binary_flowgraph and
kernel_to_il and move out parts which have no dependencies on flow graph
construction.

Bytecode reading is moved to a separate file bytecode_reader{.h, .cc}.

Metadata helpers, TypeTranslator, ActiveClass and other Active* are moved
to kernel_translation_helper.

Removed dependency of ICData tags on IL Instruction tags, so ICData objects
can be created by bytecode reader without depending on IL.

Unused AlternativeScriptScope is removed.

Change-Id: Ic9f98af82697b48013fb89802076b56833acf55d
Reviewed-on: https://dart-review.googlesource.com/63262
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-07-03 19:02:54 +00:00
Aart Bik fb099b0ce5 [vm/inliner] add missing case for arm64 backend
Change-Id: Ib9a2bfa9a4a23fffd7d1bed249961b07270ae19b
Reviewed-on: https://dart-review.googlesource.com/63448
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-07-02 19:55:16 +00:00
Vyacheslav Egorov be32fb4c58 [vm/compiler] Create NativeFieldDesc for type arguments fields
Mark it as immutable and add few forwarding rules.

Change-Id: I4beb1c18e9b4a586ce7173c214ca1e03c62e68d0
Reviewed-on: https://dart-review.googlesource.com/63381
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-02 17:56:23 +00:00
Aart Bik 34fc26d4cd [vm/inliner] Inline 64-bit typed data.
Rationale:
This CL finalizes recent improvements by allowing
inlining 64-bit and double getter/setter operations.
The runtime over all data types (with and without
view) now no longer has outliers.

Note:
64-bit targets only, 32-bit targets still tbd.

Performance:
About 4x improvement on micro benchmarks.

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

Change-Id: Ic82fa24167a68e3c196edf4843f0829c7fbcf9e1
Reviewed-on: https://dart-review.googlesource.com/60451
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-02 17:41:43 +00:00
Vyacheslav Egorov 53343ceba0 [vm/compiler] Fix CallSpecializer::AddReceiverCheck to use Receiver instead of ArgumentAt(0)
ArgumentAt(0) might be pointing to type arguments instead of the actual receiver.

Fixes #33717

Bug: https://github.com/dart-lang/sdk/issues/33717
Change-Id: I16f2aa442d67ceb2320b860f56c9e9443729092e
Reviewed-on: https://dart-review.googlesource.com/63380
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
2018-07-02 17:16:23 +00:00
Samir Jindel 771454a1cf [vm/precomp] Extend support for slow-path code sharing to ARM and ARM64.
Test Plan:

Covered by existing slow-path code sharing tests

Cq-Include-Trybots:luci.dart.try:vm-kernel-precomp-linux-debug-x64-try;luci.dart.try:vm-kernel-precomp-linux-release-simarm-try;luci.dart.try:vm-kernel-precomp-linux-release-simarm64-try;luci.dart.try:vm-kernel-precomp-linux-release-x64-try;luci.dart.try:vm-kernel-precomp-win-release-x64-try
Change-Id: Iab999e0abfa7677d60ebb259a1d3d128bb49f879
Reviewed-on: https://dart-review.googlesource.com/62903
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-07-02 14:23:23 +00:00
Vyacheslav Egorov ff57e4f355 [vm/compiler] Teach compiler to fold load of type_args_len from constant args desc.
This allows optimizer to eliminate redundant code branching on type_args_len
which arises when inlining generic methods.

Start refactoring how loads of native fields are represented: instead of simply
setting a bunch of unrelated attributes introduce NativeFieldDesc structure
that captures attributes of native fields, which don't have representation
as Field objects.

Over the time we should be able to eliminate "raw" LoadField/StoreInstanceField
instructions that just address fields by their offset and use NativeFieldDesc-s
in load forwarding to disambiguate different native fields that happen to
have the same offset.

Change-Id: I91658888e17bd68c5f9d4f2e1a783b2827efe61f
Reviewed-on: https://dart-review.googlesource.com/62304
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-06-29 20:11:49 +00:00
Alexander Markov 7d03796193 [vm] Refactoring: make reading of kernel metadata and types independent of StreamingFlowGraphBuilder
This CL removes all dependencies on StreamingFlowGraphBuilder from
all metadata helpers and StreamingDartTypeTranslator.

This further decouples parts which are not related to flow graph building
and prepares them for moving.

StreamingDartTypeTranslator is also renamed to TypeTranslator.

Change-Id: I4cb90a214fae4f979160cca7ddc3f7fae1c637e8
Reviewed-on: https://dart-review.googlesource.com/62961
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-06-29 16:13:10 +00:00
Samir Jindel d9c36e8d4d [vm/precomp] Re-land support for slow-path sharing of CheckStackOverflow with status file updates.
Patchset 1 contains the original revision.

Cq-Include-Trybots: luci.dart.try:vm-kernel-reload-linux-release-x64-try;luci.dart.try:vm-kernel-reload-rollback-linux-release-x64-try
Change-Id: Ic2601a268e1cf909183283e9418c03dc6559e809
Reviewed-on: https://dart-review.googlesource.com/62902
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-06-29 12:32:28 +00:00
Régis Crelier 18050cd45b [VM interpreter] Fix typo in loading constant pool entry for context offset.
Change-Id: I2404ed66c0ac38482ea2317e65ff6c2813eb2c3f
Reviewed-on: https://dart-review.googlesource.com/62884
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2018-06-28 21:05:08 +00:00
Samir Jindel 0152213386 Revert "[vm/precomp] Support slow-path sharing for CheckStackOverflow."
This reverts commit dff333e1bf.

Reason for revert: Several hot-reload bots are broken.

Original change's description:
> [vm/precomp] Support slow-path sharing for CheckStackOverflow.
> 
> Test Plan:
> 
> Added new test "stack_overflow_shared_test" which uses --stacktrace_filter to
> force the stack overflow checks to go into the slow-path.
> 
> Change-Id: I92e8ab5f88b1e0855148af212e43adda40ce4d15
> Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-x64-try;luci.dart.try:vm-kernel-precomp-linux-release-x64-try;luci.dart.try:vm-kernel-precomp-linux-release-simarm-try
> Reviewed-on: https://dart-review.googlesource.com/60340
> Commit-Queue: Samir Jindel <sjindel@google.com>
> Reviewed-by: Alexander Markov <alexmarkov@google.com>

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

Change-Id: I632ac9840d360fa624de4c9d17ae679e72c1b16f
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-x64-try;luci.dart.try:vm-kernel-precomp-linux-release-x64-try;luci.dart.try:vm-kernel-precomp-linux-release-simarm-try
Reviewed-on: https://dart-review.googlesource.com/62920
Reviewed-by: Samir Jindel <sjindel@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-06-28 19:08:29 +00:00
Samir Jindel dff333e1bf [vm/precomp] Support slow-path sharing for CheckStackOverflow.
Test Plan:

Added new test "stack_overflow_shared_test" which uses --stacktrace_filter to
force the stack overflow checks to go into the slow-path.

Change-Id: I92e8ab5f88b1e0855148af212e43adda40ce4d15
Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-debug-x64-try;luci.dart.try:vm-kernel-precomp-linux-release-x64-try;luci.dart.try:vm-kernel-precomp-linux-release-simarm-try
Reviewed-on: https://dart-review.googlesource.com/60340
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-06-28 17:20:07 +00:00
Alexander Markov f304948807 [vm] Refactoring: extract kernel translation helpers to a separate file
Change-Id: I228165e1ff768eacc7ee54ff787675931504e450
Reviewed-on: https://dart-review.googlesource.com/62722
Reviewed-by: Samir Jindel <sjindel@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-06-28 15:43:35 +00:00
Régis Crelier 5db9e6c95e [VM interpreter] Do not load bytecode of synthesized functions with copied metadata.
Fix return of native call to bytecode function.
Fix stack level when returning from static field initializer.
Use a zone handle for handled exception types.

Change-Id: I3bd8340208a578f6248190b1aa9b3826d6ad6e48
Reviewed-on: https://dart-review.googlesource.com/62704
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-06-27 22:40:02 +00:00
Alexander Markov a7f0f7ea89 [vm] Add source positions to stack traces of bool checks
If a condition has a source position in kernel, this source position is
now used in stack traces for bool checks.

Issue: https://github.com/dart-lang/sdk/issues/33584
Change-Id: Idb833abbaeaa32e6c5deb0d383cc4215642d3f2a
Reviewed-on: https://dart-review.googlesource.com/62360
Reviewed-by: Samir Jindel <sjindel@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-06-27 16:54:39 +00:00
Régis Crelier 008aa729c5 [VM interpreter] Support implicit getters and setters without compiling them.
Change-Id: I1e61cd79f66efe55c963d970e27f81a9d4084600
Reviewed-on: https://dart-review.googlesource.com/61860
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-06-26 20:24:38 +00:00
Vyacheslav Egorov aeff1c00f2 [vm/compiler] Improve CallTargets::CreateAndExpand
It should expand past abstract classes if that allows to merge
two consequtive ranges with the same target into one.

In Dart 2 mode cid ranges are often interrupted by
abstract classes introduced by mixin transformation.

This change allows to expand ranges past those classes and
merge consequtive ranges that have the same target.

Change-Id: Ic0f4fa956d989609bebbe6f8d275491c562aa492
Reviewed-on: https://dart-review.googlesource.com/61929
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-06-25 12:18:33 +00:00
Vyacheslav Egorov b9f11311f8 [vm/compiler] Fix incorrect assertion from 20ca5bbb05.
Must demangle the name before checking if it is a setter name.

Change-Id: I2d58b9d4d5cab319f67da045458277e9f42e2592
Reviewed-on: https://dart-review.googlesource.com/61933
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
2018-06-25 09:52:13 +00:00
Vyacheslav Egorov 20ca5bbb05 [vm/jit] Introduce dynamic invocation forwarders that perform type checking
This forwarders are used at dynamic call-sites and perform type checking
for all non-generic-covariant arguments. This allows to skip the same
type checks in the actual method body.

This yield on average 10% improvement in performance across the body of
benchmarks including dart2js compilation times.

Bug: https://github.com/dart-lang/sdk/issues/33257
Change-Id: If3fc94a2e0a6f496ec0633f0b379d053a54a40ca
Reviewed-on: https://dart-review.googlesource.com/61244
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-06-25 07:27:04 +00:00
Alexander Markov eafa9ae4b6 [vm/kernel] Fix StreamingConstantEvaluator to handle non-const variables
Fixes https://github.com/dart-lang/sdk/issues/33214

Change-Id: I7991b537204f160b2991abf9995685e4cae69f88
Reviewed-on: https://dart-review.googlesource.com/61682
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-06-22 17:16:45 +00:00
Régis Crelier 3e2708eada [VM interpreter] Fix broken interpreter build.
Change-Id: I1a877f22605874c6a199e2cab53b068a54383927
Reviewed-on: https://dart-review.googlesource.com/61910
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2018-06-22 16:53:25 +00:00
Alexander Markov c4d6ac0cbe [vm/compiler/aot] Implement non-speculative int64 shift operation
Closes https://github.com/dart-lang/sdk/issues/33364

Change-Id: I9432d82a1ee58fbbdc1b54b810a71c2c7ddd8fce
Reviewed-on: https://dart-review.googlesource.com/59821
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-06-22 15:43:28 +00:00
Alexander Markov f885a0c8f3 [vm/kernel] Fix crash when reading symbol literal from Dart annotation
Fixes https://github.com/dart-lang/sdk/issues/33513

Change-Id: I1595409dd3faa363922d595c1c33e6acce92af74
Reviewed-on: https://dart-review.googlesource.com/61800
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-06-22 00:22:13 +00:00
Ryan Macnak 7d7e7c268e [vm] Work around interaction between type and instance canonicalization in isolate messages.
Type canonicalization is deferred between in may involve cycles. Instances are canonicalized eagerly, but their type arguments are not necessarily canonical yet, which can lead to incorrect canonicalization of the instance.

The work around is to include the most popular type arguments in the serializer's set of base objects, bypassing deferred canonicalization. Other type arguments will continue to fail.

Bug: https://github.com/dart-lang/sdk/issues/33430
Change-Id: Ia992b3ebc2974b54acb5c88b3e1d836f6ec1f1b8
Reviewed-on: https://dart-review.googlesource.com/61721
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2018-06-21 23:45:05 +00:00
Ryan Macnak fa7c38dec5 [vm, standalone] Do not copy when loading kernel.
In a topaz release build with JIT apps,
mondrian(flutter_runner):      PSS 44.4M -> 35.8M (-19.4%)
ledger_dashboard(dart_runner): PSS 15.2M -> 12.0M (-21.1%)

Change-Id: I501c24de56a5a7c65a2f03b87709cb09bb95d465
Reviewed-on: https://dart-review.googlesource.com/60202
Reviewed-by: Zach Anderson <zra@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2018-06-21 23:27:53 +00:00
Jens Johansen e2ce88dfcc Add startFileOffset on procedures et al, enable VMs GetSource
Prior to this change we only had fileOffset which points to the name.
This CL adds a field - startFileOffset - that points to the start
(e.g. 'static', 'factory', the return type or any presiding annotation
(including '@')), as well as fixing `Function::GetSource` in the VM to
fix a crash when using mirrors to ask for the source of a function or
constructor.

The field is added to procedures, constructors and classes.
The latter changes the location of classes with annotations to be
the position of the annotation. This is on-par with --no-preview-dart-2.
The change in regards to procedures and constructors mean, that both
the location and the source (from .location and .source on a
MethodMirror) will change to include any annotations. This is a
different behavior than --no-preview-dart-2.

Closes #33271.

Change-Id: I90f1232c5ec2d01e60e0bab070d44c37232b2730
Reviewed-on: https://dart-review.googlesource.com/60560
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Kevin Millikin <kmillikin@google.com>
2018-06-21 13:10:04 +00:00
Régis Crelier abc8793109 [VM interpreter] Adjust bytecode constant pool reading for inlined list of types in TypeArgumentsForInstanceAllocation entry.
Change-Id: Id1633b47d3caad87e22f03d24e869b516da744b2
Reviewed-on: https://dart-review.googlesource.com/61400
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2018-06-20 23:16:42 +00:00
Alexander Markov 8da640704a [vm/linearscan] Reserve slots for catch block entry when nothing is spilled
Fixes https://github.com/dart-lang/sdk/issues/33453

Change-Id: I693352f844c087efe25e31ed27a397cd74f9b990
Reviewed-on: https://dart-review.googlesource.com/60760
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-06-20 20:46:42 +00:00
Ryan Macnak 2f664c141f [vm] Shorten the write barrier sequence.
flutter_gallery, release, arm32
Instructions(CodeSize): 6989360 -> 6915696 (-1.05%)

Change-Id: If8a39c8f28d424959d753e96527a59bf1e9444c1
Reviewed-on: https://dart-review.googlesource.com/61110
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2018-06-20 20:18:02 +00:00
Ryan Macnak 8da46d35f5 [vm] Move heap-related code to its own subdirectory (cf. compiler).
Remove some dead includes.

Change-Id: I31f3e739e5ee46dcbba5d6a2f091491b46402943
Reviewed-on: https://dart-review.googlesource.com/60146
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2018-06-20 00:39:49 +00:00
Alexander Markov 23f87d54c6 [vm/kernel/bytecode] Implement strong mode type checks in bytecode
This includes argument type checks and implicit type checks inserted
by front-end.

Also, lookup of getter functions is fixed for StaticICData constant
pool entry to include non-static getters (StaticICData is used for
all kinds of direct calls including super calls).

Change-Id: Ic265ea6a7fca2bfcc9a96e4ede268ec8e693ff41
Reviewed-on: https://dart-review.googlesource.com/60822
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-06-19 16:58:33 +00:00
Alexander Markov 57c0fc9593 [vm/corelib] More cleanup in integer operations after _Bigint is removed
Change-Id: I41da6a37e554ffb8b77f51fda3fee5a15f2b8045
Reviewed-on: https://dart-review.googlesource.com/60441
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-06-18 18:16:51 +00:00
Aart Bik 2a396d5315 [vm/intrinsics] Intrinsify 64-bit int typed data.
Rationale:
With limited integers, signed/unsigned 64-bit int typed
data is just a bit pattern, no need to sign/zero extend
these into bigger ints on load. This enables more
intrinsification of indexed stores/loads.

Note:
Still TBD, inline these indexed operations too.

Performance:
About 10x improvement on micro benchmarks.

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


Change-Id: I640c324a7d91e57fb4edc025e0dd456ad34fe906
Reviewed-on: https://dart-review.googlesource.com/60403
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-06-15 18:09:40 +00:00
Samir Jindel f1d1da6164 [vm/precomp] Reduce the size of slow-path code in precompiled mode.
The stub code for calling into the runtime is now responsible for saving any
live registers. Since it doesn't know which registers are live (it's shared
across many safepoints), it saves all the registers. The stackmaps and
environments for safepoints which call this stub are extended to cover the stack
slots in the stub's frame which correspond to registers which are actually live
at the safepoint.

Currently this is only supported in precompiled X64 for the `CheckNull`
slow-path. By creating a separate stub for the CheckNull slow path we are able
to eliminate the size overhead of preparing arguments for the runtime call stub,
and reduce the slow-path size on X64 to 1 instruction.

# Test Plan

The stackmap for a safepoint in the `CheckNull` slowpath is only used when
handling the exception causes a GC, which is extremely unlikely. To induce this,
we add a flag to force this behavior in debug-mode and a test which exercises
this. The rest of the changes inherit existing coverage.

Change-Id: I3d8f2a7c3560c432599344d7420d42ddbee7a89d
Reviewed-on: https://dart-review.googlesource.com/59660
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Samir Jindel <sjindel@google.com>
2018-06-15 15:59:05 +00:00
Martin Kustermann c54a302495 [VM] Evaluate symbols in kernel2kernel constant evaluator in AOT (even in non-const contexts)
Closes https://github.com/dart-lang/sdk/issues/33185

Change-Id: Ifa6a3e34e6f1a517f0adce1593e4ff747fe5c2cb
Reviewed-on: https://dart-review.googlesource.com/60246
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-06-14 13:35:39 +00:00
Régis Crelier 12b33ada44 [VM interpreter] Support NativeCall kernel bytecode.
Change-Id: I89c905d17fb48447239ee4b0c1c8c50060239b88
Reviewed-on: https://dart-review.googlesource.com/59560
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-06-13 23:30:44 +00:00
Aart Bik db72134f90 [vm/inliner] Add smi return type of clamped convertors.
Rationale:
Rather than forced inlining of clamped convertors
(the "saturated" method _toClampedUint8() from
dart:typed_data), exposing the fact that it always
returns smi values (since they check fail on null inputs)
yields much better Uint8ClampedListView performance
(it avoids re-compilation due to a speculative CheckSmi).

Note:
In the long run, we may still want them inlined
and improve range analysis to deal with clamping.

Performance:
About 2.8x faster than previous optimized version,
about 4.5x faster than original.

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

Change-Id: I86a06525d2f2ea0476effd3c3d856ff8d9ab1d87
Reviewed-on: https://dart-review.googlesource.com/60201
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-06-13 23:15:04 +00:00
Ryan Macnak 9b5a931b06 [vm] Replace most runtime/vm uses of OS::Print with OS::PrintErr.
Leave --print-snapshot-sizes on stdout because it is parsed by Flutter benchmarks.

Replace all runtime/bin uses of OS::Print with Log::Print.

Bug: https://github.com/dart-lang/sdk/issues/32134
Change-Id: I74aacfb410cdfa9270d06e7f6ab0534520c7c7ba
Reviewed-on: https://dart-review.googlesource.com/60021
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-06-13 19:51:40 +00:00
Aart Bik 12c461b15a [vm/inliner] Inlining of typed_data polymorphic getters/setters
Rationale:
Handles remaining polymorphic reason for typed_data
setters and getters (internal vs. external) during inlining.
Also introduces high level flow graph utilities that
can be reused throughout the compiler to reduce
future code duplication. Disables type speculation
for 64-bit AOT Dart2 to make all work.

Performance:
About 4x speedup on micro benchmarks (AOT64).

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

Change-Id: I678426719e49cd8aa1e5051523da12178120b3ba
Reviewed-on: https://dart-review.googlesource.com/59000
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-06-12 22:28:34 +00:00