This avoids regenerating baseline code for a closure when such code
already exists for the shared function info. This is also important
because the baseline code might contain deoptimization support.
R=rmcilroy@chromium.org
BUG=chromium:606376
LOG=n
Review URL: https://codereview.chromium.org/1916833002
Cr-Commit-Position: refs/heads/master@{#35785}
This adds a baseline tier to the compilation pipeline. Currently this
tier is used to model a path from the interpreter to optimized code via
full-codegen code (to ensure sufficient type feedback). Switching from
the unoptimized tier to the baseline tier is limited to happen only when
there are no activations of the given function on the stack.
R=rmcilroy@chromium.org,bmeurer@chromium.org
Review URL: https://codereview.chromium.org/1903273004
Cr-Commit-Position: refs/heads/master@{#35757}
This removes the CompilationInfo argument from one of the logging
functions where it is unused. The long-term goal is to not pass around
the CompilationInfo at all. The assumption that the CompilationInfo is
available is incompatible with serialized code, where compilation has
happened during building time of V8 itself.
R=yangguo@chromium.org
Review URL: https://codereview.chromium.org/1901353003
Cr-Commit-Position: refs/heads/master@{#35705}
This check whether a function is being debugged is obsolete. For the
optimization path it is covered by a bailout further down. The lookup
within the optimized code map doesn't need to be covered, because that
map is guaranteed to stay empty while break slots are present.
R=mvstanton@chromium.org
Review URL: https://codereview.chromium.org/1907923003
Cr-Commit-Position: refs/heads/master@{#35694}
This is just a pure renaming because "baseline" will be the code name
for our upcoming middle tier within the compilation pipeline. It makes
sure the name "baseline" remains unused.
R=rmcilroy@chromium.org
Review URL: https://codereview.chromium.org/1904463002
Cr-Commit-Position: refs/heads/master@{#35661}
In the long run we do not want to rely on compilation results being
available on the CompilationInfo. This removes the accessor for the
abstract code, which is very inviting to be used outside of compilation
pipeline.
R=yangguo@chromium.org
Review URL: https://codereview.chromium.org/1903723002
Cr-Commit-Position: refs/heads/master@{#35653}
This moves the installation of the scope info object on the shared
function info into a separate helper to share common code. This is
preparatory work in order to reuse existing scope info objects.
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/1894023004
Cr-Commit-Position: refs/heads/master@{#35647}
This removes some obsolete conditions checking whether we are performing
concurrent OSR compilation. This feature has been removed some time ago.
R=yangguo@chromium.org
Review URL: https://codereview.chromium.org/1901163003
Cr-Commit-Position: refs/heads/master@{#35646}
Prior to 89d7bfda we always just collected the code offset and computed the
source position lazily. However, for local eval we already have the source
position ready, so we can just store that. For global eval we still have to
compute from the code offset. This CL changes the computation to be done only
on demand.
R=mstarzinger@chromium.org
BUG=chromium:604646
LOG=N
Review URL: https://codereview.chromium.org/1903463002
Cr-Commit-Position: refs/heads/master@{#35630}
This removes obsolete code that supports compiling without a shared
function info object. Even for top-level code compiled for live edit
such an object is allocated by now.
R=yangguo@chromium.org
Review URL: https://codereview.chromium.org/1896083002
Cr-Commit-Position: refs/heads/master@{#35609}
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}
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 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 hoists all bailouts out of OptimizedCompileJob::CreateGraph into
the compiler pipeline. The reason is that this moves them to a point
where we can still influence the decision which compiler to pick and
hence gives us more freedom with modeling various pipelines.
R=neis@chromium.org
Review URL: https://codereview.chromium.org/1883313003
Cr-Commit-Position: refs/heads/master@{#35532}
This moves the responsibility of preparing full-codegen code with
deoptimization support into the backends. This avoids generating such
code when optimization can be done directly from existing bytecode.
R=bmeurer@chromium.org
BUG=v8:4280
LOG=n
Review URL: https://codereview.chromium.org/1883403002
Cr-Commit-Position: refs/heads/master@{#35517}
The builtin context is not a thing anymore. This means we don't have to
worry about being able to deserialize it when optimizing top-level code.
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/1891793002
Cr-Commit-Position: refs/heads/master@{#35502}
Reason for revert:
performance impact
Original issue's description:
> Correctly annotate eval origin.
>
> There were a couple of issues with it:
> - interpreter is not supported
> - the source position was just accidentally correct for full-codegen
> - the eval origin could have been cached
>
> Also fixes a few other places to use AbstractCode.
>
> R=mstarzinger@chromium.org
>
> Committed: https://crrev.com/2f3a171adc9e620c2235bf0562145b9d4eaba66d
> Cr-Commit-Position: refs/heads/master@{#35257}
>
> Committed: https://crrev.com/ad4e8a27963b704bb70ec8bac0991c57296b1d16
> Cr-Commit-Position: refs/heads/master@{#35481}
TBR=mstarzinger@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
Review URL: https://codereview.chromium.org/1888013002
Cr-Commit-Position: refs/heads/master@{#35491}
The parser no longer disables optimization. This is done solely by the
renumbering stage. It is sufficient to mark a SharedFunctionInfo as
disabled for optimization right after the renumbering stage.
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/1891753002
Cr-Commit-Position: refs/heads/master@{#35490}
This removes the flag in question. It just duplicates the corresponding
compilation hint in the underlying SharedFunctionInfo object. Now that
the backends should have a SharedFunctionInfo available most of the time
it is safe to use the cannonical predicate.
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/1883583002
Cr-Commit-Position: refs/heads/master@{#35482}
This makes sure that when cached optimized code is found while doing
lazy compilation via Compiler::Compile installs any existing literals
array as well.
R=mvstanton@chromium.org
Review URL: https://codereview.chromium.org/1879973005
Cr-Commit-Position: refs/heads/master@{#35477}
This removes one of the duplicated pipeline implementation from the
compiler. By now we can reuse the existing CompileForDebugging for all
compilations being kicked off for debugging.
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/1885063002
Cr-Commit-Position: refs/heads/master@{#35472}
The compiler hints in question are already correctly initialized by the
NewSharedFunctionInfoForLiteral function. Reinitializing them again here
is no longer needed by now.
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/1887673002
Cr-Commit-Position: refs/heads/master@{#35471}
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.
Adding notry due to crashed builders:
NOTRY=true
BUG=
Committed: https://crrev.com/9336f4cc6d25d39a128176679a70dbd13a6d946e
Cr-Commit-Position: refs/heads/master@{#35395}
Review URL: https://codereview.chromium.org/1670143002
Cr-Commit-Position: refs/heads/master@{#35440}
Reason for revert:
Blocks roll. See https://codereview.chromium.org/1877003002/ for detailed messages.
You should be able to repro this with Linux ASAN.
Original issue's description:
> 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=
>
> Committed: https://crrev.com/9336f4cc6d25d39a128176679a70dbd13a6d946e
> Cr-Commit-Position: refs/heads/master@{#35395}
TBR=mstarzinger@chromium.org,bmeurer@chromium.org,mvstanton@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=
Review URL: https://codereview.chromium.org/1878063004
Cr-Commit-Position: refs/heads/master@{#35404}
Reason for revert:
Did not fail on another roll including this CL ..
Original issue's description:
> Revert of [compiler] Make feedback vector cope with flag changes. (patchset #1 id:1 of https://codereview.chromium.org/1869693003/ )
>
> Reason for revert:
> Blocks current roll: https://codereview.chromium.org/1876713002/ according to bisect: https://codereview.chromium.org/1872353002/#ps80001
>
> Original issue's description:
> > [compiler] Make feedback vector cope with flag changes.
> >
> > This fixes corner cases where the layout of feedback vectors baked into
> > the snapshot is different from the expected layout, depending on some
> > runtime flags. We make sure the feedback vector is regenereated for
> > functions that are not compiled. Flag changes of this kind are only
> > allowed when code is not serialized.
> >
> > An alternative solution would be to not serialize the feedback vector
> > for such cases in the first place. That solution however would have a
> > higher overhead, as it would required the serializer to be able to
> > recognize feedback vectors while generating a snapshot.
> >
> > R=mvstanton@chromium.org
> > TEST=mjsunit/regress/regress-crbug-600995
> > BUG=chromium:600995
> > LOG=n
> >
> > Committed: https://crrev.com/460bff5fb6af2bd79e610f89afdf6da9dba3cf0c
> > Cr-Commit-Position: refs/heads/master@{#35339}
>
> TBR=mvstanton@chromium.org,mstarzinger@chromium.org
>
> BUG=chromium:600995
> LOG=N
> NOTRY=true
>
> Committed: https://crrev.com/78049e9c4837f053575d6c71e53ae12fec99f1aa
> Cr-Commit-Position: refs/heads/master@{#35392}
TBR=mvstanton@chromium.org,mstarzinger@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=chromium:600995
Review URL: https://codereview.chromium.org/1876973002
Cr-Commit-Position: refs/heads/master@{#35398}
This is useful for escape analysis, and helps upcoming changes to
type feedback gathering.
BUG=
Review URL: https://codereview.chromium.org/1670143002
Cr-Commit-Position: refs/heads/master@{#35395}
Reason for revert:
Blocks current roll: https://codereview.chromium.org/1876713002/ according to bisect: https://codereview.chromium.org/1872353002/#ps80001
Original issue's description:
> [compiler] Make feedback vector cope with flag changes.
>
> This fixes corner cases where the layout of feedback vectors baked into
> the snapshot is different from the expected layout, depending on some
> runtime flags. We make sure the feedback vector is regenereated for
> functions that are not compiled. Flag changes of this kind are only
> allowed when code is not serialized.
>
> An alternative solution would be to not serialize the feedback vector
> for such cases in the first place. That solution however would have a
> higher overhead, as it would required the serializer to be able to
> recognize feedback vectors while generating a snapshot.
>
> R=mvstanton@chromium.org
> TEST=mjsunit/regress/regress-crbug-600995
> BUG=chromium:600995
> LOG=n
>
> Committed: https://crrev.com/460bff5fb6af2bd79e610f89afdf6da9dba3cf0c
> Cr-Commit-Position: refs/heads/master@{#35339}
TBR=mvstanton@chromium.org,mstarzinger@chromium.org
BUG=chromium:600995
LOG=N
NOTRY=true
Review URL: https://codereview.chromium.org/1876103002
Cr-Commit-Position: refs/heads/master@{#35392}
This moves the computation of the {expected_nof_properties} for a shared
function to where the object is actually being allocated. This is done
after parsing when the literal has been populated already. The expected
number of properties is not mutated after parsing.
R=verwaest@chromium.org
Review URL: https://codereview.chromium.org/1873173002
Cr-Commit-Position: refs/heads/master@{#35391}
This makes sure that --hydrogen-filter only filters for Crankshaft, not
for TurboFan compilations. For TurboFan there is --turbo-filter as a
separate flag already. There no longer is a single flag to filter both
compilers at the same time, one can still specify both flags however.
R=jkummerow@chromium.org
Review URL: https://codereview.chromium.org/1871343003
Cr-Commit-Position: refs/heads/master@{#35388}
We had exactly one test case for --noturbo-types, so it's likely that
the generic pipeline (without types) was already broken for quite some
time, plus no one expressed interest in maintaining it, plus it
complicates the JSGenericLowering integration. So decision is to kill
it.
R=jarin@chromium.org
Review URL: https://codereview.chromium.org/1872333002
Cr-Commit-Position: refs/heads/master@{#35387}
This refactors the OptimizedCompileJob class to be agnostic from the
actual underlying compiler. Instead it represents a base class for all
compilation jobs. The implementation is provided by the backend by just
overriding the phase methods.
Also note that this contains the semantics change of not falling back to
Crankshaft when TurboFan optimization fails. This fallback is no longer
needed and will not be supported going forward.
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/1872483002
Cr-Commit-Position: refs/heads/master@{#35377}
The parser should never need to look at the underlying closure object,
hence the field can be moved from ParseInfo into CompilationInfo.
R=rossberg@chromium.org
Review URL: https://codereview.chromium.org/1863083002
Cr-Commit-Position: refs/heads/master@{#35358}
This fixes corner cases where the layout of feedback vectors baked into
the snapshot is different from the expected layout, depending on some
runtime flags. We make sure the feedback vector is regenereated for
functions that are not compiled. Flag changes of this kind are only
allowed when code is not serialized.
An alternative solution would be to not serialize the feedback vector
for such cases in the first place. That solution however would have a
higher overhead, as it would required the serializer to be able to
recognize feedback vectors while generating a snapshot.
R=mvstanton@chromium.org
TEST=mjsunit/regress/regress-crbug-600995
BUG=chromium:600995
LOG=n
Review URL: https://codereview.chromium.org/1869693003
Cr-Commit-Position: refs/heads/master@{#35339}
Now that we no longer compile stubs from JavaScript source, but have
other means of generating stubs using our optimizing compilers, we can
assume that scope analysis has happened whenever prologues are being
assembled.
R=bmeurer@chromium.org
Review URL: https://codereview.chromium.org/1863333004
Cr-Commit-Position: refs/heads/master@{#35329}
Now that the SharedFunctionInfo is available to compilers all of the
time, we no longer need to rely on the literal for source printing.
R=titzer@chromium.org
Review URL: https://codereview.chromium.org/1866613003
Cr-Commit-Position: refs/heads/master@{#35326}
This field duplicates information from the SharedFunctionInfo. Now that
backends are guaranteed to have a SharedFunctionInfo around, we drop it.
R=verwaest@chromium.org
Review URL: https://codereview.chromium.org/1860123003
Cr-Commit-Position: refs/heads/master@{#35312}
Introduce a ResumeGeneratorTrampoline, which does the actual stack state
reconstruction (currently always restores a fullcodegen frame), and
introduce appropriate TurboFan builtins for %GeneratorPrototype%.next,
%GeneratorPrototype%.return and %GeneratorPrototype%.throw based on
this native builtin.
Also unify the flooding in case of step-in to always work based on
JSFunction and remove the special casing for JSGeneratorObject.
R=mstarzinger@chromium.org, neis@chromium.orgTBR=rossberg@chromium.org
BUG=chromium:513471
LOG=n
Review URL: https://codereview.chromium.org/1865833002
Cr-Commit-Position: refs/heads/master@{#35283}
This makes sure the type feedback vector is allocated and installed on
the SharedFunctionInfo before any of the compilers are being called.
Note that this now allows for an object state where a function is not
compiled but has a valid feedback vector is installed. This is working
as intended and supported by the rest of the system.
R=mvstanton@chromium.org
Review URL: https://codereview.chromium.org/1857203002
Cr-Commit-Position: refs/heads/master@{#35265}