Commit Graph

13143 Commits

Author SHA1 Message Date
Ben Konyi 75ce78a117 [ VM ] Uncomment test that was failing due to issue 33417
Change-Id: I3527883a6250eb6c8006b9fbd7deaf0702f4fd2d
Reviewed-on: https://dart-review.googlesource.com/c/84834
Commit-Queue: Ben Konyi <bkonyi@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
Auto-Submit: Ben Konyi <bkonyi@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2018-11-20 00:34:20 +00:00
Michael Goderbauer c6d9e040da Revert "[android] Override __cxa_demangle() in PRODUCT mode"
This reverts commit 9fce277b7e.

I verfied locally that this change no longer reduces binary size with a custom-built libcxxabi/libcxx and LTO.

Change-Id: I05dfb83597c064ba976573da5547ae79c0d41d1c
Reviewed-on: https://dart-review.googlesource.com/c/84831
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-11-19 23:41:25 +00:00
Zach Anderson 9b937f1226 Revert "[vm/aot] Snapshot size analysis."
This reverts commit 06c89287b9.

Reason for revert:
- Failure of v8_snapshot_profile_writer_test on vm-kernel-precomp-android-release
- many failures on windows precomp (?)
- link failures in windows product builds.

Original change's description:
> [vm/aot] Snapshot size analysis.
> 
> 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
> Change-Id: Ie5d5d9f0f064f2c9ef8b7c9a0537b1e633bf8175
> Reviewed-on: https://dart-review.googlesource.com/c/84425
> Commit-Queue: Samir Jindel <sjindel@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>

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

Change-Id: I461f06236f27bb5c6548bd08f4b73507d1b913fa
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
Reviewed-on: https://dart-review.googlesource.com/c/84860
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
2018-11-19 22:29:09 +00:00
Aart Bik 715a78dfd1 [vm/compiler] Fine tune linear register allocation
Rationale:
With the switch to the new, "better", loop information,
we lost blocks that appear linearly in the "middle" of
loops. Such blocks want to move the split back to the
header, just like loop blocks, as further explained in
the code comments.

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

Change-Id: Iae10df51cae396c2c91c8a8478dbc674c4caebe9
Reviewed-on: https://dart-review.googlesource.com/c/84546
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-11-19 22:10:39 +00:00
Dwayne Slater 713675bd35 Fix viewing generated code in Observatory on Windows
For GCC and Clang, `long` and `unsigned long` are 64-bit on 64-bit platforms and 32-bit on 32-bit platforms, while on Windows they're always 32-bit. To fix this, I've changed `GetIntegerId` and `GetUnsignedIntegerId` to use the `long long` variants of `strtol` and `strtoul` on 64-bit platforms.

Closes #30201

Closes #35212
https://github.com/dart-lang/sdk/pull/35212

GitOrigin-RevId: 1b1ad64f9c02f24d1a81999e4ffb61951009abe8
Change-Id: Ieea5aaedc67d950dfb219981d2d8b878312d8315
Reviewed-on: https://dart-review.googlesource.com/c/84740
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2018-11-19 21:27:45 +00:00
Samir Jindel 06c89287b9 [vm/aot] Snapshot size analysis.
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
Change-Id: Ie5d5d9f0f064f2c9ef8b7c9a0537b1e633bf8175
Reviewed-on: https://dart-review.googlesource.com/c/84425
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2018-11-19 20:29:05 +00:00
Ryan Macnak 913cc2c73d [vm] Attribute time waiting for kernel isolate to LoadWait instead of VM.
Change-Id: I153f56831df506e47918fe177dd70bf3cb440a56
Reviewed-on: https://dart-review.googlesource.com/c/84360
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2018-11-19 19:44:28 +00:00
Martin Kustermann 1ca0afe3e2 [VM] Add has_pragma bit to Field and populate it in the kernel loader
Change-Id: I6334a3f03a2967653798c3dd8e51c9a02de62eca
Reviewed-on: https://dart-review.googlesource.com/c/84800
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-11-19 19:04:55 +00:00
Ryan Macnak 1a890ff07d [test] Dump symbol and type tables in determinism test.
Bug: https://github.com/dart-lang/sdk/issues/35092
Change-Id: I0647d8e4fe14a3ea19298dbe8b839f2db28755ab
Reviewed-on: https://dart-review.googlesource.com/c/84685
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2018-11-19 19:03:38 +00:00
Vyacheslav Egorov 233dd29167 [vm/compiler] Make Slot::Get respect field's guarded_cid in AOT mode
Refactoring ddbe22190c
wrongly predicated usage of guarded_cid by use_field_guards flag.
However even though field guards are not in use in AOT mode we
still populate guarded_cid from the results of TFA inference.

