1. 27 Apr, 2017 1 commit
  2. 26 Apr, 2017 3 commits
  3. 25 Apr, 2017 3 commits
  4. 24 Apr, 2017 1 commit
    • bmeurer's avatar
      [turbofan] Also constant-fold Object.getPrototypeOf if possible. · 359b5f93
      bmeurer authored
      We already have an optimization to constant-fold access to an object's
      prototype via the special __proto__ accessor (specified in appendix B).
      We can use the same optimization to also constant-fold accesses to an
      object's prototype via the official Object.getPrototypeOf function.
      
      Also add the optimization for Reflect.getPrototypeOf, which is
      equivalent for object inputs.
      
      This is commonly used by Babel to implement various new language
      features, for example subclassing and certain property lookups.
      
      R=yangguo@chromium.org
      BUG=v8:6292
      
      Review-Url: https://codereview.chromium.org/2841463002
      Cr-Commit-Position: refs/heads/master@{#44788}
      359b5f93
  5. 19 Apr, 2017 1 commit
    • bmeurer's avatar
      [turbofan] Constant-fold certain JSOrdinaryHasInstance nodes. · c9c7dd0d
      bmeurer authored
      Move JSOrdinaryHasInstance lowering to JSNativeContextSpecialization,
      which was previously mostly done in JSTypedLowering (for no reason).
      Add new logic to the lowering to constant-fold OrdinaryHasInstance
      checks when the map of the left-hand side and the "prototype" of the
      right-hand side is known. This address the performance issue with the
      (base) class constructors generated by Babel, i.e.:
      
        function _classCallCheck(instance, Constructor) {
          if (!(instance instanceof Constructor)) {
            throw new TypeError("Cannot call a class as a function");
          }
        }
      
        var C = function C() { _classCallCheck(this, C); };
      
      for
      
        class C {}
      
      Also ensure that a known constructor being used inside an instanceof
      get's a proper initial map on-demand.
      
      BUG=v8:6275
      R=mstarzinger@chromium.org
      
      Review-Url: https://codereview.chromium.org/2827013002
      Cr-Commit-Position: refs/heads/master@{#44727}
      c9c7dd0d
  6. 27 Mar, 2017 1 commit
  7. 24 Mar, 2017 1 commit
  8. 22 Mar, 2017 1 commit
  9. 15 Mar, 2017 2 commits
  10. 13 Mar, 2017 1 commit
  11. 10 Mar, 2017 1 commit
  12. 28 Feb, 2017 3 commits
    • tebbi's avatar
      [turbofan] extend escape analysis to reduce CheckMaps · 9881b6c7
      tebbi authored
      R=bmeurer@chromium.org
      
      BUG=
      
      Review-Url: https://codereview.chromium.org/2680973013
      Cr-Original-Commit-Position: refs/heads/master@{#43163}
      Committed: https://chromium.googlesource.com/v8/v8/+/f01c8a6e4b24ab38e58bb141fc251bc6b75dbe21
      Review-Url: https://codereview.chromium.org/2680973013
      Cr-Commit-Position: refs/heads/master@{#43478}
      9881b6c7
    • jarin's avatar
      [turbofan] Fix handling of typed array loads in load elimination. · 3c36aacc
      jarin authored
      BUG=chromium:694088
      
      Review-Url: https://codereview.chromium.org/2725593002
      Cr-Commit-Position: refs/heads/master@{#43477}
      3c36aacc
    • tebbi's avatar
      [turbofan] escape analysis supports arguments object and rest elements · 7467f16d
      tebbi authored
      The new NewUnmappedArgumentsElements node now takes two inputs:
      - the frame holding the arguments (current frame or arguments adaptor frame)
      - the length of the suffix of passed arguments to be copied into the backing store
      
      These inputs are computed with two new node types:
      ArgumentsFrame()
      ArgumentsLength[formal_parameter_count,is_rest_length](Node* arguments_frame)
      The node type NewRestParameterElements can now be expressed with NewUnmappedArgumentsElements and an appropriate length and is thus not needed anymore.
      
      In escape analysis, we lower loads from the length field of NewUnmappedArgumentsElements with its length input and if we find out that no write access to the arguments elements exists, we replace element loads with direct stack access and replace the NewUnmappedArgumentsElements node with a node of the new node type ArgumentsElementsState. This corresponds to an ObjectState node and gets translated into a deoptimizer instruction to allocate the backing store. Together with the already existing deoptimizer support for the actual arguments object/rest parameters, this allows to remove all allocations for arguments objects/rest parameters in this case.
      In the deoptimizer, we read the actual parameters from the stack while transforming the static deopt info into TranslatedValue objects.
      
      If escape analysis cannot remove the backing store allocation, NewUnmappedArgumentsElements gets lo
      
      BUG=v8:5726
      
      Review-Url: https://codereview.chromium.org/2692753004
      Cr-Commit-Position: refs/heads/master@{#43475}
      7467f16d
  13. 24 Feb, 2017 1 commit
  14. 22 Feb, 2017 1 commit
  15. 15 Feb, 2017 1 commit
  16. 10 Feb, 2017 1 commit
  17. 07 Feb, 2017 1 commit
  18. 30 Jan, 2017 1 commit
  19. 28 Jan, 2017 1 commit
    • jarin's avatar
      [turbofan] Only use Tagged machine representation for tagged state values. · 6cd2d4ba
      jarin authored
      This avoids using kTaggedSigned and kTaggedPointer because the
      semantic information of those type could be invalid in unreachable
      code.
      
      For example, SmiCheck(0.1) has representation TaggedSigned, but it is
      later compiled to DeoptimizeUnless(ObjectIsSmi(0.1)) with the constant
      0.1 directly connected to the uses. If the use is state-values, which
      recorded the TaggedSigned representation of CheckSmi, the code
      generator will be confused because it will see constant 0.1 that
      claims to be TaggedSigned value.
      
      BUG=chromium:675704
      
      Review-Url: https://codereview.chromium.org/2656243004
      Cr-Commit-Position: refs/heads/master@{#42756}
      6cd2d4ba
  20. 27 Jan, 2017 2 commits
  21. 26 Jan, 2017 3 commits
  22. 11 Jan, 2017 1 commit
  23. 23 Dec, 2016 1 commit
  24. 20 Dec, 2016 1 commit
  25. 15 Dec, 2016 1 commit
  26. 13 Dec, 2016 1 commit
  27. 12 Dec, 2016 1 commit
  28. 08 Dec, 2016 1 commit
  29. 07 Dec, 2016 1 commit
  30. 30 Nov, 2016 1 commit