Commit bb9004f3 authored by Milad Fa's avatar Milad Fa Committed by V8 LUCI CQ

PPC/s390: [safepoints] Various refactors

Port c7e47c30

Original Commit Message:

    A collection of smallish cleanups and improvements for safepoints.

    Maintainability:
    - The class names were not very clear; move Safepoint inside
      SafepointTableBuilder to clarify that this wrapper class is used
      during codegen.
    - Rename DefinePointerSlot/DefineRegister to
      DefineTaggedStackSlot/DefineTaggedRegister for clarity.
    - Use named constants instead of -1.
    - DefineTaggedRegister has no connection to kNoDeoptIndex, remove
      the DCHECK and comment.
    - Remove the unused kNumSafepointRegisters constant + other dead code.
    - Small clarifications in CommonFrame::IterateCompiledFrame.
    - Rename has_safepoint_info to uses_safepoint_table and refactor s.t.
      `stack_slots` can be used when `uses_safepoint_table == false`. In
      this case it just returns 0.

    Perf:
    - During codegen, represent stack slots as a growable bit vector
      instead of a list of int indices. Extend GrowableBitVector
      functionality to support the above.
    - Track the minimum index instead of iterating all stack slots in
      all safepoints before encoding.

R=jgruber@chromium.org, joransiu@ca.ibm.com, junyan@redhat.com, midawson@redhat.com
BUG=
LOG=N

Change-Id: Ifef2d95f1e4a064d85d4ce437b1d12ae9796336f
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3484701Reviewed-by: 's avatarJoran Siu <joransiu@ca.ibm.com>
Commit-Queue: Milad Farazmand <mfarazma@redhat.com>
Cr-Commit-Position: refs/heads/main@{#79237}
parent 09c001a7
...@@ -2893,15 +2893,14 @@ void LiftoffAssembler::PopRegisters(LiftoffRegList regs) { ...@@ -2893,15 +2893,14 @@ void LiftoffAssembler::PopRegisters(LiftoffRegList regs) {
MultiPop(regs.GetGpList()); MultiPop(regs.GetGpList());
} }
void LiftoffAssembler::RecordSpillsInSafepoint(Safepoint& safepoint, void LiftoffAssembler::RecordSpillsInSafepoint(
LiftoffRegList all_spills, SafepointTableBuilder::Safepoint& safepoint, LiftoffRegList all_spills,
LiftoffRegList ref_spills, LiftoffRegList ref_spills, int spill_offset) {
int spill_offset) {
int spill_space_size = 0; int spill_space_size = 0;
while (!all_spills.is_empty()) { while (!all_spills.is_empty()) {
LiftoffRegister reg = all_spills.GetLastRegSet(); LiftoffRegister reg = all_spills.GetLastRegSet();
if (ref_spills.has(reg)) { if (ref_spills.has(reg)) {
safepoint.DefinePointerSlot(spill_offset); safepoint.DefineTaggedStackSlot(spill_offset);
} }
all_spills.clear(reg); all_spills.clear(reg);
++spill_offset; ++spill_offset;
......
...@@ -2889,15 +2889,14 @@ void LiftoffAssembler::PopRegisters(LiftoffRegList regs) { ...@@ -2889,15 +2889,14 @@ void LiftoffAssembler::PopRegisters(LiftoffRegList regs) {
MultiPop(regs.GetGpList()); MultiPop(regs.GetGpList());
} }
void LiftoffAssembler::RecordSpillsInSafepoint(Safepoint& safepoint, void LiftoffAssembler::RecordSpillsInSafepoint(
LiftoffRegList all_spills, SafepointTableBuilder::Safepoint& safepoint, LiftoffRegList all_spills,
LiftoffRegList ref_spills, LiftoffRegList ref_spills, int spill_offset) {
int spill_offset) {
int spill_space_size = 0; int spill_space_size = 0;
while (!all_spills.is_empty()) { while (!all_spills.is_empty()) {
LiftoffRegister reg = all_spills.GetLastRegSet(); LiftoffRegister reg = all_spills.GetLastRegSet();
if (ref_spills.has(reg)) { if (ref_spills.has(reg)) {
safepoint.DefinePointerSlot(spill_offset); safepoint.DefineTaggedStackSlot(spill_offset);
} }
all_spills.clear(reg); all_spills.clear(reg);
++spill_offset; ++spill_offset;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment