- 31 Mar, 2022 1 commit
-
-
Leszek Swirski authored
Nodes can now hold a LazyDeoptSafepoint which stores the frame state in case they trigger a lazy deopt. OpProperties have a new CanLazyDeopt bit, and codegen emits a safepoint table entry + lazy deopt for all nodes with this bit. Also, we now check the deoptimized code bit on entry into the maglev compiled function. An example use of these lazy deopts is added as a PropertyCell fast path for LdaGlobal, which adds a code dependency on the property cell. Bug: v8:7700 Change-Id: I663db38dfa7325d38fc6d5f079d263a958074e36 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3557251Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Jakob Linke <jgruber@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/main@{#79688}
-
- 30 Mar, 2022 2 commits
-
-
Victor Gomes authored
Bug: v8:7700 Change-Id: I43ef07414326ee656b36e17aa739ae0015c88d57 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3560640Reviewed-by:
Leszek Swirski <leszeks@chromium.org> Commit-Queue: Victor Gomes <victorgomes@chromium.org> Cr-Commit-Position: refs/heads/main@{#79679}
-
Toon Verwaest authored
This allows us to store per-eager-deopt site information. Bug: v8:7700 Change-Id: I86c29aec28220fb96fcf09984e6665f650f22708 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3550275Reviewed-by:
Leszek Swirski <leszeks@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/main@{#79674}
-
- 29 Mar, 2022 1 commit
-
-
Toon Verwaest authored
Bug: v8:7700 Change-Id: I1efa298a25bf15c104a57db3ec7cc4d7e36861eb Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3553102Reviewed-by:
Leszek Swirski <leszeks@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Auto-Submit: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/main@{#79655}
-
- 24 Mar, 2022 1 commit
-
-
Leszek Swirski authored
Remove StoreToFrame and the general diff encoding for checkpoints, and instead make all Checkpoints immediately copy the live part of the interpreter frame state. This means that we don't need to recreate the frame state during graph processing, and we don't have to copy the checkpoint's state for storing in the deferred DeoptimizationInfo. In theory the diff encoding was meant to save zone memory for unused checkpoints, and for checkpoints that don't differ much from each other. However, a) We expect to do most checkpoint elimination during graph building, so the assumption that many checkpoints will be unused seems less probable, and b) We need to copy the checkpoint's frame state for emitting deopts, so we don't actually end up avoiding doing the copies. So, we can simplify things by removing this complexity. Bug: v8:7700 Change-Id: Iff9743fabbf7a017cccf0ece76a797c571764ea6 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3545178Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/main@{#79602}
-
- 23 Mar, 2022 1 commit
-
-
Victor Gomes authored
Bug: v8:7700 Change-Id: I5cd1a89aef9029752415b3b6b7bd124c5819024d Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3541922 Auto-Submit: Victor Gomes <victorgomes@chromium.org> Reviewed-by:
Leszek Swirski <leszeks@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/main@{#79565}
-
- 21 Mar, 2022 1 commit
-
-
Victor Gomes authored
During a frame merge we call ForEachValue that "get"s every live register, including the virtual accumulator. That currently fails since we need to check if the register is the virtual accumulator and set/get the accumulator field in InterpreterFrameState. The virtual accumulator slot in RegisterFrameArray (the same as the return address in a live frame) is actually unused. So we can use this slot for the InterpreterFrameState's accumulator, instead of a separate field. Bug: v8:7700 Change-Id: Ife33946a4f9c58ca1f4eadeb587f9880f6fb2afc Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3536648 Auto-Submit: Victor Gomes <victorgomes@chromium.org> Reviewed-by:
Leszek Swirski <leszeks@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/main@{#79553}
-
- 16 Mar, 2022 1 commit
-
-
Jakob Gruber authored
This CL implements most parts of the concurrent maglev pipeline. - MaglevConcurrentDispatcher: controls concurrent jobs. - MaglevCompilationInfo: holds job-global data, controls handle fiddling between the main isolate and local isolates, owns job-global state like the Zone. - MaglevCompilationUnit: same as before, holds per-unit data. Still missing: job finalization. Bug: v8:7700 Change-Id: I281178d945e79a0ba97fa2ac7023285d84a16641 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3516036Reviewed-by:
Dominik Inführ <dinfuehr@chromium.org> Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Commit-Queue: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/main@{#79489}
-
- 14 Mar, 2022 1 commit
-
-
Leszek Swirski authored
Modernise the RegList interface to be a proper class, rather than a typedef to an integer, and add proper methods onto it rather than ad-hoc bit manipulation. In particular, this makes RegList typesafe, adding a DoubleRegList for DoubleRegisters. The Arm64 CPURegList isn't updated to use (or extend) the new RegList interface, because of its weird type-erasing semantics (it can store Registers and VRegisters). Maybe in the future we'll want to get rid of CPURegList entirely and use RegList/DoubleRegList directly. Change-Id: I3cb2a4d386cb92a4dcd2edbdd3fba9ef71f354d6 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3516747 Commit-Queue: Leszek Swirski <leszeks@chromium.org> Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Reviewed-by:
Camillo Bruni <cbruni@chromium.org> Reviewed-by:
Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/main@{#79460}
-
- 10 Mar, 2022 1 commit
-
-
Leszek Swirski authored
Don't rely on register_values[index] == nullptr for checking if a register is free, but instead re-use the free register list, and iterate the allocatable_register & ~free_register list when iterating used registers. This also changes the indexing of register_values to be by register code, not allocatable register index. The register state stored on the InterpreterFrameState, however, stays compact (allocatable register count). A new wrapper class + iterator keeps iteration over it and the register_values array in sync. Bug: v8:7700 Change-Id: I7815aa2d4a1f7b7ebafaaafe0727219adcc4dcfe Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3512792 Auto-Submit: Leszek Swirski <leszeks@chromium.org> Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/main@{#79434}
-
- 09 Mar, 2022 1 commit
-
-
Victor Gomes authored
Context: https://chromium-review.googlesource.com/c/v8/v8/+/3506444 Bug: v8:7700 Change-Id: Ie877f7f18759f286597f07412ceb1ba25eb4787a Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3512793 Commit-Queue: Victor Gomes <victorgomes@chromium.org> Auto-Submit: Victor Gomes <victorgomes@chromium.org> Reviewed-by:
Leszek Swirski <leszeks@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/main@{#79416}
-
- 07 Mar, 2022 1 commit
-
-
Leszek Swirski authored
Allow bytecodes processed by maglev to access the on-stack closure register. Bug: v8:7700 Change-Id: I757d0c1734ef478e5b9671ed87a4691101b4e29d Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3506444 Auto-Submit: Leszek Swirski <leszeks@chromium.org> Reviewed-by:
Victor Gomes <victorgomes@chromium.org> Commit-Queue: Victor Gomes <victorgomes@chromium.org> Cr-Commit-Position: refs/heads/main@{#79383}
-
- 03 Mar, 2022 1 commit
-
-
Leszek Swirski authored
Store the free registers as a RegList rather than stack of Register values. This allows us to simplify some of the register freeing logic, including passing the current free set to nodes for use as temporaries. Drive-by: Replace ALWAYS_ALLOCATABLE_GENERAL_REGISTERS with ALLOCATABLE_GENERAL_REGISTERS, which is the more general list (the former is an implementation detail for optionally reserving a register for the cage register). Bug: v8:7700 Change-Id: I666e9a7547c2f4f4e578fbcbb4bd3fe3cb06dac5 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3497767Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Auto-Submit: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/main@{#79344}
-
- 24 Feb, 2022 1 commit
-
-
Leszek Swirski authored
Maglev is mid-tier optimising compiler designed mainly for compilation speed that can still generate good code for straightforward JS. This initial commit is an MVP for Maglev which can compile and run some very simple code, and sets up a framework that we can build upon. Design: https://docs.google.com/document/d/13CwgSL4yawxuYg3iNlM-4ZPCB8RgJya6b8H_E2F-Aek/edit# Bug: v8:7700 Change-Id: I5ae074ae099126c2c0d50864ac9b3d6fa5c9e85a Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3483664Reviewed-by:
Jakob Gruber <jgruber@chromium.org> Reviewed-by:
Toon Verwaest <verwaest@chromium.org> Commit-Queue: Leszek Swirski <leszeks@chromium.org> Cr-Commit-Position: refs/heads/main@{#79247}
-