This change restores pre-refactoring behavior and makes sure we
make use of information inferred by TFA.

Change-Id: I9929d32c763815504801e13c43326f80fd50687b
Reviewed-on: https://dart-review.googlesource.com/c/84633
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2018-11-19 15:23:37 +00:00
Alexander Markov a9abc64613 [vm/bytecode] Add context IDs to disambiguate accesses to distinct contexts
This CL adds context ID operand to AllocateContext, CloneContext,
LoadContextVar and StoreContextVar bytecode instructions.
The context ID will be used to create distinct Slots and disambiguate
accesses to context objects corresponding to different scopes.

Change-Id: I98850ab763017b71c1dcacfccaffc085bd850e00
Reviewed-on: https://dart-review.googlesource.com/c/84681
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2018-11-17 00:35:30 +00:00
Vyacheslav Egorov ddbe22190c [vm/compiler] Refactor representation of stores and loads in IL.
Make StoreIntanceField and LoadField instructions use a single uniform
abstraction: Slot (used to be called NativeFieldDesc), which represents
either a real Dart field (i.e. a field that has a corresponding Field object)
or a native VM field that does not have a corresponding Field object.

This refactoring eliminates raw stores/loads that were just using offsets
before - now we always know what kind of slots we are accessing and
this yields better aliasing information.

Change-Id: I2f48332d58258219565bd961764e8cc9dd4d75ce
Reviewed-on: https://dart-review.googlesource.com/c/74582
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-11-16 17:57:29 +00:00
Martin Kustermann aad435f45f [VM] Always bailout from constant evaluator if used on the background compiler
Change-Id: Ifa4e86e8e2e681509f63470e23af09f4ee66aced
Reviewed-on: https://dart-review.googlesource.com/c/84608
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-11-16 16:19:58 +00:00
Martin Kustermann 845310302d Revert "[VM] Add @pragma annotations on Field, make @pragma annotations work generally"
This reverts commit 2de63ac01c.

Reason for revert: This triggers shutdown deadlocks for some reason:

#0  0xf7782cd9 __kernel_vsyscall
#1  0xf7753d0b pthread_cond_wait@@GLIBC_2.3.2
#2  0x0108a515 dart::Monitor::WaitMicros(long long)
#3  0x0108a467 dart::Monitor::Wait(long long)
#4  0x00fe9048 dart::KernelIsolate::Shutdown()
#5  0x00f99ae4 dart::Dart::Cleanup()
#6  0x01278fce Dart_Cleanup
#7  0x00dd347e dart::bin::main(int, char**)
#8  0x00dd3d64 main
#9  0xf745caf3 __libc_start_main
#10 0x00dd2021 _start
TID 30443:
#0  0xf7782cd9 __kernel_vsyscall
#1  0xf7531ee6 epoll_wait
#2  0x00ddab61 dart::bin::EventHandlerImplementation::Poll(unsigned int)
#3  0x00dfb2d4 dart::bin::ThreadStart(void*)
#4  0xf774ff72 start_thread
#5  0xf753143e __clone
TID 30444:
#0  0xf7782cd9 __kernel_vsyscall
#1  0xf7753d0b pthread_cond_wait@@GLIBC_2.3.2
#2  0x0108a515 dart::Monitor::WaitMicros(long long)
#3  0x0108a467 dart::Monitor::Wait(long long)
#4  0x012484d8 dart::BackgroundCompiler::Run()
#5  0x01248a37 dart::BackgroundCompilerTask::Run()
#6  0x0112203a dart::ThreadPool::Worker::Loop()
#7  0x01121efe dart::ThreadPool::Worker::Main(unsigned int)
#8  0x01089e73 dart::ThreadStart(void*)
#9  0xf774ff72 start_thread
#10 0xf753143e __clone

