LLVM 22.0.0git
|
#include "llvm/CodeGen/ScheduleDAG.h"
Public Member Functions | |
ScheduleDAG (const ScheduleDAG &)=delete | |
ScheduleDAG & | operator= (const ScheduleDAG &)=delete |
ScheduleDAG (MachineFunction &mf) | |
virtual | ~ScheduleDAG () |
void | clearDAG () |
Clears the DAG state (between regions). | |
const MCInstrDesc * | getInstrDesc (const SUnit *SU) const |
Returns the MCInstrDesc of this SUnit. | |
virtual void | viewGraph (const Twine &Name, const Twine &Title) |
Pops up a GraphViz/gv window with the ScheduleDAG rendered using 'dot'. | |
virtual void | viewGraph () |
Out-of-line implementation with no arguments is handy for gdb. | |
virtual void | dumpNode (const SUnit &SU) const =0 |
virtual void | dump () const =0 |
void | dumpNodeName (const SUnit &SU) const |
virtual std::string | getGraphNodeLabel (const SUnit *SU) const =0 |
Returns a label for an SUnit node in a visualization of the ScheduleDAG. | |
virtual std::string | getDAGName () const =0 |
Returns a label for the region of code covered by the DAG. | |
virtual void | addCustomGraphFeatures (GraphWriter< ScheduleDAG * > &) const |
Adds custom features for a visualization of the ScheduleDAG. | |
unsigned | VerifyScheduledDAG (bool isBottomUp) |
Verifies that all SUnits were scheduled and that their state is consistent. |
Public Attributes | |
const TargetMachine & | TM |
Target processor. | |
const TargetInstrInfo * | TII |
Target instruction information. | |
const TargetRegisterInfo * | TRI |
Target processor register info. | |
MachineFunction & | MF |
Machine function. | |
MachineRegisterInfo & | MRI |
Virtual/real register map. | |
std::vector< SUnit > | SUnits |
The scheduling units. | |
SUnit | EntrySU |
Special node for the region entry. | |
SUnit | ExitSU |
Special node for the region exit. | |
bool | StressSched |
Protected Member Functions | |
void | dumpNodeAll (const SUnit &SU) const |
Definition at line 581 of file ScheduleDAG.h.
|
delete |
References ScheduleDAG().
Referenced by operator=(), ScheduleDAG(), llvm::ScheduleDAGInstrs::ScheduleDAGInstrs(), and llvm::ScheduleDAGSDNodes::ScheduleDAGSDNodes().
|
explicit |
Definition at line 52 of file ScheduleDAG.cpp.
References MF, MRI, StressSched, StressSchedOpt, TII, TM, and TRI.
|
virtualdefault |
References clearDAG().
|
inlinevirtual |
Adds custom features for a visualization of the ScheduleDAG.
Definition at line 636 of file ScheduleDAG.h.
void ScheduleDAG::clearDAG | ( | ) |
Clears the DAG state (between regions).
Definition at line 63 of file ScheduleDAG.cpp.
References EntrySU, ExitSU, and SUnits.
Referenced by llvm::ScheduleDAGInstrs::buildSchedGraph(), llvm::ScheduleDAGSDNodes::Run(), and ~ScheduleDAG().
|
pure virtual |
Implemented in llvm::ScheduleDAGInstrs, llvm::ScheduleDAGMILive, and llvm::ScheduleDAGSDNodes.
References dumpNodeName().
Implemented in llvm::ScheduleDAGInstrs, and llvm::ScheduleDAGSDNodes.
Referenced by llvm::LatencyPriorityQueue::dump(), dumpNodeAll(), and VerifyScheduledDAG().
|
protected |
Definition at line 365 of file ScheduleDAG.cpp.
References llvm::dbgs(), llvm::SDep::dump(), llvm::SUnit::dumpAttributes(), dumpNode(), dumpNodeName(), llvm::SDep::getSUnit(), llvm::InvalidClusterId, LLVM_DUMP_METHOD, llvm::SUnit::ParentClusterIdx, llvm::SUnit::Preds, llvm::SUnit::Succs, and TRI.
Referenced by llvm::ScheduleDAGInstrs::dump(), llvm::ScheduleDAGMILive::dump(), and llvm::ScheduleDAGSDNodes::dump().
LLVM_DUMP_METHOD void ScheduleDAG::dumpNodeName | ( | const SUnit & | SU | ) | const |
Definition at line 356 of file ScheduleDAG.cpp.
References llvm::dbgs(), EntrySU, ExitSU, LLVM_DUMP_METHOD, and llvm::SUnit::NodeNum.
Referenced by dump(), llvm::ScheduleDAGInstrs::dumpNode(), llvm::ScheduleDAGSDNodes::dumpNode(), dumpNodeAll(), and llvm::fuseInstructionPair().
|
pure virtual |
Returns a label for the region of code covered by the DAG.
Implemented in llvm::ScheduleDAGInstrs, and llvm::ScheduleDAGSDNodes.
Referenced by viewGraph().
Returns a label for an SUnit node in a visualization of the ScheduleDAG.
Implemented in llvm::ScheduleDAGInstrs, and llvm::ScheduleDAGSDNodes.
|
inline |
Returns the MCInstrDesc of this SUnit.
Returns NULL for SDNodes without a machine opcode.
Definition at line 616 of file ScheduleDAG.h.
References llvm::MachineInstr::getDesc(), llvm::SUnit::getInstr(), llvm::SUnit::getNode(), and llvm::SUnit::isInstr().
|
delete |
References ScheduleDAG().
Verifies that all SUnits were scheduled and that their state is consistent.
Returns the number of scheduled SUnits.
Definition at line 395 of file ScheduleDAG.cpp.
References assert(), llvm::dbgs(), dumpNode(), llvm::SUnit::getDepth(), llvm::SUnit::getHeight(), llvm::SUnit::isScheduled, llvm::SUnit::NumPreds, llvm::SUnit::NumPredsLeft, llvm::SUnit::NumSuccs, llvm::SUnit::NumSuccsLeft, and SUnits.
Referenced by llvm::ScheduleDAGSDNodes::VerifyScheduledSequence().
|
virtual |
Out-of-line implementation with no arguments is handy for gdb.
Reimplemented in llvm::ScheduleDAGMI.
Definition at line 90 of file ScheduleDAGPrinter.cpp.
References getDAGName(), and viewGraph().
Referenced by viewGraph().
Pops up a GraphViz/gv window with the ScheduleDAG rendered using 'dot'.
viewGraph - Pop up a ghostview window with the reachable parts of the DAG rendered using 'dot'.
Reimplemented in llvm::ScheduleDAGMI.
Definition at line 79 of file ScheduleDAGPrinter.cpp.
References llvm::errs(), and llvm::ViewGraph().
SUnit llvm::ScheduleDAG::EntrySU |
Special node for the region entry.
Definition at line 589 of file ScheduleDAG.h.
Referenced by clearDAG(), llvm::ScheduleDAGInstrs::dump(), llvm::ScheduleDAGMILive::dump(), llvm::ScheduleDAGSDNodes::dump(), dumpNodeName(), llvm::fuseInstructionPair(), llvm::SIScheduleDAGMI::getEntrySU(), llvm::ScheduleDAGInstrs::getGraphNodeLabel(), llvm::ScheduleDAGMI::initQueues(), llvm::ScheduleDAGMI::releasePred(), and llvm::SwingSchedulerDAG::schedule().
SUnit llvm::ScheduleDAG::ExitSU |
Special node for the region exit.
Definition at line 590 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGInstrs::addEdge(), llvm::ScheduleDAGInstrs::addPhysRegDeps(), llvm::ScheduleDAGInstrs::addSchedBarrierDeps(), llvm::ARMOverrideBypasses::apply(), llvm::ScheduleDAGInstrs::buildSchedGraph(), llvm::ScheduleDAGInstrs::canAddEdge(), clearDAG(), llvm::ScheduleDAGMILive::computeCyclicCriticalPath(), llvm::ScheduleDAGInstrs::dump(), llvm::ScheduleDAGMILive::dump(), llvm::ScheduleDAGSDNodes::dump(), dumpNodeName(), llvm::ScheduleDAGMI::findRootsAndBiasEdges(), llvm::fuseInstructionPair(), llvm::SIScheduleDAGMI::getExitSU(), llvm::ScheduleDAGInstrs::getGraphNodeLabel(), llvm::ScheduleDAGMI::initQueues(), llvm::ScheduleDAGMI::releaseSucc(), llvm::SwingSchedulerDAG::schedule(), llvm::ScheduleDAGInstrs::ScheduleDAGInstrs(), llvm::SwingSchedulerDAG::SwingSchedulerDAG(), and llvm::ScheduleDAGMILive::updatePressureDiffs().
MachineFunction& llvm::ScheduleDAG::MF |
Machine function.
Definition at line 586 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGInstrs::addPhysRegDataDeps(), llvm::ScheduleDAGInstrs::addPhysRegDeps(), llvm::ScheduleDAGInstrs::addVRegDefDeps(), llvm::HexagonSubtarget::CallMutation::apply(), llvm::SwingSchedulerDAG::applyInstrChange(), llvm::ScheduleDAGMILive::buildDAGWithRegPressure(), llvm::ScheduleDAGInstrs::buildSchedGraph(), llvm::SIInstrInfo::CreateTargetMIHazardRecognizer(), llvm::PPCInstrInfo::CreateTargetPostRAHazardRecognizer(), llvm::SIInstrInfo::CreateTargetPostRAHazardRecognizer(), llvm::DefaultVLIWScheduler::DefaultVLIWScheduler(), llvm::ScheduleDAGSDNodes::EmitSchedule(), llvm::SwingSchedulerDAG::finishBlock(), llvm::SwingSchedulerDAG::fixupRegisterOverlaps(), llvm::GCNScheduleDAGMILive::GCNScheduleDAGMILive(), llvm::ScheduleDAGMILive::initRegPressure(), llvm::SIScheduleDAGMI::initRPTracker(), llvm::SwingSchedulerDAG::mayOverlapInLaterIter(), llvm::GCNIterativeScheduler::printRegions(), llvm::GCNIterativeScheduler::printSchedRP(), llvm::SwingSchedulerDAG::schedule(), ScheduleDAG(), llvm::ScheduleDAGMI::ScheduleDAGMI(), llvm::GCNIterativeScheduler::scheduleILP(), llvm::GCNIterativeScheduler::scheduleLegacyMaxOccupancy(), llvm::GCNIterativeScheduler::scheduleMinReg(), llvm::GCNIterativeScheduler::scheduleRegion(), llvm::GCNIterativeScheduler::sortRegionsByPressure(), llvm::SwingSchedulerDAG::SwingSchedulerDAG(), and llvm::GCNIterativeScheduler::tryMaximizeOccupancy().
MachineRegisterInfo& llvm::ScheduleDAG::MRI |
Virtual/real register map.
Definition at line 587 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGInstrs::addPhysRegDeps(), llvm::ScheduleDAGInstrs::addVRegDefDeps(), llvm::ScheduleDAGInstrs::buildSchedGraph(), llvm::SIScheduleDAGMI::fillVgprSgprCost(), llvm::ScheduleDAGInstrs::fixupKills(), llvm::ScheduleDAGInstrs::getLaneMaskForMO(), llvm::SIScheduleDAGMI::getMRI(), llvm::ScheduleDAGMILive::initRegPressure(), llvm::SwingSchedulerDAG::mayOverlapInLaterIter(), llvm::SwingSchedulerDAG::schedule(), ScheduleDAG(), llvm::ScheduleDAGMILive::scheduleMI(), llvm::GCNIterativeScheduler::scheduleRegion(), and llvm::ScheduleDAGMILive::updatePressureDiffs().
bool llvm::ScheduleDAG::StressSched |
Definition at line 595 of file ScheduleDAG.h.
Referenced by ScheduleDAG().
std::vector<SUnit> llvm::ScheduleDAG::SUnits |
The scheduling units.
Definition at line 588 of file ScheduleDAG.h.
Referenced by llvm::ARMOverrideBypasses::apply(), llvm::HexagonSubtarget::BankConflictMutation::apply(), llvm::HexagonSubtarget::CallMutation::apply(), llvm::HexagonSubtarget::HVXMemLatencyMutation::apply(), llvm::HexagonSubtarget::UsrOverflowMutation::apply(), llvm::RISCVVectorMaskDAGMutation::apply(), llvm::ScheduleDAGInstrs::buildSchedGraph(), clearDAG(), llvm::SchedDFSResult::compute(), llvm::ScheduleDAGMILive::computeDFSResult(), llvm::SMSchedule::computeUnpipelineableNodes(), llvm::ScheduleDAGInstrs::dump(), llvm::ScheduleDAGMILive::dump(), llvm::ScheduleDAGSDNodes::dump(), llvm::SMSchedule::finalizeSchedule(), llvm::ScheduleDAGMI::findRootsAndBiasEdges(), llvm::fuseInstructionPair(), llvm::ScheduleDAGSDNodes::getCustomGraphFeatures(), llvm::WindowScheduler::getEstimatedII(), llvm::SchedRemainder::init(), llvm::ScheduleDAGMILive::initRegPressure(), llvm::ScheduleDAGInstrs::initSUnits(), llvm::SMSchedule::isValidSchedule(), llvm::ScheduleDAGInstrs::newSUnit(), llvm::ScheduleDAGSDNodes::newSUnit(), llvm::SMSchedule::normalizeNonPipelinedInstructions(), llvm::ScheduleDAGInstrs::reduceHugeMemNodeMaps(), llvm::SIScheduleDAGMI::restoreSULinksLeft(), llvm::SIScheduleDAGMI::schedule(), llvm::SwingSchedulerDAG::schedule(), llvm::VLIWMachineScheduler::schedule(), llvm::ScheduleDAGInstrs::ScheduleDAGInstrs(), llvm::SwingSchedulerDAG::SwingSchedulerDAG(), and VerifyScheduledDAG().
const TargetInstrInfo* llvm::ScheduleDAG::TII |
Target instruction information.
Definition at line 584 of file ScheduleDAG.h.
Referenced by llvm::HexagonSubtarget::BankConflictMutation::apply(), llvm::HexagonSubtarget::HVXMemLatencyMutation::apply(), llvm::SwingSchedulerDAG::applyInstrChange(), llvm::ScheduleDAGInstrs::buildSchedGraph(), llvm::ScheduleDAGSDNodes::computeLatency(), llvm::ScheduleDAGSDNodes::computeOperandLatency(), llvm::GCNTargetMachine::createPostMachineScheduler(), llvm::createSchedLive(), llvm::PPCInstrInfo::CreateTargetPostRAHazardRecognizer(), createVLIWMachineSched(), llvm::ScheduleDAGSDNodes::EmitSchedule(), llvm::SwingSchedulerDAG::fixupRegisterOverlaps(), llvm::fuseInstructionPair(), hasIGLPInstrs(), llvm::SwingSchedulerDAG::mayOverlapInLaterIter(), ScheduleDAG(), llvm::SIScheduleDAGMI::SIScheduleDAGMI(), and llvm::GCNIterativeScheduler::swapIGLPMutations().
const TargetMachine& llvm::ScheduleDAG::TM |
const TargetRegisterInfo* llvm::ScheduleDAG::TRI |
Target processor register info.
Definition at line 585 of file ScheduleDAG.h.
Referenced by llvm::ScheduleDAGInstrs::addPhysRegDataDeps(), llvm::ScheduleDAGInstrs::addPhysRegDeps(), llvm::ScheduleDAGInstrs::addSchedBarrierDeps(), llvm::ScheduleDAGInstrs::buildSchedGraph(), llvm::GCNTargetMachine::createPostMachineScheduler(), llvm::createSchedLive(), createVLIWMachineSched(), llvm::ScheduleDAGMILive::dump(), dumpNodeAll(), llvm::ScheduleDAGInstrs::fixupKills(), llvm::ScheduleDAGInstrs::getLaneMaskForMO(), llvm::SIScheduleDAGMI::getTRI(), llvm::ScheduleDAGMILive::initRegPressure(), llvm::SwingSchedulerDAG::mayOverlapInLaterIter(), llvm::SIScheduleDAGMI::schedule(), llvm::SwingSchedulerDAG::schedule(), ScheduleDAG(), llvm::ScheduleDAGMILive::scheduleMI(), llvm::GCNIterativeScheduler::scheduleRegion(), llvm::SIScheduleDAGMI::SIScheduleDAGMI(), llvm::ScheduleDAGMILive::updatePressureDiffs(), and llvm::ScheduleDAGMILive::updateScheduledPressure().