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

#include <bytecode-register-optimizer.h>

Inheritance diagram for v8::internal::interpreter::BytecodeRegisterOptimizer:
Collaboration diagram for v8::internal::interpreter::BytecodeRegisterOptimizer:

Classes

class  BytecodeWriter
 
class  RegisterInfo
 

Public Types

using TypeHint = BytecodeGenerator::TypeHint
 

Public Member Functions

 BytecodeRegisterOptimizer (Zone *zone, BytecodeRegisterAllocator *register_allocator, int fixed_registers_count, int parameter_count, BytecodeWriter *bytecode_writer)
 
 ~BytecodeRegisterOptimizer () override=default
 
 BytecodeRegisterOptimizer (const BytecodeRegisterOptimizer &)=delete
 
BytecodeRegisterOptimizeroperator= (const BytecodeRegisterOptimizer &)=delete
 
void DoLdar (Register input)
 
void DoStar (Register output)
 
void DoMov (Register input, Register output)
 
void Flush ()
 
bool EnsureAllRegistersAreFlushed () const
 
template<Bytecode bytecode, ImplicitRegisterUse implicit_register_use>
V8_INLINE void PrepareForBytecode ()
 
void PrepareOutputRegister (Register reg)
 
void PrepareOutputRegisterList (RegisterList reg_list)
 
Register GetInputRegister (Register reg)
 
RegisterList GetInputRegisterList (RegisterList reg_list)
 
void SetVariableInRegister (Variable *var, Register reg)
 
VariableGetPotentialVariableInRegister (Register reg)
 
VariableGetPotentialVariableInAccumulator ()
 
bool IsVariableInRegister (Variable *var, Register reg)
 
TypeHint GetTypeHint (Register reg)
 
void SetTypeHintForAccumulator (TypeHint hint)
 
void ResetTypeHintForAccumulator ()
 
bool IsAccumulatorReset ()
 
int maxiumum_register_index () const
 

Private Member Functions

void RegisterAllocateEvent (Register reg) override
 
void RegisterListAllocateEvent (RegisterList reg_list) override
 
void RegisterListFreeEvent (RegisterList reg) override
 
void RegisterFreeEvent (Register reg) override
 
void RegisterTransfer (RegisterInfo *input, RegisterInfo *output)
 
void OutputRegisterTransfer (RegisterInfo *input, RegisterInfo *output)
 
void CreateMaterializedEquivalent (RegisterInfo *info)
 
RegisterInfoGetMaterializedEquivalentNotAccumulator (RegisterInfo *info)
 
void Materialize (RegisterInfo *info)
 
void AddToEquivalenceSet (RegisterInfo *set_member, RegisterInfo *non_set_member)
 
void PushToRegistersNeedingFlush (RegisterInfo *reg)
 
RegisterInfoGetRegisterInfo (Register reg)
 
RegisterInfoGetOrCreateRegisterInfo (Register reg)
 
RegisterInfoNewRegisterInfo (Register reg)
 
void GrowRegisterMap (Register reg)
 
bool RegisterIsTemporary (Register reg) const
 
bool RegisterIsObservable (Register reg) const
 
size_t GetRegisterInfoTableIndex (Register reg) const
 
Register RegisterFromRegisterInfoTableIndex (size_t index) const
 
uint32_t NextEquivalenceId ()
 
void AllocateRegister (RegisterInfo *info)
 
Zonezone ()
 

Static Private Member Functions

static Register OperandToRegister (uint32_t operand)
 

Private Attributes

const Register accumulator_
 
RegisterInfoaccumulator_info_
 
const Register temporary_base_
 
int max_register_index_
 
ZoneVector< RegisterInfo * > register_info_table_
 
int register_info_table_offset_
 
ZoneDeque< RegisterInfo * > registers_needing_flushed_
 
uint32_t equivalence_id_
 
BytecodeWriterbytecode_writer_
 
bool flush_required_
 
Zonezone_
 

Static Private Attributes

static const uint32_t kInvalidEquivalenceId = kMaxUInt32
 

Detailed Description

Definition at line 24 of file bytecode-register-optimizer.h.

Member Typedef Documentation

◆ TypeHint

Constructor & Destructor Documentation