Original change's description:
> [VM] Add @pragma annotations on Field, make @pragma annotations work generally
> 
> Currently the @pramga('vm:exact-result-type') annotation only works if
> the function is a recognized method.  This change changes that to make
> the VM just look if a function has the annotation (no matter if it's
> also in the list of recognized methods or not).
> 
> Furthermore this CL adds a "has_pragma" bit to [Field] objects, similar
> to how we have it on [Function]/[Class]es.  This allows annotating
> fields with types, as we do with function return types.
> 
> Furthermore this CL lets the type propgagator use
> @pragma('vm:exact-result-type') annotations to narrow the [CompileType]
> set on [LoadFieldInstr]s.
> 
> Since the @pragma is a general feature, this CL moves the
> `Function::FindPragma()` to `Library::FindPragma` (which is where any
> other metadata lookup happens).  We also let the `FindPragma` accept any
> of Class/Function/Field objects.
> 
> Furthermore this CL adds a bailout if we try to evaluate metadata in
> the background compiler, since the background compiler is not allowed
> to execute generated code. The bailout should trigger a re-compilation
> on the mutator thread.
> 
> Furthermore the `FindPragma()` function is fixed to handle the case
> when the evaluation of the metadata results in e.g. a language error.
> In this case we simply claim to not have found a pragma annotation.
> 
> Issue https://github.com/dart-lang/sdk/issues/31954
> 
> Change-Id: I0900a80d5ae0f3e8d09baf13cba1b20dd974df31
> Reviewed-on: https://dart-review.googlesource.com/c/84037
> Commit-Queue: Martin Kustermann <kustermann@google.com>
> Reviewed-by: Alexander Markov <alexmarkov@google.com>
> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>

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

Change-Id: Ic0d22d32b0eea3a76ec245cabab0006f97ca1b05
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/84622
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-11-16 14:50:32 +00:00
Martin Kustermann 2de63ac01c [VM] Add @pragma annotations on Field, make @pragma annotations work generally
Currently the @pramga('vm:exact-result-type') annotation only works if
the function is a recognized method.  This change changes that to make
the VM just look if a function has the annotation (no matter if it's
also in the list of recognized methods or not).

Furthermore this CL adds a "has_pragma" bit to [Field] objects, similar
to how we have it on [Function]/[Class]es.  This allows annotating
fields with types, as we do with function return types.

Furthermore this CL lets the type propgagator use
@pragma('vm:exact-result-type') annotations to narrow the [CompileType]
set on [LoadFieldInstr]s.

Since the @pragma is a general feature, this CL moves the
`Function::FindPragma()` to `Library::FindPragma` (which is where any
other metadata lookup happens).  We also let the `FindPragma` accept any
of Class/Function/Field objects.

Furthermore this CL adds a bailout if we try to evaluate metadata in
the background compiler, since the background compiler is not allowed
to execute generated code. The bailout should trigger a re-compilation
on the mutator thread.

Furthermore the `FindPragma()` function is fixed to handle the case
when the evaluation of the metadata results in e.g. a language error.
In this case we simply claim to not have found a pragma annotation.

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

Change-Id: I0900a80d5ae0f3e8d09baf13cba1b20dd974df31
Reviewed-on: https://dart-review.googlesource.com/c/84037
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-11-16 11:18:22 +00:00
Zach Anderson b981cbfff8 [vm] Adds a flag to dump dynamic bytecode traces in a debug build.
Also adds a program in pkg/vm/bin/dump_bytecode_ngrams.dart that
analyzes the traces.

Change-Id: I39c9645ca858195a41e001dab47a7b1398f4b15e
Reviewed-on: https://dart-review.googlesource.com/c/83340
Commit-Queue: Zach Anderson <zra@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-11-16 06:24:02 +00:00
Régis Crelier 61eea1f416 [VM runtime] Remove unused UnresolvedClass VM class.
Type resolution will be simplified in a later CL.

