LLVM API Documentation

ScheduleDAGList.cpp File Reference

#include "llvm/CodeGen/ScheduleDAG.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetInstrInfo.h"
#include "llvm/Support/Debug.h"
#include "llvm/ADT/Statistic.h"
#include <climits>
#include <iostream>
#include <queue>
#include <set>
#include <vector>
#include "llvm/Support/CommandLine.h"

Include dependency graph for ScheduleDAGList.cpp:

Go to the source code of this file.

Defines

#define DEBUG_TYPE   "sched"

Functions

static bool isReady (SUnit *SU, unsigned CurrCycle)
static SUnit * getSingleUnscheduledPred (SUnit *SU)
llvm::ScheduleDAGllvm::createBURRListDAGScheduler (SelectionDAG &DAG, MachineBasicBlock *BB)
ScheduleDAGllvm::createTDListDAGScheduler (SelectionDAG &DAG, MachineBasicBlock *BB, HazardRecognizer *HR)

Variables

Statistic NumNoops ("scheduler","Number of noops inserted")
Statistic NumStalls ("scheduler","Number of pipeline stalls")
SDNodeNode
std::vector< SDNode * > FlaggedNodes
std::set< std::pair< SUnit *,
bool > > 
Preds
std::set< std::pair< SUnit *,
bool > > 
Succs
short NumPredsLeft
short NumSuccsLeft
short NumChainPredsLeft
short NumChainSuccsLeft
bool isTwoAddress
bool isDefNUseOperand
bool isPending
bool isAvailable
bool isScheduled
unsigned short Latency
unsigned CycleBound
unsigned Cycle
unsigned NodeNum
std::map< SDNode *, SUnit * > SUnitMap
std::vector< SUnit * > Sequence
std::vector< SUnit > SUnits
bool isBottomUp
SchedulingPriorityQueue * AvailableQueue
std::vector< std::pair< unsigned,
SUnit * > > 
PendingQueue
HazardRecognizerHazardRec
 HazardRec - The hazard recognizer to use.
RegReductionPriorityQueue * SPQ
const std::vector< SUnit > * SUnits
std::vector< int > SethiUllmanNumbers
std::priority_queue< SUnit *,
std::vector< SUnit * >, ls_rr_sort > 
Queue
LatencyPriorityQueue * PQ
const std::vector< SUnit > * SUnits
std::vector< int > Latencies
std::vector< unsigned > NumNodesSolelyBlocking
std::priority_queue< SUnit *,
std::vector< SUnit * >, latency_sort > 
Queue


Define Documentation

#define DEBUG_TYPE   "sched"

Definition at line 21 of file ScheduleDAGList.cpp.


Function Documentation

static SUnit* getSingleUnscheduledPred ( SUnit *  SU  )  [static]

getSingleUnscheduledPred - If there is exactly one unscheduled predecessor of SU, return it, otherwise return null.

Definition at line 1021 of file ScheduleDAGList.cpp.

References E, and I.

static bool isReady ( SUnit *  SU,
unsigned  CurrCycle 
) [inline, static]

isReady - True if node's lower cycle bound is less or equal to the current scheduling cycle. Always true if all nodes have uniform latency 1.

Definition at line 475 of file ScheduleDAGList.cpp.


Variable Documentation

SchedulingPriorityQueue* AvailableQueue

AvailableQueue - The priority queue to use for the available SUnits.

Definition at line 175 of file ScheduleDAGList.cpp.

unsigned Cycle

Definition at line 61 of file ScheduleDAGList.cpp.

unsigned CycleBound

Definition at line 60 of file ScheduleDAGList.cpp.

std::vector<SDNode*> FlaggedNodes

Definition at line 43 of file ScheduleDAGList.cpp.

HazardRecognizer* HazardRec

HazardRec - The hazard recognizer to use.

Definition at line 185 of file ScheduleDAGList.cpp.

bool isAvailable

Definition at line 57 of file ScheduleDAGList.cpp.

bool isBottomUp

isBottomUp - This is true if the scheduling problem is bottom-up, false if it is top-down.

Definition at line 171 of file ScheduleDAGList.cpp.

bool isDefNUseOperand

Definition at line 55 of file ScheduleDAGList.cpp.

bool isPending

Definition at line 56 of file ScheduleDAGList.cpp.

bool isScheduled

Definition at line 58 of file ScheduleDAGList.cpp.

bool isTwoAddress

Definition at line 54 of file ScheduleDAGList.cpp.

std::vector<int> Latencies

Definition at line 887 of file ScheduleDAGList.cpp.

unsigned short Latency

Definition at line 59 of file ScheduleDAGList.cpp.

SDNode* Node

Definition at line 42 of file ScheduleDAGList.cpp.

