1. 30 Mar, 2016 1 commit
  2. 29 Mar, 2016 1 commit
    • bmeurer's avatar
      [crankshaft] Address the deoptimization loops of Math.floor, Math.round and Math.ceil. · 978ad03b
      bmeurer authored
      Fix and re-enable the flexible representation for Math.floor (which is used to
      implement Math.ceil) and Math.round, which allows Math.floor and Math.round to
      return double results instead of int32, and therefore allows values outside
      the int32 range, especially -0 is now a valid result, which doesn't deopt.
      
      Also port this feature to x64 and ia32 when the CPU supports the SSE4.1
      extension.
      
      This addresses all the known deoptimization loops related to Math.round
      in the Kraken benchmark suite, and seems to also address most of the
      deoptimization loops related to Math.floor in the Oort Online benchmark.
      
      Drive-by-fix: Import the regression tests for the broken HMathFloorOfDiv
      optimization that caused the initial revert of the feature (for arm64 only
      back then).
      
      BUG=chromium:476477,v8:2890,v8:4059
      R=jarin@chromium.org
      LOG=n
      
      Review URL: https://codereview.chromium.org/1841513003
      
      Cr-Commit-Position: refs/heads/master@{#35094}
      978ad03b
  3. 21 Mar, 2016 1 commit
  4. 16 Mar, 2016 2 commits
  5. 08 Mar, 2016 1 commit
    • verwaest's avatar
      Don't do any special normalization if a boilerplate contains function literals. · fd405704
      verwaest authored
      This mechanism was used to ensure that functions ended up as constants on the map of prototypes defined using object literals, e.g.,:
      
      function.prototype = {
        method: function() { ... }
      }
      
      Nowadays we treat prototypes specially, and make all their functions constants when an object turns prototype. Hence this special custom code isn't necessary anymore.
      
      This also affects boilerplates that do not become prototypes. Their functions will not be constants but fields instead. Calling their methods will slow down. However, multiple instances of the same boilerplate will stay monomorphic. We'll have to see what the impact is for such objects, but preliminary benchmarks do not show this as an important regression.
      
      BUG=chromium:593008
      LOG=n
      
      Review URL: https://codereview.chromium.org/1772423002
      
      Cr-Commit-Position: refs/heads/master@{#34602}
      fd405704
  6. 07 Mar, 2016 1 commit
    • ishell's avatar
      [crankshaft] Support ES6 tail call elimination. · 22938040
      ishell authored
      HInvokeFunction and HApplyArguments instructions now support tail calling.
      
      Inlining of calls at tail position is not supported yet and therefore still disabled.
      
      The tail-call-megatest was modified so that the usages of "arguments" object do not disable Crankshaft.
      
      TBR=bmeurer@chromium.org
      BUG=v8:4698
      LOG=N
      
      Review URL: https://codereview.chromium.org/1760253003
      
      Cr-Commit-Position: refs/heads/master@{#34542}
      22938040
  7. 26 Feb, 2016 1 commit
  8. 24 Feb, 2016 1 commit
  9. 17 Feb, 2016 2 commits
  10. 16 Feb, 2016 1 commit
  11. 09 Feb, 2016 1 commit
    • bmeurer's avatar
      [intrinsics] Kill the %_IsMinusZero intrinsic. · 00f7d1f5
      bmeurer authored
      By now only the default %TypedArray%.prototype.sort compare function
      and the JS implementation of SameValueZero were still using the odd
      %_IsMinusZero intrinsic, whose semantics both included a number check
      (actually HeapNumber test) plus testing if the heap number stores the
      special -0 value. In both cases we already know that we deal with
      number so we can reduce it to a simple number test for -0, which can
      be expressed via dividing 1 by that value and checking the sign of
      the result. In case of the compare function, we can be even smarter
      and work with the reciprocal values in case x and y are equal to 0
      (although long term we should probably rewrite the fast case for
      the typed array sorting function in C++ anyway, which will be way,
      way faster than our handwritten callback-style, type-feedback
      polluted JS implementation).
      
      R=yangguo@chromium.org
      
      Review URL: https://codereview.chromium.org/1680783002
      
      Cr-Commit-Position: refs/heads/master@{#33833}
      00f7d1f5
  12. 21 Jan, 2016 1 commit
  13. 12 Jan, 2016 3 commits
  14. 07 Dec, 2015 1 commit
  15. 01 Dec, 2015 1 commit
  16. 25 Nov, 2015 1 commit
    • bmeurer's avatar
      [runtime] First step to sanitize regexp literal creation. · 09b44428
      bmeurer authored
      This is the initial step towards refactoring the regexp literation
      creation code to make it less obscure and more similar to the mechanism
      we use to create array and object literals.  There's now a new runtime
      entry %CreateRegExpLiteral with the same interface as the entries for
      array and object literals, except that we still pass the flags as
      string.
      
      Instead of embedding the hand written native to clone JSRegExp instances
      we now have a FastCloneRegExpStub, which behaves similar to the other
      FastCloneShallowArrayStub and FastCloneShallowObjectStub that we already
      had.
      
      R=mlippautz@chromium.org, yangguo@chromium.org
      
      Review URL: https://codereview.chromium.org/1475823003
      
      Cr-Commit-Position: refs/heads/master@{#32255}
      09b44428
  17. 23 Nov, 2015 1 commit
    • bmeurer's avatar
      [builtins] Sanitize the machinery around Construct calls. · 374b6ea2
      bmeurer authored
      There's no point in collecting feedback for super constructor calls,
      because in all (interesting) cases we can gather (better) feedback from
      other sources (i.e. via inlining or via using a LOAD_IC to get to the
      [[Prototype]] of the target).  So CallConstructStub is now only used
      for new Foo(...args) sites where we want to collect feedback in the
      baseline compiler.  The optimizing compilers, Reflect.construct and
      super constructor calls use the Construct builtin directly, which allows
      us to remove some weird code from the CallConstructStub (and opens the
      possibility for more code sharing with the CallICStub, maybe even going
      for a ConstructICStub).
      
      Also remove the 100% redundant HCallNew instruction, which is just a
      wrapper for the Construct builtin anyway (indirectly via the
      CallConstructStub).
      
      Drive-by-fix: Drop unused has_function_cache bit on Code objects.
      
      R=mstarzinger@chromium.org, yangguo@chromium.org
      BUG=v8:4413, v8:4430
      LOG=n
      
      Review URL: https://codereview.chromium.org/1469793002
      
      Cr-Commit-Position: refs/heads/master@{#32172}
      374b6ea2
  18. 22 Oct, 2015 1 commit
  19. 20 Oct, 2015 1 commit
  20. 30 Sep, 2015 1 commit
  21. 18 Sep, 2015 1 commit
    • bmeurer's avatar
      [stubs] Refactor StringCompareStub and use it for HStringCompareAndBranch. · 8016547c
      bmeurer authored
      The StringCompareStub used to take its parameters on the (JavaScript)
      stack, which made it impossible to use in TurboFan. Actually
      StringCompareStub was currently completely unused. This changes the
      calling convention to something TurboFan compatible and introduces a
      CallInterfaceDescriptor for StringCompareStub. It also changes
      HStringCompareAndBranch to use the StringCompareStub instead of using
      the full blown CompareICStub for a stupid string comparison.
      
      R=jarin@chromium.org
      
      Review URL: https://codereview.chromium.org/1347913003
      
      Cr-Commit-Position: refs/heads/master@{#30818}
      8016547c
  22. 10 Sep, 2015 1 commit
    • bmeurer's avatar
      [runtime] Sanitize %NewClosure runtime entries. · 6b3c070d
      bmeurer authored
      There are now two runtime entries %NewClosure and %NewClosure_Tenured,
      with the same signature (one parameter, the SharedFunctionInfo, and the
      context of the caller).
      
      Also remove the HFunctionLiteral special case instruction from Crankshaft,
      as HCallWithDescriptor with FastNewClosureStub or HCallRuntime with
      either %NewClosure or %NewClosure_Tenured can easily do that for you.
      
      Also remove the redundant context parameter from the JSCreateClosure
      operator, because every JS operator already takes a context input.
      
      CQ_INCLUDE_TRYBOTS=tryserver.v8:v8_linux_nosnap_dbg
      
      Review URL: https://codereview.chromium.org/1329293003
      
      Cr-Commit-Position: refs/heads/master@{#30671}
      6b3c070d
  23. 01 Sep, 2015 1 commit
  24. 26 Aug, 2015 1 commit
  25. 25 Aug, 2015 1 commit
    • bmeurer's avatar
      Correctify instanceof and make it optimizable. · 5d875a57
      bmeurer authored
      The previous hack with HInstanceOfKnownGlobal was not only slower,
      but also very brittle and required a lot of weird hacks to support it. And
      what's even more important it wasn't even correct (because a map check
      on the lhs is never enough for instanceof).
      
      The new implementation provides a sane runtime implementation
      for InstanceOf plus a fast case in the InstanceOfStub, combined with
      a proper specialization in the case of a known global in CrankShaft,
      which does only the prototype chain walk (coupled with a code
      dependency on the known global).
      
      As a drive-by-fix: Also fix the incorrect Object.prototype.isPrototypeOf
      implementation.
      
      BUG=v8:4376
      LOG=y
      
      Review URL: https://codereview.chromium.org/1304633002
      
      Cr-Commit-Position: refs/heads/master@{#30342}
      5d875a57
  26. 28 Jul, 2015 2 commits
  27. 27 Jul, 2015 2 commits
  28. 20 Jul, 2015 1 commit
  29. 13 Jul, 2015 1 commit
  30. 01 Jul, 2015 1 commit
    • danno's avatar
      Make context register implicit for CallInterfaceDescriptors · 7015fd20
      danno authored
      Up until now the context register was listed explicitly in each stub's
      CallInterfaceDescriptor. This was problematic, because it was listed
      first in the list of register parameters--which is fine for Crankshaft,
      which is more or less built to handle the context as the first
      parameter-- but not ideal for TurboFan, which adds the context at
      the end of all function parameters. Now the context register is no
      longer in the register list and can be handled appropriately by both
      compilers. Specifically, this allows the FunctionType specified for
      each CallInterfaceDescriptor to exactly match the parameter register
      list.
      
      Review URL: https://codereview.chromium.org/1211333003
      
      Cr-Commit-Position: refs/heads/master@{#29402}
      7015fd20
  31. 26 Jun, 2015 1 commit
  32. 08 Jun, 2015 1 commit
  33. 15 May, 2015 1 commit
  34. 12 May, 2015 1 commit