Change-Id: Ia610a5d06d381511ca48993dcc1cafbf205ca997
Reviewed-on: https://dart-review.googlesource.com/c/84552
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2018-11-16 00:09:29 +00:00
Ryan Macnak 2535b1e021 [vm] Account for bytecode in profile processing and Observatory.
Change-Id: I220eca1f4a3aadaa271ead4de698c28e4a7b653a
Reviewed-on: https://dart-review.googlesource.com/c/84447
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2018-11-15 17:42:13 +00:00
Martin Kustermann 9e3d3cf765 [VM] Use strict compare instruction only if receiver is nullable int
Since in Dart 1 == 1.0 is true.

Change-Id: I05faebb31c6c725095a54020a9665cf40cc55a4b
Reviewed-on: https://dart-review.googlesource.com/c/84531
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-11-15 15:37:58 +00:00
Martin Kustermann 11af2a6406 [VM] Only use strict comparisons if the receiver has a numeric type
Change-Id: Ic8b13ac45fd9ac71fea96503226f74d52364b90c
Reviewed-on: https://dart-review.googlesource.com/c/84529
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-11-15 14:58:35 +00:00
Martin Kustermann a454b5d564 [VM] Use redefinitions for strenghtening, prefer equality comparison over strict comparison
When strenghtening the types in AOT call specializer, we do it via redefinitions
instead of setting a reachingt type on the Value.  This has the advantage that all
uses will get the new type, which improves e.g. StaticCall(_IntegerImpl.*, v1, v1)
where multiple uses can benefit.

This CL also changes the AOT call specializer to prefer equality comparisons over
strict comparisons, because strict comparisons can force boxing (which causes code bloat).

Change-Id: I803bb09c70ee2f4656062b5ce3cb28ffaf940e9b
Reviewed-on: https://dart-review.googlesource.com/c/84525
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-11-15 14:39:54 +00:00
Vyacheslav Egorov a1a38da58e [vm] Report an error when illegally accessing class through API in AOT mode.
Move all pragma documentation into runtime/docs and reformat it a bit.

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

Change-Id: I2ab4d6d598f115efaa3192135cb838fb85cbbb01
Reviewed-on: https://dart-review.googlesource.com/c/84435
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Auto-Submit: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Samir Jindel <sjindel@google.com>
2018-11-15 12:00:57 +00:00
Martin Kustermann aea0aadf41 [VM] Unify AOT optimizations for int/double's
So far we had different optimization logic for int/double's depending on
whether they were [InstanceCallInstr]s or [StaticCalInstr]s.

The de-virtualization by TFA causes instance calls to be turned into static
calls which might cause different optimizations to apply.

This CL unifies the optimizations, so they are applied regardless of
whether the operation is an instance call or a static call.

Change-Id: Id4f229412e4d0f19835635bce8c9e5491cca8cb0
Reviewed-on: https://dart-review.googlesource.com/c/84433
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-11-15 11:35:42 +00:00
Daco Harkes a2dfa75371 [vm] Fix TypeParameter skipping logic in KernelLoader::LoadClass
Change-Id: I578b2f81a58c116a4e5bb8b846040481ba3dd270
Reviewed-on: https://dart-review.googlesource.com/c/84426
Commit-Queue: Daco Harkes <dacoharkes@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-11-15 10:30:19 +00:00
Alexander Markov ed48cfeb47 [vm/bytecode] Support source positions when executing bytecode
This includes both interpreted and compiled bytecode.

Change-Id: I6309ec4f0687f68caf6260cc57dacf94f027177d
Reviewed-on: https://dart-review.googlesource.com/c/84481
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2018-11-15 00:48:04 +00:00
Ben Konyi 5afc1ec336 [ VM / Observatory ] Fixed tests that were failing due to lack of sources in app_jitk mode
Change-Id: I74504cc5dea30a0b6841e0bf77d99c1cf3889269
Reviewed-on: https://dart-review.googlesource.com/c/84049
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
2018-11-14 18:00:53 +00:00
Aart Bik 4c683215fc [vm/compiler] induction variable analysis
Rationale:
The more one knows about loops, the better!
This introduces a rigorous framework for detecting
induction variables (more precise "sequence" variables).
Even though this is already pretty general, in the
future we can expand this on a "need to" base, recognizing
more operators (shifts, negate, etc.) and more classes
of induction (perhaps geometric, polynomial, etc.).

