LLVM API Documentation

llvm::ScheduleDAG Class Reference

#include <ScheduleDAG.h>

Collaboration diagram for llvm::ScheduleDAG:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 ScheduleDAG (SelectionDAG &dag, MachineBasicBlock *bb, const TargetMachine &tm)
virtual ~ScheduleDAG ()
MachineBasicBlockRun ()
SUnitNewSUnit (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

SelectionDAGDAG
MachineBasicBlockBB
const TargetMachineTM
const TargetInstrInfoTII
const MRegisterInfoMRI
SSARegMapRegMap
MachineConstantPoolConstPool
std::vector< SUnit * > Sequence
std::map< SDNode *, SUnit * > SUnitMap
std::vector< SUnitSUnits
std::set< SDNode * > CommuteSet

Detailed Description

Definition at line 144 of file ScheduleDAG.h.


Constructor & Destructor Documentation

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.


Member Function Documentation

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().

SUnit* llvm::ScheduleDAG::NewSUnit ( SDNode N  )  [inline]

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.

void ScheduleDAG::EmitNode ( SDNode Node,
std::map< SDNode *, unsigned > &  VRBaseMap 
)

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

dump - dump the schedule.

Definition at line 594 of file ScheduleDAG.cpp.

References DAG, and Sequence.

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().


Member Data Documentation

SelectionDAG& llvm::ScheduleDAG::DAG

Definition at line 146 of file ScheduleDAG.h.

Referenced by BuildSchedUnits(), CalculateDepths(), CalculateHeights(), dumpSchedule(), EmitNode(), and EmitSchedule().

MachineBasicBlock* llvm::ScheduleDAG::BB

Definition at line 147 of file ScheduleDAG.h.

Referenced by EmitNode(), EmitNoop(), EmitSchedule(), and Run().

const TargetMachine& llvm::ScheduleDAG::TM

Definition at line 148 of file ScheduleDAG.h.

Referenced by BuildSchedUnits(), and Run().

const TargetInstrInfo* llvm::ScheduleDAG::TII

Definition at line 149 of file ScheduleDAG.h.

Referenced by BuildSchedUnits(), EmitNode(), EmitNoop(), and Run().

const MRegisterInfo* llvm::ScheduleDAG::MRI

Definition at line 150 of file ScheduleDAG.h.

Referenced by EmitNode(), EmitSchedule(), and Run().

SSARegMap* llvm::ScheduleDAG::RegMap

Definition at line 151 of file ScheduleDAG.h.

Referenced by EmitNode(), EmitSchedule(), and Run().

MachineConstantPool* llvm::ScheduleDAG::ConstPool

Definition at line 152 of file ScheduleDAG.h.

Referenced by Run().

std::vector<SUnit*> llvm::ScheduleDAG::Sequence

Definition at line 153 of file ScheduleDAG.h.

Referenced by dumpSchedule(), and EmitSchedule().

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

Definition at line 157 of file ScheduleDAG.h.

Referenced by EmitNode().


The documentation for this class was generated from the following files: