v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
v8::internal::compiler::RegisterAllocationData Class Referencefinal

#include <register-allocator.h>

Inheritance diagram for v8::internal::compiler::RegisterAllocationData:
Collaboration diagram for v8::internal::compiler::RegisterAllocationData:

Classes

struct  DelayedReference
 
class  PhiMapValue
 

Public Types

enum  SpillMode { kSpillAtDefinition , kSpillDeferred }
 
using PhiMap = ZoneMap<int, PhiMapValue*>
 
using DelayedReferences = ZoneVector<DelayedReference>
 
using RangesWithPreassignedSlots
 

Public Member Functions

 RegisterAllocationData (const RegisterAllocationData &)=delete
 
RegisterAllocationDataoperator= (const RegisterAllocationData &)=delete
 
 RegisterAllocationData (const RegisterConfiguration *config, Zone *allocation_zone, Frame *frame, InstructionSequence *code, TickCounter *tick_counter, const char *debug_name=nullptr)
 
const ZoneVector< TopLevelLiveRange * > & live_ranges () const
 
ZoneVector< TopLevelLiveRange * > & live_ranges ()
 
const ZoneVector< TopLevelLiveRange * > & fixed_live_ranges () const
 
ZoneVector< TopLevelLiveRange * > & fixed_live_ranges ()
 
ZoneVector< TopLevelLiveRange * > & fixed_float_live_ranges ()
 
const ZoneVector< TopLevelLiveRange * > & fixed_float_live_ranges () const
 
ZoneVector< TopLevelLiveRange * > & fixed_double_live_ranges ()
 
const ZoneVector< TopLevelLiveRange * > & fixed_double_live_ranges () const
 
ZoneVector< TopLevelLiveRange * > & fixed_simd128_live_ranges ()
 
const ZoneVector< TopLevelLiveRange * > & fixed_simd128_live_ranges () const
 
ZoneVector< SparseBitVector * > & live_in_sets ()
 
ZoneVector< SparseBitVector * > & live_out_sets ()
 
DelayedReferencesdelayed_references ()
 
InstructionSequencecode () const
 
Zoneallocation_zone () const
 
Zonecode_zone () const
 
Frameframe () const
 
const char * debug_name () const
 
const RegisterConfigurationconfig () const
 
MachineRepresentation RepresentationFor (int virtual_register)
 
TopLevelLiveRangeGetLiveRangeFor (int index)
 
TopLevelLiveRangeNewLiveRange (int index, MachineRepresentation rep)
 
SpillRangeAssignSpillRangeToLiveRange (TopLevelLiveRange *range, SpillMode spill_mode)
 
SpillRangeCreateSpillRangeForLiveRange (TopLevelLiveRange *range)
 
MoveOperandsAddGapMove (int index, Instruction::GapPosition position, const InstructionOperand &from, const InstructionOperand &to)
 
bool ExistsUseWithoutDefinition ()
 
bool RangesDefinedInDeferredStayInDeferred ()
 
void MarkFixedUse (MachineRepresentation rep, int index)
 
bool HasFixedUse (MachineRepresentation rep, int index)
 
void MarkAllocated (MachineRepresentation rep, int index)
 
PhiMapValueInitializePhiMap (const InstructionBlock *block, PhiInstruction *phi)
 
PhiMapValueGetPhiMapValueFor (TopLevelLiveRange *top_range)
 
PhiMapValueGetPhiMapValueFor (int virtual_register)
 
bool IsBlockBoundary (LifetimePosition pos) const
 
RangesWithPreassignedSlotspreassigned_slot_ranges ()
 
void RememberSpillState (RpoNumber block, const ZoneVector< LiveRange * > &state)
 
ZoneVector< LiveRange * > & GetSpillState (RpoNumber block)
 
void ResetSpillState ()
 
TickCountertick_counter ()
 
ZoneMap< TopLevelLiveRange *, AllocatedOperand * > & slot_for_const_range ()
 
- Public Member Functions inherited from v8::internal::ZoneObject
void * operator new (size_t, Zone *)=delete
 
void * operator new (size_t size, void *ptr)
 
void operator delete (void *, size_t)
 
void operator delete (void *pointer, Zone *zone)=delete
 