Change-Id: I82a14515e8ae946d520ee470cd31046f6a58af7d
Reviewed-on: https://dart-review.googlesource.com/c/81743
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-11-14 17:02:13 +00:00
Régis Crelier f721d52163 [VM runtime] Introduce a new VM class Bytecode.
Allow pc_marker slot to hold a Code object or a new Bytecode object.

Change-Id: If11c1df6dafc5b1cfcce6f0322c36d1d68e86df9
Reviewed-on: https://dart-review.googlesource.com/c/82526
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-11-14 02:48:03 +00:00
Alexander Markov 8f7a0f400b [vm/bytecode] Emit source positions for bytecode instructions
Change-Id: I83963771db301089317823f6bf14eb4a2728dbfb
Reviewed-on: https://dart-review.googlesource.com/c/81740
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2018-11-14 00:27:45 +00:00
Ryan Macnak e2f99e4cee [vm] Update the profiler to account for the interpreter.
Also, remove paranoid checks from ProfilerDartStackWalker by
 - setting the VM tag to Dart only after initializing the exit slot
 - setting the VM tag to Runtime for leaf runtime function
 - bailing out when in the prologue of the invocation stub's callee

Change-Id: Ifd1caee2203f8863b17fc7d0072de32290fd0e60
Reviewed-on: https://dart-review.googlesource.com/c/84140
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2018-11-13 20:33:48 +00:00
Martin Kustermann d7ea36477f [VM] Invoke a new isolate notify callback on install if there are pending messages
This fixes an issue where service RPCs are not answered by the
vm-service.

Currently new isolates are visible via the service protocol immediately
after creation. This means a vm-service client can start doing service
RPCs to a particular isolate.  If the embedder has not-yet installed a message
handler the OOB messages will be queued up.

Once the embedder installs an isolate message notify handler, that
handler needs to be invoked if there are pending messages.

Change-Id: Ie75878daf55a3b380e2b2ec7930e15b002f3f520
Reviewed-on: https://dart-review.googlesource.com/c/83680
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Clement Skau <cskau@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-11-13 10:32:48 +00:00
Martin Kustermann 600af11045 [VM] When disassembling dump functions seperately from non-function Code
Change-Id: Ic7d7f9746c4f723d3da08b003a943b83b779dad3
Reviewed-on: https://dart-review.googlesource.com/c/84038
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2018-11-13 10:32:28 +00:00
Alexander Markov f4a80a8466 [vm/bytecode] Fix entry point when optimized code is cleared but bytecode remains
If interpreter is enabled and a function has bytecode, then its entry
point should be set to 'interpreter call' instead of 'lazy compile'
when clearing code.

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

Change-Id: Ie714ac9c4d1ffef181512c5785c374e9de22ab95
Reviewed-on: https://dart-review.googlesource.com/c/84180
Commit-Queue: Régis Crelier <regis@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2018-11-13 01:04:05 +00:00
Alexander Markov 3c32b32d56 [vm/bytecode] Enable OSR for unoptimized code compiled from bytecode
In order to enable OSR, CheckStackOverflow IL instructions are attributed
with a non-zero loop depth. The original loop depth is passed as operand
of CheckStack bytecode instruction.

Change-Id: I771f59ba9f8d071680a3b7156be380e0f606b7b2
Reviewed-on: https://dart-review.googlesource.com/c/84081
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-11-12 19:04:54 +00:00
Samir Jindel 5ef1465c55 [vm] Attach type to parameters on unchecked entry.
This is especially important for multiple entry-points in AOT mode, since without the type
information we can't inline certain intrinsics (because they would have to de-opt).

Change-Id: I62352234c95a1211ff7cdabb9cefc48990427a6f
Reviewed-on: https://dart-review.googlesource.com/c/82999
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2018-11-12 12:57:00 +00:00
Alexander Markov d74f272d78 [vm/bytecode] Enable optimized compilation if running with interpreter
Also, reset usage counter after unoptimized compilation in background
so that function can be optimized.

Change-Id: I7b0fff0bc800345237822b31b176691e8cd132eb
Reviewed-on: https://dart-review.googlesource.com/c/84044
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2018-11-09 19:42:47 +00:00
Ryan Macnak cb522bfcd2 [vm] Update Windows synchronization code to CONDITION_VARIABLEs and SRWLOCKs.
Use CRITICAL_SECTIONs for dart::bin::Monitor as the event handler requires a recursive monitor.

