This makes sure that the Compiler::CompileForLiveEdit API function uses
the common pipeline for top-level code. It ensures that a proper shared
function info object is allocated before compilation is triggered.
R=yangguo@chromium.org
Review URL: https://codereview.chromium.org/1900613002
Cr-Commit-Position: refs/heads/master@{#35590}
Binding bytecode_array to a CodeStubAssembler variable in CallEpilogue
was causing issues with the approach to inline code stubs into
interpreter bytecode handlers. Instead of doing this, just keep track of
whether a call has been made, and if so reload directly from the stack
frame when necessary.
BUG=v8:4280
LOG=N
Review URL: https://codereview.chromium.org/1895063002
Cr-Commit-Position: refs/heads/master@{#35586}
Misattributed samples are strictly related to handlers, and the size
of this special group helps understand how accurate the profile is.
For these reasons, it makes more sense to always show this group.
LOG=N
BUG=v8:4899
Review URL: https://codereview.chromium.org/1895793002
Cr-Commit-Position: refs/heads/master@{#35585}
This should be a plain refactoring change with only negligible changes
to method semantics. The main aim is to improve readability of some API
method implementations.
R=mvstanton@chromium.org
Review URL: https://codereview.chromium.org/1895033003
Cr-Commit-Position: refs/heads/master@{#35583}
This removes the helper function in question that side-steps the
interpreter without going through the canonical UseIgnition predicate.
Having such a function is dangerous as it hides paths that are not yet
covered by the interpreter (like live edit in this case).
R=yangguo@chromium.org
Review URL: https://codereview.chromium.org/1895763002
Cr-Commit-Position: refs/heads/master@{#35580}
This separation is needed to make two goals possible simultaneously:
* is should be possible to offer V8 components a simple, clean
interface to TurboFan's low-level code generation that doesn't
expose details about the TF.
* it should be possible to easily create new CodeAssembler "macros"
that don't require a review from an OWNER of the compiler directory.
Review URL: https://codereview.chromium.org/1875583003
Cr-Commit-Position: refs/heads/master@{#35576}
A new script is introduced, linux_perf_report.py, which reads Linux perf
data collected when running with FLAG_perf_basic_prof enabled and
produces an input file for flamegraph.pl, or a report of the hottest
bytecode handlers.
The bottom blocks of the produced flamegraph are bytecode handlers.
Special bottom blocks exist as well for compile routines, time spent
outside the interpreter and interpreter entry trampolines.
Because various Stubs and other pieces of JITted code do not maintain the
frame pointer, some sampled callchains might be incomplete even if V8 is
compiled with no_omit_framepointer=on. The script is able to detect the
most common anomaly where an entry trampoline appears in a chain, but not
on top, meaning that the frame of another bytecode handler is hidden. In
this case, the sample will be moved to a [misattributed] group to avoid
skewing the profile of unrelated handlers.
Misattributed samples and compilation routines are hidden by default.
BUG=v8:4899
LOG=N
Review URL: https://codereview.chromium.org/1783503002
Cr-Commit-Position: refs/heads/master@{#35574}
Reason for revert:
node.js is updated now
Original issue's description:
> Revert of [api] Restrict Template::Set to take templates or primitive values (patchset #1 id:1 of https://codereview.chromium.org/1839983002/ )
>
> Reason for revert:
> Breaks node.js
>
> Original issue's description:
> > [api] Restrict Template::Set to take templates or primitive values
> >
> > Embedders that passed in non-primitive values should either use
> > getters/setters (templates) or install a native data property,
> > otherwise, the values would all result in cross-context leaks
> >
> > BUG=none
> > R=verwaest@chromium.org
> > LOG=y
> >
> > Committed: https://crrev.com/eebdee8eafa97849cc70c25f3fecf1b075bac248
> > Cr-Commit-Position: refs/heads/master@{#35244}
>
> TBR=verwaest@chromium.org
> # Skipping CQ checks because original CL landed less than 1 days ago.
> NOPRESUBMIT=true
> NOTREECHECKS=true
> NOTRY=true
> BUG=none
>
> Committed: https://crrev.com/e1674a24ca3cb92bb4e58d368b25767bd61a0dfa
> Cr-Commit-Position: refs/heads/master@{#35264}
TBR=verwaest@chromium.org
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG=none
Review URL: https://codereview.chromium.org/1894993002
Cr-Commit-Position: refs/heads/master@{#35572}
Linux perf expects hex literals without a leading 0x, while some
implementations of printf might prepend one when using the %p format
for pointers, leading to wrongly formatted JIT symbols maps.
Instead, use V8PRIxPTR format string and cast pointer to uintpr_t,
since we have control over the exact output format of integers.
LOG=N
Review URL: https://codereview.chromium.org/1885033005
Cr-Commit-Position: refs/heads/master@{#35571}
This introduces a dedicated getter to extract call descriptors from
operators of call nodes (i.e. call and tail-call) to ensure that all
accesses are const-correct. An implicit cast of constness is undefined
behavior and hard to spot without sanitization.
R=jarin@chromium.org
Review URL: https://codereview.chromium.org/1894983002
Cr-Commit-Position: refs/heads/master@{#35570}
This fixes undefined behavior introduced by extracting the const call
descriptor of a call node as non-const. Such an implicit cast between
constness is not safe and should be avoided.
R=ahaas@chromium.org
TEST=unittests/Int64LoweringTest.CallI64Parameter
BUG=v8:4924
LOG=n
Review URL: https://codereview.chromium.org/1900563002
Cr-Commit-Position: refs/heads/master@{#35569}
Adds code to call FunctionEntryHook on entry to the InterpreterEntryTrampoline.
This should give SyzyProf enough information to build non-discontinous profile
graphs, however since interpreter functions aren't uniquely identified they will
all get lumped into one bucket. This should be good enough for SyzyProf's current
use-case.
BUG=v8:4763
LOG=N
Review URL: https://codereview.chromium.org/1884133002
Cr-Commit-Position: refs/heads/master@{#35568}
This disables parsing when we optimize directly from bytecode using
TurboFan, because TurboFan is capable of building graphs out of the
bytecode directly.
R=bmeurer@chromium.org
BUG=v8:4280
LOG=n
Review URL: https://codereview.chromium.org/1891663004
Cr-Commit-Position: refs/heads/master@{#35567}
This introduces a compiler pass that schedules the graph and re-wires effect chain according to the schedule. It also connects allocating representation changes to the effect chain, and removes the BeginRegion and EndRegion nodes - they should not be needed anymore because all effectful nodes should be already wired-in.
This is an intermediate CL - the next step is to move lowering of the Change*ToTaggedEffect nodes to StateEffectIntroduction so that we do not have to introduce the effectful versions of nodes.
Review URL: https://codereview.chromium.org/1849603002
Cr-Commit-Position: refs/heads/master@{#35565}
Add support to optimize certain comparisons of typeof with known
strings to utilize the existing ObjectIs<Type> predicates. Also
add a new ObjectIsCallable, which is used to optimize the common
typeof x === "function" pattern.
R=jarin@chromium.org
Review URL: https://codereview.chromium.org/1898653003
Cr-Commit-Position: refs/heads/master@{#35562}
port 0c05e02f25 (r35480)
original commit message:
Modifies Ignition to store code entry addresses in the dispatch table
rather than code objects. This allows the interpreter to avoid
calculating the code entry address from the code object on every
dispatch and provides a ~5-7% performance improvement on Octane with
Ignition.
This change adds ArchOpcode::kArchTailCallAddress to TurboFan to enable
tail call dispatch using these code addresses. It also adds a Dispatch
linkage creator (distinct from the stub linkage type used previously) to
allow targetting a code address target (which will diverge further from
the stub linkage type when we remove the context machine register in
Ignition).
BUG=
Review URL: https://codereview.chromium.org/1893243002
Cr-Commit-Position: refs/heads/master@{#35561}
port 5e9ddf6ce4 (r35453)
original commit message:
Reland of (https://codereview.chromium.org/1617503003)
* New atomic code stubs for x64, ia32, arm, arm64
* Add convenience functions JumpIfNotValidSmiValue, JumpIfUintNotValidSmiValue
to macro-assembler-ia32 (API based on x64 macro assembler)
* Remove runtime implementation of Atomics.load, the code stub should always be
called instead
* Add new test to mjsunit atomics test; check that Smi values of different
sizes are supported when possible, else fall back to HeapNumbers
These changes were needed to add another codestub:
* Bump kStubMajorKeyBits from 7 to 8
* Reduce ScriptContextFieldStub::kSlotIndexBits from 13 to 12
BUG=
Review URL: https://codereview.chromium.org/1894923002
Cr-Commit-Position: refs/heads/master@{#35560}
port c2de9611281d6da70fe1770072ec55f2f8aaf467(r35440)
original commit message:
Visit the Optimized Code Map on first call rather than closure creation.
This is useful for escape analysis, and helps upcoming changes to
type feedback gathering.
BUG=
Review URL: https://codereview.chromium.org/1893213002
Cr-Commit-Position: refs/heads/master@{#35558}
optimizer was merging phi lowering moves into the node defining the
phi. Addressing such cases proved to be too difficult in the existing
validator.
The new validator addresses this, by making no assumptions on phi
lowering details.
This unblocks 1824303002.
BUG=
Review URL: https://codereview.chromium.org/1855023002
Cr-Commit-Position: refs/heads/master@{#35557}
port 52148c41c9 (r35407)
original commit message:
Add relocatable pointers for wasm memory references that need to be updated when wasm GrowMemory is used. Code generator changes to accept relocatable constants as immediates.
BUG=
Review URL: https://codereview.chromium.org/1895673002
Cr-Commit-Position: refs/heads/master@{#35556}
port 2e3296666b04f0a038d9239a92e2ff39b5716f74(r35370)
original commit message:
... instead of doing stack magic. This is a cleanup in preparation for the new generators implementation.
BUG=
Review URL: https://codereview.chromium.org/1893943002
Cr-Commit-Position: refs/heads/master@{#35555}
These operators are really pure on the JavaScript level, and were only
part of the effect chain to make sure we don't accidentially schedule
them right after raw allocations, which is no longer an issue since we
now have the concept of atomic regions.
R=jarin@chromium.org
Review URL: https://codereview.chromium.org/1893543004
Cr-Commit-Position: refs/heads/master@{#35552}
Reason for revert:
Looking at types in ChangeLowering is generally unsafe.
Original issue's description:
> [turbofan] Improve lowering of ObjectIs<Type> somewhat.
>
> If we already know that the input to one of the ObjectIs<Type> nodes is
> TaggedPointer, we don't need to perform the Smi check at runtime.
>
> R=jarin@chromium.org
>
> Committed: https://crrev.com/4fc4978cee0bb7ad2ae8681a67b7032eba6a7d11
> Cr-Commit-Position: refs/heads/master@{#35368}
TBR=jarin@chromium.org,bmeurer@google.com
# Not skipping CQ checks because original CL landed more than 1 days ago.
Review URL: https://codereview.chromium.org/1893123002
Cr-Commit-Position: refs/heads/master@{#35551}
This is a much cleaner solution, which won't require nearly as much
architecture-specific code. Thanks bmeurer@!
BUG=v8:4614
LOG=y
R=bmeurer@chromium.org,jarin@chromium.org
Review URL: https://codereview.chromium.org/1891033002
Cr-Commit-Position: refs/heads/master@{#35547}