LLVM API Documentation

Classes | Public Types | Public Member Functions | Protected Member Functions
llvm::ConvergingVLIWScheduler Class Reference

#include <HexagonMachineScheduler.h>

Inheritance diagram for llvm::ConvergingVLIWScheduler:
Inheritance graph
[legend]
Collaboration diagram for llvm::ConvergingVLIWScheduler:
Collaboration graph
[legend]

List of all members.

Classes

struct  SchedCandidate
struct  VLIWSchedBoundary

Public Types

enum  { TopQID = 1, BotQID = 2, LogMaxQID = 2 }
 SUnit::NodeQueueId: 0 (none), 1 (top), 2 (bot), 3 (both) More...

Public Member Functions

 ConvergingVLIWScheduler ()
void initialize (ScheduleDAGMI *dag) override
 Initialize the strategy after building the DAG for a new region.
SUnitpickNode (bool &IsTopNode) override
 Pick the best node to balance the schedule. Implements MachineSchedStrategy.
void schedNode (SUnit *SU, bool IsTopNode) override
void releaseTopNode (SUnit *SU) override
void releaseBottomNode (SUnit *SU) override
unsigned ReportPackets ()

Protected Member Functions

SUnitpickNodeBidrectional (bool &IsTopNode)
 Pick the best candidate node from either the top or bottom queue.
int SchedulingCost (ReadyQueue &Q, SUnit *SU, SchedCandidate &Candidate, RegPressureDelta &Delta, bool verbose)
CandResult pickNodeFromQueue (ReadyQueue &Q, const RegPressureTracker &RPTracker, SchedCandidate &Candidate)
void traceCandidate (const char *Label, const ReadyQueue &Q, SUnit *SU, PressureChange P=PressureChange())

Detailed Description

ConvergingVLIWScheduler shrinks the unscheduled zone using heuristics to balance the schedule.

Definition at line 111 of file HexagonMachineScheduler.h.


Member Enumeration Documentation

anonymous enum

SUnit::NodeQueueId: 0 (none), 1 (top), 2 (bot), 3 (both)

Enumerator:
TopQID 
BotQID 
LogMaxQID 

Definition at line 202 of file HexagonMachineScheduler.h.


Constructor & Destructor Documentation

Definition at line 208 of file HexagonMachineScheduler.h.


Member Function Documentation

void ConvergingVLIWScheduler::initialize ( ScheduleDAGMI DAG) [override, virtual]
SUnit * ConvergingVLIWScheduler::pickNode ( bool IsTopNode) [override, virtual]

Pick the best candidate node from either the top or bottom queue.

Definition at line 584 of file HexagonMachineScheduler.cpp.

References llvm::ScheduleDAGMILive::getBotRPTracker(), llvm::ScheduleDAGMILive::getTopRPTracker(), and pickNodeFromQueue().

Referenced by pickNode().

ConvergingVLIWScheduler::CandResult ConvergingVLIWScheduler::pickNodeFromQueue ( ReadyQueue Q,
const RegPressureTracker RPTracker,
SchedCandidate &  Candidate 
) [protected]

Pick the best candidate from the top queue.

TODO: getMaxPressureDelta results can be mostly cached for each SUnit during DAG building. To adjust for the current scheduling location we need to maintain the number of vreg uses remaining to be top-scheduled.

Definition at line 539 of file HexagonMachineScheduler.cpp.

References llvm::ReadyQueue::begin(), DEBUG, llvm::ReadyQueue::dump(), llvm::ReadyQueue::end(), llvm::ScheduleDAGMILive::getRegionCriticalPSets(), llvm::ScheduleDAGMILive::getRegPressure(), I, llvm::RegisterPressure::MaxSetPressure, SchedulingCost(), and traceCandidate().

Referenced by pickNode(), and pickNodeBidrectional().

void ConvergingVLIWScheduler::releaseBottomNode ( SUnit SU) [override, virtual]
void ConvergingVLIWScheduler::releaseTopNode ( SUnit SU) [override, virtual]

When all predecessor dependencies have been resolved, free this node for top-down scheduling.

Implements llvm::MachineSchedStrategy.

Definition at line 227 of file HexagonMachineScheduler.cpp.

References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorTemplateCommon< T, typename >::end(), I, llvm::SUnit::isScheduled, llvm::SUnit::Preds, and llvm::SUnit::TopReadyCycle.

Definition at line 222 of file HexagonMachineScheduler.h.

void ConvergingVLIWScheduler::schedNode ( SUnit SU,
bool  IsTopNode 
) [override, virtual]

Update the scheduler's state after scheduling a node. This is the same node that was just returned by pickNode(). However, VLIWMachineScheduler needs to update it's state based on the current cycle before MachineSchedStrategy does.

Implements llvm::MachineSchedStrategy.

Definition at line 690 of file HexagonMachineScheduler.cpp.

References llvm::SUnit::BotReadyCycle, and llvm::SUnit::TopReadyCycle.

int ConvergingVLIWScheduler::SchedulingCost ( ReadyQueue Q,
SUnit SU,
SchedCandidate &  Candidate,
RegPressureDelta Delta,
bool  verbose 
) [protected]
void ConvergingVLIWScheduler::traceCandidate ( const char *  Label,
const ReadyQueue Q,
SUnit SU,
PressureChange  P = PressureChange() 
) [protected]

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