LLVM API Documentation
#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::ScheduleDAG * | llvm::createBURRListDAGScheduler (SelectionDAG &DAG, MachineBasicBlock *BB) |
ScheduleDAG * | llvm::createTDListDAGScheduler (SelectionDAG &DAG, MachineBasicBlock *BB, HazardRecognizer *HR) |
Variables | |
Statistic | NumNoops ("scheduler","Number of noops inserted") |
Statistic | NumStalls ("scheduler","Number of pipeline stalls") |
SDNode * | Node |
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 |
HazardRecognizer * | HazardRec |
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 DEBUG_TYPE "sched" |
Definition at line 21 of file ScheduleDAGList.cpp.
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.
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.
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.
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.
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.
short NumPredsLeft |
Definition at line 50 of file ScheduleDAGList.cpp.
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 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.