LLVM API Documentation
#include <ScheduleDAG.h>
Collaboration diagram for llvm::ScheduleDAG:
Public Member Functions | |
ScheduleDAG (SelectionDAG &dag, MachineBasicBlock *bb, const TargetMachine &tm) | |
virtual | ~ScheduleDAG () |
MachineBasicBlock * | Run () |
SUnit * | NewSUnit (SDNode *N) |
void | BuildSchedUnits () |
void | CalculateDepths () |
void | CalculateHeights () |
void | EmitNode (SDNode *Node, std::map< SDNode *, unsigned > &VRBaseMap) |
void | EmitNoop () |
void | EmitSchedule () |
EmitSchedule - Emit the machine code in scheduled order. | |
void | dumpSchedule () const |
dump - dump the schedule. | |
virtual void | Schedule () |
Static Public Member Functions | |
static bool | isPassiveNode (SDNode *Node) |
Public Attributes | |
SelectionDAG & | DAG |
MachineBasicBlock * | BB |
const TargetMachine & | TM |
const TargetInstrInfo * | TII |
const MRegisterInfo * | MRI |
SSARegMap * | RegMap |
MachineConstantPool * | ConstPool |
std::vector< SUnit * > | Sequence |
std::map< SDNode *, SUnit * > | SUnitMap |
std::vector< SUnit > | SUnits |
std::set< SDNode * > | CommuteSet |
Definition at line 144 of file ScheduleDAG.h.
llvm::ScheduleDAG::ScheduleDAG | ( | SelectionDAG & | dag, | |
MachineBasicBlock * | bb, | |||
const TargetMachine & | tm | |||
) | [inline] |
Definition at line 159 of file ScheduleDAG.h.
virtual llvm::ScheduleDAG::~ScheduleDAG | ( | ) | [inline, virtual] |
Definition at line 163 of file ScheduleDAG.h.
MachineBasicBlock * ScheduleDAG::Run | ( | ) |
Run - perform scheduling.
Definition at line 606 of file ScheduleDAG.cpp.
References BB, ConstPool, llvm::MachineFunction::getConstantPool(), llvm::TargetMachine::getInstrInfo(), llvm::MachineBasicBlock::getParent(), llvm::TargetMachine::getRegisterInfo(), llvm::MachineFunction::getSSARegMap(), MRI, RegMap, Schedule(), TII, and TM.
Referenced by llvm::SelectionDAGISel::ScheduleAndEmitDAG().
static bool llvm::ScheduleDAG::isPassiveNode | ( | SDNode * | Node | ) | [inline, static] |
isPassiveNode - Return true if the node is a non-scheduled leaf.
Definition at line 171 of file ScheduleDAG.h.
References Node.
Referenced by BuildSchedUnits().
NewSUnit - Creates a new SUnit and return a ptr to it.
Definition at line 185 of file ScheduleDAG.h.
References SUnits.
Referenced by BuildSchedUnits().
void ScheduleDAG::BuildSchedUnits | ( | ) |
BuildSchedUnits - Build SUnits from the selection dag that we are input. This SUnit graph is similar to the SelectionDAG, but represents flagged together nodes with a single SUnit.
Definition at line 34 of file ScheduleDAG.cpp.
References llvm::SelectionDAG::allnodes_begin(), llvm::SelectionDAG::allnodes_end(), llvm::InstrItineraryData::begin(), llvm::InstrStage::Cycles, DAG, E, llvm::InstrItineraryData::end(), llvm::MVT::Flag, llvm::SUnit::FlaggedNodes, llvm::TargetMachine::getInstrItineraryData(), llvm::SDNode::getNumOperands(), llvm::SDNode::getNumValues(), llvm::SDNode::getOperand(), llvm::TargetInstrInfo::getSchedClass(), llvm::SDNode::getTargetOpcode(), llvm::SDNode::getValueType(), llvm::TargetInstrInfo::isCommutableInstr(), llvm::InstrItineraryData::isEmpty(), isPassiveNode(), llvm::SDNode::isTargetOpcode(), llvm::TargetInstrInfo::isTwoAddrInstr(), llvm::SUnit::Latency, NewSUnit(), NI, llvm::SUnit::Node, llvm::MVT::Other, SUnitMap, SUnits, TII, TM, and Val.
void ScheduleDAG::CalculateDepths | ( | ) |
CalculateDepths, CalculateHeights - Calculate node depth / height.
Definition at line 183 of file ScheduleDAG.cpp.
References DAG, llvm::SelectionDAG::getEntryNode(), SUnitMap, SUnits, U, and llvm::SDOperand::Val.
void ScheduleDAG::CalculateHeights | ( | ) |
Definition at line 200 of file ScheduleDAG.cpp.
References DAG, llvm::SelectionDAG::getRoot(), Root, SUnitMap, U, and llvm::SDOperand::Val.
EmitNode - Generate machine code for an node and needed dependencies. VRBaseMap contains, for each already emitted node, the first virtual register number for the results of the node.
Definition at line 365 of file ScheduleDAG.cpp.
References llvm::MachineInstr::addExternalSymbolOperand(), llvm::MachineInstr::addImmOperand(), llvm::MachineInstr::addRegOperand(), BB, llvm::TargetInstrInfo::commuteInstruction(), CommuteSet, llvm::ISD::CopyFromReg, llvm::MRegisterInfo::copyRegToReg(), llvm::ISD::CopyToReg, CountOperands(), CountResults(), llvm::SSARegMap::createVirtualRegister(), CreateVirtualRegisters(), DAG, DEBUG, llvm::MachineOperand::Def, llvm::SDNode::dump(), E, llvm::MachineBasicBlock::end(), llvm::ISD::EntryToken, llvm::MVT::Flag, llvm::TargetInstrInfo::get(), llvm::SDNode::getNumOperands(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::SSARegMap::getRegClass(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SDNode::getTargetOpcode(), llvm::SDOperand::getValueType(), llvm::SDNode::getValueType(), getVR(), II, llvm::TargetInstrInfo::INLINEASM, llvm::ISD::INLINEASM, llvm::MachineBasicBlock::insert(), llvm::TargetLowering::InsertAtEndOfBasicBlock(), llvm::SDNode::isTargetOpcode(), llvm::MRegisterInfo::isVirtualRegister(), llvm::M_USES_CUSTOM_DAG_SCHED_INSERTION, llvm::M_VARIABLE_OPS, MI, MRI, Node, Reg, llvm::MRegisterInfo::regclass_begin(), llvm::MRegisterInfo::regclass_end(), RegMap, TII, llvm::ISD::TokenFactor, llvm::MachineOperand::Use, llvm::SDNode::use_begin(), llvm::SDNode::use_end(), and Val.
Referenced by EmitSchedule().
void ScheduleDAG::EmitNoop | ( | ) |
EmitNoop - Emit a noop instruction.
Definition at line 560 of file ScheduleDAG.cpp.
References BB, llvm::MachineBasicBlock::end(), llvm::TargetInstrInfo::insertNoop(), and TII.
Referenced by EmitSchedule().
void ScheduleDAG::EmitSchedule | ( | ) |
EmitSchedule - Emit the machine code in scheduled order.
Definition at line 565 of file ScheduleDAG.cpp.
References BB, llvm::MachineFunction::begin(), llvm::MRegisterInfo::copyRegToReg(), DAG, E, EmitNode(), EmitNoop(), llvm::MachineFunction::front(), llvm::SelectionDAG::getMachineFunction(), llvm::SSARegMap::getRegClass(), LI, llvm::MachineFunction::livein_begin(), llvm::MachineFunction::livein_end(), MF, MRI, RegMap, and Sequence.
void ScheduleDAG::dumpSchedule | ( | ) | const |
virtual void llvm::ScheduleDAG::Schedule | ( | ) | [inline, virtual] |
Schedule - Order nodes according to selected style.
Definition at line 216 of file ScheduleDAG.h.
Referenced by Run().
Definition at line 146 of file ScheduleDAG.h.
Referenced by BuildSchedUnits(), CalculateDepths(), CalculateHeights(), dumpSchedule(), EmitNode(), and EmitSchedule().
Definition at line 147 of file ScheduleDAG.h.
Referenced by EmitNode(), EmitNoop(), EmitSchedule(), and Run().
Definition at line 149 of file ScheduleDAG.h.
Referenced by BuildSchedUnits(), EmitNode(), EmitNoop(), and Run().
std::vector<SUnit*> llvm::ScheduleDAG::Sequence |
std::map<SDNode*, SUnit*> llvm::ScheduleDAG::SUnitMap |
Definition at line 155 of file ScheduleDAG.h.
Referenced by BuildSchedUnits(), CalculateDepths(), and CalculateHeights().
std::vector<SUnit> llvm::ScheduleDAG::SUnits |
Definition at line 156 of file ScheduleDAG.h.
Referenced by BuildSchedUnits(), CalculateDepths(), and NewSUnit().
std::set<SDNode*> llvm::ScheduleDAG::CommuteSet |