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

#include <scheduler.h>

Collaboration diagram for v8::internal::compiler::Scheduler:

Classes

struct  SchedulerData
 

Public Types

enum  Flag { kNoFlags = 0u , kSplitNodes = 1u << 1 , kTempSchedule = 1u << 2 }
 
using Flags = base::Flags<Flag>
 

Public Member Functions

const ProfileDataFromFileprofile_data () const
 

Static Public Member Functions

static ScheduleComputeSchedule (Zone *temp_zone, TFGraph *graph, Flags flags, TickCounter *tick_counter, const ProfileDataFromFile *profile_data)
 
static BasicBlockVectorComputeSpecialRPO (Zone *zone, Schedule *schedule)
 
static void GenerateDominatorTree (Schedule *schedule)
 

Private Types

enum  Placement {
  kUnknown , kSchedulable , kFixed , kCoupled ,
  kScheduled
}
 
using CommonDominatorCache = ZoneMap<int, ZoneMap<int, BasicBlock*>*>
 

Private Member Functions

 Scheduler (Zone *zone, TFGraph *graph, Schedule *schedule, Flags flags, size_t node_count_hint_, TickCounter *tick_counter, const ProfileDataFromFile *profile_data)
 
SchedulerData DefaultSchedulerData ()
 
SchedulerDataGetData (Node *node)
 
Placement GetPlacement (Node *node)
 
Placement InitializePlacement (Node *node)
 
void UpdatePlacement (Node *node, Placement placement)
 
bool IsLive (Node *node)
 
std::optional< int > GetCoupledControlEdge (Node *node)
 
void IncrementUnscheduledUseCount (Node *node, Node *from)
 
void DecrementUnscheduledUseCount (Node *node, Node *from)
 
BasicBlockGetCommonDominator (BasicBlock *b1, BasicBlock *b2)
 
BasicBlockGetCommonDominatorIfCached (BasicBlock *b1, BasicBlock *b2)
 
void BuildCFG ()
 
void ComputeSpecialRPONumbering ()
 
void GenerateDominatorTree ()
 
void PrepareUses ()
 
void ScheduleEarly ()
 
void ScheduleLate ()
 
void SealFinalSchedule ()
 
void FuseFloatingControl (BasicBlock *block, Node *node)
 
void MovePlannedNodes (BasicBlock *from, BasicBlock *to)
 

Static Private Member Functions

static void PropagateImmediateDominators (BasicBlock *block)
 

Private Attributes

Zonezone_
 
TFGraphgraph_
 
Scheduleschedule_
 
Flags flags_
 
ZoneVector< NodeVector * > scheduled_nodes_
 
NodeVector schedule_root_nodes_
 
ZoneQueue< Node * > schedule_queue_
 
ZoneVector< SchedulerDatanode_data_
 
CFGBuildercontrol_flow_builder_
 
SpecialRPONumbererspecial_rpo_
 
ControlEquivalenceequivalence_
 
TickCounter *const tick_counter_
 
const ProfileDataFromFileprofile_data_
 
CommonDominatorCache common_dominator_cache_
 

Friends

class CFGBuilder
 
class SpecialRPONumberer
 
class PrepareUsesVisitor
 
class ScheduleEarlyNodeVisitor
 
class ScheduleLateNodeVisitor
 

Detailed Description

Definition at line 31 of file scheduler.h.

Member Typedef Documentation

◆ CommonDominatorCache

Definition at line 71 of file scheduler.h.

◆ Flags

Member Enumeration Documentation

◆ Flag

Enumerator
kNoFlags 
kSplitNodes 
kTempSchedule 

Definition at line 34 of file scheduler.h.

◆ Placement

Enumerator
kUnknown 
kSchedulable 
kFixed 
kCoupled 
kScheduled 

Definition at line 68 of file scheduler.h.

Constructor & Destructor Documentation

◆ Scheduler()

v8::internal::compiler::Scheduler::Scheduler ( Zone * zone,
TFGraph * graph,
Schedule * schedule,
Flags flags,
size_t node_count_hint_,
TickCounter * tick_counter,
const ProfileDataFromFile * profile_data )
private

