struct ConvergingVLIWScheduler::VLIWSchedBoundary

Declaration

struct ConvergingVLIWScheduler::VLIWSchedBoundary { /* full declaration omitted */ };

Description

Each Scheduling boundary is associated with ready queues. It tracks the current cycle in whichever direction at has moved, and maintains the state of "hazards" and other interlocks at the current cycle.

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:126

Member Variables

public llvm::VLIWMachineScheduler* DAG = nullptr
public const llvm::TargetSchedModel* SchedModel = nullptr
public llvm::ReadyQueue Available
public llvm::ReadyQueue Pending
public bool CheckPending = false
public llvm::ScheduleHazardRecognizer* HazardRec = nullptr
public llvm::VLIWResourceModel* ResourceModel = nullptr
public unsigned int CurrCycle = 0
public unsigned int IssueCount = 0
public unsigned int CriticalPathLength = 0
public unsigned int MinReadyCycle = std::numeric_limits<unsigned int>::max()
MinReadyCycle - Cycle of the soonest available instruction.
public unsigned int MaxMinLatency = 0

Method Overview

Methods

VLIWSchedBoundary(unsigned int ID,
                  const llvm::Twine& Name)

Description

Pending queues extend the ready queues with the same ID and the PendingFlag set.

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:149

Parameters

unsigned int ID
const llvm::Twine& Name

void bumpCycle()

Description

Move the boundary of scheduled code by one cycle.

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:189

void bumpNode(llvm::SUnit* SU)

Description

Move the boundary of scheduled code by one SUnit.

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:191

Parameters

llvm::SUnit* SU

bool checkHazard(llvm::SUnit* SU)

Description

Does this SU have a hazard within the current instruction group. The scheduler supports two modes of hazard recognition. The first is the ScheduleHazardRecognizer API. It is a fully general hazard recognizer that supports highly complicated in-order reservation tables (ScoreboardHazardRecognizer) and arbitrary target-specific logic. The second is a streamlined mechanism that checks for hazards based on simple counters that the scheduler itself maintains. It explicitly checks for instruction dispatch limitations, including the number of micro-ops that can dispatch per cycle. TODO: Also check whether the SU must start a new group.

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:185

Parameters

llvm::SUnit* SU

void init(llvm::VLIWMachineScheduler* dag,
          const llvm::TargetSchedModel* smodel)

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:155

Parameters

llvm::VLIWMachineScheduler* dag
const llvm::TargetSchedModel* smodel

bool isLatencyBound(llvm::SUnit* SU)

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:199

Parameters

llvm::SUnit* SU

bool isTop() const

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:181

llvm::SUnit* pickOnlyChoice()

Description

If this queue only has one ready candidate, return it. As a side effect, advance the cycle until at least one node is ready. If multiple instructions are ready, return NULL.

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:197

void releaseNode(llvm::SUnit* SU,
                 unsigned int ReadyCycle)

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:187

Parameters

llvm::SUnit* SU
unsigned int ReadyCycle

void releasePending()

Description

Release pending ready nodes in to the available queue. This makes them visible to heuristics.

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:193

void removeReady(llvm::SUnit* SU)

Description

Remove SU from the ready set for this boundary.

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:195

Parameters

llvm::SUnit* SU

~VLIWSchedBoundary()

Declared at: llvm/include/llvm/CodeGen/VLIWMachineScheduler.h:153