Commit Graph

30215 Commits

Author SHA1 Message Date
bmeurer
550c0f9f55 [turbofan] Move more type checks to the representation selector.
Get rid of further typing checks from ChangeLowering and put them into
the representation selection pass instead (encoding the information in
the operator instead).

Drive-by-change: Rename ChangeSmiToInt32 to ChangeTaggedSignedToInt32
for consistency about naming Tagged, TaggedSigned and TaggedPointer.

R=jarin@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#35723}
2016-04-22 11:03:17 +00:00
lpy
ff7e6defff Get rid of UnsafeCurrent in Sampler
Currently we are using UnsafeCurrent in async signal handler to acquire the
isolate of VM thread, but we want to get rid of that since it prevents V8 from
being thread agnostic.

This patch replaces UnsafeCurrent with a static map, where we store a map of
samplers for threads, and makes it accessible by signal handler.

BUG=v8:4889
LOG=n

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

Cr-Commit-Position: refs/heads/master@{#35722}
2016-04-22 10:54:53 +00:00
yangguo
672983830f [debugger] Hide scopes that originate from desugaring.
Some scopes are introduced by the parser for desugaring and do not
have any positions associated. The debugger should not make them
visible.

Also add some missing source positions.

R=kozyatinskiy@chromium.org, rossberg@chromium.org
BUG=chromium:604458
LOG=Y

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

Cr-Commit-Position: refs/heads/master@{#35721}
2016-04-22 10:48:45 +00:00
rmcilroy
c58f328581 [Interpreter] Introduce IncStub and DecStub.
Adds IncStub and DecStub TurboFan code stubs and hooks them up to the
interpreter's Inc and Dec bytecodes (which are used for count
operations, e.g. i++).

BUG=v8:4280
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#35720}
2016-04-22 10:36:33 +00:00
rmcilroy
11e3ba34f5 [Interpreter] Fix incorrect Register OperandSize calculation for ExtraWide.
Fixes a mistake made in r35618 for register OperandSize calculations.

BUG=605470
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#35719}
2016-04-22 10:32:14 +00:00
machenbach
6d21841ec3 [test] Print how test runner is called on swarming.
BUG=chromium:605516
LOG=n

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

Cr-Commit-Position: refs/heads/master@{#35718}
2016-04-22 10:28:05 +00:00
ulan
8d24472acf Check for semaphore alignment on posix platforms.
BUG=chromium:605349
LOG=NO

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

Cr-Commit-Position: refs/heads/master@{#35717}
2016-04-22 10:15:56 +00:00
neis
b090715250 Introduce bytecodes for assisting generator suspend and resume.
The new bytecodes replace two runtime functions. They are still unsupported by the bytecode graphbuilder, though.

BUG=v8:4907
LOG=n

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

Cr-Commit-Position: refs/heads/master@{#35716}
2016-04-22 09:19:00 +00:00
jkummerow
f4a9a50147 [tests] Add testcase for r35397
This is a follow-up to 58429beb7b
"Fix KeyedStore stub selection for STRING_WRAPPER_ELEMENTS".

BUG=chromium:602184
LOG=n

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

Cr-Commit-Position: refs/heads/master@{#35715}
2016-04-22 09:08:46 +00:00
adamk
6a370a6f01 Remove support for Object.observe
The feature was deprecated in M49 and flagged off in M50.
This patch removes it entirely from the codebase.

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

Cr-Commit-Position: refs/heads/master@{#35714}
2016-04-22 09:02:41 +00:00
bmeurer
861295bf16 [turbofan] Optimize tagged conversion based on type.
If we have to convert a float64 value to tagged representation and we
already know that the value is either in Signed31/Signed32 or
Unsigned32 range, then we can just convert the float64 to word32 and
use the fast word32 to tagged conversion. Doing this in
ChangeLowering (or the effect linearization pass) would be unsound, as
the types on the nodes are no longer usable.

This removes all Type uses from effect linearization. There's still some
work to be done for ChangeLowering tho.

R=jarin@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#35713}
2016-04-22 08:40:05 +00:00
yangguo
fa8bac650f [interpreter] Fix stack trace printers for debugging.
This is pretty useful when debugging. There is no easy way to find the
bytecode arrays on the stack.

R=mstarzinger@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#35712}
2016-04-22 08:09:13 +00:00
mtrofin
81c965d475 [turbofan] store block id with instruction
GetInstructionBlock shows up in some compile time-intensive profiles.
Changing it to a O(1) operation. The compile benchmark confirms the
improvement.

BUG=

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

Cr-Commit-Position: refs/heads/master@{#35711}
2016-04-21 23:08:17 +00:00
mstarzinger
82a7c53e97 [interpreter] Enable webkit test that no longer fails.
R=machenbach@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#35710}
2016-04-21 16:35:20 +00:00
baptiste.afsa
04239cfeb8 [turbofan] Properly handle deoptimizations in the instruction scheduler.
R=jarin@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#35709}
2016-04-21 14:54:30 +00:00
nikolaos
fa43f4c99b Synchronize scopes between parser/preparser
This patch introduces new scopes in the preparser, just like they
are introduced by the parser, in the following places:

-   blocks
-   try statement
-   switch statement
-   scoped statements, in several places
-   for statement
-   eager function bodies

R=rossberg@chromium.org
BUG=
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#35708}
2016-04-21 13:43:09 +00:00
bmeurer
9bac40157f [turbofan] Make pure JS operators effectful before first scheduler.
This way the first scheduler can properly wire them to the effect chain,
as otherwise the second scheduler could schedule them such that they
would be able to read uninitialized memory (once we drop the region
protection in the first scheduler).

R=jarin@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#35707}
2016-04-21 13:30:51 +00:00
jkummerow
9bebebd909 [ic] Restore PROPERTY key tracking in keyed ICs
Non-vectorized KeyedLoadICs used to remember whether they had seen Names
as keys; Crankshaft uses this information to avoid emitting elements
accesses which would always deopt. This CL restores that functionality
for vector ICs.

BUG=chromium:594183
LOG=y
R=mvstanton@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#35706}
2016-04-21 13:18:28 +00:00
mstarzinger
6f43e1f544 [profiler] Remove obsolete CompilationInfo argument.
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}
2016-04-21 13:18:27 +00:00
yangguo
ff2a04bbb9 [debugger] fix mjsunit/es6/debug-promises/stepin-constructor.js for ignition.
BUG=v8:4690
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#35704}
2016-04-21 13:16:04 +00:00
Ilija.Pavlovic
71dd5c4380 MIPS64: [regexp] do not assume short external strings have a minimum size.
Fix for execution tests on simulator.
Port 3518e492c0

Original commit message:
    Short external strings do not cache the resource data, and may be used
    for compressible strings. The assumptions about their lengths is
    invalid and may lead to oob reads.

BUG=

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

Cr-Commit-Position: refs/heads/master@{#35703}
2016-04-21 13:16:03 +00:00
bmeurer
5e11acc9dc [turbofan] Reorganize the pipeline around the 2nd scheduler approach.
The JavaScript pipeline now consists of the following steps:

 1. Typed lowering.
 2. Representation selection (actually SimplifiedLowering).
 3. Early optimization pass (incl. JSGenericLowering).
 4. Effect control linearization (not for asm.js).
 5. Late optimization pass (incl. ChangeLowering).
 6. Real scheduling.

We should further cleanup the passes and restrict type and
representation information usage to appropriate parts of the pipeline.

R=jarin@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#35702}
2016-04-21 11:50:55 +00:00
yangguo
4d824551c7 [debugger] fix mjsunit/debug-allscopes-on-debugger.js for ignition.
R=vogelheim@chromium.org
BUG=v8:4690
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#35701}
2016-04-21 11:30:44 +00:00
bmeurer
33c717fba4 [turbofan] Introduce dedicated BitcastWordToTagged machine operator.
This operator doesn't generate any actual code, but teaches the register
allocator that a certain computed pointer value is tagged. This is
required to safely implement InnerAllocate (and we also use this for
Allocate to be sure that we don't suddenly leak a dangling pointer into
the heap somewhere).

R=epertoso@chromium.org
BUG=v8:4939
LOG=n

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

Cr-Commit-Position: refs/heads/master@{#35700}
2016-04-21 11:26:39 +00:00
verwaest
7dfb5beeec Fix 'typeof null' canonicalization in crankshaft
BUG=

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

Cr-Commit-Position: refs/heads/master@{#35699}
2016-04-21 11:24:31 +00:00
titzer
b3cf031eb8 [wasm] Enforce strict ordering of WASM module sections.
R=jfb@chromium.org,rossberg@chromium.org
BUG=

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

Cr-Commit-Position: refs/heads/master@{#35698}
2016-04-21 11:20:15 +00:00
verwaest
4a6a0f5530 Make sure we always try to make prototypes fast again when transitioning accessors
BUG=chromium:605060
LOG=n

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

Cr-Commit-Position: refs/heads/master@{#35697}
2016-04-21 11:18:08 +00:00
epertoso
e8caf78ff2 [ignition] Inline the binary op TurboFan code stubs in the bytecode handlers.
Adds a Generate method to the stubs that can be used to embed the graph directly in the bytecode handlers.

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

Cr-Commit-Position: refs/heads/master@{#35696}
2016-04-21 10:17:36 +00:00
titzer
727c7df035 [wasm] Extra LEB utilities to leb-helper.h
R=bradnelson@chromium.org,aseemgarg@chromium.org
BUG=

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

Cr-Commit-Position: refs/heads/master@{#35695}
2016-04-21 10:15:16 +00:00
mstarzinger
c323d2a64e [compiler] Remove obsolete check for debug break slots.
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}
2016-04-21 10:15:15 +00:00
ishell
b4dbb2f710 [deoptimizer] Do not modify stack_fp which is used as a key for lookup of previously materialized objects.
BUG=chromium:604680, v8:4698
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#35693}
2016-04-21 09:54:33 +00:00
jochen
2cfac65eac Allow for creating Private API symbols that have a number as an ID
BUG=v8:4933
R=verwaest@chromium.org
LOG=n

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

Cr-Commit-Position: refs/heads/master@{#35692}
2016-04-21 09:50:27 +00:00
clemensh
e530556471 [wasm] Add test case for stack trace of wasm traps
Since traps now throw real Error objects, we get stack traces
containing <WASM> functions on top-level. The additional tests check
for two traps: unreachable and memory out-of-bounds.

R=ahaas@chromium.org, jfb@chromium.org, titzer@chromium.org
BUG=

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

Cr-Commit-Position: refs/heads/master@{#35691}
2016-04-21 09:38:21 +00:00
v8-autoroll
af1866f462 Update V8 DEPS.
Rolling v8/buildtools to e84114dbe2b65428951c876349b6a3ff1afbfccd

Rolling v8/tools/clang to 2956eca572ff0e1b181df65f71a045f061a2eb34

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

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

Cr-Commit-Position: refs/heads/master@{#35690}
2016-04-21 09:12:12 +00:00
zhengxing.li
d5ffbfefd9 X87: Change the test case for X87 RunTruncateFloat32ToUint32.
The CL #35651 (https://codereview.chromium.org/1858323003) exposed one hiden issue in RunTruncateFloat32ToUint32 test cases and X87 failed at it.

  Here is the issue in RunTruncateFloat32ToUint32:
  For float input = static_cast<float>(*i), the x87 GCC would optimize the input viariable in float floating register for release build.

  The problem is:
  SSE float register has single precision rounding semantic While X87 register hasn't when directly use floating register value. It will cause the value of input viariable has
  different precision for IA32 and X87 port. So static_cast<uint32_t>(input) will be different for IA32 and X87 port too.
  This led to CHECK_EQ(static_cast<uint32_t>(input), m.Call(input)) fail although V8 turbofan JITTed code m.Call(input) has exactly same result in both X87 and IA32 port.

  So we add the following sentence to do type cast to keep the single precision for RunTruncateFloat32ToUint32 by forcing the input viariable get value from memory insread of
  floating register.
  Such as: volatile float input = static_cast<float>(*i).

BUG=

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

Cr-Commit-Position: refs/heads/master@{#35689}
2016-04-21 09:12:11 +00:00
machenbach
2d454e226a [test] Slim down test that exceeds stack limit
BUG=v8:4928
LOG=n
NOTRY=true

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

Cr-Commit-Position: refs/heads/master@{#35688}
2016-04-21 08:37:20 +00:00
clemensh
449af6f229 [wasm] Also test structured stack trace
This extends the wasm test case which only checks the "simple"
string-variant of the stack trace.
It checks the return values of the getFunctionName, getLineNumber,
getFileName and toString methods.

R=machenbach@chromium.org, jfb@chromium.org, titzer@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#35687}
2016-04-21 08:37:19 +00:00
machenbach
8127557ec2 [build] Fix build dependencies for embedded snapshot
The external snapshot target is missing a few build
dependencies.

TBR=vogelheim@chromium.org, yangguo@chromium.org, clemensh@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#35686}
2016-04-21 08:05:07 +00:00
ahaas
b4889f7d93 [wasm] New implementation of popcnt and ctz.
This patch provides a new implementation of popcnt and ctz in the case
where the platform does not provide these instructions. Instead of
building a TF graph which implements it we now call a C function.

Additionally I turned on additional tests in test-run-wasm-64.cc

R=titzer@chromium.org

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

Cr-Commit-Position: refs/heads/master@{#35685}
2016-04-21 07:47:05 +00:00
danno
1f4958de75 Complete separation of CodeAssembler and CodeStubAssembler
Move allocation-related and smi un/tagging methods into CodeStubAssembler.

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

Cr-Commit-Position: refs/heads/master@{#35684}
2016-04-21 06:46:54 +00:00
yangguo
b4697727e9 MIPS64: [regexp] do not assume short external strings have a minimum size.
Port 3518e492c0

Original commit message:
    Short external strings do not cache the resource data, and may be used
    for compressible strings. The assumptions about their lengths is
    invalid and may lead to oob reads.

R=bmeurer@chromium.org
BUG=v8:4923,chromium:604897
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#35683}
2016-04-21 05:58:47 +00:00
jyan
14c9cbd4cf S390: [regexp] do not assume short external strings have a minimum size.
Port 3518e492c0

Original commit message:

    Short external strings do not cache the resource data, and may be used
    for compressible strings. The assumptions about their lengths is
    invalid and may lead to oob reads.

R=yangguo@chromium.org, joransiu@ca.ibm.com, bjaideep@ca.ibm.com, michael_dawson@ca.ibm.com, mbrandy@us.ibm.com

BUG=v8:4923,chromium:604897
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#35682}
2016-04-21 05:04:41 +00:00
zhengxing.li
644bade748 X87: [regexp] do not assume short external strings have a minimum size.
port 3518e492c0 (r35660)

  original commit message:
  Short external strings do not cache the resource data, and may be used
  for compressible strings. The assumptions about their lengths is
  invalid and may lead to oob reads.

BUG=

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

Cr-Commit-Position: refs/heads/master@{#35681}
2016-04-21 05:02:30 +00:00
bradnelson
600ddaee0e Reduce bucket count and range for wasm function count, and add "module" to some names.
BUG= https://code.google.com/p/v8/issues/detail?id=4203
BUG= https://bugs.chromium.org/p/chromium/issues/detail?id=575167
TEST=None
R=ahaas@chromium.org,isherman@chromium.org
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#35680}
2016-04-21 00:20:27 +00:00
rmcilroy
04927031d0 [Interpreter] Fix typo in generate-bytecode-expectations.
BUG=v8:4681
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#35679}
2016-04-20 21:05:42 +00:00
adamk
e96cbdcdd6 More accurately record an end position for default parameters in arrows
Our previous over-conservative answer caused us to emit hole checks in
full-codegen when eagerly parsing but not when lazily parsing.

With this patch, we use the positions of the BinaryOperations making up
the parameter list (which are the positions of the commas) to determine
the appropriate "end position" for each parameter's initializer. This means
that we get accurate-enough positions for the initializers in the eager
parsing step to get the same answers for hole-check-elimination that we
will later during ParseLazy.

In the included test case, for example:

  (function() { ((s = 17, y = s) => s)(); } )();
                        ^2     ^1

The old code would generate a hole check when trying to load
|s| for assignment to |y| (because it treated the closing parentheses
pointed to by "^1" as the "initialization position" of |s|).

The new code uses the comma pointed to by "^2" as the initialization
position of |s|. Since that occurs textually before the load of |s|,
full-codegen knows it can avoid the hole check.

BUG=v8:4908
LOG=n

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

Cr-Commit-Position: refs/heads/master@{#35678}
2016-04-20 20:49:16 +00:00
jyan
2f2b3040b5 S390: [turbofan] CodeGenerator: Frame setup refactoring
Port 81a1530e6f

Original commit message:

    Before frame elision, we finalized the frame shape when assembling the
    prologue, which is also when we prepared the frame (saving sp, etc).

    The frame finalization only needs to happen once, and happens to be
    actually a set of idempotent operations. With frame elision, the logic for
    frame finalization was happening every time we constructed the frame.
    Albeit idempotent operations, the code would become hard to maintain.

    This change separates frame shape finalization from frame
    construction. When constructing the CodeGenerator, we finalize the
    frame. Subsequent access is to a const Frame*.

    Also renamed AssemblePrologue to AssembleConstructFrame, as
    suggested in the frame elision CR.

    Separating frame setup gave the opportunity to do away with
    architecture-independent frame aligning (which is something just arm64
    cares about), and also with stack pointer setup (also arm64). Both of
    these happen now at frame finalization on arm64.

R=mtrofin@chromium.org, joransiu@ca.ibm.com, bjaideep@ca.ibm.com, michael_dawson@ca.ibm.com, mbrandy@us.ibm.com

BUG=
LOG=N

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

Cr-Commit-Position: refs/heads/master@{#35677}
2016-04-20 20:39:03 +00:00
littledan
f32e30240d Detach ArrayBuffer in test262
New incoming test262 tests check what happens on detached ("neutered")
ArrayBuffers. This patch makes the test262 infrastructure define
detaching an ArrayBuffer in terms of %ArrayBufferNeuter, passing the
--allow-natives-syntax flag, when it is needed.

BUG=v8:4193
LOG=N
R=adamk,machenbach

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

Cr-Commit-Position: refs/heads/master@{#35676}
2016-04-20 19:44:05 +00:00
bryleun
5ce4a69a1f S390: Fixed LBR, LGBR, LHR, LGHR instructions in simulator.
R=joransiu@ca.ibm.com,michael_dawson@ca.ibm.com,mbrandy@us.ibm.com,jyan@ca.ibm.com

BUG=

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

Cr-Commit-Position: refs/heads/master@{#35675}
2016-04-20 18:38:44 +00:00
bjaideep
a9cb48bf37 PPC: [turbofan] CodeGenerator: Frame setup refactoring
Port 81a1530e6f

Original commit message:

    Before frame elision, we finalized the frame shape when assembling the
    prologue, which is also when we prepared the frame (saving sp, etc).

    The frame finalization only needs to happen once, and happens to be
    actually a set of idempotent operations. With frame elision, the logic for
    frame finalization was happening every time we constructed the frame.
    Albeit idempotent operations, the code would become hard to maintain.

    This change separates frame shape finalization from frame
    construction. When constructing the CodeGenerator, we finalize the
    frame. Subsequent access is to a const Frame*.

    Also renamed AssemblePrologue to AssembleConstructFrame, as
    suggested in the frame elision CR.

    Separating frame setup gave the opportunity to do away with
    architecture-independent frame aligning (which is something just arm64
    cares about), and also with stack pointer setup (also arm64). Both of
    these happen now at frame finalization on arm64.

R=mtrofin@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/1903343002

Cr-Commit-Position: refs/heads/master@{#35674}
2016-04-20 18:22:19 +00:00