Definition at line 31 of file scheduler.cc.

Here is the call graph for this function:

Member Function Documentation

◆ BuildCFG()

void v8::internal::compiler::Scheduler::BuildCFG ( )
private

Definition at line 628 of file scheduler.cc.

Here is the call graph for this function:

◆ ComputeSchedule()

Schedule * v8::internal::compiler::Scheduler::ComputeSchedule ( Zone * temp_zone,
TFGraph * graph,
Flags flags,
TickCounter * tick_counter,
const ProfileDataFromFile * profile_data )
static

Definition at line 50 of file scheduler.cc.

Here is the call graph for this function:

◆ ComputeSpecialRPO()

BasicBlockVector * v8::internal::compiler::Scheduler::ComputeSpecialRPO ( Zone * zone,
Schedule * schedule )
static

Definition at line 1142 of file scheduler.cc.

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

◆ ComputeSpecialRPONumbering()

void v8::internal::compiler::Scheduler::ComputeSpecialRPONumbering ( )
private

Definition at line 1151 of file scheduler.cc.

Here is the call graph for this function:

◆ DecrementUnscheduledUseCount()

void v8::internal::compiler::Scheduler::DecrementUnscheduledUseCount ( Node * node,
Node * from )
private

Definition at line 207 of file scheduler.cc.

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

◆ DefaultSchedulerData()

Scheduler::SchedulerData v8::internal::compiler::Scheduler::DefaultSchedulerData ( )
inlineprivate

Definition at line 79 of file scheduler.cc.

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

◆ FuseFloatingControl()

void v8::internal::compiler::Scheduler::FuseFloatingControl ( BasicBlock * block,
Node * node )
private

Definition at line 1900 of file scheduler.cc.

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

◆ GenerateDominatorTree() [1/2]

void v8::internal::compiler::Scheduler::GenerateDominatorTree ( )
private

Definition at line 1292 of file scheduler.cc.

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

◆ GenerateDominatorTree() [2/2]

void v8::internal::compiler::Scheduler::GenerateDominatorTree ( Schedule * schedule)
static

Definition at line 1284 of file scheduler.cc.

Here is the call graph for this function:

◆ GetCommonDominator()

BasicBlock * v8::internal::compiler::Scheduler::GetCommonDominator ( BasicBlock * b1,
BasicBlock * b2 )
private

Definition at line 1168 of file scheduler.cc.

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

◆ GetCommonDominatorIfCached()

BasicBlock * v8::internal::compiler::Scheduler::GetCommonDominatorIfCached ( BasicBlock * b1,
BasicBlock * b2 )
private

Definition at line 1159 of file scheduler.cc.

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

◆ GetCoupledControlEdge()

std::optional< int > v8::internal::compiler::Scheduler::GetCoupledControlEdge ( Node * node)
inlineprivate

Definition at line 181 of file scheduler.cc.

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

◆ GetData()

Scheduler::SchedulerData * v8::internal::compiler::Scheduler::GetData ( Node * node)
inlineprivate

Definition at line 85 of file scheduler.cc.

Here is the caller graph for this function:

◆ GetPlacement()

Scheduler::Placement v8::internal::compiler::Scheduler::GetPlacement ( Node * node)
private

Definition at line 119 of file scheduler.cc.

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

◆ IncrementUnscheduledUseCount()

void v8::internal::compiler::Scheduler::IncrementUnscheduledUseCount ( Node * node,
Node * from )
private

Definition at line 188 of file scheduler.cc.

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

◆ InitializePlacement()

Scheduler::Placement v8::internal::compiler::Scheduler::InitializePlacement ( Node * node)
private

Definition at line 89 of file scheduler.cc.

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

◆ IsLive()

bool v8::internal::compiler::Scheduler::IsLive ( Node * node)
private

Definition at line 123 of file scheduler.cc.

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

◆ MovePlannedNodes()

void v8::internal::compiler::Scheduler::MovePlannedNodes ( BasicBlock * from,
BasicBlock * to )
private

Definition at line 1951 of file scheduler.cc.

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

◆ PrepareUses()