◆ BytecodeRegisterOptimizer() [1/2]

v8::internal::interpreter::BytecodeRegisterOptimizer::BytecodeRegisterOptimizer ( Zone * zone,
BytecodeRegisterAllocator * register_allocator,
int fixed_registers_count,
int parameter_count,
BytecodeWriter * bytecode_writer )

Definition at line 291 of file bytecode-register-optimizer.cc.

Here is the call graph for this function:

◆ ~BytecodeRegisterOptimizer()

v8::internal::interpreter::BytecodeRegisterOptimizer::~BytecodeRegisterOptimizer ( )
overridedefault

◆ BytecodeRegisterOptimizer() [2/2]

v8::internal::interpreter::BytecodeRegisterOptimizer::BytecodeRegisterOptimizer ( const BytecodeRegisterOptimizer & )
delete

Member Function Documentation

◆ AddToEquivalenceSet()

void v8::internal::interpreter::BytecodeRegisterOptimizer::AddToEquivalenceSet ( RegisterInfo * set_member,
RegisterInfo * non_set_member )
private

Definition at line 449 of file bytecode-register-optimizer.cc.

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

◆ AllocateRegister()

void v8::internal::interpreter::BytecodeRegisterOptimizer::AllocateRegister ( RegisterInfo * info)
private

Definition at line 556 of file bytecode-register-optimizer.cc.

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

◆ CreateMaterializedEquivalent()

void v8::internal::interpreter::BytecodeRegisterOptimizer::CreateMaterializedEquivalent ( RegisterInfo * info)
private

Definition at line 416 of file bytecode-register-optimizer.cc.

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

◆ DoLdar()

void v8::internal::interpreter::BytecodeRegisterOptimizer::DoLdar ( Register input)
inline

Definition at line 53 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ DoMov()

void v8::internal::interpreter::BytecodeRegisterOptimizer::DoMov ( Register input,
Register output )
inline

Definition at line 63 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ DoStar()

void v8::internal::interpreter::BytecodeRegisterOptimizer::DoStar ( Register output)
inline

Definition at line 59 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ EnsureAllRegistersAreFlushed()

bool v8::internal::interpreter::BytecodeRegisterOptimizer::EnsureAllRegistersAreFlushed ( ) const

Definition at line 339 of file bytecode-register-optimizer.cc.

Here is the caller graph for this function:

◆ Flush()

void v8::internal::interpreter::BytecodeRegisterOptimizer::Flush ( )

Definition at line 352 of file bytecode-register-optimizer.cc.

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

◆ GetInputRegister()

Register v8::internal::interpreter::BytecodeRegisterOptimizer::GetInputRegister ( Register reg)

Definition at line 513 of file bytecode-register-optimizer.cc.

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

◆ GetInputRegisterList()

RegisterList v8::internal::interpreter::BytecodeRegisterOptimizer::GetInputRegisterList ( RegisterList reg_list)

Definition at line 524 of file bytecode-register-optimizer.cc.

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

◆ GetMaterializedEquivalentNotAccumulator()

BytecodeRegisterOptimizer::RegisterInfo * v8::internal::interpreter::BytecodeRegisterOptimizer::GetMaterializedEquivalentNotAccumulator ( RegisterInfo * info)
private

Definition at line 426 of file bytecode-register-optimizer.cc.

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

◆ GetOrCreateRegisterInfo()

RegisterInfo * v8::internal::interpreter::BytecodeRegisterOptimizer::GetOrCreateRegisterInfo ( Register reg)
inlineprivate

Definition at line 172 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ GetPotentialVariableInAccumulator()

Variable * v8::internal::interpreter::BytecodeRegisterOptimizer::GetPotentialVariableInAccumulator ( )
inline

Definition at line 128 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ GetPotentialVariableInRegister()

Variable * v8::internal::interpreter::BytecodeRegisterOptimizer::GetPotentialVariableInRegister ( Register reg)

Definition at line 173 of file bytecode-register-optimizer.cc.

Here is the call graph for this function:

◆ GetRegisterInfo()

RegisterInfo * v8::internal::interpreter::BytecodeRegisterOptimizer::GetRegisterInfo ( Register reg)
inlineprivate

Definition at line 167 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ GetRegisterInfoTableIndex()