Requires Vista or later.

Bug: https://github.com/dart-lang/sdk/issues/35029
Bug: https://github.com/dart-lang/sdk/issues/35118
Change-Id: I1e96c5b428257649a45d26a979fba53a10f02151
Reviewed-on: https://dart-review.googlesource.com/c/20901
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-11-09 18:44:49 +00:00
Alexander Markov 4b900fdcc5 [vm] Clarify timeline events for unoptimized background compilation, take 2
Change-Id: Iaeb9fb612e2060a59ba3963402e15ae97e27cb5f
Reviewed-on: https://dart-review.googlesource.com/c/84042
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-11-09 18:36:17 +00:00
Alexander Markov a4dc8cd22e [vm/kernel/bytecode] Make sure bytecode instructions are aligned in kernel
Change-Id: I109123e88b8352b198d5ef9aad9eedc1df7141c8
Reviewed-on: https://dart-review.googlesource.com/c/83543
Reviewed-by: Régis Crelier <regis@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-11-09 17:08:46 +00:00
Martin Kustermann 27537b458a [VM] Ensure parameters from unchecked entrypoints have type attached
For functions without optional parameters this is done in the
ParameterInstr::ComputeType directly whereas for optional parameters,
where the prologue is not built 2 times, we use redefinitions.

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

Change-Id: Id6f86610ecbde090ca1596d6fabdf7f2a8bcd5e2
Reviewed-on: https://dart-review.googlesource.com/c/83020
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2018-11-09 16:40:21 +00:00
Alexander Markov f9d93f6d4e Revert "[vm] Clarify timeline events for unoptimized background compilation"
This reverts commit 136c013bea.

Reason for revert: broken dartkb bots

Original change's description:
> [vm] Clarify timeline events for unoptimized background compilation
> 
> Change-Id: I919ef5a5a180b47eba31e74d32da4185fff81df9
> Reviewed-on: https://dart-review.googlesource.com/c/83886
> Commit-Queue: Alexander Markov <alexmarkov@google.com>
> Auto-Submit: Alexander Markov <alexmarkov@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>

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

Change-Id: Ifcdd8778f60c25e7b1363538e0f76064dde09556
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/83921
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2018-11-09 03:08:07 +00:00
Ryan Macnak fa6a1684ef [vm] Introduce a separate VMTag for the interpreter.
Makes time spent in interpreted versus compiled Dart code visible in Observatory's pie chart. Will allow the profiler to know whether to start a stack walk from the machine code FP or the interpreter's FP.

Remove dead Dart 1 frontend tags. Add tag for loading bytecode.

Change-Id: I2c5a580e1581f8ccd5a93bb293899c81f900ef13
Reviewed-on: https://dart-review.googlesource.com/c/83564
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
2018-11-09 01:58:54 +00:00
Alexander Markov 136c013bea [vm] Clarify timeline events for unoptimized background compilation
Change-Id: I919ef5a5a180b47eba31e74d32da4185fff81df9
Reviewed-on: https://dart-review.googlesource.com/c/83886
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2018-11-09 01:38:02 +00:00
Ryan Macnak 3a513641bb [vm] Don't ignore the return value of TypeArguments::Canonicalize.
Change-Id: I98ed8e9927a74393cab3b97b003a0b7ee19f4c9c
Reviewed-on: https://dart-review.googlesource.com/c/83862
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2018-11-09 00:32:37 +00:00
Ryan Macnak 94f93f788a [vm] Remove Dart scanner.
Change-Id: I6435aef9574167dda71f7d15852e32e40d38e381
Reviewed-on: https://dart-review.googlesource.com/c/83224
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2018-11-09 00:13:26 +00:00
Aart Bik 8ca05c506f [vm/compiler] Whitelist byteswap inlining
Rationale:
Always inlining byteswaps avoids calling into
the runtime when getInts remain.

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

