Commit Graph

33139 Commits

Author SHA1 Message Date
bmeurer
e6e32315cc [turbofan] Eliminate redundant elements kind transitions.
A TransitionElementsKind operation is redundant if we already know that
the object has the target_map (independent of what the source_map might
be).

R=yangguo@chromium.org

Review-Url: https://codereview.chromium.org/2233403003
Cr-Commit-Position: refs/heads/master@{#38597}
2016-08-12 06:52:33 +00:00
yangguo
b8c050424e [debugger] separate break point info from code instrumentation.
Previously, we would both instrument the code, and add/remove
BreakPointInfo objects through BreakLocation. This is bad design and
unsuitable for having two different code kinds.

We would now add/remove BreakPointInfo objects, and use that as source
of truth when instrumenting the code. If we have both bytecode and FCG
code, we would simply apply these break points twice to either.

Notable changes:
- Removed many functionality from BreakLocation.
- Instrumentation (patching code for breaks) happens by applying break
  point info onto code.
- Instrumentation (code patching) is done by the BreakIterator. For
  bytecode, it's BytecodeArrayBreakIterator. For FCG code, it's
  CodeBreakIterator.
- Changes to code instrumentation mostly involves clearing current
  instrumentation and then (re-)applying break points.
- DebugInfo can now reference both bytecode and FCG code.

R=jgruber@chromium.org, mstarzinger@chromium.org
BUG=v8:5265

Review-Url: https://codereview.chromium.org/2238893002
Cr-Commit-Position: refs/heads/master@{#38596}
2016-08-12 06:06:49 +00:00
zhengxing.li
64658b6c28 X87: Use IsPropertyName instead of IsInternalizedString in VisitObjectLiteral.
port 51e9d5ad2a (r38577)

  original commit message:
  Use IsPropertyName in VisitObjectLiteral to decide whether to do
  a named property store or call SetProperty.

BUG=

Review-Url: https://codereview.chromium.org/2241693002
Cr-Commit-Position: refs/heads/master@{#38595}
2016-08-12 05:49:20 +00:00
yangguo
c84b850954 [serializer] checksum a larger part of the code snapshot.
So far we only snapshot the payload data for the deserializer, but
not the data for heap reservation or the code stub keys.

At the same time this change turns some CHECKs that fail in the wild
to DCHECKs. We can try turning them back to CHECKs some other time.

TBR=ahaas@chromium.org
BUG=chromium:636876

Review-Url: https://codereview.chromium.org/2237883002
Cr-Commit-Position: refs/heads/master@{#38594}
2016-08-12 05:09:49 +00:00
bmeurer
63dd16849f [turbofan] The PlainPrimitiveToNumber operator cannot have side effects.
An invocation of the ToNumber builtin resulting from lowering the
PlainPrimitiveToNumber cannot have any observable side effects and
thus the builtin call itself is eliminatable.

R=yangguo@chromium.org

Review-Url: https://codereview.chromium.org/2239923004
Cr-Commit-Position: refs/heads/master@{#38593}
2016-08-12 05:08:41 +00:00
v8-autoroll
6f435614fe Update V8 DEPS.
Rolling v8/build to 37fd368b5f9d7690eac34cd440275ae323b1dab2

Rolling v8/buildtools to f8fc76ea5ce4a60cda2fa5d7df3d4a62935b3113

Rolling v8/third_party/WebKit/Source/platform/inspector_protocol to 87a50f796882982f6ae1efbd060e4f69467db547

TBR=machenbach@chromium.org,vogelheim@chromium.org,hablich@chromium.org

Review-Url: https://codereview.chromium.org/2243493006
Cr-Commit-Position: refs/heads/master@{#38592}
2016-08-12 03:25:05 +00:00
vogelheim
7a100dffc6 Speed up parsing w/ grammar shortcut.
Certain token combinations (e.g. number literal followed by semicolon) will
result in a single AST node, but require many levels of recursive descent
parsing to determine this (11 in this example). For some 'obvious'
combinations, we'll simply generate the appropriate AST node fairly far up
in the call tree.

This yields a mild but consistent parser speedup. The main con is code duplication.

[Speedup between 0..20ms in parse time among a set of 25 commonly used sites. Speedup of ~180ms for a site w/ a very large codebase (adwords.google.com). Minor slow-downs between 0..8ms for <20% of sites.]

R=marja@chromium.org
BUG=v8:4947

Review-Url: https://codereview.chromium.org/2188153002
Cr-Commit-Position: refs/heads/master@{#38591}
2016-08-11 18:17:30 +00:00
neis
93ad996e28 [interpreter] Simplify hole check condition for variable assignments.
There's no need to check IsLexicalVariableMode since it's subsumed
by binding_needs_init.

Drive-by change: in VisitVariableLoad, move SetResultInAccumulator
out of switch cases.

BUG=

Review-Url: https://codereview.chromium.org/2232313002
Cr-Commit-Position: refs/heads/master@{#38590}
2016-08-11 17:47:27 +00:00
neis
63f311ad34 [ast] Never declare non-lexical variables as kNeedsInitialization.
R=adamk@chromium.org
BUG=

Review-Url: https://codereview.chromium.org/2232343002
Cr-Commit-Position: refs/heads/master@{#38589}
2016-08-11 17:44:59 +00:00
bgeron
ec9465eb9b [turbolizer] Enlarge node labels and bubbles. Fix dead node display on old JSON.
BUG=

Review-Url: https://codereview.chromium.org/2230313002
Cr-Commit-Position: refs/heads/master@{#38588}
2016-08-11 16:46:18 +00:00
dgozman
ab53a8b9ec [inspector] Remove inspector_protocol_parser_test target.
This target introduces a dependency on WebKit/platform which is not the way we want it.
Keeping the build files in src/inspector, as they are not used and will be useful later on.

BUG=none
NOPRESUBMIT=true

Review-Url: https://codereview.chromium.org/2239603002
Cr-Commit-Position: refs/heads/master@{#38587}
2016-08-11 16:45:14 +00:00
bgeron
dc38437291 [turbofan] Verify nodes without kNoThrow have only IfSuccess or IfException uses.
BUG=

Review-Url: https://codereview.chromium.org/2227763004
Cr-Commit-Position: refs/heads/master@{#38586}
2016-08-11 15:37:33 +00:00
rmcilroy
cda8387c89 [Interpreter] Remove LdaConstant+ToName peephole optimization.
This optimization required access to the heap which we can't do off-thread.
There doesn't seem to be a regression without this optmization in anycase,
so just rip it out.

BUG=v8:5203

Review-Url: https://codereview.chromium.org/2238853002
Cr-Commit-Position: refs/heads/master@{#38585}
2016-08-11 15:11:54 +00:00
mlippautz
d27d293879 [heap] Fix SizeOfObjects tests
Use CollectAllAvailableGarbage for initial GC.

R=hpayer@chromium.org
BUG=

Review-Url: https://codereview.chromium.org/2236403002
Cr-Commit-Position: refs/heads/master@{#38584}
2016-08-11 14:22:04 +00:00
rmcilroy
c6e0c8e2c6 [Interpereter] Avoid Canonicalizing Handles created during bytecode finalization
Should fix a performance regression introduced by introducing
a CanonicalHandleScope for bytecode compilation. Also fix a
missing CanonicalHandleScope in GetSharedFunctionInfo.

BUG=chromium:634953

Review-Url: https://codereview.chromium.org/2226923002
Cr-Commit-Position: refs/heads/master@{#38583}
2016-08-11 14:01:00 +00:00
machenbach
08f7c10e38 Revert of Throw when case mapping result > max string length (patchset #3 id:40001 of https://codereview.chromium.org/2236593002/ )
Reason for revert:
The test is very flaky and made it on many configurations into the top 10 of the slowest tests:

https://build.chromium.org/p/client.v8.ports/builders/V8%20Arm/builds/845
https://build.chromium.org/p/client.v8/builders/V8%20Win32%20-%20nosnap%20-%20shared/builds/15418
https://build.chromium.org/p/client.v8/builders/V8%20Linux/builds/12369/steps/Check/logs/durations

Original issue's description:
> Throw when case mapping result > max string length
>
> Throw 'Range Error: invalid string length' when the result of
> case mapping is longer than the max string length (kMaxLength in
> objects.h = 1 << 28 - 16).
>
> This is for case mapping with ICU.
>
> BUG=v8:5271
> TEST=intl/general/case-mapping.js with --icu_case_mapping
>
> Committed: https://crrev.com/c7a2046670468b900b9dbbb4ce45beb5e0e717fd
> Cr-Commit-Position: refs/heads/master@{#38565}

TBR=littledan@chromium.org,jshin@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=v8:5271

Review-Url: https://codereview.chromium.org/2236393002
Cr-Commit-Position: refs/heads/master@{#38582}
2016-08-11 13:39:46 +00:00
hpayer
7ad2de1703 [heap] Register end of black areas to support faster filtering of invalid slots.
BUG=chromium:630386

Review-Url: https://codereview.chromium.org/2236543002
Cr-Commit-Position: refs/heads/master@{#38581}
2016-08-11 13:34:28 +00:00
verwaest
e77a78cd2d Cleanup scope resolution
BUG=v8:5209

Review-Url: https://codereview.chromium.org/2230323004
Cr-Commit-Position: refs/heads/master@{#38580}
2016-08-11 13:26:06 +00:00
jpp
b2b40134d8 [WASM] Exception handling prototype.
------------------------------------------------------------------------

This CL adds support for decoding eh-related wasm opcodes:
* Throw: used for raising an exception; the thrown value lives on top of
         the evaluation stack;
* TryCatch: used to start a try block that has a catch clause;
* TryFinally: used to start a try block that has a finally clause;
* TryCatchFinally: used to start a try block that has both catch and
                   finally clauses;
* Catch <local>: used to start the catch block of a
                 TryCatch/TryCatchFinally block; the thrown value is
                 stored in local <local>; and
* Finally: used to start a finally block of TryFinally/TryCatchFinally.

Three different opcodes are used to start a try block to simplify the
AST construction during bytecode parsing.

BUG=

Review-Url: https://codereview.chromium.org/2222193004
Cr-Commit-Position: refs/heads/master@{#38579}
2016-08-11 13:15:12 +00:00
bmeurer
b8f475045c [turbofan] Add inlined Array.prototype.pop support.
This adds a very first version of inlined Array.prototype.pop into
TurboFan optimized code. We currently limit the inlining to fast
object or smi elements, until the unclear situation around hole NaNs
is resolved and we have a clear semantics inside the compiler.

It's also probably overly defensive in when it's safe to inline
the call to Array.prototype.pop, but we can always extend that
later once we have sufficient trust in the implementation and see
an actual need to extend it.

BUG=v8:2229,v8:3952,v8:5267
R=epertoso@chromium.org

Review-Url: https://codereview.chromium.org/2239703002
Cr-Commit-Position: refs/heads/master@{#38578}
2016-08-11 13:13:21 +00:00
rmcilroy
51e9d5ad2a Use IsPropertyName instead of IsInternalizedString in VisitObjectLiteral.
Use IsPropertyName in VisitObjectLiteral to decide whether to do
a named property store or call SetProperty.

BUG=v8:5203

Review-Url: https://codereview.chromium.org/2237553004
Cr-Commit-Position: refs/heads/master@{#38577}
2016-08-11 12:52:29 +00:00
bmeurer
7ada016899 [turbofan] Some strength reduction for ConvertTaggedHoleToUndefined.
We can fold ConvertTaggedHoleToUndefined into CheckNumber and
CheckTaggedSigned, as they deoptimize no matter if the input
is undefined or hole.

R=jarin@chromium.org

Review-Url: https://codereview.chromium.org/2233393002
Cr-Commit-Position: refs/heads/master@{#38576}
2016-08-11 12:50:04 +00:00
verwaest
748517f7d4 Redirect most NewUnresolved calls over Parser
BUG=v8:5209

Review-Url: https://codereview.chromium.org/2233473002
Cr-Commit-Position: refs/heads/master@{#38575}
2016-08-11 12:04:24 +00:00
hpayer
76b5353493 Logger does not need to invoke the garbage collector to iterate the heap.
BUG=

Review-Url: https://codereview.chromium.org/2231363002
Cr-Commit-Position: refs/heads/master@{#38574}
2016-08-11 10:49:17 +00:00
Alexander.Gilday2
ab32e67f86 [builtins] Migrate StringToNumber to TurboFan builtin.
Migrate the platform StringToNumber builtin to TurboFan.

BUG=v8:5049

Review-Url: https://codereview.chromium.org/2235983003
Cr-Commit-Position: refs/heads/master@{#38573}
2016-08-11 10:09:58 +00:00
bgeron
7c3be98986 [turbofan] Fix more places where IfSuccess lacks on a non-NoThrow node.
These places were found by the trybots.

- regress-crbug-485410

BUG=

Review-Url: https://codereview.chromium.org/2230923002
Cr-Commit-Position: refs/heads/master@{#38572}
2016-08-11 09:02:09 +00:00
zhengxing.li
4a1ae10952 X87: [turbofan] Remove the FloatXXSubPreserveNan operators.
port f8938e5096 (r38437)

  original commit message:
  This CL changes the semantics of FloatXXSub to match the semantics of
  the semantics of FloatXXSubPreserveNan. Therefore there is no need
  anymore for the FloatXXSubPreserveNan operators.

  The optimizations in VisitFloatXXSub which are removed in this CL have
  already been moved to machine-operator-reducer.cc in
  https://codereview.chromium.org/2226663002

BUG=

Review-Url: https://codereview.chromium.org/2236153002
Cr-Commit-Position: refs/heads/master@{#38571}
2016-08-11 08:56:10 +00:00
zhengxing.li
e41e09caf2 X87: [wasm] Use the Float64Max/Min machine operators to implement F64Max/Min.
port 96c90f6c64 (r38410)

  original commit message:
  I had to adjust Float64Max/Min on x64 slightly to return the default
  wasm NaN (0x7FF0000000000000) instead of the all-ones NaN
  (0xFFFFFFFFFFFFFFFF).

BUG=

Review-Url: https://codereview.chromium.org/2233273002
Cr-Commit-Position: refs/heads/master@{#38570}
2016-08-11 08:47:17 +00:00
ahaas
8d4910893c [wasm] Allow import function to be any kind of callables.
With this CL all kinds of Callable can imported into wasm. Please take a special look at the context that is used now in the WasmToJSWrapper.

BUG=633895
TEST=mjsunit/wasm/ffi.js

Review-Url: https://codereview.chromium.org/2208703002
Cr-Commit-Position: refs/heads/master@{#38569}
2016-08-11 08:33:54 +00:00
bmeurer
3cc4e25cbf [turbofan] Avoid unnecessary minus zero checks for Float64->Tagged.
When we change representation from Float64 to Tagged and we know that
the input value can never be -0, we don't need to bother introducing
the check for -0 during effect/control linearization.

R=jarin@chromium.org

Review-Url: https://codereview.chromium.org/2231963002
Cr-Commit-Position: refs/heads/master@{#38568}
2016-08-11 05:45:01 +00:00
bmeurer
c0439051d6 [turbofan] Utilize type information for alias analysis.
If the intersection of the types of nodes a and b is empty, then there's
no way that a and b could ever refer to the same object, so we can use
that information for alias analysis.

Drive-by-fix: Improve use of types to enable typed alias analysis to
become more effective. Also fix an ASAN issue uncovered by this CL.

R=jarin@chromium.org

Review-Url: https://codereview.chromium.org/2237433003
Cr-Commit-Position: refs/heads/master@{#38567}
2016-08-11 05:41:41 +00:00
v8-autoroll
fe2b7b9ffb Update V8 DEPS.
Rolling v8/build to 01ebc7132bdd79aef8a0bdda3fa87ec4cd95d550

Rolling v8/tools/gyp to 702ac58e477214c635d9b541932e75a95d349352

Rolling v8/tools/mb to 3e296ee98914402a53413da4e48fe02623f80361

TBR=machenbach@chromium.org,vogelheim@chromium.org,hablich@chromium.org

Review-Url: https://codereview.chromium.org/2230213003
Cr-Commit-Position: refs/heads/master@{#38566}
2016-08-11 03:27:04 +00:00
jshin
c7a2046670 Throw when case mapping result > max string length
Throw 'Range Error: invalid string length' when the result of
case mapping is longer than the max string length (kMaxLength in
objects.h = 1 << 28 - 16).

This is for case mapping with ICU.

BUG=v8:5271
TEST=intl/general/case-mapping.js with --icu_case_mapping

Review-Url: https://codereview.chromium.org/2236593002
Cr-Commit-Position: refs/heads/master@{#38565}
2016-08-10 21:46:05 +00:00
gdeepti
fe555065ea Revert runtime lowering of wasm SIMD ops
This CL reverts the runtime lowering introduced here -
https://codereview.chromium.org/1991143002/
Additional ops to the runtime pass will cause GC issues as WASM frames may
have outgoing arguments to runtime calls that have pointers that aren't scanned.

Preserving decoding of SIMD opcodes and macros for native implementations.

R=bbudge@chromium.org, mtrofin@chromium.org, bradnelson@chromium.org

Review-Url: https://codereview.chromium.org/2235013002
Cr-Commit-Position: refs/heads/master@{#38564}
2016-08-10 21:39:21 +00:00
lpy
375bf0eb19 [Tracing] Minor bugs fix.
1. The third parameter of strncpy should be the length of source string.
2. Value contains " should be valid.

BUG=v8:4561

Review-Url: https://codereview.chromium.org/2232683002
Cr-Commit-Position: refs/heads/master@{#38563}
2016-08-10 21:07:48 +00:00
bgeron
1cefcd4db1 [turbolizer] Display labels when they're at most 40 chars, not 30.
BUG=
R=danno

Review-Url: https://codereview.chromium.org/2232933002
Cr-Commit-Position: refs/heads/master@{#38562}
2016-08-10 20:23:57 +00:00
bgeron
a9fe26ef2e [turbolizer] Use a 300ms transition for expanding/collapsing panes, not 1000ms.
BUG=
R=danno

Review-Url: https://codereview.chromium.org/2230783005
Cr-Commit-Position: refs/heads/master@{#38561}
2016-08-10 20:09:26 +00:00
littledan
7ea3b09982 Destructuring/default tests for generators and async functions
This patch adds additional tests for async functions and generators, in how
they interact with destructuring, default arguments and shadow parameter
copying.

BUG=v8:5167

Review-Url: https://codereview.chromium.org/2229243002
Cr-Commit-Position: refs/heads/master@{#38560}
2016-08-10 19:32:29 +00:00
bmeurer
e61bd68ede [turbofan] Introduce a dedicated ConvertTaggedHoleToUndefined operator.
Separate ConvertTaggedHoleToUndefined and CheckTaggedHole into two
separate operators, where the former is pure and just turns into
trivial control flow in the EffectControlLinearizer.

R=jarin@chromium.org

Review-Url: https://codereview.chromium.org/2236443004
Cr-Commit-Position: refs/heads/master@{#38559}
2016-08-10 19:15:52 +00:00
adamk
73b0f15714 Function name variable does not need a VariableDeclaration
This changes Scope::function_ (for holding the name binding
for named function expression) from a VariableDeclaration
to a Variable. No work is done when visiting this declaration,
since it's kCreatedInitialized, so we can treat it like
other function-specific variables.

This simplifies a wide variety of code, and centralizes
the logic for constructing the variable inside scopes.cc.
This may one day make it easier to eliminate the CONST_LEGACY
VariableMode.

R=neis@chromium.org, verwaest@chromium.org
BUG=v8:5209

Review-Url: https://codereview.chromium.org/2232633002
Cr-Commit-Position: refs/heads/master@{#38558}
2016-08-10 18:45:53 +00:00
bgeron
b70e73d8d6 [turbofan] Disable store elimination, which is suspected to cause test flakes.
BUG=v8:5280

Review-Url: https://codereview.chromium.org/2235703004
Cr-Commit-Position: refs/heads/master@{#38557}
2016-08-10 18:27:12 +00:00
adamk
14fdd0101a Remove stray golden file
R=rmcilroy@chromium.org

Review-Url: https://codereview.chromium.org/2233533002
Cr-Commit-Position: refs/heads/master@{#38556}
2016-08-10 17:34:00 +00:00
adamk
680ae2c001 [interpreter] Logically separate hole-checking and const assignment errors
In addition, make use of Variable::binding_needs_init() in addition to
VariableMode when deciding whether to do hole checking in variable assignment.

R=rmcilroy@chromium.org

Review-Url: https://codereview.chromium.org/2227203002
Cr-Commit-Position: refs/heads/master@{#38555}
2016-08-10 17:32:41 +00:00
lpy
c72f637c73 Move SimulatorHelper into V8 out of profiler clients.
This patch is based on alph's CL https://codereview.chromium.org/2128613004/.

This patch makes GetStackSample propogate the register state when using
simulator helper, and adds argument to avoid using register state from simulator
when pass the native register state.

BUG=v8:4789
LOG=N

Review-Url: https://codereview.chromium.org/2189513002
Cr-Commit-Position: refs/heads/master@{#38554}
2016-08-10 17:12:27 +00:00
lpy
0359e1f63e [Tracing] Create TraceConfig JSON string parser in D8.
BUG=v8:4561
LOG=N

Review-Url: https://codereview.chromium.org/2208873002
Cr-Commit-Position: refs/heads/master@{#38553}
2016-08-10 17:11:08 +00:00
krasin
a9b5eb0c59 cctest: put some types into anonymous namespace.
This is to prevent a collision with Expectations class defined in test-field-type-tracking.cc, which happens in Clang under certain conditions (official build + Precise + unknown).

While the original intent was to just workaround the Clang bug, putting types into anonymous namespace seems reasonable anyway (thank you to Benedikt Meurer for the suggestion!)

BUG=630335

Review-Url: https://codereview.chromium.org/2227073002
Cr-Commit-Position: refs/heads/master@{#38552}
2016-08-10 16:46:33 +00:00
bjaideep
04c51b214f PPC/s390: Use Variable::binding_needs_init() to determine hole initialization
Port 6768456db5

Original commit message:

    The old code was using VariableMode, but that signal is both
    over-pessimistic (some CONST and LET variables need no hole-initialization)
    and inconsistent with other uses of the InitializationFlag enum (such
    as %LoadLookupSlot).

    This changes no observable behavior, but removes unnecessary hole
    initialization and hole checks in a few places, including
    block-scoped function declarations, super property lookups,
    and new.target.

R=adamk@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com, mbrandy@us.ibm.com

BUG=
LOG=N

Review-Url: https://codereview.chromium.org/2229383004
Cr-Commit-Position: refs/heads/master@{#38551}
2016-08-10 16:43:56 +00:00
rmcilroy
d1ab9f126c [Interpreter] Avoid allocating handles in bytecode-array-writer
Don't allocate handles in the bytecode array writer, to allow off-thread
bytecode generation.

BUG=v8:5203

Review-Url: https://codereview.chromium.org/2226333002
Cr-Commit-Position: refs/heads/master@{#38550}
2016-08-10 16:42:04 +00:00
ishell
b558894ac4 [ic] Merge LoadGlobalIC_Slow builtins for inside typeof and outside typeof cases.
... and let the stub ask the IC whether it should throw or not when the property was not found.
This CL undoes ast-numbering changes made here: https://codereview.chromium.org/2219303002/

BUG=chromium:634467
TBR=verwaest@chromium.org

Review-Url: https://codereview.chromium.org/2220203002
Cr-Commit-Position: refs/heads/master@{#38549}
2016-08-10 16:36:06 +00:00
mstarzinger
685210ecb0 [interpreter] Switch profiler to use frames for OSR.
This switches the interface of the runtime profiler to use frames as
opposed to functions for performing on-stack replacement. Requests for
such replacements need to target a specific frame. This will enable us
to activate bytecode as well as baseline code for the same function.

The existing %OptimizeOsr runtime function also had to adapted and now
takes an optional stack depth to target a specific stack frame.

R=bmeurer@chromium.org
BUG=v8:4764

Review-Url: https://codereview.chromium.org/2230783004
Cr-Commit-Position: refs/heads/master@{#38548}
2016-08-10 15:59:31 +00:00