size_t v8::internal::interpreter::BytecodeRegisterOptimizer::GetRegisterInfoTableIndex ( Register reg) const
inlineprivate

Definition at line 198 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ GetTypeHint()

TypeHint v8::internal::interpreter::BytecodeRegisterOptimizer::GetTypeHint ( Register reg)

Definition at line 188 of file bytecode-register-optimizer.cc.

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

◆ GrowRegisterMap()

void v8::internal::interpreter::BytecodeRegisterOptimizer::GrowRegisterMap ( Register reg)
private

Definition at line 541 of file bytecode-register-optimizer.cc.

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

◆ IsAccumulatorReset()

bool v8::internal::interpreter::BytecodeRegisterOptimizer::IsAccumulatorReset ( )

Definition at line 205 of file bytecode-register-optimizer.cc.

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

◆ IsVariableInRegister()

bool v8::internal::interpreter::BytecodeRegisterOptimizer::IsVariableInRegister ( Variable * var,
Register reg )

Definition at line 179 of file bytecode-register-optimizer.cc.

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

◆ Materialize()

void v8::internal::interpreter::BytecodeRegisterOptimizer::Materialize ( RegisterInfo * info)
private

Definition at line 441 of file bytecode-register-optimizer.cc.

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

◆ maxiumum_register_index()

int v8::internal::interpreter::BytecodeRegisterOptimizer::maxiumum_register_index ( ) const
inline

Definition at line 140 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ NewRegisterInfo()

RegisterInfo * v8::internal::interpreter::BytecodeRegisterOptimizer::NewRegisterInfo ( Register reg)
inlineprivate

Definition at line 177 of file bytecode-register-optimizer.h.

◆ NextEquivalenceId()

uint32_t v8::internal::interpreter::BytecodeRegisterOptimizer::NextEquivalenceId ( )
inlineprivate

Definition at line 206 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ OperandToRegister()

static Register v8::internal::interpreter::BytecodeRegisterOptimizer::OperandToRegister ( uint32_t operand)
inlinestaticprivate

Definition at line 194 of file bytecode-register-optimizer.h.

◆ operator=()

BytecodeRegisterOptimizer & v8::internal::interpreter::BytecodeRegisterOptimizer::operator= ( const BytecodeRegisterOptimizer & )
delete

◆ OutputRegisterTransfer()

void v8::internal::interpreter::BytecodeRegisterOptimizer::OutputRegisterTransfer ( RegisterInfo * input,
RegisterInfo * output )
private

Definition at line 397 of file bytecode-register-optimizer.cc.

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

◆ PrepareForBytecode()

template<Bytecode bytecode, ImplicitRegisterUse implicit_register_use>
V8_INLINE void v8::internal::interpreter::BytecodeRegisterOptimizer::PrepareForBytecode ( )
inline

Definition at line 75 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ PrepareOutputRegister()

void v8::internal::interpreter::BytecodeRegisterOptimizer::PrepareOutputRegister ( Register reg)

Definition at line 493 of file bytecode-register-optimizer.cc.

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

◆ PrepareOutputRegisterList()

void v8::internal::interpreter::BytecodeRegisterOptimizer::PrepareOutputRegisterList ( RegisterList reg_list)

Definition at line 504 of file bytecode-register-optimizer.cc.

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

◆ PushToRegistersNeedingFlush()

void v8::internal::interpreter::BytecodeRegisterOptimizer::PushToRegistersNeedingFlush ( RegisterInfo * reg)
private

Definition at line 328 of file bytecode-register-optimizer.cc.

Here is the caller graph for this function:

◆ RegisterAllocateEvent()

void v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterAllocateEvent ( Register reg)
overrideprivate

Definition at line 564 of file bytecode-register-optimizer.cc.

Here is the call graph for this function:

◆ RegisterFreeEvent()

void v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterFreeEvent ( Register reg)
overrideprivate

Definition at line 586 of file bytecode-register-optimizer.cc.

Here is the call graph for this function:

◆ RegisterFromRegisterInfoTableIndex()

Register v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterFromRegisterInfoTableIndex ( size_t index) const
inlineprivate

Definition at line 202 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ RegisterIsObservable()

bool v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterIsObservable ( Register reg) const
inlineprivate

