Commit Graph

43 Commits

Author SHA1 Message Date
Ryan Macnak 2b8641ee94 [vm, compiler] Misc compiler debugging enhancements.
TEST=ci
Change-Id: Ic6179842b1e0bdea475d0f863c44f4accf826da1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/195100
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2021-04-14 19:34:15 +00:00
Martin Kustermann 6a585a2089 [vm/compiler] Assign deopt id to all allocation instructions
An allocation can - in the slow path - go to runtime which can cause a
pre-allocated OutOfMemory exception to be thrown. It therefore requires
correct deopt information.

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

TEST=Existing test suite. A follow-up CL will add actual deoptimization tests for those instructions.

Change-Id: Iaf44904b82ec021919352483f58e9e8fed473955
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/192685
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2021-03-24 11:55:44 +00:00
Martin Kustermann bdb77e4f3d [vm/compiler] Mark all allocation IR instructions as potentially throwing
Allocation instructions can end up going to runtime - and in rare cases
- throw a pre-allocated OutOfMemory exception. We have to mark
allocation IR instructions therefore as potentially throwing.

We make this CL separately from follow-up related changes, to see
possible effects on benchmarks.

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

TEST=Existing tests. Will add validation of correct deopt environment in future CL.

Change-Id: Ic3ed5c277c222f8432f5f72da18d32182e566dac
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/192683
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2021-03-24 11:48:49 +00:00
Martin Kustermann dec7b4f5b6 [vm/compiler] Avoid pruning deopt environments during SSA construction
Generally speaking, the optimizing compiler should be able to use
(deopt-id, deopt-environ) of any IR instruction and use it as an eager
deopt target (e.g. optimizing compiler might insert TestCidsInstr
with eager (deopt-id, deopt-environ) from AssertAssignable).

Currently we prune the environment eagerly during SSA construction for
some instructions This pruning breaks the above mechanism, since the
deopt-environ isn't usable as eager deopt target. (It is effectively
changing the environment on the IR instruction to be a lazy-deopt
environment).

This CL makes the [Environment] represent both the eager deopt target as
well as the lazy deopt target. It distinguishes the two by remembering
how many slots the eager deopt target needs to be pruned to come to the
lazy deopt target. The SSA construction will populate this information.

Effectively we move the deopt env pruning from SSA construction to the
place when we need it (e.g. inlining, emitting after-call metadata).

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

TEST=Refactoring of existing code.

Change-Id: I6c2a117b33f35764e556372484e4beaa294b708d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/192141
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2021-03-23 12:22:16 +00:00
Ryan Macnak b1c09ecd8f [vm] Make naming more consistent when converting between handles, tagged and untagged pointers.
Currently we have things called XPtr which are not what you get from ptr().

Old world:
handle->raw() returns RawObject* (tagged)
raw_obj->ptr() returns RawObject* (untagged)

After 6fe15f6df9:
handle->raw() returns ObjectPtr
obj_ptr->ptr() returns ObjectLayout*

New world:
handle->ptr() returns ObjectPtr
obj_ptr->untag() returns UntaggedObject*

TEST=ci
Change-Id: I6c7f34014cf20737607caaf84979838300d12df2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149367
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2021-01-15 23:32:02 +00:00
Tess Strickland 100e12b6cd [vm/compiler] Copy inlined IDs with token positions.
When creating new instructions that inherit a token position that
represents a source location from another instruction, the inheriting
instruction must also have the same inlining ID in order for the source
position represented by the token position to be looked up in the
correct script.

Force this by wrapping both in a single InstructionSource struct which
is taken by instructions which take token positions instead of just a
token position. That way, it's more work to manually transfer the token
position separately from the inlining ID of the instruction than doing
the right thing of transfering both at once.

To ensure this information is kept consistent, we pass InstructionSource
structs through the FlowGraphCompiler all the way down to the
CodeSourceMapBuilder.

This CL also makes the following changes:

* Cache the upper bound of source positions in scripts and use it to add
  a check for if a given real token position is valid for the script
  without iterating over the line starts data for each token position.

* Start inlining intervals appropriately when adding descriptor and
  null check information to the code source map.

Code size changes are minimal on Flutter gallery in release mode
(<0.05% decrease).