void v8::internal::compiler::Scheduler::PrepareUses ( )
private

Definition at line 1373 of file scheduler.cc.

Here is the call graph for this function:

◆ profile_data()

const ProfileDataFromFile * v8::internal::compiler::Scheduler::profile_data ( ) const
inline

Definition at line 49 of file scheduler.h.

Here is the caller graph for this function:

◆ PropagateImmediateDominators()

void v8::internal::compiler::Scheduler::PropagateImmediateDominators ( BasicBlock * block)
staticprivate

Definition at line 1248 of file scheduler.cc.

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

◆ ScheduleEarly()

void v8::internal::compiler::Scheduler::ScheduleEarly ( )
private

Definition at line 1474 of file scheduler.cc.

Here is the call graph for this function:

◆ ScheduleLate()

void v8::internal::compiler::Scheduler::ScheduleLate ( )
private

Definition at line 1847 of file scheduler.cc.

Here is the call graph for this function:

◆ SealFinalSchedule()

void v8::internal::compiler::Scheduler::SealFinalSchedule ( )
private

Definition at line 1867 of file scheduler.cc.

Here is the call graph for this function:

◆ UpdatePlacement()

void v8::internal::compiler::Scheduler::UpdatePlacement ( Node * node,
Placement placement )
private

Definition at line 125 of file scheduler.cc.

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

Friends And Related Symbol Documentation

◆ CFGBuilder

friend class CFGBuilder
friend

Definition at line 124 of file scheduler.h.

◆ PrepareUsesVisitor

friend class PrepareUsesVisitor
friend

Definition at line 133 of file scheduler.h.

◆ ScheduleEarlyNodeVisitor

friend class ScheduleEarlyNodeVisitor
friend

Definition at line 137 of file scheduler.h.

◆ ScheduleLateNodeVisitor

friend class ScheduleLateNodeVisitor
friend

Definition at line 141 of file scheduler.h.

◆ SpecialRPONumberer

friend class SpecialRPONumberer
friend

Definition at line 128 of file scheduler.h.

Member Data Documentation

◆ common_dominator_cache_

CommonDominatorCache v8::internal::compiler::Scheduler::common_dominator_cache_
private

Definition at line 95 of file scheduler.h.

◆ control_flow_builder_

CFGBuilder* v8::internal::compiler::Scheduler::control_flow_builder_
private

Definition at line 90 of file scheduler.h.

◆ equivalence_

ControlEquivalence* v8::internal::compiler::Scheduler::equivalence_
private

Definition at line 92 of file scheduler.h.

◆ flags_

Flags v8::internal::compiler::Scheduler::flags_
private

Definition at line 84 of file scheduler.h.

◆ graph_

TFGraph* v8::internal::compiler::Scheduler::graph_
private

Definition at line 82 of file scheduler.h.

◆ node_data_

ZoneVector<SchedulerData> v8::internal::compiler::Scheduler::node_data_
private

Definition at line 89 of file scheduler.h.

◆ profile_data_

const ProfileDataFromFile* v8::internal::compiler::Scheduler::profile_data_
private

Definition at line 94 of file scheduler.h.

◆ schedule_

Schedule* v8::internal::compiler::Scheduler::schedule_
private

Definition at line 83 of file scheduler.h.

◆ schedule_queue_

ZoneQueue<Node*> v8::internal::compiler::Scheduler::schedule_queue_
private

Definition at line 88 of file scheduler.h.

◆ schedule_root_nodes_

NodeVector v8::internal::compiler::Scheduler::schedule_root_nodes_
private

Definition at line 87 of file scheduler.h.

◆ scheduled_nodes_

ZoneVector<NodeVector*> v8::internal::compiler::Scheduler::scheduled_nodes_
private

Definition at line 86 of file scheduler.h.

◆ special_rpo_

SpecialRPONumberer* v8::internal::compiler::Scheduler::special_rpo_
private

Definition at line 91 of file scheduler.h.

◆ tick_counter_

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

Definition at line 93 of file scheduler.h.

◆ zone_

Zone* v8::internal::compiler::Scheduler::zone_
private

Definition at line 81 of file scheduler.h.


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