Commit Graph

31174 Commits

Author SHA1 Message Date
epertoso
0d22e7e46a [x64/ia32] Deal with the non-transitivity of InstructionSelector::CanCover() when folding loads into branches.
Sequences like:

1: Load[kRepWord32|kTypeInt32](<address>, ...)
2: Word32And(1, <constant>)
3: Word32Equal(2, <another constant>)
4: Store[(kRepWord32 : NoWriteBarrier)](<address>, <value>)
5: Branch[None](3, ...) -> B1, B2

where #1 and #4 refer to the same memory location, are problematic because in VisitBranch we assume that 'InstructionSelector::CanCover()' is transitive.

What happens is that CanCover(5, 3) is true (3 is a pure op), and so are CanCover(3, 2), CanCover(2, 1), but the effect level of 5 and 3 never gets checked because 3 is a pure op. Upon VisitBranch, we ended up materializing:

mov [address], <value>
test [address], <another constant>

With this patch, it becomes:

mov reg, [address]
mov [address], <value>
test reg, <another constant>

BUG=chromium:611976

Review-Url: https://codereview.chromium.org/2008493002
Cr-Commit-Position: refs/heads/master@{#36482}
2016-05-24 16:11:39 +00:00
bjaideep
075f5a416d PPC: [stubs] Convert Internal/ArraySingleArgumentsConstructor to a TurboFan stub
Port 02c8b6f7f0

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

BUG=chromium:608675
LOG=N

Review-Url: https://codereview.chromium.org/2005753005
Cr-Commit-Position: refs/heads/master@{#36481}
2016-05-24 15:27:37 +00:00
mstarzinger
7ca1f80d31 [runtime] Fix number of literals for builtin functions.
This fixes the SharedFunctionInfo::num_literals field for global builtin
functions (e.g. {Object} and friends) to be accurate. The field was not
being updated by Runtime_SetCode. It also removes the dangerous and by
now obsolete JSFunction::NumberOfLiterals accessor.

R=mvstanton@chromium.org

Review-Url: https://codereview.chromium.org/2007943002
Cr-Commit-Position: refs/heads/master@{#36480}
2016-05-24 15:12:58 +00:00
titzer
796db52fc7 [wasm] Separate reloc info stats from code size stats.
R=ahaas@chromium.org
BUG=

Review-Url: https://codereview.chromium.org/2003383002
Cr-Commit-Position: refs/heads/master@{#36479}
2016-05-24 14:55:28 +00:00
yangguo
fb8e0ab3ee [json] support property list argument in BasicJsonStringifier.
R=cbruni@chromium.org

Review-Url: https://codereview.chromium.org/2004413002
Cr-Commit-Position: refs/heads/master@{#36478}
2016-05-24 13:56:47 +00:00
bmeurer
1dace25984 [turbofan] Properly connect DeoptimizeIf/Unless to effect chain.
The DeoptimizeIf and DeoptimizeUnless operators should actually produce
an effect in addition to the control output.

R=jarin@chromium.org

Review-Url: https://codereview.chromium.org/2002253003
Cr-Commit-Position: refs/heads/master@{#36477}
2016-05-24 13:17:31 +00:00
rmcilroy
5c602c6fcc [Interpreter] Make lazy compilation the default.
BUG=v8:4280,v8:5038
LOG=N

Review-Url: https://codereview.chromium.org/2007453002
Cr-Commit-Position: refs/heads/master@{#36476}
2016-05-24 12:52:50 +00:00
machenbach
15fda5ddcd [gn] Configure trace_events for v8 stand-alone
BUG=chromium:474921
NOTRY=true

Review-Url: https://codereview.chromium.org/2011493002
Cr-Commit-Position: refs/heads/master@{#36475}
2016-05-24 12:47:52 +00:00
bmeurer
3f8de190f9 [turbofan] Properly run TypeHintAnalyzer and AstLoopAssignmentAnalyzer on inlinees.
Previously we only ran these analysis passes on the outermost function,
but not on inlined functions.

R=jarin@chromium.org

Review-Url: https://codereview.chromium.org/2003363002
Cr-Commit-Position: refs/heads/master@{#36474}
2016-05-24 12:30:41 +00:00
machenbach
db5246fadf [build] Enable -Wformat-pedantic compiler warning
For cross-compiler-compatibility and standards compliance %p
requires a void*, rather than any pointer type.

This was fixed in:
https://codereview.chromium.org/2001073002/

BUG=chromium:474921

Review-Url: https://codereview.chromium.org/2011483002
Cr-Commit-Position: refs/heads/master@{#36473}
2016-05-24 12:23:27 +00:00
mvstanton
a6ddbef064 Collect call counts for constructor calls, too.
The TurboFan inliner makes use of these counts.

BUG=

Review-Url: https://codereview.chromium.org/1969783002
Cr-Commit-Position: refs/heads/master@{#36472}
2016-05-24 11:53:45 +00:00
machenbach
daae44f69b [build] Enable -Wlong-long compiler warning.
BUG=chromium:474921

Review-Url: https://codereview.chromium.org/2004063003
Cr-Commit-Position: refs/heads/master@{#36471}
2016-05-24 11:53:44 +00:00
yangguo
47af330df7 Reduce boilerplace for common pattern to return MaybeHandle.
R=franzih@chromium.org

Review-Url: https://codereview.chromium.org/2006673002
Cr-Commit-Position: refs/heads/master@{#36470}
2016-05-24 11:46:31 +00:00
jgruber
9ffedb50d5 Remove inessential functions from the JS Script class
Moved functionality of Script.{lineCount, lineFromPosition, sourceLine,
locationFromLine, and sourceSlice} into runtime functions.

R=yangguo@chromium.org
BUG=

Review-Url: https://codereview.chromium.org/2003303002
Cr-Commit-Position: refs/heads/master@{#36469}
2016-05-24 11:41:21 +00:00
zhengxing.li
2abe5cd275 X87: [stubs] Convert Internal/ArraySingleArgumentsConstructor to a TurboFan stub.
port 02c8b6f7f0 (r36463)

  original commit message:

BUG=

Review-Url: https://codereview.chromium.org/2000253004
Cr-Commit-Position: refs/heads/master@{#36468}
2016-05-24 11:38:47 +00:00
neis
ccb24b8488 [generators] Fix loading of FormalParameterCount on 64bit archs.
BUG=v8:4907

Review-Url: https://codereview.chromium.org/2006653003
Cr-Commit-Position: refs/heads/master@{#36467}
2016-05-24 11:04:27 +00:00
machenbach
a23222ed32 [build] Fix a clang warning
For cross-compiler-compatibility and standards compliance %p
requires a void*, rather than any pointer type.

BUG=chromium:474921

Review-Url: https://codereview.chromium.org/2001073002
Cr-Commit-Position: refs/heads/master@{#36466}
2016-05-24 10:47:24 +00:00
machenbach
52c4010ff7 [gn] Fix setting v8_target_arch default
This moves setting the v8_target_arch default to the shared
v8.gni, so that it's available in build_overrides for
stand-alone mode.

BUG=chromium:605732, chromium:474921
NOTRY=true

Review-Url: https://codereview.chromium.org/2006213002
Cr-Commit-Position: refs/heads/master@{#36465}
2016-05-24 10:44:51 +00:00
machenbach
3be95b712c [gn] Make v8_target_arch a GN declare_arg()
There are bots on the chromium.lkgr waterfall that need to
be able to set v8_target_arch to "arm" while the rest of
the target build is "x86". This CL makes that argument
a declare_arg(), so that we can do that.

BUG=chromium:605732,chromium:474921
NOTRY=true

Review-Url: https://codereview.chromium.org/2007843002
Cr-Commit-Position: refs/heads/master@{#36464}
2016-05-24 08:55:35 +00:00
danno
02c8b6f7f0 [stubs] Convert Internal/ArraySingleArgumentsConstructor to a TurboFan stub
BUG=chromium:608675
LOG=n

Review-Url: https://codereview.chromium.org/1987183002
Cr-Commit-Position: refs/heads/master@{#36463}
2016-05-24 08:16:17 +00:00
ahaas
7d3f9f1361 [heap] Pass a force_promotion flag to the evacuation routine in the scavenger.
The {force_promotion} flag causes the scavenger to move an object to the
old generation instead of to the other semi-space. We use the flag to force
the promotion of objects which are referenced by code objects.

R=ulan@chromium.org

Committed: https://crrev.com/f2a7ba6449406d0b11a245aa1f5b4981265b6f20
Cr-Commit-Position: refs/heads/master@{#36443}

Review-Url: https://codereview.chromium.org/2002013002
Cr-Commit-Position: refs/heads/master@{#36462}
2016-05-24 08:13:49 +00:00
mlippautz
d2dff0320b Revert of [heap] Fine-grained JSArrayBuffer tracking (patchset #19 id:770001 of https://codereview.chromium.org/1964023002/ )
Reason for revert:
Revert it.

Original issue's description:
> [heap] Fine-grained JSArrayBuffer tracking
>
> Track based on JSArrayBuffer addresses instead of the attached backing store.
> This way we can later on iterate buffers on a single page. The reland also
> switches to a page-based implementation where a page contains the set of its
> contained (live and dead) buffers.
>
> Details of tracking:
> - Scavenge: New space pages are processes in bulk on the main thread
> - MC: Unswept pages are processed in bulk in parallel. All other pages
>   are processed by the sweeper concurrently.
>
> BUG=chromium:611688
> LOG=N
> CQ_EXTRA_TRYBOTS=tryserver.v8:v8_linux_arm64_gc_stress_dbg,v8_linux_gc_stress_dbg,v8_mac_gc_stress_dbg,v8_linux64_tsan_rel,v8_mac64_asan_rel
>
> Committed: https://crrev.com/b2d8bfc7931eef49d527605ba485950dea41cde3
> Cr-Commit-Position: refs/heads/master@{#36437}

TBR=hpayer@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=chromium:611688

Review-Url: https://codereview.chromium.org/2006183003
Cr-Commit-Position: refs/heads/master@{#36461}
2016-05-24 07:22:02 +00:00
mlippautz
b01b9f4b49 Revert of [heap] Pass a force_promotion flag to the evacuation routine in the scavenger. (patchset #3 id:40001 of https://codereview.chromium.org/2002013002/ )
Reason for revert:
Need to revert JSArrayBuffer change. Please rebase and reland.

Original issue's description:
> [heap] Pass a force_promotion flag to the evacuation routine in the scavenger.
>
> The {force_promotion} flag causes the scavenger to move an object to the
> old generation instead of to the other semi-space. We use the flag to force
> the promotion of objects which are referenced by code objects.
>
> R=ulan@chromium.org
>
> Committed: https://crrev.com/f2a7ba6449406d0b11a245aa1f5b4981265b6f20
> Cr-Commit-Position: refs/heads/master@{#36443}

TBR=ulan@chromium.org,ahaas@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/2007563004
Cr-Commit-Position: refs/heads/master@{#36460}
2016-05-24 07:19:30 +00:00
ishell
6b9c915794 Don't access context during OOM reporting if it's not available.
BUG=chromium:612076
LOG=N

Review-Url: https://codereview.chromium.org/2005763002
Cr-Commit-Position: refs/heads/master@{#36459}
2016-05-24 07:00:01 +00:00
jgruber
94ad3b1826 Refactor script position calculation
Script position calculation logic (i.e. line & column numbers for a
given code position) is now based on a single method
Script::GetPositionInfo(). Refactored related code in isolate.cc and
js/messages.js to use the new method. The line_ends accessor is still
in use by chromium and thus cannot be removed yet.

R=yangguo@chromium.org
BUG=

Review-Url: https://codereview.chromium.org/2002993002
Cr-Commit-Position: refs/heads/master@{#36458}
2016-05-24 06:42:30 +00:00
bmeurer
8153f4cd17 [builtins] Remove a few dead imports of InternalArray/InternalPackedArray.
R=yangguo@chromium.org

Review-Url: https://codereview.chromium.org/2004933003
Cr-Commit-Position: refs/heads/master@{#36457}
2016-05-24 05:22:34 +00:00
zhengxing.li
35e0f01fb9 X87: Revert of [turbofan] Take the immediate size in account when narrowing ia32/x64 word comparison operators. (patchset #1 id:1 of https://codereview.chromium.org/1968453002/ ).
port 767c34dfae (r36413)

  original commit message:
  Reason for revert:
  Breaks a KCS demo:

  BUG=chromium:611976

  Original issue's description:
  > [turbofan] Take the immediate size in account when narrowing ia32/x64 word comparison operators.
  >
  > Trying to re-land http://crrev.com/1948453002 after fixing assembler-x64.cc in http://crrev.com/1962563003.
  >
  > Before this patch, we would emit a cmp or test with a memory operand only if both of the operands in the IR were loads. Now if either of them is a load and the other one is an immediate, we can use
  >
  > Committed: https://crrev.com/2da70f853d7f680d491c37c72d5ef04a85497ba9
  > Cr-Commit-Position: refs/heads/master@{#36136}

Review-Url: https://codereview.chromium.org/2003273002
Cr-Commit-Position: refs/heads/master@{#36456}
2016-05-24 04:18:58 +00:00
v8-autoroll
11fcf1346c Update V8 DEPS.
Rolling v8/build to 012e6582ccd1302ef1e4553d678bf2771f72aaca

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

Review-Url: https://codereview.chromium.org/2007473003
Cr-Commit-Position: refs/heads/master@{#36455}
2016-05-24 03:34:42 +00:00
adamk
b36269543f Mark regexp regression test as failing on noi18n
TBR=yangguo@chromium.org
BUG=v8:5036
NOTRY=true
NOTREECHECKS=true
NOPRESUBMIT=true

Review-Url: https://codereview.chromium.org/2006133002
Cr-Commit-Position: refs/heads/master@{#36454}
2016-05-23 23:25:59 +00:00
yangguo
5d93296a5c [regexp] fix /ui regexp desugaring for text nodes.
R=littledan@chromium.org
BUG=v8:5036

Review-Url: https://codereview.chromium.org/2005753003
Cr-Commit-Position: refs/heads/master@{#36453}
2016-05-23 22:23:43 +00:00
Adam Klein
b5ab8cc530 Skip mjsunit/harmony/generators-turbo on arm64 debug sim
It seems to fail in nosnap mode, and runs very slowly with snapshot, so
skipping for now to get the tree green.

TBR=neis@chromium.org
BUG=v8:4907

Review URL: https://codereview.chromium.org/2000313002 .

Cr-Commit-Position: refs/heads/master@{#36452}
2016-05-23 21:31:11 +00:00
gsathya
9eb320ad10 Promises: Make debug calls only when debugging
Previously, certain calls to DebugPushPromise and DebugPopPromise
happened always, without any check to see if we were in a debugging
environment. This patch adds a conditional check before making these
debug calls to make sure they aren't called when not needed.

Before the patch, running --prof over the bluebird benchmarks,
brings up these unprotected debug calls --
ticks    cpp   total   name
16    6.7%    2.0%  v8::internal::Runtime_DebugPushPromise(int, v8::internal::Object**, v8::internal::Isolate*)
7    2.9%    0.9%  v8::internal::Runtime_DebugPopPromise(int, v8::internal::Object**, v8::internal::Isolate*)

This patch removes the above calls and provides a 4% improvement (with
a 2% variance over 10 runs) in the bluebird benchmark.

Review-Url: https://codereview.chromium.org/1985293002
Cr-Commit-Position: refs/heads/master@{#36451}
2016-05-23 20:13:07 +00:00
adamk
bb8b2b9b02 Avoid duplication of HARMONY_STAGED flags due to no-i18n build
Instead of having two lists of harmony flags, one with i18n and
one without, use a bit more macro programming.

Review-Url: https://codereview.chromium.org/2001753003
Cr-Commit-Position: refs/heads/master@{#36450}
2016-05-23 18:40:35 +00:00
yangguo
c1f1e1ab98 [json] implement JSON.stringify gap pre-processing in C++.
This is in preparation of fully porting JSON.stringify to C++.

R=cbruni@chromium.org

Review-Url: https://codereview.chromium.org/2006663002
Cr-Commit-Position: refs/heads/master@{#36449}
2016-05-23 18:24:04 +00:00
danno
f43aa0bc6c [turbofan] Correctly call ArrayNoArgumentConstructor stub from TF code
BUG=chromium:612412
LOG=N

Review-Url: https://codereview.chromium.org/1999783004
Cr-Commit-Position: refs/heads/master@{#36448}
2016-05-23 16:44:13 +00:00
ssanfilippo
26569a47d1 [Interpreter] Fix getIgnitionDispatchCounters crash with modified Object prototype.
Changes to the Object prototype may cause getIgnitionDispatchCounters()
to fail when building the counters table object. Using DefineOwnProperty
instead of Set solves the issue by ignoring the prototype chain.

BUG=chromium:613567
LOG=N

Review-Url: https://codereview.chromium.org/2000203002
Cr-Commit-Position: refs/heads/master@{#36447}
2016-05-23 16:41:27 +00:00
danno
6eb242eebb [turbofan] Better handling of inserted split-edge blocks
Previously, split-edge blocks inserted into CodeStubAssembler schedules
inherited the "deferredness" of their predecessor block. This tended to inline
newly inserted blocks that preceeded deferred code inline with non-deferred
code. The stack frame elider sometimes inserted stack construction into these
blocks, code which was actually was only needed in the deferred case.

This CL marks inserted split edge blocks with the deferredness of their
successors, e.g. they are defererred if their predecessor is deferrred. This
moves stack building code that logically belongs to deferred code into the
deferred code area rather than inlining it in non-deferred code.

Review-Url: https://codereview.chromium.org/2003663002
Cr-Commit-Position: refs/heads/master@{#36446}
2016-05-23 14:47:27 +00:00
jkummerow
eac1b38d9a [cleanup] Drop FLAG_eliminate_prototype_chain_checks
This flag has been on by default for a while, along with
FLAG_track_prototype_users which provides the prerequisite
infrastructure. We are now sure that this is the direction
we want to go in, so in order to simplify the code, this CL
drops the respective flag-off code paths.

Review-Url: https://codereview.chromium.org/1993913002
Cr-Commit-Position: refs/heads/master@{#36445}
2016-05-23 14:27:45 +00:00
neis
1292721f92 [turbofan] Intrinsic-lowering for GeneratorGetInput and GeneratorGetResumeMode.
Also use the inlined version of CreateIterResultObject in Ignition's VisitYield.

BUG=v8:4907
TBR=littledan@chromium.org

Review-Url: https://codereview.chromium.org/2006613002
Cr-Commit-Position: refs/heads/master@{#36444}
2016-05-23 14:22:54 +00:00
ahaas
f2a7ba6449 [heap] Pass a force_promotion flag to the evacuation routine in the scavenger.
The {force_promotion} flag causes the scavenger to move an object to the
old generation instead of to the other semi-space. We use the flag to force
the promotion of objects which are referenced by code objects.

R=ulan@chromium.org

Review-Url: https://codereview.chromium.org/2002013002
Cr-Commit-Position: refs/heads/master@{#36443}
2016-05-23 14:02:57 +00:00
neis
4579f28d72 [turbofan] Simplify typed lowering of generator-related operators.
Instead of changing existing nodes in a very fragile (and in one case expensive)
way, just create new ones instead.

Also properly chain effects, which was not done quite right before.

BUG=v8:4907

Review-Url: https://codereview.chromium.org/1997373002
Cr-Commit-Position: refs/heads/master@{#36442}
2016-05-23 14:00:20 +00:00
neis
0fd18acb9b [generators] Get better clusterfuzz coverage.
Duplicate mjsunit/harmony/generators.js but explicitly require
--turbo-from-bytecode such that Clusterfuzz can thoroughly test the
new generators implementation.

BUG=v8:4907

Review-Url: https://codereview.chromium.org/2002983002
Cr-Commit-Position: refs/heads/master@{#36441}
2016-05-23 13:57:46 +00:00
mstarzinger
3cc2adb319 [deoptimizer] Fix materialization of sloppy arguments.
This makes sure the deoptimizer can materialize sloppy arguments objects
with the FAST_SLOPPY_ARGUMENTS_ELEMENTS elements kind. TurboFan's escape
analysis treates those as normal JSObject types and hence materializes
them differently than Crankshaft does.

R=verwaest@chromium.org
TEST=mjsunit/regress/regress-crbug-613919
BUG=chromium:613919

Review-Url: https://codereview.chromium.org/2001133002
Cr-Commit-Position: refs/heads/master@{#36440}
2016-05-23 13:52:35 +00:00
oth
e43fbde72b [Interpreter] Preserve source positions in peephole optimizer.
The original peephole optimizer logic in the BytecodeArrayBuilder did
not respect source positions as it was written before there were
bytecode source positions. This led to some minor differences to
FCG and was problematic when combined with pending bytecode
optimizations. This change makes the new peephole optimizer fully
respect source positions.

BUG=v8:4280
LOG=N

Review-Url: https://codereview.chromium.org/1998203002
Cr-Commit-Position: refs/heads/master@{#36439}
2016-05-23 13:33:20 +00:00
oth
8d5d9e18ea [interpreter] Add BytecodeGenerator::Abort().
Add a method to emit abort for code which should
not be reachable.

BUG=v8:4280
LOG=N

Review-Url: https://codereview.chromium.org/2002833005
Cr-Commit-Position: refs/heads/master@{#36438}
2016-05-23 11:53:36 +00:00
mlippautz
b2d8bfc793 [heap] Fine-grained JSArrayBuffer tracking
Track based on JSArrayBuffer addresses instead of the attached backing store.
This way we can later on iterate buffers on a single page. The reland also
switches to a page-based implementation where a page contains the set of its
contained (live and dead) buffers.

Details of tracking:
- Scavenge: New space pages are processes in bulk on the main thread
- MC: Unswept pages are processed in bulk in parallel. All other pages
  are processed by the sweeper concurrently.

BUG=chromium:611688
LOG=N
CQ_EXTRA_TRYBOTS=tryserver.v8:v8_linux_arm64_gc_stress_dbg,v8_linux_gc_stress_dbg,v8_mac_gc_stress_dbg,v8_linux64_tsan_rel,v8_mac64_asan_rel

Review-Url: https://codereview.chromium.org/1964023002
Cr-Commit-Position: refs/heads/master@{#36437}
2016-05-23 11:21:49 +00:00
mstarzinger
dbd7d5a59f [turbofan] Skip data-flow analysis of code entry field.
This makes escape analysis skip analyzing the code entry field within
JSFunction objects. Said field is an untagged pointer field and hence
cannot be tracked by an ObjectState node.

R=jarin@chromium.org
TEST=mjsunit/regress/regress-crbug-613494
BUG=chromium:613494

Review-Url: https://codereview.chromium.org/1997353002
Cr-Commit-Position: refs/heads/master@{#36436}
2016-05-23 10:40:29 +00:00
yangguo
bf705f0fd6 [json] move json parser and stringifier into own compilation units.
This is a pure refactoring.

R=cbruni@chromium.org

Review-Url: https://codereview.chromium.org/2002933002
Cr-Commit-Position: refs/heads/master@{#36435}
2016-05-23 10:36:44 +00:00
nexus226
726d3be8ae tools: Fix a syntax error in plot-timer-events
This fixes a syntax error in plot-timer-events script.

Before:
  $ out/x64.release/d8 --prof --log-timer-events script.js
  $ tools/plot-timer-events v8.log
  tools/plot-timer-events: 75: tools/plot-timer-events: options+=1343: not found
  --distortion=
  Cmdline args: [options] [log-file-name]
  Default log file name is "v8.log".
    ...

After:
  $ out/x64.release/d8 --prof --log-timer-events script.js
  $ tools/plot-timer-events v8.log
  $ ls timer-events.png
  timer-events.png

BUG=

Review-Url: https://codereview.chromium.org/1961873002
Cr-Commit-Position: refs/heads/master@{#36434}
2016-05-23 10:19:47 +00:00
yangguo
46aeb2aed8 [json] fix encoding change for two-byte gap strings.
R=mstarzinger@chromium.org
BUG=chromium:613570

Review-Url: https://codereview.chromium.org/1997003002
Cr-Commit-Position: refs/heads/master@{#36433}
2016-05-23 09:18:58 +00:00