TEST=Existing tests on trybots, with manual checking with
--check-token-positions that previous errors are now removed.

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

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-nnbd-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-nnbd-linux-debug-x64-try,vm-kernel-linux-debug-x64-try,vm-kernel-linux-release-x64-try,vm-kernel-nnbd-linux-release-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-nnbd-linux-release-x64-try,vm-kernel-linux-product-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-debug-simarm_x64-try,vm-kernel-precomp-linux-release-simarm64-try,vm-kernel-linux-release-simarm64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-ia32-try
Change-Id: I23ced262cb4e9fe9d81356f409e7e8d220d63ee0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/173967
Reviewed-by: Régis Crelier <regis@google.com>
2020-12-18 00:42:14 +00:00
Tess Strickland f1e8b70268 [vm/compiler] Only record needed inlining intervals in CodeSourceMaps.
Also only check instruction inlining IDs if the token position is
real or synthetic, since that's when we need to know which function
an instruction belongs to.

Code size changes on Flutter gallery in release mode:

* ARM7: total -1.29%, isolate: -2.42%, readonly: -3.65%
* ARM8: total -1.38%, isolate: -2.38%, readonly: -3.28%

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

TEST=Existing tests on trybots plus benchmarking numbers above.

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-product-x64-try,vm-kernel-linux-product-x64-try,vm-kernel-precomp-linux-debug-simarm_x64-try,vm-kernel-precomp-linux-release-simarm64-try,vm-kernel-linux-release-simarm64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-ia32-try
Change-Id: I7c8e52d9607a037b2f7b47a3544531e7a3e8eda7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/176522
Commit-Queue: Tess Strickland <sstrickl@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2020-12-17 15:40:53 +00:00
Tess Strickland dadf3f56e8 [vm/compiler] Add flag for checking token positions.
When this flag is enabled, then the validity of real token positions are
checked in three places:

* FlowGraphChecker::VisitInstruction
* CodeSourceMapBuilder::BufferChangeLocation
* DescriptorList::AddDescriptor

The validity check ensures that, if the flow graph has an inlining
ID, that the instruction has an inlining ID and that any real token
position is a valid source offset for the appropriate script (found
via the inlining ID) by attempting to look up line and column.

This flag is disabled by default until existing issues with invalid
inlining IDs and token positions are resolved.