Static Public Attributes

static constexpr int kNumberOfFixedRangesPerRegister = 2
 

Private Attributes

Zone *const allocation_zone_
 
Frame *const frame_
 
InstructionSequence *const code_
 
const char *const debug_name_
 
const RegisterConfiguration *const config_
 
PhiMap phi_map_
 
ZoneVector< SparseBitVector * > live_in_sets_
 
ZoneVector< SparseBitVector * > live_out_sets_
 
ZoneVector< TopLevelLiveRange * > live_ranges_
 
ZoneVector< TopLevelLiveRange * > fixed_live_ranges_
 
ZoneVector< TopLevelLiveRange * > fixed_float_live_ranges_
 
ZoneVector< TopLevelLiveRange * > fixed_double_live_ranges_
 
ZoneVector< TopLevelLiveRange * > fixed_simd128_live_ranges_
 
DelayedReferences delayed_references_
 
BitVectorassigned_registers_
 
BitVectorassigned_double_registers_
 
BitVectorassigned_simd128_registers_
 
BitVectorfixed_register_use_
 
BitVectorfixed_fp_register_use_
 
BitVectorfixed_simd128_register_use_
 
int virtual_register_count_
 
RangesWithPreassignedSlots preassigned_slot_ranges_
 
ZoneVector< ZoneVector< LiveRange * > > spill_state_
 
TickCounter *const tick_counter_
 
ZoneMap< TopLevelLiveRange *, AllocatedOperand * > slot_for_const_range_
 

Detailed Description

Definition at line 197 of file register-allocator.h.

Member Typedef Documentation

◆ DelayedReferences

◆ PhiMap

◆ RangesWithPreassignedSlots

Initial value:
ZoneVector<std::pair<TopLevelLiveRange*, int>>

Definition at line 239 of file register-allocator.h.

Member Enumeration Documentation

◆ SpillMode

Enumerator
kSpillAtDefinition 
kSpillDeferred 

Definition at line 204 of file register-allocator.h.

Constructor & Destructor Documentation

◆ RegisterAllocationData() [1/2]

v8::internal::compiler::RegisterAllocationData::RegisterAllocationData ( const RegisterAllocationData & )
delete

◆ RegisterAllocationData() [2/2]

v8::internal::compiler::RegisterAllocationData::RegisterAllocationData ( const RegisterConfiguration * config,
Zone * allocation_zone,
Frame * frame,
InstructionSequence * code,
TickCounter * tick_counter,
const char * debug_name = nullptr )

Definition at line 1172 of file register-allocator.cc.

Here is the call graph for this function:

Member Function Documentation

◆ AddGapMove()

MoveOperands * v8::internal::compiler::RegisterAllocationData::AddGapMove ( int index,
Instruction::GapPosition position,
const InstructionOperand & from,
const InstructionOperand & to )

Definition at line 1242 of file register-allocator.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ allocation_zone()

Zone * v8::internal::compiler::RegisterAllocationData::allocation_zone ( ) const
inline

Definition at line 281 of file register-allocator.h.

Here is the caller graph for this function:

◆ AssignSpillRangeToLiveRange()

SpillRange * v8::internal::compiler::RegisterAllocationData::AssignSpillRangeToLiveRange ( TopLevelLiveRange * range,
SpillMode spill_mode )

Definition at line 1345 of file register-allocator.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ code()

InstructionSequence * v8::internal::compiler::RegisterAllocationData::code ( ) const
inline

Definition at line 278 of file register-allocator.h.

Here is the caller graph for this function:

◆ code_zone()

Zone * v8::internal::compiler::RegisterAllocationData::code_zone ( ) const
inline

Definition at line 284 of file register-allocator.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ config()

const RegisterConfiguration * v8::internal::compiler::RegisterAllocationData::config ( ) const
inline

Definition at line 287 of file register-allocator.h.

Here is the caller graph for this function:

◆ CreateSpillRangeForLiveRange()

SpillRange * v8::internal::compiler::RegisterAllocationData::CreateSpillRangeForLiveRange ( TopLevelLiveRange * range)

◆ debug_name()

const char * v8::internal::compiler::RegisterAllocationData::debug_name ( ) const
inline

