1. 21 Jun, 2016 1 commit
  2. 03 Jun, 2016 1 commit
    • rmcilroy's avatar
      [Interpreter] Move jump processing to bytecode array writer. · de9d1d8b
      rmcilroy authored
      This moves processing of jumps out of bytecode array builder and into
      bytecode array writer. This simplifies the pipeline by avoiding having
      to flush for offset and patch up offsets in bytecode array builder based
      on what was emitted by the bytecode array writer.
      
      This also enables future refactorings to add dead code elimination back
      into the pipeline, and move processing of scalable operand sizes to the
      end of the pipeline (in the bytecode array writer) rather than having to
      deal with scalable operand types throughout pipeline.
      
      BUG=v8:4280,chromium:616064
      
      Review-Url: https://codereview.chromium.org/2035813002
      Cr-Commit-Position: refs/heads/master@{#36716}
      de9d1d8b
  3. 27 May, 2016 2 commits
  4. 17 May, 2016 1 commit
    • bmeurer's avatar
      [es6] Reintroduce the instanceof operator in the backends. · 551e0aa1
      bmeurer authored
      This adds back the instanceof operator support in the backends and
      introduces a @@hasInstance protector cell on the isolate that guards the
      fast path for the InstanceOfStub. This way we recover the ~10%
      regression on Octane EarleyBoyer in Crankshaft and greatly improve
      TurboFan and Ignition performance of instanceof.
      
      R=ishell@chromium.org
      TBR=hpayer@chromium.org,rossberg@chromium.org
      BUG=chromium:597249, v8:4447
      LOG=n
      
      Review-Url: https://codereview.chromium.org/1980483003
      Cr-Commit-Position: refs/heads/master@{#36275}
      551e0aa1
  5. 25 Apr, 2016 1 commit
  6. 18 Apr, 2016 1 commit
  7. 01 Apr, 2016 2 commits
  8. 22 Mar, 2016 2 commits
    • adamk's avatar
      Remove support for legacy const, part 1 · ed18aa65
      adamk authored
      Now that ES2015 const has shipped, in Chrome 49, legacy const declarations
      are no more. This lets us remove a bunch of code from many parts of the
      codebase.
      
      In this patch, I remove parser support for generating legacy const variables
      from const declarations. This also removes the special "illegal declaration"
      bit from Scope, which has ripples into all compiler backends.
      
      Also gone are any tests which relied on legacy const declarations.
      
      Note that we do still generate a Variable in mode CONST_LEGACY in one case:
      function name bindings in sloppy mode. The likely fix there is to add a new
      Variable::Kind for this case and handle it appropriately for stores in each
      backend, but I leave that for a later patch to make this one completely
      subtractive.
      
      Review URL: https://codereview.chromium.org/1819123002
      
      Cr-Commit-Position: refs/heads/master@{#35002}
      ed18aa65
    • epertoso's avatar
      [Interpreter] TurboFan implementation of intrinsics. · d158bf14
      epertoso authored
      Introduces a bytecode whose handler executes the equivalent of %_IsArray and %_IsJSReceiver without a runtime call.
      
      BUG=v8:4822
      LOG=y
      
      Review URL: https://codereview.chromium.org/1645763003
      
      Cr-Commit-Position: refs/heads/master@{#34983}
      d158bf14
  9. 21 Mar, 2016 1 commit
  10. 16 Mar, 2016 2 commits
  11. 07 Mar, 2016 1 commit
  12. 24 Feb, 2016 2 commits
    • mythria's avatar
      Revert of [Interpreter] Implements calls through CallICStub in the... · eb358178
      mythria authored
      Revert of [Interpreter] Implements calls through CallICStub in the interpreter. (patchset #15 id:270001 of https://codereview.chromium.org/1688283003/ )
      
      Reason for revert:
      It is not a good idea to call CallICStub from the builtin. It might be sensitive to the frame structure. Constructing a internal frame might cause problems. It is much better to inline the code  related to the type feedback vector into the builtin.
      
      Original issue's description:
      > [Interpreter] Implements calls through CallICStub in the interpreter.
      >
      > Calls are implemented through CallICStub to collect type feedback. Adds
      > a new builtin called InterpreterPushArgsAndCallIC that pushes the
      > arguments onto stack and calls CallICStub.
      >
      > Also adds two new bytecodes CallIC and CallICWide to indicate calls have to
      > go through CallICStub.
      >
      > MIPS port contributed by balazs.kilvady.
      >
      > BUG=v8:4280, v8:4680
      > LOG=N
      >
      > Committed: https://crrev.com/20362a2214c11a0f2ea5141b6a79e09458939cec
      > Cr-Commit-Position: refs/heads/master@{#34244}
      
      TBR=rmcilroy@chromium.org,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=v8:4280, v8:4680
      
      Review URL: https://codereview.chromium.org/1731253003
      
      Cr-Commit-Position: refs/heads/master@{#34252}
      eb358178
    • mythria's avatar
      [Interpreter] Implements calls through CallICStub in the interpreter. · 20362a22
      mythria authored
      Calls are implemented through CallICStub to collect type feedback. Adds
      a new builtin called InterpreterPushArgsAndCallIC that pushes the
      arguments onto stack and calls CallICStub.
      
      Also adds two new bytecodes CallIC and CallICWide to indicate calls have to
      go through CallICStub.
      
      MIPS port contributed by balazs.kilvady.
      
      BUG=v8:4280, v8:4680
      LOG=N
      
      Review URL: https://codereview.chromium.org/1688283003
      
      Cr-Commit-Position: refs/heads/master@{#34244}
      20362a22
  13. 17 Feb, 2016 2 commits
  14. 16 Feb, 2016 1 commit
  15. 15 Feb, 2016 1 commit
  16. 08 Feb, 2016 1 commit
  17. 05 Feb, 2016 1 commit
    • mvstanton's avatar
      Revert of Type Feedback Vector lives in the closure (patchset #2 id:40001 of... · 3f36e658
      mvstanton authored
      Revert of Type Feedback Vector lives in the closure (patchset #2 id:40001 of https://codereview.chromium.org/1668103002/ )
      
      Reason for revert:
      Must revert for now due to chromium api natives issues.
      
      Original issue's description:
      > Type Feedback Vector lives in the closure
      >
      > (RELAND: the problem before was a missing write barrier for adding the code
      > entry to the new closure. It's been addressed with a new macro instruction
      > and test. The only change to this CL is the addition of two calls to
      > __ RecordWriteCodeEntryField() in the platform CompileLazy builtin.)
      >
      > We get less "pollution" of type feedback if we have one vector per native
      > context, rather than one for the whole system. This CL moves the vector
      > appropriately.
      >
      > We rely more heavily on the Optimized Code Map in the SharedFunctionInfo. The
      > vector actually lives in the first slot of the literals array (indeed there is
      > great commonality between those arrays, they can be thought of as the same
      > thing). So we make greater effort to ensure there is a valid literals array
      > after compilation.
      >
      > This meant, for performance reasons, that we needed to extend
      > FastNewClosureStub to support creating closures with literals. And ultimately,
      > it drove us to move the optimized code map lookup out of FastNewClosureStub
      > and into the compile lazy builtin.
      >
      > The heap change is trivial so I TBR Hannes for it...
      > Also, Yang has had a look at the debugger changes already and approved 'em. So he is TBR style too.
      > And Benedikt reviewed it as well.
      >
      > TBR=hpayer@chromium.org, yangguo@chromium.org, bmeurer@chromium.org
      >
      > BUG=
      >
      > Committed: https://crrev.com/bb31db3ad6de16f86a61f6c7bbfd3274e3d957b5
      > Cr-Commit-Position: refs/heads/master@{#33741}
      
      TBR=bmeurer@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/1670813005
      
      Cr-Commit-Position: refs/heads/master@{#33766}
      3f36e658
  18. 04 Feb, 2016 3 commits
    • oth's avatar
      [interpreter] Support for ES6 class literals. · 1b436ae1
      oth authored
      Port of class literal support from the
      ast-graph-builder implementation.
      
      R=rmcilroy@chromium.org,mstarzinger@chromium.org
      BUG=v8:4280,v8:4682
      LOG=N
      
      Review URL: https://codereview.chromium.org/1666943003
      
      Cr-Commit-Position: refs/heads/master@{#33746}
      1b436ae1
    • mvstanton's avatar
      Type Feedback Vector lives in the closure · bb31db3a
      mvstanton authored
      (RELAND: the problem before was a missing write barrier for adding the code
      entry to the new closure. It's been addressed with a new macro instruction
      and test. The only change to this CL is the addition of two calls to
      __ RecordWriteCodeEntryField() in the platform CompileLazy builtin.)
      
      We get less "pollution" of type feedback if we have one vector per native
      context, rather than one for the whole system. This CL moves the vector
      appropriately.
      
      We rely more heavily on the Optimized Code Map in the SharedFunctionInfo. The
      vector actually lives in the first slot of the literals array (indeed there is
      great commonality between those arrays, they can be thought of as the same
      thing). So we make greater effort to ensure there is a valid literals array
      after compilation.
      
      This meant, for performance reasons, that we needed to extend
      FastNewClosureStub to support creating closures with literals. And ultimately,
      it drove us to move the optimized code map lookup out of FastNewClosureStub
      and into the compile lazy builtin.
      
      The heap change is trivial so I TBR Hannes for it...
      Also, Yang has had a look at the debugger changes already and approved 'em. So he is TBR style too.
      And Benedikt reviewed it as well.
      
      TBR=hpayer@chromium.org, yangguo@chromium.org, bmeurer@chromium.org
      
      BUG=
      
      Review URL: https://codereview.chromium.org/1668103002
      
      Cr-Commit-Position: refs/heads/master@{#33741}
      bb31db3a
    • mythria's avatar
      [Interpreter] Adds support for rest parameters to interpreter. · 9aa612cb
      mythria authored
      Adds implementation and tests for rest parameters to interpreter.
      
      BUG=v8:4280,v8:4683
      LOG=N
      
      Review URL: https://codereview.chromium.org/1664593003
      
      Cr-Commit-Position: refs/heads/master@{#33722}
      9aa612cb
  19. 03 Feb, 2016 2 commits
  20. 02 Feb, 2016 1 commit
    • oth's avatar
      [interpreter] Move temporary register allocator into own file. · ef93854a
      oth authored
      Moves the temporary register allocator out of the bytecode array
      builder into TemporaryRegisterAllocator class and adds unittests.
      Particular must be taken around the translation window boundary
      motivating the addition of tests.
      
      Also adds a Clear() method to IdentityMap() which is called by
      the destructor. This allows classes to hold an IdentityMap if
      they are zone allocated. Classes must call Clear() before the zone
      is re-cycled or face v8 heap corruption.
      
      BUG=v8:4280,v8:4675
      LOG=N
      
      Review URL: https://codereview.chromium.org/1651133002
      
      Cr-Commit-Position: refs/heads/master@{#33686}
      ef93854a
  21. 29 Jan, 2016 1 commit
    • jkummerow's avatar
      Introduce {FAST,SLOW}_STRING_WRAPPER_ELEMENTS · f4872f74
      jkummerow authored
      String wrappers (new String("foo")) are special objects: their string
      characters are accessed like elements, and they also have an elements
      backing store. This used to require a bunch of explicit checks like:
      
      if (obj->IsJSValue() && JSValue::cast(obj)->value()->IsString()) {
        /* Handle string characters */
      }
      // Handle regular elements (for string wrappers and other objects)
      obj->GetElementsAccessor()->Whatever(...);
      
      This CL introduces new ElementsKinds for string wrapper objects (one for
      fast elements, one for dictionary elements), which allow folding the
      special-casing into new StringWrapperElementsAccessors.
      
      No observable change in behavior is intended.
      
      Review URL: https://codereview.chromium.org/1612323003
      
      Cr-Commit-Position: refs/heads/master@{#33616}
      f4872f74
  22. 27 Jan, 2016 3 commits
    • mvstanton's avatar
      Revert of Type Feedback Vector lives in the closure (patchset #2 id:20001 of... · a7027851
      mvstanton authored
      Revert of Type Feedback Vector lives in the closure (patchset #2 id:20001 of https://codereview.chromium.org/1642613002/ )
      
      Reason for revert:
      Bug: failing to use write barrier when writing code entry into closure.
      
      Original issue's description:
      > Reland of Type Feedback Vector lives in the closure
      >
      > (Fixed a bug found by nosnap builds.)
      >
      > We get less "pollution" of type feedback if we have one vector per native
      > context, rather than one for the whole system. This CL moves the vector
      > appropriately.
      >
      > We rely more heavily on the Optimized Code Map in the SharedFunctionInfo. The
      > vector actually lives in the first slot of the literals array (indeed there is
      > great commonality between those arrays, they can be thought of as the same
      > thing). So we make greater effort to ensure there is a valid literals array
      > after compilation.
      >
      > This meant, for performance reasons, that we needed to extend
      > FastNewClosureStub to support creating closures with literals. And ultimately,
      > it drove us to move the optimized code map lookup out of FastNewClosureStub
      > and into the compile lazy builtin.
      >
      > The heap change is trivial so I TBR Hannes for it...
      >
      > TBR=hpayer@chromium.org
      > BUG=
      >
      > Committed: https://crrev.com/d984b3b0ce91e55800f5323b4bb32a06f8a5aab1
      > Cr-Commit-Position: refs/heads/master@{#33548}
      
      TBR=bmeurer@chromium.org,yangguo@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/1643533003
      
      Cr-Commit-Position: refs/heads/master@{#33556}
      a7027851
    • mvstanton's avatar
      Reland of Type Feedback Vector lives in the closure · d984b3b0
      mvstanton authored
      (Fixed a bug found by nosnap builds.)
      
      We get less "pollution" of type feedback if we have one vector per native
      context, rather than one for the whole system. This CL moves the vector
      appropriately.
      
      We rely more heavily on the Optimized Code Map in the SharedFunctionInfo. The
      vector actually lives in the first slot of the literals array (indeed there is
      great commonality between those arrays, they can be thought of as the same
      thing). So we make greater effort to ensure there is a valid literals array
      after compilation.
      
      This meant, for performance reasons, that we needed to extend
      FastNewClosureStub to support creating closures with literals. And ultimately,
      it drove us to move the optimized code map lookup out of FastNewClosureStub
      and into the compile lazy builtin.
      
      The heap change is trivial so I TBR Hannes for it...
      
      TBR=hpayer@chromium.org
      BUG=
      
      Review URL: https://codereview.chromium.org/1642613002
      
      Cr-Commit-Position: refs/heads/master@{#33548}
      d984b3b0
    • oth's avatar
      [interpreter] Reduce move operations for wide register support. · 95bec7e7
      oth authored
      Introduces the concept of transfer direction to register operands. This
      enables the register translator to emit exactly the moves that a
      bytecode having it's register operands translated needs.
      
      BUG=v8:4280,v8:4675
      LOG=N
      
      Review URL: https://codereview.chromium.org/1633153002
      
      Cr-Commit-Position: refs/heads/master@{#33544}
      95bec7e7
  23. 26 Jan, 2016 4 commits
    • rmcilroy's avatar
      [Interpreter] Implement do expressions. · 04c00ee9
      rmcilroy authored
      Implements do expressions for the Ignition.
      
      BUG=v8:4685
      LOG=N
      
      Review URL: https://codereview.chromium.org/1632213002
      
      Cr-Commit-Position: refs/heads/master@{#33525}
      04c00ee9
    • mvstanton's avatar
      Revert of Type Feedback Vector lives in the closure (patchset #12 id:260001 of... · e2e7dc32
      mvstanton authored
      Revert of Type Feedback Vector lives in the closure (patchset #12 id:260001 of https://codereview.chromium.org/1563213002/ )
      
      Reason for revert:
      FAilure on win32 bot, need to investigate webkit failures.
      
      Original issue's description:
      > Type Feedback Vector lives in the closure
      >
      > We get less "pollution" of type feedback if we have one vector per native
      > context, rather than one for the whole system. This CL moves the vector
      > appropriately.
      >
      > We rely more heavily on the Optimized Code Map in the SharedFunctionInfo. The
      > vector actually lives in the first slot of the literals array (indeed there is
      > great commonality between those arrays, they can be thought of as the same
      > thing). So we make greater effort to ensure there is a valid literals array
      > after compilation.
      >
      > This meant, for performance reasons, that we needed to extend
      > FastNewClosureStub to support creating closures with literals. And ultimately,
      > it drove us to move the optimized code map lookup out of FastNewClosureStub
      > and into the compile lazy builtin.
      >
      > The heap change is trivial so I TBR Hannes for it...
      >
      > TBR=hpayer@chromium.org
      >
      > BUG=
      >
      > Committed: https://crrev.com/a5200f7ed4d11c6b882fa667da7a1864226544b4
      > Cr-Commit-Position: refs/heads/master@{#33518}
      
      TBR=bmeurer@chromium.org,akos.palfi@imgtec.com
      # 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/1632993003
      
      Cr-Commit-Position: refs/heads/master@{#33520}
      e2e7dc32
    • mvstanton's avatar
      Type Feedback Vector lives in the closure · a5200f7e
      mvstanton authored
      We get less "pollution" of type feedback if we have one vector per native
      context, rather than one for the whole system. This CL moves the vector
      appropriately.
      
      We rely more heavily on the Optimized Code Map in the SharedFunctionInfo. The
      vector actually lives in the first slot of the literals array (indeed there is
      great commonality between those arrays, they can be thought of as the same
      thing). So we make greater effort to ensure there is a valid literals array
      after compilation.
      
      This meant, for performance reasons, that we needed to extend
      FastNewClosureStub to support creating closures with literals. And ultimately,
      it drove us to move the optimized code map lookup out of FastNewClosureStub
      and into the compile lazy builtin.
      
      The heap change is trivial so I TBR Hannes for it...
      
      TBR=hpayer@chromium.org
      
      BUG=
      
      Review URL: https://codereview.chromium.org/1563213002
      
      Cr-Commit-Position: refs/heads/master@{#33518}
      a5200f7e
    • oth's avatar
      [interpreter] Wide register support. · 19df7a20
      oth authored
      This increases the size of register operands to be 16-bit.
      
      Not all bytecodes have wide register variants, so when they are
      needed a register translator will copy them into a small area
      reserved at the top of the 8-bit register range and these registers
      are supplied as arguments to the bytecode with 8-bit operands.
      
      This is non-intrusive for typical bytecode where the number of
      registers is less than 120. For bytecodes with wide register
      operands (above the window) their index needs to be translated
      to avoid the reserved translation window.
      
      Enables splay.js to run in Octane and a handful of mjsunit tests.
      
      BUG=v8:4280,v8:4675
      LOG=NO
      
      Review URL: https://codereview.chromium.org/1613163002
      
      Cr-Commit-Position: refs/heads/master@{#33516}
      19df7a20
  24. 25 Jan, 2016 1 commit
  25. 22 Jan, 2016 2 commits