Change-Id: I95c0348fa960e08f973a12a2c5304785e76289b3
Reviewed-on: https://dart-review.googlesource.com/c/83884
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-11-08 23:18:53 +00:00
Aart Bik 3ee9f61c8d [vm/compiler] Fix bug in list inclusion test
Rationale:
Although not semantically disastrous, list inclusion
was not properly implemented, which yielded some very
hard to debug recompilations (or lack thereof) due
to speculation.

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

Change-Id: I54613127bd3ab93820d4a467c75e41f3df16ee7a
Reviewed-on: https://dart-review.googlesource.com/c/83883
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-11-08 23:18:13 +00:00
Aart Bik 9eb1d74881 Reland "[vm/compiler] Fine tune operator and phi handling."
This reverts commit cde479301a.

Reason for revert: the real underlying bug has been fixed

Original change's description:
> Revert "[vm/compiler] Fine tune operator and phi handling."
> 
> This reverts commit 4d5b5bb5a6.
> 
> Reason for revert: We are seeing an AOT compiler issue as a result of this change (please see https://github.com/flutter/flutter/issues/23879)
> 
> Original change's description:
> > [vm/compiler] Fine tune operator and phi handling.
> > 
> > Rationale:
> > Running an extra call specialization pass a bit later
> > in the compiler passes stream (after types are propagated)
> > recognizes more operators, which execute more efficiently.
> > In addition, unboxing phis seems useful on all archs, not
> > just 32-bit. These minor tweeks combined improve the prime
> > number benchmark 3 fold.
> > 
> > https://github.com/flutter/flutter/issues/19677
> > 
> > Change-Id: Ib2102ce807c2f0a9f801542e0c4bc6a7673f552b
> > Reviewed-on: https://dart-review.googlesource.com/69240
> > Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
> > Commit-Queue: Aart Bik <ajcbik@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.
> 
> Change-Id: I46e420f9355bfc3c4a3f2fb9274f648e8a596d9a
> Reviewed-on: https://dart-review.googlesource.com/c/83229
> Reviewed-by: Siva Annamalai <asiva@google.com>
> Reviewed-by: Aart Bik <ajcbik@google.com>
> Commit-Queue: Siva Annamalai <asiva@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.

Change-Id: I7f9d892a6225c42810e7be52b6845bfee9cc017d
Reviewed-on: https://dart-review.googlesource.com/c/83800
Reviewed-by: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-11-08 20:58:16 +00:00
Aart Bik a40fd6a976 [vm/compiler] Fix bug in unboxed constant spilling
Rationale:
Subtle but disastrous, spilling unboxed integers
in arm64 and x64 would store the value as smi,
detected as a nasty off by one error in flutter code.

https://github.com/flutter/flutter/issues/23879
https://github.com/dart-lang/sdk/issues/35091

Change-Id: I07d71727de8574ebd7d3ec3610d517d7903972f0
Reviewed-on: https://dart-review.googlesource.com/c/83565
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2018-11-08 19:03:22 +00:00
Aart Bik 5cfffdbcca Revert "[vm/compiler] Tune AOT inline heuristics"
This reverts commit 74d2c6aa99.

Reason for revert: 

../../runtime/vm/compiler/backend/il.cc: 778: error: unreachable code

Original change's description:
> [vm/compiler] Tune AOT inline heuristics
> 
> Rationale:
> Last experiment left some performance at the table
> (but for an unacceptable 200% code size increase).
> This CL regains that performance for a much better
> trade-off of just 8%. Performance gains vary from
> 10% to 100%, with e.g. 27% for DeltaBlue, 30% for
> MD5 and 100% for SHA256). This is obtained by
> always inlining byteswaps (to avoid calling into
> the runtime when getInts remain) and a bit more
> specific tuning of loop based heuristics. This
> also fixes a bug in a list lookup.
> 
> https://github.com/dart-lang/sdk/issues/34473
> https://github.com/dart-lang/sdk/issues/34969
> https://github.com/dart-lang/sdk/issues/32167
> 
> Change-Id: Id1a64c3930c503546ae2d7f31ca3e597741022bb
> Reviewed-on: https://dart-review.googlesource.com/c/82942
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Commit-Queue: Aart Bik <ajcbik@google.com>

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

Change-Id: Id0f30f4458a3548af2e573a737e441ca11ae3b11
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/83643
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2018-11-08 08:51:20 +00:00