1. 29 Oct, 2018 1 commit
  2. 26 Oct, 2018 1 commit
  3. 24 Oct, 2018 1 commit
    • Caitlin Potter's avatar
      [builtins] put SetPropertyInLiteral in a code-stub · ac3f98d5
      Caitlin Potter authored
      There are several core changes in this stub:
      
      1) add a version of KeyedStoreGenericGenerator::SetPropertyInLiteral()
      which supports indexed properties directly, witthout KeyedStore
      
      2) add a code stub for SetPropertyInLiteral which uses the version
      supporting indexed properties
      
      3) Use the code stub in CloneObjectIC, rather than using the smaller
      special-cased version which does not handle Names.
      
      Item 1) involves a refactoring which adds a nice way to reuse code in
      KeyedStoreGenericAssembler, which allows deleting a bunch of copy/pasted
      code. This makes it easy to reuse the index handling in
      KeyedStoreGeneric() without adding adding a bunch more duplicated
      handling. Because of this, I consider this to be somewhat of a cleanup,
      though if the copied code is preferred, I'm happy to revert to that.
      
      Item 2) is needed for Object.fromEntries(), as it's better to not
      require falling back to the slow path if a key happens to be an Smi ---
      but this is also optional.
      
      Item 3) benefits the codebase by allowing Object.fromEntries() to use
      this fast path without calling into the runtime, and without duplicating
      code which is also used by CloneObjectIC.
      
      I am skeptical that this should affect performance significantly. I've
      run ObjectLiteralSpread tests, and the mean of scores over 100 runs is
      somewhat surprising: CloneObjectIC --- the only user of this code,
      has an increased average score, while the polyfill cases score slightly
      worse --- However, the overall changes are small and likely flukes.
      The complete processed test output is below:
      
      ```
      // Mean of 100 runs of each benchmark
      
      Babel-ObjectLiteralSpread:
      -----+---------------------------+---------------------------+-------
           | With patch                | Without patch             | diff
      Mean | 11530.87                  | 12142.92                  | -5.04%
      -----+---------------------------+---------------------------+-------
      
      BabelAndOverwrite-ObjectLiteralSpread:
      -----+---------------------------+---------------------------+-------
           | With patch                | Without patch             | diff
      Mean | 10881.41                  | 11260.81                  | -3.37%
      -----+---------------------------+---------------------------+-------
      
      ObjectAssign-ObjectLiteralSpread:
      -----+---------------------------+---------------------------+-------
           | With patch                | Without patch             | diff
      Mean | 6188.92                   | 6358.55                   | -2.67%
      -----+---------------------------+---------------------------+-------
      
      ObjectAssignAndOverwrite-ObjectLiteralSpread:
      -----+---------------------------+---------------------------+-------
           | With patch                | Without patch             | diff
      Mean | 6112.80                   | 6275.54                   | -1.61%
      -----+---------------------------+---------------------------+-------
      
      ObjectSpread-ObjectLiteralSpread:
      -----+---------------------------+---------------------------+-------
           | With patch                | Without patch             | diff
      Mean | 51942.93                  | 50713.17                  | +3.46%
      -----+---------------------------+---------------------------+-------
      
      ObjectSpreadAndOverwrite-ObjectLiteralSpread:
      -----+---------------------------+---------------------------+-------
           | With patch                | Without patch             | diff
      Mean | 51375.23                  | 50833.29                  | +2.09%
      -----+---------------------------+---------------------------+-------
      ```
      
      BUG=v8:8238, v8:8021
      R=ishell@chromium.org, jkummerow@chromium.org
      
      Change-Id: I43e102fc461ffd389b5d6810a73f86e5012d7dee
      Reviewed-on: https://chromium-review.googlesource.com/c/1277751
      Commit-Queue: Caitlin Potter <caitp@igalia.com>
      Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#56957}
      ac3f98d5
  4. 22 Oct, 2018 1 commit
  5. 19 Oct, 2018 1 commit
  6. 11 Oct, 2018 1 commit
  7. 08 Oct, 2018 1 commit
  8. 20 Sep, 2018 2 commits
  9. 18 Sep, 2018 1 commit
  10. 17 Sep, 2018 1 commit
  11. 14 Sep, 2018 3 commits
  12. 13 Sep, 2018 2 commits
  13. 12 Sep, 2018 6 commits
    • Sathya Gunasekaran's avatar
      Revert "Reland "[objects] Change String::length field to uint32_t."" · 350dfb62
      Sathya Gunasekaran authored
      This reverts commit a03cec2c.
      
      Reason for revert: https://ci.chromium.org/p/v8/builders/luci.v8.ci/V8%20Linux64%20GC%20Stress%20-%20custom%20snapshot/21320
      
      Original change's description:
      > Reland "[objects] Change String::length field to uint32_t."
      > 
      > This is a reland of 1f1eb625, the
      > breakage on the GCStress bot seems to be unrelated (maybe flushed
      > out by this change). We decided to reland to figure out whether it's
      > a random flake or really triggered by this particular change.
      > 
      > Original change's description:
      > > [objects] Change String::length field to uint32_t.
      > >
      > > This changes the Name::hash_field and Symbol::flags to uint32_t as
      > > well, so that both Symbols and Strings consume one fewer word on 64-bit
      > > architectures now. More importantly the access to String::length is
      > > always a 32-bit field load now, even with 31-bit Smis (i.e. on ARM or
      > > on 64-bit with pointer compression), so the access should be faster.
      > >
      > > Bug: v8:7065, v8:8171
      > > Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      > > Change-Id: I5523deb1f84ece91fa2fea775d50318bd1300493
      > > Reviewed-on: https://chromium-review.googlesource.com/1221288
      > > Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      > > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > > Reviewed-by: Igor Sheludko <ishell@chromium.org>
      > > Cr-Commit-Position: refs/heads/master@{#55825}
      > 
      > Bug: v8:7065, v8:8171
      > Tbr: tebbi@chromium.org, yangguo@chromium.org, ishell@chromium.org, ulan@chromium.org
      > Change-Id: I2be24ac018591c04c826e7e8db82e007b738d156
      > Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      > Reviewed-on: https://chromium-review.googlesource.com/1222308
      > Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
      > Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#55838}
      
      TBR=yangguo@chromium.org,tebbi@chromium.org,ishell@chromium.org,bmeurer@chromium.org
      
      Change-Id: Ic741c3d407d4257a8c86b3082b9a19e33dc89215
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:7065, v8:8171
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      Reviewed-on: https://chromium-review.googlesource.com/1222368Reviewed-by: 's avatarSathya Gunasekaran <gsathya@chromium.org>
      Commit-Queue: Sathya Gunasekaran <gsathya@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#55839}
      350dfb62
    • Benedikt Meurer's avatar
      Reland "[objects] Change String::length field to uint32_t." · a03cec2c
      Benedikt Meurer authored
      This is a reland of 1f1eb625, the
      breakage on the GCStress bot seems to be unrelated (maybe flushed
      out by this change). We decided to reland to figure out whether it's
      a random flake or really triggered by this particular change.
      
      Original change's description:
      > [objects] Change String::length field to uint32_t.
      >
      > This changes the Name::hash_field and Symbol::flags to uint32_t as
      > well, so that both Symbols and Strings consume one fewer word on 64-bit
      > architectures now. More importantly the access to String::length is
      > always a 32-bit field load now, even with 31-bit Smis (i.e. on ARM or
      > on 64-bit with pointer compression), so the access should be faster.
      >
      > Bug: v8:7065, v8:8171
      > Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      > Change-Id: I5523deb1f84ece91fa2fea775d50318bd1300493
      > Reviewed-on: https://chromium-review.googlesource.com/1221288
      > Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > Reviewed-by: Igor Sheludko <ishell@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#55825}
      
      Bug: v8:7065, v8:8171
      Tbr: tebbi@chromium.org, yangguo@chromium.org, ishell@chromium.org, ulan@chromium.org
      Change-Id: I2be24ac018591c04c826e7e8db82e007b738d156
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      Reviewed-on: https://chromium-review.googlesource.com/1222308Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#55838}
      a03cec2c
    • Benedikt Meurer's avatar
      Revert "Reland "[objects] Change String::length field to uint32_t."" · bd69d64d
      Benedikt Meurer authored
      This reverts commit df6157ae.
      
      Reason for revert: trybots didn't rerun :-/
      
      Original change's description:
      > Reland "[objects] Change String::length field to uint32_t."
      > 
      > This is a reland of 1f1eb625, the
      > breakage on the GCStress bot seems to be unrelated (maybe flushed
      > out by this change). We decided to reland to figure out whether it's
      > a random flake or really triggered by this particular change.
      > 
      > Original change's description:
      > > [objects] Change String::length field to uint32_t.
      > >
      > > This changes the Name::hash_field and Symbol::flags to uint32_t as
      > > well, so that both Symbols and Strings consume one fewer word on 64-bit
      > > architectures now. More importantly the access to String::length is
      > > always a 32-bit field load now, even with 31-bit Smis (i.e. on ARM or
      > > on 64-bit with pointer compression), so the access should be faster.
      > >
      > > Bug: v8:7065, v8:8171
      > > Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      > > Change-Id: I5523deb1f84ece91fa2fea775d50318bd1300493
      > > Reviewed-on: https://chromium-review.googlesource.com/1221288
      > > Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      > > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > > Reviewed-by: Igor Sheludko <ishell@chromium.org>
      > > Cr-Commit-Position: refs/heads/master@{#55825}
      > 
      > Tbr: tebbi@chromium.org, yangguo@chromium.org, ishell@chromium.org
      > Bug: v8:7065, v8:8171
      > Change-Id: I3c7d0b00abb15fa98ab622f9ecd8602fc798cbc3
      > Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      > Reviewed-on: https://chromium-review.googlesource.com/1221290
      > Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      > Reviewed-by: Ulan Degenbaev <ulan@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#55836}
      
      TBR=ulan@chromium.org,yangguo@chromium.org,tebbi@chromium.org,ishell@chromium.org,bmeurer@chromium.org
      
      Change-Id: Ieaf3be31166abb02e37370ad846c38fa3d114693
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:7065, v8:8171
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      Reviewed-on: https://chromium-review.googlesource.com/1222306Reviewed-by: 's avatarBenedikt Meurer <bmeurer@chromium.org>
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#55837}
      bd69d64d
    • Benedikt Meurer's avatar
      Reland "[objects] Change String::length field to uint32_t." · df6157ae
      Benedikt Meurer authored
      This is a reland of 1f1eb625, the
      breakage on the GCStress bot seems to be unrelated (maybe flushed
      out by this change). We decided to reland to figure out whether it's
      a random flake or really triggered by this particular change.
      
      Original change's description:
      > [objects] Change String::length field to uint32_t.
      >
      > This changes the Name::hash_field and Symbol::flags to uint32_t as
      > well, so that both Symbols and Strings consume one fewer word on 64-bit
      > architectures now. More importantly the access to String::length is
      > always a 32-bit field load now, even with 31-bit Smis (i.e. on ARM or
      > on 64-bit with pointer compression), so the access should be faster.
      >
      > Bug: v8:7065, v8:8171
      > Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      > Change-Id: I5523deb1f84ece91fa2fea775d50318bd1300493
      > Reviewed-on: https://chromium-review.googlesource.com/1221288
      > Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > Reviewed-by: Igor Sheludko <ishell@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#55825}
      
      Tbr: tebbi@chromium.org, yangguo@chromium.org, ishell@chromium.org
      Bug: v8:7065, v8:8171
      Change-Id: I3c7d0b00abb15fa98ab622f9ecd8602fc798cbc3
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      Reviewed-on: https://chromium-review.googlesource.com/1221290
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#55836}
      df6157ae
    • Leszek Swirski's avatar
      Revert "[objects] Change String::length field to uint32_t." · 4bbb7c4e
      Leszek Swirski authored
      This reverts commit 1f1eb625.
      
      Reason for revert: GC Stress failure (https://ci.chromium.org/p/v8/builders/luci.v8.ci/V8%20Linux64%20GC%20Stress%20-%20custom%20snapshot/21311) 
      
      Original change's description:
      > [objects] Change String::length field to uint32_t.
      > 
      > This changes the Name::hash_field and Symbol::flags to uint32_t as
      > well, so that both Symbols and Strings consume one fewer word on 64-bit
      > architectures now. More importantly the access to String::length is
      > always a 32-bit field load now, even with 31-bit Smis (i.e. on ARM or
      > on 64-bit with pointer compression), so the access should be faster.
      > 
      > Bug: v8:7065, v8:8171
      > Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      > Change-Id: I5523deb1f84ece91fa2fea775d50318bd1300493
      > Reviewed-on: https://chromium-review.googlesource.com/1221288
      > Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      > Reviewed-by: Yang Guo <yangguo@chromium.org>
      > Reviewed-by: Tobias Tebbi <tebbi@chromium.org>
      > Reviewed-by: Igor Sheludko <ishell@chromium.org>
      > Cr-Commit-Position: refs/heads/master@{#55825}
      
      TBR=yangguo@chromium.org,tebbi@chromium.org,ishell@chromium.org,bmeurer@chromium.org
      
      Change-Id: I73f3200902f9d52e5664d48c938e37d9dfb7bce7
      No-Presubmit: true
      No-Tree-Checks: true
      No-Try: true
      Bug: v8:7065, v8:8171
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      Reviewed-on: https://chromium-review.googlesource.com/1221706Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
      Commit-Queue: Leszek Swirski <leszeks@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#55826}
      4bbb7c4e
    • Benedikt Meurer's avatar
      [objects] Change String::length field to uint32_t. · 1f1eb625
      Benedikt Meurer authored
      This changes the Name::hash_field and Symbol::flags to uint32_t as
      well, so that both Symbols and Strings consume one fewer word on 64-bit
      architectures now. More importantly the access to String::length is
      always a 32-bit field load now, even with 31-bit Smis (i.e. on ARM or
      on 64-bit with pointer compression), so the access should be faster.
      
      Bug: v8:7065, v8:8171
      Cq-Include-Trybots: luci.chromium.try:linux_chromium_rel_ng;luci.v8.try:v8_linux_noi18n_rel_ng
      Change-Id: I5523deb1f84ece91fa2fea775d50318bd1300493
      Reviewed-on: https://chromium-review.googlesource.com/1221288
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarYang Guo <yangguo@chromium.org>
      Reviewed-by: 's avatarTobias Tebbi <tebbi@chromium.org>
      Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#55825}
      1f1eb625
  14. 11 Sep, 2018 5 commits
  15. 31 Aug, 2018 2 commits
    • Benedikt Meurer's avatar
      [runtime] Merge %KeyedGetProperty into %GetProperty. · 5f27e5c7
      Benedikt Meurer authored
      As noticed by jkummerow@ there's probably not really a point in
      keeping two separate runtime functions that perform the same
      operation, but one has a different fast-path (which is not
      available to the other). So %KeyedGetProperty is now effectively
      %GetProperty and used consistently as fallback from both the ICs
      as well as other callers like the GetProperty builtin.
      
      Bug: v8:8015
      Change-Id: Ib46b13da739229e2eb820ecf87923ac99c6971d3
      Reviewed-on: https://chromium-review.googlesource.com/1199105
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#55547}
      5f27e5c7
    • Benedikt Meurer's avatar
      [ic] Teach KeyedLoadICGeneric about ToName. · 923127f8
      Benedikt Meurer authored
      In the KeyedLoadICGeneric case the engine previously immediately fell
      back to the %KeyedGetProperty runtime function if the key was not a
      Name or a valid array index. This turns out to be really slow if a
      program passes for example objects as keys. Since we already have all
      the logic in place to convert an arbitrary JavaScript value to a Name,
      we can just call into ToName first and then operate on the result of
      that, which is significantly faster since C++ usually doesn't need to
      call back into JavaScript then to convert a JSReceiver into a Name.
      
      This also changes the ToName builtin to use the existing builtin for
      NonPrimitiveToPrimitive, which stays in JavaScript land completely.
      Since there's not really a point in inlining ToName into the call
      sites, the other uses were also changed to call the builtin instead,
      which saves some space and might also help with instruction cache
      utilization (especially when the ToName logic is more involved now).
      
      This improves the performance on the microbenchmark
      
      ```js
      const n = 1e7;
      const obj = {};
      const key = [1,2];
      
      const start = Date.now();
      for (let i = 0; i < n; ++i) {
        if (obj[key] === undefined) obj[key] = key;
      }
      print(`time: ${Date.now() - start} ms.`);
      ```
      
      by up to 36%. On the ARES-6 ML benchmark the steady state improves by up
      to ~7% and the overall mean for ARES-6 ML improves by up to ~6%. Further
      improvements might be possible here if the GetProperty builtin could be
      made faster for common prototype lookups like Symbol.toPrimitive and the
      "valueOf" and "toString" functions.
      
      Bug: v8:6344, v8:6670
      Change-Id: Ic3ac2bc4d4277836ef03039de4eda5c5f66a85da
      Reviewed-on: https://chromium-review.googlesource.com/1199022
      Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
      Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#55540}
      923127f8
  16. 23 Aug, 2018 1 commit
  17. 15 Aug, 2018 1 commit
  18. 13 Aug, 2018 1 commit
  19. 09 Aug, 2018 1 commit
  20. 08 Aug, 2018 1 commit
  21. 07 Aug, 2018 1 commit
  22. 06 Aug, 2018 1 commit
  23. 04 Aug, 2018 1 commit
  24. 03 Aug, 2018 1 commit
  25. 01 Aug, 2018 1 commit
  26. 31 Jul, 2018 1 commit