Definition at line 286 of file register-allocator.h.

Here is the caller graph for this function:

◆ delayed_references()

DelayedReferences & v8::internal::compiler::RegisterAllocationData::delayed_references ( )
inline

Definition at line 277 of file register-allocator.h.

Here is the caller graph for this function:

◆ ExistsUseWithoutDefinition()

bool v8::internal::compiler::RegisterAllocationData::ExistsUseWithoutDefinition ( )

Definition at line 1293 of file register-allocator.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ fixed_double_live_ranges() [1/2]

ZoneVector< TopLevelLiveRange * > & v8::internal::compiler::RegisterAllocationData::fixed_double_live_ranges ( )
inline

Definition at line 263 of file register-allocator.h.

Here is the caller graph for this function:

◆ fixed_double_live_ranges() [2/2]

const ZoneVector< TopLevelLiveRange * > & v8::internal::compiler::RegisterAllocationData::fixed_double_live_ranges ( ) const
inline

Definition at line 266 of file register-allocator.h.

◆ fixed_float_live_ranges() [1/2]

ZoneVector< TopLevelLiveRange * > & v8::internal::compiler::RegisterAllocationData::fixed_float_live_ranges ( )
inline

Definition at line 257 of file register-allocator.h.

Here is the caller graph for this function:

◆ fixed_float_live_ranges() [2/2]

const ZoneVector< TopLevelLiveRange * > & v8::internal::compiler::RegisterAllocationData::fixed_float_live_ranges ( ) const
inline

Definition at line 260 of file register-allocator.h.

◆ fixed_live_ranges() [1/2]

ZoneVector< TopLevelLiveRange * > & v8::internal::compiler::RegisterAllocationData::fixed_live_ranges ( )
inline

Definition at line 254 of file register-allocator.h.

◆ fixed_live_ranges() [2/2]

const ZoneVector< TopLevelLiveRange * > & v8::internal::compiler::RegisterAllocationData::fixed_live_ranges ( ) const
inline

Definition at line 251 of file register-allocator.h.

Here is the caller graph for this function:

◆ fixed_simd128_live_ranges() [1/2]

ZoneVector< TopLevelLiveRange * > & v8::internal::compiler::RegisterAllocationData::fixed_simd128_live_ranges ( )
inline

Definition at line 269 of file register-allocator.h.

Here is the caller graph for this function:

◆ fixed_simd128_live_ranges() [2/2]

const ZoneVector< TopLevelLiveRange * > & v8::internal::compiler::RegisterAllocationData::fixed_simd128_live_ranges ( ) const
inline

Definition at line 272 of file register-allocator.h.

◆ frame()

Frame * v8::internal::compiler::RegisterAllocationData::frame ( ) const
inline

Definition at line 285 of file register-allocator.h.

Here is the caller graph for this function:

◆ GetLiveRangeFor()

TopLevelLiveRange * v8::internal::compiler::RegisterAllocationData::GetLiveRangeFor ( int index)

Definition at line 1256 of file register-allocator.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetPhiMapValueFor() [1/2]

RegisterAllocationData::PhiMapValue * v8::internal::compiler::RegisterAllocationData::GetPhiMapValueFor ( int virtual_register)

Definition at line 1281 of file register-allocator.cc.

◆ GetPhiMapValueFor() [2/2]

RegisterAllocationData::PhiMapValue * v8::internal::compiler::RegisterAllocationData::GetPhiMapValueFor ( TopLevelLiveRange * top_range)

Definition at line 1288 of file register-allocator.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetSpillState()

ZoneVector< LiveRange * > & v8::internal::compiler::RegisterAllocationData::GetSpillState ( RpoNumber block)
inline

Definition at line 326 of file register-allocator.h.

Here is the caller graph for this function:

◆ HasFixedUse()

bool v8::internal::compiler::RegisterAllocationData::HasFixedUse ( MachineRepresentation rep,
int index )

Definition at line 1401 of file register-allocator.cc.

Here is the call graph for this function:

◆ InitializePhiMap()

RegisterAllocationData::PhiMapValue * v8::internal::compiler::RegisterAllocationData::InitializePhiMap ( const InstructionBlock * block,
PhiInstruction * phi )

