#include "src/compiler/scheduler.h"
#include <iomanip>
#include <optional>
#include "src/base/iterator.h"
#include "src/builtins/profile-data-reader.h"
#include "src/codegen/tick-counter.h"
#include "src/compiler/common-operator.h"
#include "src/compiler/control-equivalence.h"
#include "src/compiler/graph.h"
#include "src/compiler/node-marker.h"
#include "src/compiler/node-properties.h"
#include "src/compiler/node.h"
#include "src/utils/bit-vector.h"
#include "src/zone/zone-containers.h"
namespace v8 {
namespace internal {
namespace compiler {
#define TRACE …
Scheduler::Scheduler(Zone* zone, Graph* graph, Schedule* schedule, Flags flags,
size_t node_count_hint, TickCounter* tick_counter,
const ProfileDataFromFile* profile_data)
: … { … }
Schedule* Scheduler::ComputeSchedule(Zone* zone, Graph* graph, Flags flags,
TickCounter* tick_counter,
const ProfileDataFromFile* profile_data) { … }
Scheduler::SchedulerData Scheduler::DefaultSchedulerData() { … }
Scheduler::SchedulerData* Scheduler::GetData(Node* node) { … }
Scheduler::Placement Scheduler::InitializePlacement(Node* node) { … }
Scheduler::Placement Scheduler::GetPlacement(Node* node) { … }
bool Scheduler::IsLive(Node* node) { … }
void Scheduler::UpdatePlacement(Node* node, Placement placement) { … }
std::optional<int> Scheduler::GetCoupledControlEdge(Node* node) { … }
void Scheduler::IncrementUnscheduledUseCount(Node* node, Node* from) { … }
void Scheduler::DecrementUnscheduledUseCount(Node* node, Node* from) { … }
class CFGBuilder : public ZoneObject { … };
void Scheduler::BuildCFG() { … }
class SpecialRPONumberer : public ZoneObject { … };
BasicBlockVector* Scheduler::ComputeSpecialRPO(Zone* zone, Schedule* schedule) { … }
void Scheduler::ComputeSpecialRPONumbering() { … }
BasicBlock* Scheduler::GetCommonDominatorIfCached(BasicBlock* b1,
BasicBlock* b2) { … }
BasicBlock* Scheduler::GetCommonDominator(BasicBlock* b1, BasicBlock* b2) { … }
void Scheduler::PropagateImmediateDominators(BasicBlock* block) { … }
void Scheduler::GenerateDominatorTree(Schedule* schedule) { … }
void Scheduler::GenerateDominatorTree() { … }
class PrepareUsesVisitor { … };
void Scheduler::PrepareUses() { … }
class ScheduleEarlyNodeVisitor { … };
void Scheduler::ScheduleEarly() { … }
class ScheduleLateNodeVisitor { … };
void Scheduler::ScheduleLate() { … }
void Scheduler::SealFinalSchedule() { … }
void Scheduler::FuseFloatingControl(BasicBlock* block, Node* node) { … }
void Scheduler::MovePlannedNodes(BasicBlock* from, BasicBlock* to) { … }
#undef TRACE
}
}
}