Definition at line 190 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ RegisterIsTemporary()

bool v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterIsTemporary ( Register reg) const
inlineprivate

Definition at line 186 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

◆ RegisterListAllocateEvent()

void v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterListAllocateEvent ( RegisterList reg_list)
overrideprivate

Definition at line 568 of file bytecode-register-optimizer.cc.

Here is the call graph for this function:

◆ RegisterListFreeEvent()

void v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterListFreeEvent ( RegisterList reg)
overrideprivate

Definition at line 579 of file bytecode-register-optimizer.cc.

Here is the call graph for this function:

◆ RegisterTransfer()

void v8::internal::interpreter::BytecodeRegisterOptimizer::RegisterTransfer ( RegisterInfo * input,
RegisterInfo * output )
private

Definition at line 456 of file bytecode-register-optimizer.cc.

Here is the call graph for this function:

◆ ResetTypeHintForAccumulator()

void v8::internal::interpreter::BytecodeRegisterOptimizer::ResetTypeHintForAccumulator ( )

Definition at line 201 of file bytecode-register-optimizer.cc.

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

◆ SetTypeHintForAccumulator()

void v8::internal::interpreter::BytecodeRegisterOptimizer::SetTypeHintForAccumulator ( TypeHint hint)

Definition at line 193 of file bytecode-register-optimizer.cc.

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

◆ SetVariableInRegister()

void v8::internal::interpreter::BytecodeRegisterOptimizer::SetVariableInRegister ( Variable * var,
Register reg )

Definition at line 162 of file bytecode-register-optimizer.cc.

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

◆ zone()

Zone * v8::internal::interpreter::BytecodeRegisterOptimizer::zone ( )
inlineprivate

Definition at line 214 of file bytecode-register-optimizer.h.

Here is the caller graph for this function:

Member Data Documentation

◆ accumulator_

const Register v8::internal::interpreter::BytecodeRegisterOptimizer::accumulator_
private

Definition at line 216 of file bytecode-register-optimizer.h.

◆ accumulator_info_

RegisterInfo* v8::internal::interpreter::BytecodeRegisterOptimizer::accumulator_info_
private

Definition at line 217 of file bytecode-register-optimizer.h.

◆ bytecode_writer_

BytecodeWriter* v8::internal::interpreter::BytecodeRegisterOptimizer::bytecode_writer_
private

Definition at line 230 of file bytecode-register-optimizer.h.

◆ equivalence_id_

uint32_t v8::internal::interpreter::BytecodeRegisterOptimizer::equivalence_id_
private

Definition at line 228 of file bytecode-register-optimizer.h.

◆ flush_required_

bool v8::internal::interpreter::BytecodeRegisterOptimizer::flush_required_
private

Definition at line 231 of file bytecode-register-optimizer.h.

◆ kInvalidEquivalenceId

const uint32_t v8::internal::interpreter::BytecodeRegisterOptimizer::kInvalidEquivalenceId = kMaxUInt32
staticprivate

Definition at line 143 of file bytecode-register-optimizer.h.

◆ max_register_index_

int v8::internal::interpreter::BytecodeRegisterOptimizer::max_register_index_
private

Definition at line 219 of file bytecode-register-optimizer.h.

◆ register_info_table_

ZoneVector<RegisterInfo*> v8::internal::interpreter::BytecodeRegisterOptimizer::register_info_table_
private

Definition at line 222 of file bytecode-register-optimizer.h.

◆ register_info_table_offset_

int v8::internal::interpreter::BytecodeRegisterOptimizer::register_info_table_offset_
private

Definition at line 223 of file bytecode-register-optimizer.h.

◆ registers_needing_flushed_

ZoneDeque<RegisterInfo*> v8::internal::interpreter::BytecodeRegisterOptimizer::registers_needing_flushed_
private

Definition at line 225 of file bytecode-register-optimizer.h.

◆ temporary_base_

const Register v8::internal::interpreter::BytecodeRegisterOptimizer::temporary_base_
private

Definition at line 218 of file bytecode-register-optimizer.h.

◆ zone_

Zone* v8::internal::interpreter::BytecodeRegisterOptimizer::zone_
private

Definition at line 232 of file bytecode-register-optimizer.h.


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