Bare-metal relocation processing was removing the static call table, which is needed at runtime for JIT code.
Change-Id: Iab9a5a9256afd5f3985e8311a0131471cd04932d
Reviewed-on: https://dart-review.googlesource.com/c/88762
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
On arm64 Code.UncheckedEntryPoint() returned the wrong value because it
is based on the offset of the Label of FunctionEntryInstr.
That works on X64/ARM, but not on ARM64, because there the monomorphic
entry and frame setup is emitted in FlowGraphCompiler::CompileGraph().
Change-Id: I9c1b1be71997b83d76b385d5b811a665015c32b5
Reviewed-on: https://dart-review.googlesource.com/c/88708
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
- Also allow using the unchecked entry-point for invocations of generic functions where
there are no bounds or the bounds don't require dynamic checks.
Change-Id: I6ca1ebec777ecf2989c4fb77425d65d542d5adf2
Cq-Include-Trybots: luci.dart.try:vm-kernel-optcounter-threshold-linux-release-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-kernel-precomp-linux-release-simarm-try, vm-kernel-precomp-linux-release-simarm64-try, vm-kernel-precomp-linux-release-x64-try, vm-kernel-precomp-mac-release-simarm64-try, vm-kernel-precomp-win-release-x64-try
Reviewed-on: https://dart-review.googlesource.com/c/87181
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Remove ValidatePostFinalizePatch and SetRefinalizeAfterPatch which are
not used anymore
Remove RawClass::kRefinalizeAfterPatch bit
Change-Id: I289df7ffe3e3017335510b5c14331254ca73c503
Reviewed-on: https://dart-review.googlesource.com/c/88621
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
The interpreter only build of the Dart VM should not be including any
sources from the 'compiler' directory.
First part of restructuring sources to enable an interpreter only build
of the VM
- Move CompileClass from compiler.cc file to class_finalizer.cc
Change-Id: I8743c6537ed2d63e6991d78949f858a1ae506121
Reviewed-on: https://dart-review.googlesource.com/c/87987
Commit-Queue: Siva Annamalai <asiva@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
There might be a race between background compiler and mutator where
mutator changes guarded state of the field after Slot was created from
it.
A situation is possible where we have a clone of a field with its
guarded state set to unknown, however Slot::Get for this field returns
a Slot created from the previous clone of the same field with a known
guarded state. In this case we must add *old* clone from which the Slot
was created to guarded fields and not the new clone, because new clone
has no guarded state to begin with and thus
ParsedFunction::AddToGuardedFields(...) would simply ignore it.
Such slots with inconsistent guarded state that are not in the current
list of guarded fields arise due to unsuccessful inlining attempts.
If we built and discard the graph, then guarded fields associated with
that graph are also discarded. However the slot itself stays behind in
the compilation global cache.
TEST=vm/cc/SlotFromGuardedField
Bug: b/121271056
Change-Id: Ib6ee5ec4922c033c3a71bdc46da74ead47b1edd0
Reviewed-on: https://dart-review.googlesource.com/c/88575
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
MethodInvocation nodes which have field or getter as interface target
actually correspond to 2 calls: 1) getter; 2) implicit call() on the result
of the getter.
While this was correctly modeled in summaries in TFA, it is not correct
to attribute such MethodInvocation nodes with results of the inference,
as results correspond to an each distinct call. To fix this, Call
statements in summaries are created without attaching them to a
corresponding kernel AST node.
Change-Id: I3ea28ed85550192f8b592a926cac0eae23810811
Reviewed-on: https://dart-review.googlesource.com/c/88424
Commit-Queue: Martin Kustermann <kustermann@google.com>
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
All application of patches is now done in the front end there
are no callers to Class::ApplyPatch, deleting it.
Change-Id: I84857ea49463faea8df6ce1ce88c0f704a893e65
Reviewed-on: https://dart-review.googlesource.com/c/88426
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
References can be null --- it's written as the byte [0].
Thus in the null case it would before be [0] and now be [0].
In the non-null case it would before be [1, xyz] (1 for Tag.Something
and xyz for the actual, now positive, uint30). Now it would be [xyz].
Change-Id: Ibc08d3afb7275b0429a4d6c5e667fbd381121489
Reviewed-on: https://dart-review.googlesource.com/c/85394
Reviewed-by: Kevin Millikin <kmillikin@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
For calls via getters and fields front-end generates MethodInvocation
node with interface target pointing to a getter/field.
Such target doesn't fully represent what is being called - it should
be implicitly chained by call(), so it is incorrect to use such
interface target for type propagation.
Change-Id: I76198b443474fdcb383671fbc9946b4938a4e1df
Reviewed-on: https://dart-review.googlesource.com/c/88260
Auto-Submit: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
In some cases, we could replace a binding instruction like a
InstanceCall with a subgraph that would end with a non-binding
instruction like a StoreInstanceFieldExpr. When the inliner attempted
to replace the uses of the former, the lack of an SSA temp in the latter
would cause weird results.
Change the code to check that the new replacement has an SSA temp, and
if it doesn't, use the temp assigned to the null constant in the flow
graph.
Closes https://github.com/dart-lang/sdk/issues/35481
Change-Id: Id90717b6a906703fb442f9cd0cacc3bc14fb4887
Reviewed-on: https://dart-review.googlesource.com/c/88321
Commit-Queue: Stevie Strickland <sstrickl@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
In Dart2, the type relation "is more specific than" is no different than "is
subtype of". Since Dart1 is not supported anymore, type checking in the runtime
can be simplified and cleaned up.
Change-Id: I8e95b9e47146315c9a6f6c29b732ecbeb4e9ae97
Reviewed-on: https://dart-review.googlesource.com/c/88221
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Turn off concurrent marking during a reload as new instances could be allocated when loading a kernel file and this results in inconsistencies for the marking thread which is traversing the heap and expects to find instances only from the old set of classes.
(This change is related to Issue https://github.com/dart-lang/sdk/issues/35401)
Change-Id: I294b91d2cc5d86b860a77684457b0f963d2fe557
Reviewed-on: https://dart-review.googlesource.com/c/87707
Commit-Queue: Siva Annamalai <asiva@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Rationale:
Finds general bounds on an induction variable by
looking at loop exits that use strict comparisons.
An intended client is bounds-check-elimination (AOT).
Change-Id: Icfd6481aad9669c15b78630e4322667cfce7c1ef
Reviewed-on: https://dart-review.googlesource.com/c/87485
Commit-Queue: Aart Bik <ajcbik@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
CanonicalType is a leftover method/field from the time classes were keeping
track of their own canonical types and is still used for non-generic classes.
DeclarationType is more general and can be used where CanonicalType is used.
The field canonical_type_ is renamed to declaration_type_ and now caches the
DeclarationType.
Change-Id: I585c7bc2d3ae760a4a0e783bc77fb8d8efdbf682
Reviewed-on: https://dart-review.googlesource.com/c/87482
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
This fixes a bug with generation of coverage report in presence of mixin declaration/application coming from different dill files.
Change-Id: Ie80fd6080cf65c3b895606809194c2bc6a08612a
Reviewed-on: https://dart-review.googlesource.com/c/87605
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Keerti Parthasarathy <keertip@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
This temporarily fixes issue 35432, but a more permanent fix should be applied
to the optimizing compiler.
Change-Id: Ibb43b180ea74f2693c48128e90badbb6b411f5b5
Reviewed-on: https://dart-review.googlesource.com/c/87500
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Previous the test was accessing this array without any synchronization
meaning that stores of new ICData objects into this array could
be observed too early, before ICData object itself is initialized.
Also add release/acquire in the code that attaches ICData map to
the function - to ensure that if compiler thread sees ICData map
then it is guaranteed to be fully initialized.
Closes#34999
Change-Id: I95ba857122e2a5afed90b1518d591282e8255002
Reviewed-on: https://dart-review.googlesource.com/c/87583
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Auto-Submit: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>