TEST=Enabled the flag manually to check that it caught invalid token
positions.

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

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try
Change-Id: I86439db3661d976ac4ea608d132e3277425615d5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/175641
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-12-17 12:19:43 +00:00
Vyacheslav Egorov beb7114861 [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime
This relands commit b0a71d364c

Cq-Include-Trybots: dart/try:vm-kernel-precomp-linux-release-simarm64-try,vm-kernel-precomp-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-linux-release-simarm-try,vm-kernel-precomp-linux-release-x64-try
Change-Id: I1d32e5d0d44f4e422d188643b548ed81859f7d74
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143807
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2020-04-17 13:11:08 +00:00
Alexander Aprelev c7861f309f Revert "[vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime"
This reverts commit b0a71d364c as it broke precomp builds.

Change-Id: Ieb776739b8d3e9ac74794e05fc20a793625e5f09
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143865
Commit-Queue: Alexander Aprelev <aam@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-04-16 23:51:09 +00:00
Vyacheslav Egorov b0a71d364c [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime
#if defined(DART_PRECOMPILED_RUNTIME)
  #error "AOT runtime should not use compiler sources (including header files)"
  #endif  // defined(DART_PRECOMPILED_RUNTIME)

Remove #if defined(DART_PRECOMPILED_RUNTIME) from most compiler sources.

Change-Id: Id175c83fdbea38d9d5e1371ff433e3888f2afe8a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143523
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-04-16 22:59:03 +00:00
Aske Simon Christensen 76c6282de6 [vm/aot] Use a global dispatch table for instance calls in AOT.
This is a Dart-tailored implementation of the "row-displacement
dispatch table" technique for closed-world instance calls:

All interface targets in the program are grouped into selectors such
that all targets that could potentially be called from the same call
site have the same selector (currently just grouped by name).

Each selector is assigned a selector offset such that offset + classid
is unique for all selector/classid combinations where the class
implements the selector.

At every instance call site that has an interface target (i.e. where
the static type of the receiver is not dynamic), the selector offset +
receiver classid is computed and used as index into a global table of
entry points.

If the receiver can be null (as determined by the front-end TFA and the
VM type propagation), a null check is inserted before the call.

An arguments descriptor is provided (only) for selectors that need it
(those which have type parameters or optional/named parameters).

The dispatch table calls don't need the monomorphic entry code, so for
functions that are only called via dispatch table calls (i.e. never
called dynamically), the monomorphic entry code is left out.


Some future improvements to the table dispatch implementation are
mentioned in https://github.com/dart-lang/sdk/issues/40188


The table dispatch flag is disabled by default in this commit. A
separate commit enables the flag.

Change-Id: Ic2911742b4a2c9a8d3bc7df60605454cbe4c0714
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/126648
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-02-03 11:04:15 +00:00
Alexander Markov f4e61eacfd [vm/compiler] Remove PushArgument instructions from IL up to AllocateRegisters
PushArgument instructions are removed from IL while it is constructed and
optimized. Before allocating registers, PushArgument instructions are
inserted immediately before call instructions. On ARM/ARM64 subsequent
PushArgument instructions are generated using store multiple (STM) / store
pair (STP) instructions which reduces size.

Flutter gallery in release mode after this CL and https://dart-review.googlesource.com/c/sdk/+/129324:
arm: instructions size -1.4%, total size -0.83%
arm64: instructions size -1.43%, total size -0.83%

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

Change-Id: I61493c72306c3ade4d9850e0dfc17e7e943a14c4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128481
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-01-09 01:37:27 +00:00
Alexander Markov ad1a26b90b Reland "[vm/compiler] Dead code elimination"
This is a reland of b69596bb1b

Original change's description:
> [vm/compiler] Dead code elimination
> 
> flutter_gallery total size -0.9% (arm), -0.77% (arm64)
> flutter_gallery instructions size -1.27% (arm), -1.11% (arm64)
> 
> Fixes https://github.com/dart-lang/sdk/issues/33414
> 
> Change-Id: I9de07ac866ba8a6bf3575df85b790e26a2753750
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127381
> Commit-Queue: Alexander Markov <alexmarkov@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>

Change-Id: Id53dddfe22af4d48673e30a3f66e63ed878523ac
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128010
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-12-11 19:23:48 +00:00
Alexander Markov 3a456fb3cc Revert "[vm/compiler] Dead code elimination"
This reverts commit b69596bb1b.

Reason for revert: failures on vm-kernel-precomp-win-release-x64 bot.

Original change's description:
> [vm/compiler] Dead code elimination
> 
> flutter_gallery total size -0.9% (arm), -0.77% (arm64)
> flutter_gallery instructions size -1.27% (arm), -1.11% (arm64)
> 
> Fixes https://github.com/dart-lang/sdk/issues/33414
> 
> Change-Id: I9de07ac866ba8a6bf3575df85b790e26a2753750
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127381
> Commit-Queue: Alexander Markov <alexmarkov@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>
> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>

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

Change-Id: I0bf0e27cc13b4d0708be19304e278977c7eb6558
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128003
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-12-10 22:59:26 +00:00
Alexander Markov b69596bb1b [vm/compiler] Dead code elimination
flutter_gallery total size -0.9% (arm), -0.77% (arm64)
flutter_gallery instructions size -1.27% (arm), -1.11% (arm64)

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

Change-Id: I9de07ac866ba8a6bf3575df85b790e26a2753750
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127381
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
2019-12-10 18:50:35 +00:00
Alexander Markov d03a7686d2 [vm/compiler] Fix inlining of SIMD shuffle operations
When trying to inline SIMD shuffle operation in InlineSimdOp
(inliner.cc), FunctionEntry instruction was created and inherited
deopt_id and environment from call. Inheriting environment also
added FunctionEntry into env_use_list of other instructions.
If inlining didn't actualy happen due to invalid mask argument,
created FunctionEntry still left in the env_use_list.
Later optimization passes (for example AllocationSinking) may crash
while trying to update environment uses of instructions.

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

Change-Id: I6bdb7c6f7a7947259ea5ad097d05eebe5d73269b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/127802
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-12-10 16:40:35 +00:00
Aart Bik 6f9a9f083e [vm/compiler] push arguments assert in flow graph checker
Rationale:
Adds stricter asserts on push arguments to flow graph
checker and fixes various places where the environment
assumptions on push arguments were violated.

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

Change-Id: I30b827c6400daaa8597e7957bd71b5d91d729cd2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120722
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-10-11 23:11:49 +00:00
Aart Bik 67ae444f29 [vm/compiler] Revert flow graph check on push arguments
Rationale:
Does not seem all parts of IR were ready for this check

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

Change-Id: Ibf32f1338f36f86039564989c4fa1e991e5cc1cc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119484
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-09-30 22:18:13 +00:00
Aart Bik 5f32afdd4c [vm/compiler] patch up push arguments in environment
Rationale:
My great friends PushArguments again! During OSR, the replacement
of a lost PushArgument (due to having this on the expression stack
while OSRing) must also be reflected in the environment. Why? This
is used for the stack depth bookkeeping. Note that I added some logic
for this less-than-obvious assumption in the flow graph checker to
make sure we don't fall into this trap again (currently only for
instance methods, since the IR is not clean for the others, that
is yet TBD). With regression test!

https://github.com/dart-lang/sdk/issues/38412
https://github.com/dart-lang/sdk/issues/38577
https://github.com/dart-lang/sdk/issues/38602

Change-Id: I8e4ff67e3e0926ff3ee6b6ac0af05f7ea0dc5ea1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/118913
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-09-30 20:05:53 +00:00
Teagan Strickland 5645cc64f5 [vm/compiler] Fix mismatches in early round trip.
Printing out the flow graph before and after round trip serialization
revealed slight differences between the flow graphs that might lead
to either bugs or different results in compilation. Remove these
differences.

Also in this change:
* Remove cases where printing or serializing a flow graph could have
  the side effect of creating new `CompileType`s or `AbstractType`s
  not previously in the graph.
* Ensure reaching types for `Value`s are cloned if the binding
  definition changes and check that reaching types either have no
  owner or are owned by the `Value`'s definition with the
  FlowGraphChecker. (Before this change, we had `CompileType`s in
  the graph whose owner had long since been removed from it.)
* Adds `ASSERT`s to check that unexpected non-canonical `Instances`
  are not allowed as the value of `ConstantInstr`s and adds some
  canonicalization that did not previously occur.

Bug: https://github.com/dart-lang/sdk/issues/36882
Change-Id: I334ffa2a6383291a7cb318343c71bd55a41269a1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117143
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
2019-09-20 08:35:44 +00:00
Aart Bik 95d7749f48 [vm/compiler] OSR on non-empty stack integrity
Rationale:
Leaving a push argument on the stack in slightly more
complex flow graphs (try-catch, loop back, conditinals)
required a bit more bookkeeping. This CL also introduces
more integrity checks to make sure the stack is as
expected at each block and instruction.

Note:
Fuzzer is regression test for new feature.

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

Change-Id: I8f7e605937d76c1a429df601e69380111737dd94
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116545
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-09-13 00:58:24 +00:00
Alexander Aprelev dabfda5770 Revert "[vm/compiler] Check def/use relation for PushArguments in environment."
This reverts commit 88e94994b1 as it breaks flutter:

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

dart::AotCallSpecializer::TryExpandCallThroughGetter(dart::Class const&, dart::InstanceCallInstr*)
[        ]   pc 0x000000010afd0ee0 fp 0x00007ffee4e6ccf0
dart::AotCallSpecializer::VisitInstanceCall(dart::InstanceCallInstr*)
[        ]   pc 0x000000010b047199 fp 0x00007ffee4e6cd30 dart::FlowGraphVisitor::VisitBlocks()
[        ]   pc 0x000000010b0f9e32 fp 0x00007ffee4e6cd50
dart::CompilerPass_ApplyICData::DoBody(dart::CompilerPassState*) const
[        ]   pc 0x000000010b0f8d84 fp 0x00007ffee4e6cde0 dart::CompilerPass::Run(dart::CompilerPassState*) const
[        ]   pc 0x000000010b0f8fc1 fp 0x00007ffee4e6ce00
dart::CompilerPass::RunInliningPipeline(dart::CompilerPass::PipelineMode, dart::CompilerPassState*)
[        ]   pc 0x000000010b0a3280 fp 0x00007ffee4e6d2f0 dart::CallSiteInliner::TryInlining(dart::Function const&,
dart::Array const&, dart::InlinedCallData*, bool)
[        ]   pc 0x000000010b0af278 fp 0x00007ffee4e6d3d0 dart::CallSiteInliner::InlineStaticCalls()
[        ]   pc 0x000000010b0aa115 fp 0x00007ffee4e6d4e0 dart::CallSiteInliner::InlineCalls()
[        ]   pc 0x000000010b0a9d01 fp 0x00007ffee4e6d5d0 dart::FlowGraphInliner::Inline()
[        ]   pc 0x000000010b0f9fdf fp 0x00007ffee4e6d640
dart::CompilerPass_Inlining::DoBody(dart::CompilerPassState*) const
[        ]   pc 0x000000010b0f8d84 fp 0x00007ffee4e6d6d0 dart::CompilerPass::Run(dart::CompilerPassState*) const
[        ]   pc 0x000000010b0f9271 fp 0x00007ffee4e6d700
dart::CompilerPass::RunPipeline(dart::CompilerPass::PipelineMode, dart::CompilerPassState*)
[        ]   pc 0x000000010afde14e fp 0x00007ffee4e6dd00
dart::PrecompileParsedFunctionHelper::Compile(dart::CompilationPipeline*)
[        ]   pc 0x000000010afdf725 fp 0x00007ffee4e6ded0 dart::PrecompileFunctionHelper(dart::Precompiler*,
dart::CompilationPipeline*, dart::Function const&, bool)
[        ]   pc 0x000000010afdb95c fp 0x00007ffee4e6df80 dart::Precompiler::CompileFunction(dart::Precompiler*,
dart::Thread*, dart::Zone*, dart::Function const&)
[        ]   pc 0x000000010afda83d fp 0x00007ffee4e6dfe0 dart::Precompiler::ProcessFunction(dart::Function const&)
[        ]   pc 0x000000010afd7294 fp 0x00007ffee4e6e010 dart::Precompiler::Iterate()
[        ]   pc 0x000000010afd5274 fp 0x00007ffee4e6e1c0 dart::Precompiler::DoCompileAll()
[        ]   pc 0x000000010afd4ddc fp 0x00007ffee4e6e570 dart::Precompiler::CompileAll()
[        ]   pc 0x000000010b200102 fp 0x00007ffee4e6e630 Dart_Precompile
[        ]   pc 0x000000010ad939cc fp 0x00007ffee4e6e7d0 dart::bin::main(int, char**)
[        ]   pc 0x00007fff5ae163d5 fp 0x00007ffee4e6e7e0 start
[        ] -- End of DumpStackTrace
[   +1 ms] Dart snapshot generator failed with exit code -6
```
Change-Id: I609493026eeed1fbe68adc9aa52a5b872d08bca0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116888
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2019-09-12 01:03:36 +00:00
Teagan Strickland 88e94994b1 [vm/compiler] Check def/use relation for PushArguments in environment.
Fix an AOT call specialization that broke this relationship.

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

Change-Id: I39803b7d995abac720702ea4b9d6a78fcbc45d4c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115981
Commit-Queue: Teagan Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-09-11 12:00:07 +00:00
Martin Kustermann 6c4fbc11b8 [gardening] Fix recently added assertion, ensuring that instructions in JIT have deopt id if they throw
Change-Id: I39569839aaaad3c3dabdb99a772b22693c3597c4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115361
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Samir Jindel <sjindel@google.com>
2019-09-04 11:00:02 +00:00
Samir Jindel b8ab1d8b7a [vm/jit] All instructions which may throw need a deopt-id.
Fixes https://github.com/dart-lang/sdk/issues/38144

Change-Id: Iad2499fcca5547066d8d7588773e99a99af0a42c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115212
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-09-03 20:39:26 +00:00
Teagan Strickland c30a2be812 [vm/compiler] Check current_ssa_temp_index in FlowGraphChecker.
Change-Id: I6da7fa6c37d65ce9d7c2adc4ee71ccc3d86e2ada
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113027
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Teagan Strickland <sstrickl@google.com>
2019-08-15 07:39:54 +00:00
Aart Bik 1b0469184e [vm/checker] Keep private method order consistent with header
Rationale:
Use a consistent order for methods in header and CC.
Change-Id: Idf887346aea402bae1a9804183f49ef10b2e04c7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/112272
Reviewed-by: Samir Jindel <sjindel@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-08-08 16:29:41 +00:00
Aart Bik 19085e3819 [dart/vm] Check SSA def-use dominance only
Rationale:
PushArguments violate some def-use dominance relations
after inlining. Fixing this seems not worth the engineering
effort. Rather we wait until we remove PushArguments
altogether (the optimizing compiler has no need for them).

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

Change-Id: I9265420ae8ec4981fe7170b9a1869dd56ae323cc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/111880
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-08-02 20:29:39 +00:00
Aart Bik 150e8f89d5 [dart/vm] Fix dominance violation
Rationale:
The flow graph checker still had a few ugly exceptions
due to dominance violation after inlining. This CL fixes
the violation, removes the exceptions from the flow graph
checker, and also adds a new utility that can be used in
some other places.

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

Change-Id: I42766af22a3696fe050b0e5c4a2dfe930933fc40
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/111502
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-08-01 15:54:33 +00:00
Samir Jindel f03ddc496b [vm/ffi] Don't make force-optimized code masquerade as unoptimized code.
Instead, we set a bit on force-optimized code so that deoptimization knows to skip it and exception
handling will execute catch-entry moves.

In addition we don't throw away deoptimization info for these codes, so that exception handling
works.

Bug: dartbug.com/37311
Change-Id: If5bcff41a98c0053c581648a9ee22b3302ceea04
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106740
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-06-24 15:25:53 +00:00
Liam Appelbe e4196ce8c6 [vm] Namespace constants like offsets and sizeofs to use runtime_api.h
Second sub-CL of https://dart-review.googlesource.com/c/sdk/+/100644
The first was here https://dart-review.googlesource.com/c/sdk/+/103487

Now that offsets_extractor is checked in, and we have a big header full
of hard coded constants, the next step is to make sure everything is
using those constants. This is essentially everything in the original
CL, except the new simarm_x64 architecture.

Bug: https://github.com/dart-lang/sdk/issues/36839
Change-Id: I236e4f30aa1df6d92209891c983b792d1835b608
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/104286
Commit-Queue: Liam Appelbe <liama@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2019-06-10 02:55:25 +00:00
Aart Bik 57c970d87a [dart/vm] Fix inconsistencies in intermediate representation
Rationale:
Stricter graph checking found some dangling pointers
and missing updates. This CL fixes the omissions
and removes some bail-outs in the graph checker itself,
making the checker stricter and more consistent. Also
adds flag to control verification (avoid excessive runtimes
for large programs in general, but allows testing even
these through command line option).

https://github.com/dart-lang/sdk/issues/36893
https://github.com/dart-lang/sdk/issues/36894
https://github.com/dart-lang/sdk/issues/36895
https://github.com/dart-lang/sdk/issues/36899

Change-Id: If4357cb897484ddfdb60722525092198771ec90a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/102420
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-05-15 19:13:49 +00:00
Aart Bik b0727bd661 [dart/vm] enhanced graph checker
Rationale:
Refactored existing verify uses (with some overlap and some
additional checks) into the graph checker. Also added more
verification code and repaired some inconsistencies in IR
found by new checker. However, some checks are disabled with
a TODO, since the IR does not currently meet all the stricter
assumptions. Fixes will follow.

https://github.com/dart-lang/sdk/issues/36893
https://github.com/dart-lang/sdk/issues/36894
https://github.com/dart-lang/sdk/issues/36895
https://github.com/dart-lang/sdk/issues/36899

Change-Id: Ic0395208da38ecb6fc8ca2551efe819e6458a731
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/101922
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-05-13 17:47:11 +00:00
Aart Bik ee1192e693 [dart/vm] Extended graph checker
Rationale:
Added more sanity checks on def-use and use-def
data structures in the IR, as well as some smi
sanity checks.
Change-Id: I3451cf45050dc305b35dd7da6f6b96d287de4887
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/100727
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-04-30 22:36:52 +00:00
Alexander Markov a8e8b2c426 [vm/compiler] Elide DebugStepCheck instructions in PRODUCT mode
This improves https://dart-review.googlesource.com/c/sdk/+/99287
by removing DebugStepCheck instructions from unoptimized IL
entirely in PRODUCT mode.

Crash mentioned in https://dart-review.googlesource.com/c/sdk/+/99287/1/runtime/vm/compiler/backend/il_arm.cc#7045
is fixed. Also, this CL adds checks which helped me to debug the crash.

Change-Id: I5452877355876b21d2ce21890626db9e5a59f170
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/99421
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-04-16 15:43:55 +00:00
Aart Bik c8b28c4cf9 [vm/compiler] graph checker addition
Rationale:
Loop part was not checking anything (no ASSERT).
Also, made test more strict (block should be
in all enveloping loops).
Change-Id: Ib918afa9c130dc8aa26cd8e8104e735075ff1176
Reviewed-on: https://dart-review.googlesource.com/c/92863
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-02-13 00:38:13 +00:00
Aart Bik 5823be65af [vm/compiler] Continued graph checker development (reland)
Rationale:
More assumption verified. Found some true issues.

Relands:
https://dart-review.googlesource.com/c/sdk/+/91702
with some fixes

https://github.com/dart-lang/sdk/issues/35803
https://github.com/dart-lang/sdk/issues/35819
https://github.com/dart-lang/sdk/issues/35848
https://github.com/dart-lang/sdk/issues/35849

Change-Id: I26101f8af3bd3fcdd5868d0882f8f096ab02b512
Reviewed-on: https://dart-review.googlesource.com/c/91945
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-02-04 23:18:42 +00:00
Aart Bik b876d12f03 Revert "[vm/compiler] Continued graph checker development"
This reverts commit b01697ba5a.

Reason for revert: we have two check fails on bleeding edge
                    reverting this until we found the underlying issue

Original change's description:
> [vm/compiler] Continued graph checker development
> 
> Rationale:
> More assumption verified. Found some true issues.
> 
> Bug:
> https://github.com/dart-lang/sdk/issues/35803
> https://github.com/dart-lang/sdk/issues/35819
> 
> Change-Id: I5526f203925fb320aa504b4e142fcf987579300a
> Reviewed-on: https://dart-review.googlesource.com/c/91702
> Commit-Queue: Aart Bik <ajcbik@google.com>
> Reviewed-by: Aart Bik <ajcbik@google.com>
> Reviewed-by: Martin Kustermann <kustermann@google.com>
> Reviewed-by: Alexander Markov <alexmarkov@google.com>

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

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

Change-Id: Ifd7ee46c42d82312f762cac7021e6a55deac83fd
Reviewed-on: https://dart-review.googlesource.com/c/91943
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-02-04 18:11:52 +00:00
Aart Bik b01697ba5a [vm/compiler] Continued graph checker development
Rationale:
More assumption verified. Found some true issues.

Bug:
https://github.com/dart-lang/sdk/issues/35803
https://github.com/dart-lang/sdk/issues/35819

Change-Id: I5526f203925fb320aa504b4e142fcf987579300a
Reviewed-on: https://dart-review.googlesource.com/c/91702
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Aart Bik <ajcbik@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2019-02-01 19:14:27 +00:00
Alexander Markov 601094e3f2 [vm/bytecode] Fix max used block id when compiling from bytecode
Fixes https://github.com/dart-lang/sdk/issues/35789

Change-Id: I061d8d5b709fa5469824c8f5d7490aa2038746a3
Reviewed-on: https://dart-review.googlesource.com/c/91440
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2019-01-28 22:29:17 +00:00
Aart Bik fc417a73ed [vm/compiler] Disable max block id check (for now)
https://github.com/dart-lang/sdk/issues/35789

Change-Id: Id37ca8191eb78431bb9bfaf23dd982b4cc5b44df
Reviewed-on: https://dart-review.googlesource.com/c/91421
Reviewed-by: Aart Bik <ajcbik@google.com>
Commit-Queue: Aart Bik <ajcbik@google.com>
2019-01-28 20:21:07 +00:00
Aart Bik e02399da33 [vm/compiler] Introduce graph checker
Rationale:
This is a start with a graph checker that verifies
the consistency of the flow graph after each compiler
pass with the goal of detecting errors as early as
possible. The checks add overhead, so are only run
in debug mode. The objective is that all written
and unwritten assumptions on the flow graph that
are relatively easy to check will be converted
into actual code.
Change-Id: Iad9927d5b0fd87a43dc6a7369174d52761d89c9e
Reviewed-on: https://dart-review.googlesource.com/c/91143
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2019-01-28 18:16:47 +00:00