Definition at line 1269 of file register-allocator.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsBlockBoundary()

bool v8::internal::compiler::RegisterAllocationData::IsBlockBoundary ( LifetimePosition pos) const

Definition at line 1474 of file register-allocator.cc.

Here is the call graph for this function:

◆ live_in_sets()

ZoneVector< SparseBitVector * > & v8::internal::compiler::RegisterAllocationData::live_in_sets ( )
inline

Definition at line 275 of file register-allocator.h.

Here is the caller graph for this function:

◆ live_out_sets()

ZoneVector< SparseBitVector * > & v8::internal::compiler::RegisterAllocationData::live_out_sets ( )
inline

Definition at line 276 of file register-allocator.h.

◆ live_ranges() [1/2]

ZoneVector< TopLevelLiveRange * > & v8::internal::compiler::RegisterAllocationData::live_ranges ( )
inline

Definition at line 250 of file register-allocator.h.

◆ live_ranges() [2/2]

const ZoneVector< TopLevelLiveRange * > & v8::internal::compiler::RegisterAllocationData::live_ranges ( ) const
inline

Definition at line 247 of file register-allocator.h.

Here is the caller graph for this function:

◆ MarkAllocated()

void v8::internal::compiler::RegisterAllocationData::MarkAllocated ( MachineRepresentation rep,
int index )

Definition at line 1437 of file register-allocator.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MarkFixedUse()

void v8::internal::compiler::RegisterAllocationData::MarkFixedUse ( MachineRepresentation rep,
int index )

Definition at line 1364 of file register-allocator.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ NewLiveRange()

TopLevelLiveRange * v8::internal::compiler::RegisterAllocationData::NewLiveRange ( int index,
MachineRepresentation rep )

Definition at line 1263 of file register-allocator.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator=()

RegisterAllocationData & v8::internal::compiler::RegisterAllocationData::operator= ( const RegisterAllocationData & )
delete

◆ preassigned_slot_ranges()

RangesWithPreassignedSlots & v8::internal::compiler::RegisterAllocationData::preassigned_slot_ranges ( )
inline

Definition at line 317 of file register-allocator.h.

Here is the caller graph for this function:

◆ RangesDefinedInDeferredStayInDeferred()

bool v8::internal::compiler::RegisterAllocationData::RangesDefinedInDeferredStayInDeferred ( )

Definition at line 1320 of file register-allocator.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RememberSpillState()

void v8::internal::compiler::RegisterAllocationData::RememberSpillState ( RpoNumber block,
const ZoneVector< LiveRange * > & state )
inline

Definition at line 321 of file register-allocator.h.

Here is the caller graph for this function:

◆ RepresentationFor()

MachineRepresentation v8::internal::compiler::RegisterAllocationData::RepresentationFor ( int virtual_register)

Definition at line 1250 of file register-allocator.cc.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ResetSpillState()

void v8::internal::compiler::RegisterAllocationData::ResetSpillState ( )
inline

Definition at line 331 of file register-allocator.h.

Here is the caller graph for this function:

◆ slot_for_const_range()

ZoneMap< TopLevelLiveRange *, AllocatedOperand * > & v8::internal::compiler::RegisterAllocationData::slot_for_const_range ( )
inline

Definition at line 339 of file register-allocator.h.

Here is the caller graph for this function:

◆ tick_counter()

TickCounter * v8::internal::compiler::RegisterAllocationData::tick_counter ( )
inline

Definition at line 337 of file register-allocator.h.

Here is the caller graph for this function:

Member Data Documentation

◆ allocation_zone_

Zone* const v8::internal::compiler::RegisterAllocationData::allocation_zone_
private

Definition at line 344 of file register-allocator.h.

◆ assigned_double_registers_

BitVector* v8::internal::compiler::RegisterAllocationData::assigned_double_registers_
private

Definition at line 359 of file register-allocator.h.

◆ assigned_registers_

BitVector* v8::internal::compiler::RegisterAllocationData::assigned_registers_
private

Definition at line 358 of file register-allocator.h.

◆ assigned_simd128_registers_

BitVector* v8::internal::compiler::RegisterAllocationData::assigned_simd128_registers_
private