Referenced by llvm::DSNodeHandle::addEdgeTo(), llvm::DominanceFrontierBase::addToFrontier(), llvm::assertIGNode(), llvm::SparcV9FloatRegClass::colorIGNode(), llvm::SparcV9FloatCCRegClass::colorIGNode(), llvm::SparcV9IntCCRegClass::colorIGNode(), llvm::SparcV9IntRegClass::colorIGNode(), CountOperands(), CountResults(), llvm::DominatorTreeBase::createNewNode(), llvm::IGNode::delAdjIGNode(), llvm::PPCHazardRecognizer970::EmitInstruction(), llvm::ScheduleDAG::EmitNode(), FindCallEndFromCallStart(), FindCallStartFromCallEnd(), llvm::DOTGraphTraits< const Function * >::getEdgeSourceLabel(), llvm::PPCHazardRecognizer970::getHazardType(), llvm::DSNodeIterator< NodeTy >::getNode(), llvm::DOTGraphTraits< const DSGraph * >::getNodeLabel(), llvm::DOTGraphTraits< MSchedGraphSB * >::getNodeLabel(), llvm::DOTGraphTraits< MSchedGraph * >::getNodeLabel(), llvm::DOTGraphTraits< const MachineFunction * >::getNodeLabel(), llvm::DOTGraphTraits< const Function * >::getNodeLabel(), llvm::simplify_type< const SCEVHandle >::getSimplifiedValue(), llvm::ScheduleDAG::isPassiveNode(), llvm::DSNodeHandle::mergeWith(), llvm::EquivalenceClasses< ElemTy >::member_iterator::operator *(), llvm::DSNodeIterator< NodeTy >::operator *(), llvm::EquivalenceClasses< ElemTy >::member_iterator::operator!=(), llvm::EquivalenceClasses< ElemTy >::member_iterator::operator++(), operator<<(), llvm::DSNodeIterator< NodeTy >::operator=(), llvm::EquivalenceClasses< ElemTy >::member_iterator::operator==(), llvm::InterferenceGraph::printIG(), llvm::InterferenceGraph::printIGNodeList(), llvm::DominanceFrontierBase::removeFromFrontier(), llvm::DSGraph::removeTriviallyDeadNodes(), llvm::PostDominanceFrontier::runOnFunction(), llvm::InterferenceGraph::setCurDegreeOfIGNodes(), llvm::ETForestBase::setImmediateDominator(), and llvm::SplitCriticalEdge().

unsigned NodeNum

Definition at line 62 of file ScheduleDAGList.cpp.

short NumChainPredsLeft

Definition at line 52 of file ScheduleDAGList.cpp.

short NumChainSuccsLeft

Definition at line 53 of file ScheduleDAGList.cpp.

std::vector<unsigned> NumNodesSolelyBlocking

NumNodesSolelyBlocking - This vector contains, for every node in the Queue, the number of nodes that the node is the sole unscheduled predecessor for. This is used as a tie-breaker heuristic for better mobility.

Definition at line 893 of file ScheduleDAGList.cpp.

Statistic NumNoops("scheduler","Number of noops inserted") [static]

short NumPredsLeft

Definition at line 50 of file ScheduleDAGList.cpp.

Statistic NumStalls("scheduler","Number of pipeline stalls") [static]

short NumSuccsLeft

Definition at line 51 of file ScheduleDAGList.cpp.

std::vector<std::pair<unsigned, SUnit*> > PendingQueue

PendingQueue - This contains all of the instructions whose operands have been issued, but their results are not ready yet (due to the latency of the operation). Once the operands becomes available, the instruction is added to the AvailableQueue. This keeps track of each SUnit and the number of cycles left to execute before the operation is available.

Definition at line 182 of file ScheduleDAGList.cpp.

LatencyPriorityQueue* PQ

Definition at line 872 of file ScheduleDAGList.cpp.

std::set<std::pair<SUnit*,bool> > Preds

Definition at line 47 of file ScheduleDAGList.cpp.

Referenced by FoldValueComparisonIntoPredecessors(), and llvm::SimplifyCFG().

std::priority_queue<SUnit*, std::vector<SUnit*>, latency_sort> Queue

Definition at line 895 of file ScheduleDAGList.cpp.

std::priority_queue<SUnit*, std::vector<SUnit*>, ls_rr_sort> Queue

Definition at line 740 of file ScheduleDAGList.cpp.

std::vector<SUnit*> Sequence

Definition at line 164 of file ScheduleDAGList.cpp.

std::vector<int> SethiUllmanNumbers

Definition at line 738 of file ScheduleDAGList.cpp.

RegReductionPriorityQueue* SPQ

Definition at line 724 of file ScheduleDAGList.cpp.

std::set<std::pair<SUnit*,bool> > Succs

Definition at line 48 of file ScheduleDAGList.cpp.

Referenced by ReplaceUsesOfBlockWith().

std::map<SDNode*, SUnit*> SUnitMap

Definition at line 162 of file ScheduleDAGList.cpp.

const std::vector<SUnit>* SUnits

Definition at line 883 of file ScheduleDAGList.cpp.

const std::vector<SUnit>* SUnits

Definition at line 735 of file ScheduleDAGList.cpp.

std::vector<SUnit> SUnits

Definition at line 167 of file ScheduleDAGList.cpp.