Definition at line 360 of file register-allocator.h.

◆ code_

InstructionSequence* const v8::internal::compiler::RegisterAllocationData::code_
private

Definition at line 346 of file register-allocator.h.

◆ config_

const RegisterConfiguration* const v8::internal::compiler::RegisterAllocationData::config_
private

Definition at line 348 of file register-allocator.h.

◆ debug_name_

const char* const v8::internal::compiler::RegisterAllocationData::debug_name_
private

Definition at line 347 of file register-allocator.h.

◆ delayed_references_

DelayedReferences v8::internal::compiler::RegisterAllocationData::delayed_references_
private

Definition at line 357 of file register-allocator.h.

◆ fixed_double_live_ranges_

ZoneVector<TopLevelLiveRange*> v8::internal::compiler::RegisterAllocationData::fixed_double_live_ranges_
private

Definition at line 355 of file register-allocator.h.

◆ fixed_float_live_ranges_

ZoneVector<TopLevelLiveRange*> v8::internal::compiler::RegisterAllocationData::fixed_float_live_ranges_
private

Definition at line 354 of file register-allocator.h.

◆ fixed_fp_register_use_

BitVector* v8::internal::compiler::RegisterAllocationData::fixed_fp_register_use_
private

Definition at line 362 of file register-allocator.h.

◆ fixed_live_ranges_

ZoneVector<TopLevelLiveRange*> v8::internal::compiler::RegisterAllocationData::fixed_live_ranges_
private

Definition at line 353 of file register-allocator.h.

◆ fixed_register_use_

BitVector* v8::internal::compiler::RegisterAllocationData::fixed_register_use_
private

Definition at line 361 of file register-allocator.h.

◆ fixed_simd128_live_ranges_

ZoneVector<TopLevelLiveRange*> v8::internal::compiler::RegisterAllocationData::fixed_simd128_live_ranges_
private

Definition at line 356 of file register-allocator.h.

◆ fixed_simd128_register_use_

BitVector* v8::internal::compiler::RegisterAllocationData::fixed_simd128_register_use_
private

Definition at line 363 of file register-allocator.h.

◆ frame_

Frame* const v8::internal::compiler::RegisterAllocationData::frame_
private

Definition at line 345 of file register-allocator.h.

◆ kNumberOfFixedRangesPerRegister

int v8::internal::compiler::RegisterAllocationData::kNumberOfFixedRangesPerRegister = 2
staticconstexpr

Definition at line 206 of file register-allocator.h.

◆ live_in_sets_

ZoneVector<SparseBitVector*> v8::internal::compiler::RegisterAllocationData::live_in_sets_
private

Definition at line 350 of file register-allocator.h.

◆ live_out_sets_

ZoneVector<SparseBitVector*> v8::internal::compiler::RegisterAllocationData::live_out_sets_
private

Definition at line 351 of file register-allocator.h.

◆ live_ranges_

ZoneVector<TopLevelLiveRange*> v8::internal::compiler::RegisterAllocationData::live_ranges_
private

Definition at line 352 of file register-allocator.h.

◆ phi_map_

PhiMap v8::internal::compiler::RegisterAllocationData::phi_map_
private

Definition at line 349 of file register-allocator.h.

◆ preassigned_slot_ranges_

RangesWithPreassignedSlots v8::internal::compiler::RegisterAllocationData::preassigned_slot_ranges_
private

Definition at line 365 of file register-allocator.h.

◆ slot_for_const_range_

ZoneMap<TopLevelLiveRange*, AllocatedOperand*> v8::internal::compiler::RegisterAllocationData::slot_for_const_range_
private

Definition at line 368 of file register-allocator.h.

◆ spill_state_

ZoneVector<ZoneVector<LiveRange*> > v8::internal::compiler::RegisterAllocationData::spill_state_
private

Definition at line 366 of file register-allocator.h.

◆ tick_counter_

TickCounter* const v8::internal::compiler::RegisterAllocationData::tick_counter_
private

Definition at line 367 of file register-allocator.h.

◆ virtual_register_count_

int v8::internal::compiler::RegisterAllocationData::virtual_register_count_
private

Definition at line 364 of file register-allocator.h.


The documentation for this class was generated from the following files: