OpenASIP
2.0
|
#include <BF2Scheduler.hh>
Classes | |
struct | PreLoopShareInfo |
struct | SchedulingLimits |
Public Types | |
enum | LoopSchedulingMode { NO_LOOP_SCHEDULER = 0 } |
enum | PreLoopOperandEnum { NO_PORT =0, SHARED =1, NOT_SHARED =2, NO_LOOP_INVARIANT =3 } |
enum | SchedulingDirection { EITHER =0, TOPDOWN =1, BOTTOMUP =2, EXACTCYCLE =3 } |
typedef std::map< MoveNode *, MoveNode *, MoveNode::Comparator > | MoveNodeMap |
Static Public Member Functions | |
static bool | isSourceUniversalReg (const MoveNode &mn) |
static bool | isDestinationUniversalReg (const MoveNode &mn) |
Static Public Attributes | |
static const int | PROLOG_CYCLE_BIAS = 1000 |
Protected Member Functions | |
int | handleLoopDDG (BUMoveNodeSelector &selector, bool allowPreLoopOpshare) |
Static Private Member Functions | |
static void | writeDotWithNameAndNodeID (DataDependenceGraph &ddg, const TCEString &namePrefix, const MoveNode &mn) |
Definition at line 74 of file BF2Scheduler.hh.
typedef std::map<MoveNode*, MoveNode*, MoveNode::Comparator> BF2Scheduler::MoveNodeMap |
Definition at line 177 of file BF2Scheduler.hh.
Enumerator | |
---|---|
NO_LOOP_SCHEDULER |
Definition at line 130 of file BF2Scheduler.hh.
Enumerator | |
---|---|
NO_PORT | |
SHARED | |
NOT_SHARED | |
NO_LOOP_INVARIANT |
Definition at line 135 of file BF2Scheduler.hh.
Enumerator | |
---|---|
EITHER | |
TOPDOWN | |
BOTTOMUP | |
EXACTCYCLE |
Definition at line 156 of file BF2Scheduler.hh.
BF2Scheduler::BF2Scheduler | ( | InterPassData & | ipd, |
RegisterRenamer * | renamer | ||
) |
Definition at line 92 of file BF2Scheduler.cc.
References Application::cmdLineOptions(), SchedulerCmdLineOptions::killDeadResults(), killDeadResults_, and options_.
BF2Scheduler::BF2Scheduler | ( | InterPassData & | ipd, |
RegisterRenamer * | renamer, | ||
bool | killDeadResults | ||
) |
Definition at line 109 of file BF2Scheduler.cc.
References Application::cmdLineOptions(), and options_.
BF2Scheduler::~BF2Scheduler | ( | ) |
|
private |
Allocate function units for pre-loop operand sharing.
Definition at line 1234 of file BF2Scheduler.cc.
References countLoopInvariantValueUsages(), invariants_, invariantsOfCount_, TTAMachine::Component::name(), preAllocateFunctionUnits(), preLoopSharedOperands_, preSharedOperandPorts_, and ProgramOperation::toString().
Referenced by handleLoopDDG().
BF2Scheduler::MoveNodeMap BF2Scheduler::bypassNodes | ( | ) |
Definition at line 1646 of file BF2Scheduler.cc.
References BF2ScheduleFront::appendBypassSources(), and scheduledStack_.
|
private |
Definition at line 1155 of file BF2Scheduler.cc.
References assert, MoveNodeSet::at(), MoveNodeSet::count(), ddg(), ProgramOperation::inputNode(), SimValue::intValue(), invariants_, invariantsOfCount_, TTAProgram::Terminal::isInstructionAddress(), MoveNode::isSourceConstant(), MoveNode::isSourceVariable(), MoveNode::move(), mustBeTrigger(), Operation::numberOfInputs(), ProgramOperation::operation(), DataDependenceGraph::programOperation(), DataDependenceGraph::programOperationCount(), DisassemblyRegister::registerName(), TTAProgram::Move::source(), MoveNode::toString(), and TTAProgram::Terminal::value().
Referenced by allocateFunctionUnits().
|
inline |
Definition at line 188 of file BF2Scheduler.hh.
References currentFront_.
Referenced by BFOptimization::mightBeReady(), BFRenameLiveRange::notifySelector(), BFEarlyBypass::operator()(), BFEarlyBypasser::operator()(), BFShareOperands::operator()(), and BFEarlyBypass::undoOnlyMe().
|
inline |
Definition at line 100 of file BF2Scheduler.hh.
References ddg_.
Referenced by countLoopInvariantValueUsages(), BFOptimization::ddg(), handleDDG(), handleLoopDDG(), preAllocateFunctionUnits(), reservePreallocatedFUs(), revertBBLiveRangeBookkeepingForDestination(), revertBBLiveRangeBookkeepingForSource(), scheduleDDG(), and unreservePreallocatedFUs().
|
inline |
void BF2Scheduler::deletingNode | ( | MoveNode * | deletedNode | ) |
Definition at line 1633 of file BF2Scheduler.cc.
References currentFront_, and BF2ScheduleFront::deletingNode().
Referenced by BFRegCopy::undoDDG().
|
inline |
Definition at line 106 of file BF2Scheduler.hh.
References assert, and duplicator_.
Referenced by BFOptimization::duplicator(), and finalizeSchedule().
|
private |
Definition at line 749 of file BF2Scheduler.cc.
Referenced by revertBBLiveRangeBookkeepingForDestination(), and revertBBLiveRangeBookkeepingForSource().
void BF2Scheduler::finalizeSchedule | ( | ) |
Definition at line 641 of file BF2Scheduler.cc.
References assert, ddg_, dreRemovedMoves_, duplicator(), MoveNodeDuplicator::getMoveNode(), MoveNode::isScheduled(), prologRM_, removedMoves_, BoostGraph< GraphNode, GraphEdge >::removeNode(), BoostGraph< GraphNode, GraphEdge >::rootGraph(), scheduledStack_, and MoveNode::toString().
Referenced by handleDDG(), and handleLoopDDG().
DataDependenceEdge * BF2Scheduler::findBypassEdge | ( | const MoveNode & | mn | ) |
Finds the source where to bypass from.
Definition at line 838 of file BF2Scheduler.cc.
References ddg_, DataDependenceEdge::DEP_RAW, DataDependenceEdge::dependenceType(), DataDependenceEdge::EDGE_REGISTER, DataDependenceEdge::edgeReason(), DataDependenceEdge::guardUse(), DataDependenceEdge::headPseudo(), BoostGraph< GraphNode, GraphEdge >::inEdges(), DataDependenceEdge::isBackEdge(), and rm().
Referenced by BFEarlyBypasser::operator()(), and BFPostpassBypasser::tryBypassNode().
|
private |
Finds the jump from the bb.
Definition at line 1076 of file BF2Scheduler.cc.
References ddg_, TTAProgram::Move::isJump(), MoveNode::isMove(), TTAProgram::Move::isUnconditional(), jumpNode_, MoveNode::move(), BoostGraph< GraphNode, GraphEdge >::node(), and BoostGraph< GraphNode, GraphEdge >::nodeCount().
Referenced by handleLoopDDG().
|
private |
TTAMachine::Unit * BF2Scheduler::getDstUnit | ( | MoveNode & | mn | ) |
Definition at line 122 of file BF2Scheduler.cc.
References assert, TTAProgram::Move::destination(), MoveNode::destinationOperation(), ProgramOperation::inputMove(), ProgramOperation::inputMoveCount(), MoveNode::isDestinationOperation(), TTAProgram::Terminal::isFUPort(), MoveNode::isScheduled(), MoveNode::move(), TTAMachine::Port::parentUnit(), TTAProgram::Terminal::port(), and MoveNode::toString().
|
inline |
Definition at line 198 of file BF2Scheduler.hh.
References llResult_.
|
inline |
Definition at line 191 of file BF2Scheduler.hh.
References jumpGuardWrite_.
Referenced by BFOptimization::jumpGuardAvailableCycle(), BFPushMoveUp::operator()(), BFPushAntidepDown::operator()(), and BFPushMoveUp2::operator()().
|
virtual |
Handles a given DDG.
ddg | DDG to handle |
rm | Resource manager that is to be used. |
machine | The target machine if any. (NullMachine::instance() if target machine is irrelevant). |
In | case handling is unsuccesful for any reason (basicBlock might still get modified). |
Reimplemented from DDGPass.
Definition at line 244 of file BF2Scheduler.cc.
References ddg(), ddg_, duplicator_, finalizeSchedule(), SimpleResourceManager::largestCycle(), loopBufOps_, BoostGraph< GraphNode, GraphEdge >::name(), rm(), rm_, scheduleDDG(), SimpleResourceManager::smallestCycle(), targetMachine(), unschedule(), and GraphBase< GraphNode, GraphEdge >::writeToDotFile().
|
protected |
Definition at line 272 of file BF2Scheduler.cc.
References allocateFunctionUnits(), BUMoveNodeSelector::candidates(), ddg_, BoostGraph< GraphNode, GraphEdge >::dropNode(), LLVMTCECmdLineOptions::dumpDDGsDot(), duplicator_, DataDependenceGraph::getBasicBlockNode(), BoostGraph< GraphNode, GraphEdge >::hasNode(), SimpleResourceManager::initiationInterval(), isDeadResult(), MoveNode::isScheduled(), latestCycle_, loopBufOps_, loopLimitNode(), MoveNodeGroup::node(), BoostGraph< GraphNode, GraphEdge >::node(), MoveNodeGroup::nodeCount(), options_, preLoopSharedOperands_, preSharedOperandPorts_, prologDDG_, prologRM_, reservePreallocatedFUs(), rm_, scheduledStack_, scheduleFrontFromMove(), selector(), MoveNodeDuplicator::setBBN(), SimpleResourceManager::smallestCycle(), Conversion::toString(), MoveNode::toString(), tripCount_, unreservePreallocatedFUs(), unschedule(), Application::verboseLevel(), and GraphBase< GraphNode, GraphEdge >::writeToDotFile().
|
overridevirtual |
For BasicBlockPass to be able to call this method...
Reimplemented from DDGPass.
Definition at line 402 of file BF2Scheduler.cc.
References assert, BFOptimization::clearPrologMoves(), ddg(), ddg_, LLVMTCECmdLineOptions::dumpDDGsDot(), LLVMTCECmdLineOptions::dumpDDGsXML(), duplicator_, finalizeSchedule(), findJump(), BUMoveNodeSelector::initializeReadylist(), SimpleResourceManager::initiationInterval(), jumpGuardWrite_, jumpNode_, latestCycle_, Application::logStream(), loopLimitNode(), BoostGraph< GraphNode, GraphEdge >::name(), BoostGraph< GraphNode, GraphEdge >::nodeCount(), DataDependenceGraph::onlyGuardDefOfMove(), options_, BoostGraph< GraphNode, GraphEdge >::parentGraph(), preLoopSharedOperands_, preSharedOperandPorts_, prologDDG_, prologRM(), prologRM_, renamer_, rm(), rm_, DataDependenceGraph::scheduledNodeCount(), selector(), selector_, SimpleResourceManager::setDDG(), DataDependenceGraph::setMachine(), SimpleResourceManager::setMaxCycle(), RegisterRenamer::setSelector(), targetMachine(), targetMachine_, Conversion::toString(), MoveNode::toString(), tripCount(), tripCount_, unreservePreallocatedFUs(), unschedule(), Application::verboseLevel(), GraphBase< GraphNode, GraphEdge >::writeToDotFile(), and DataDependenceGraph::writeToXMLFile().
bool BF2Scheduler::hasUnscheduledSuccessors | ( | MoveNode & | mn | ) | const |
Definition at line 1054 of file BF2Scheduler.cc.
References ddg_, isDeadResult(), and BoostGraph< GraphNode, GraphEdge >::successors().
Referenced by BF2ScheduleFront::getMoveNodeFromFrontBU().
|
private |
bool BF2Scheduler::isDeadResult | ( | MoveNode & | mn | ) | const |
Definition at line 798 of file BF2Scheduler.cc.
References dreRemovedMoves_, and removedMoves_.
Referenced by BFEarlyBypasser::bypassSourceLatestCycle(), BF2ScheduleFront::getMoveNodeFromFrontBU(), handleLoopDDG(), hasUnscheduledSuccessors(), BF2ScheduleFront::printFront(), scheduleDDG(), and BF2ScheduleFront::scheduleFrontFromMove().
|
static |
Definition at line 773 of file BF2Scheduler.cc.
References TTAProgram::Move::destination(), MoveNode::isDestinationVariable(), TTAProgram::Terminal::isUniversalMachineRegister(), and MoveNode::move().
Referenced by BF2ScheduleFront::allNodesOfSameOperation(), BF2ScheduleFront::findInducingBypassSource(), BF2ScheduleFront::findInducingBypassSourceFromOperation(), and BF2ScheduleFront::tryRevertEarlierBypass().
TTAMachine::FUPort * BF2Scheduler::isPreLoopSharedOperand | ( | MoveNode & | mn | ) | const |
Definition at line 1625 of file BF2Scheduler.cc.
References preLoopSharedOperands_.
Referenced by BFSwapOperands::BFSwapOperands(), BFEarlyBypasser::bypassSourceLatestCycle(), BF2ScheduleFront::getMoveNodeFromFrontBU(), BFDropPreShared::operator()(), reservePreallocatedFUs(), BF2ScheduleFront::scheduleFrontFromMove(), BF2ScheduleFront::scheduleMove(), and BF2ScheduleFront::tryToScheduleMoveOuter().
|
private |
|
private |
|
static |
Definition at line 765 of file BF2Scheduler.cc.
References MoveNode::isSourceVariable(), TTAProgram::Terminal::isUniversalMachineRegister(), MoveNode::move(), and TTAProgram::Move::source().
Referenced by BF2ScheduleFront::allNodesOfSameOperation(), and BFScheduleBU::operator()().
bool BF2Scheduler::isTrigger | ( | const TTAMachine::Unit & | unit, |
MoveNode & | mn | ||
) |
Checks whether given movenode is a trigger in given FU
Definition at line 819 of file BF2Scheduler.cc.
References TTAProgram::Move::destination(), MoveNode::destinationOperation(), TTAMachine::FUPort::isTriggering(), MoveNode::move(), Operation::name(), TTAMachine::FunctionUnit::operation(), ProgramOperation::operation(), TTAProgram::Terminal::operationIndex(), and TTAMachine::HWOperation::port().
Referenced by BFShareOperands::operator()(), and preAllocateFunctionUnits().
TTAProgram::MoveGuard * BF2Scheduler::jumpGuard | ( | ) |
Definition at line 1087 of file BF2Scheduler.cc.
References assert, TTAProgram::Move::guard(), TTAProgram::Move::isUnconditional(), jumpNode_, MoveNode::move(), and MoveNode::toString().
Referenced by BFOptimization::setJumpGuard().
|
inline |
Definition at line 192 of file BF2Scheduler.hh.
References jumpNode_.
Referenced by BFOptimization::jumpGuardAvailableCycle().
|
inline |
Definition at line 110 of file BF2Scheduler.hh.
References killDeadResults_.
Referenced by BFDREEarly::operator()(), BFDRELate::operator()(), BFPostpassDRE::operator()(), BFPostpassLoopDRE::operator()(), and BFDRELoop::operator()().
std::list<ProgramOperation*> BF2Scheduler::loopBufOps | ( | ) |
|
inline |
Definition at line 194 of file BF2Scheduler.hh.
References LoopAnalyzer::LoopAnalysisResult::counterValueNode, and llResult_.
Referenced by handleLoopDDG().
|
inline |
Definition at line 186 of file BF2Scheduler.hh.
References latestCycle_.
Referenced by BFScheduleTD::operator()(), and BFPushAntidepDown::operator()().
bool BF2Scheduler::mustBeTrigger | ( | const MoveNode & | mn, |
const ProgramOperation & | po | ||
) |
Definition at line 1123 of file BF2Scheduler.cc.
References Operation::canSwap(), TTAProgram::Move::destination(), BasicBlockScheduler::findTrigger(), MoveNode::move(), Operation::numberOfInputs(), ProgramOperation::operation(), TTAProgram::Terminal::operationIndex(), and targetMachine_.
Referenced by countLoopInvariantValueUsages().
void BF2Scheduler::nodeAndCopyKilled | ( | MoveNode & | mn | ) |
Definition at line 803 of file BF2Scheduler.cc.
References dreRemovedMoves_.
Referenced by BFDREEarly::operator()(), BFDRELate::operator()(), BFPostpassDRE::operator()(), BFShareOperandWithScheduled::operator()(), and BFShareOperandLate::operator()().
void BF2Scheduler::nodeKilled | ( | MoveNode & | mn | ) |
Definition at line 807 of file BF2Scheduler.cc.
References removedMoves_.
Referenced by BFDropPreShared::operator()(), BFKillNode::operator()(), BFPostpassLoopDRE::operator()(), and BFDRELoop::operator()().
void BF2Scheduler::nodeResurrected | ( | MoveNode & | mn | ) |
Definition at line 811 of file BF2Scheduler.cc.
References dreRemovedMoves_, and removedMoves_.
Referenced by BFShareOperandWithScheduled::operator()(), BFShareOperandLate::revert(), BFDropPreShared::undoOnlyMe(), BFKillNode::undoOnlyMe(), BFPostpassLoopDRE::undoOnlyMe(), and BFShareOperandWithScheduled::undoOnlyMe().
std::set< const TTAMachine::RegisterFile *, TTAMachine::MachinePart::Comparator > BF2Scheduler::possibleTempRegRFs | ( | const MoveNode & | mn, |
bool | tempRegAfter, | ||
const TTAMachine::RegisterFile * | forbiddenRF = nullptr |
||
) |
Find possible temp reg RF's for connectivity of given register.
This only gives the register files that for the "next register in the temp reg chain", not the whole chain
Definition at line 899 of file BF2Scheduler.cc.
References __func__, MachineConnectivityCheck::canAnyPortWriteToDestination(), MachineConnectivityCheck::canSourceWriteToAnyDestinationPort(), InterPassData::datum(), MachineConnectivityCheck::findReadPorts(), MachineConnectivityCheck::findWritePorts(), TTAProgram::MoveGuard::guard(), TTAProgram::Move::guard(), SchedulerPass::interPassData(), MachineConnectivityCheck::isConnected(), TTAProgram::Move::isUnconditional(), MoveNode::move(), and MoveNode::toString().
Referenced by BFRegCopyAfter::splitMove(), and BFRegCopyBefore::splitMove().
|
private |
Definition at line 1283 of file BF2Scheduler.cc.
References NO_PORT, NOT_SHARED, preAllocateFunctionUnitsInner(), releasePortForOp(), and BF2Scheduler::PreLoopShareInfo::state_.
Referenced by allocateFunctionUnits(), preAllocateFunctionUnits(), and preAllocateFunctionUnitsInner().
|
private |
Definition at line 1405 of file BF2Scheduler.cc.
References assert, MoveNodeSet::at(), MoveNodeSet::count(), ddg(), MoveNode::destinationOperation(), TTAMachine::Port::name(), TTAMachine::Component::name(), NO_LOOP_INVARIANT, NO_PORT, NOT_SHARED, Operation::numberOfInputs(), TTAMachine::BaseFUPort::parentUnit(), TTAMachine::HWOperation::port(), preAllocateFunctionUnits(), preSharedOperandPorts_, SHARED, BF2Scheduler::PreLoopShareInfo::sharedMN_, BF2Scheduler::PreLoopShareInfo::sharedPort_, BF2Scheduler::PreLoopShareInfo::state_, MoveNode::toString(), and ProgramOperation::toString().
|
private |
Definition at line 1455 of file BF2Scheduler.cc.
References assert, MoveNodeSet::at(), MoveNodeSet::count(), TTAProgram::Terminal::equals(), isTrigger(), TTAMachine::FUPort::isTriggering(), MoveNode::move(), NO_PORT, NOT_SHARED, TTAMachine::HWOperation::port(), preSharedOperandPorts_, revertTopOpt(), TTAProgram::Move::source(), and swapToUntrigger().
|
private |
Definition at line 1364 of file BF2Scheduler.cc.
References TTAMachine::Machine::Navigator< ComponentType >::count(), TTAMachine::Machine::functionUnitNavigator(), TTAMachine::FunctionUnit::hasOperation(), TTAMachine::Machine::Navigator< ComponentType >::item(), TTAMachine::Component::name(), Operation::name(), NO_LOOP_INVARIANT, NO_PORT, NOT_SHARED, TTAMachine::FunctionUnit::operation(), preAllocateFunctionUnits(), SHARED, BF2Scheduler::PreLoopShareInfo::state_, and targetMachine().
Referenced by preAllocateFunctionUnits().
|
inline |
Definition at line 102 of file BF2Scheduler.hh.
References prologDDG_.
Referenced by BFOptimization::prologDDG().
|
inline |
Definition at line 104 of file BF2Scheduler.hh.
References prologRM_.
Referenced by handleLoopDDG(), and BFOptimization::prologRM().
|
private |
|
private |
Definition at line 1310 of file BF2Scheduler.cc.
References assert, TTAMachine::Machine::Navigator< ComponentType >::count(), TTAMachine::Machine::functionUnitNavigator(), TTAMachine::FunctionUnit::hasOperation(), TTAMachine::FUPort::isTriggering(), TTAMachine::Machine::Navigator< ComponentType >::item(), TTAMachine::Port::name(), TTAMachine::Component::name(), Operation::name(), Operation::numberOfInputs(), TTAMachine::FunctionUnit::operation(), TTAMachine::BaseFUPort::parentUnit(), TTAMachine::HWOperation::port(), preSharedOperandPorts_, and targetMachine().
Referenced by preAllocateFunctionUnits().
|
inline |
Definition at line 221 of file BF2Scheduler.hh.
References renamer_.
Referenced by BFRenameSource::operator()(), BFRenameLiveRange::operator()(), BFRenameLiveRange::renameLiveRange(), and BFRenameLiveRange::undoOnlyMe().
|
private |
Definition at line 1546 of file BF2Scheduler.cc.
References TTAProgram::ProgramAnnotation::ANN_CONN_CANDIDATE_UNIT_DST, TTAProgram::ProgramAnnotation::ANN_CONN_CANDIDATE_UNIT_SRC, TTAProgram::ProgramAnnotation::ANN_REJECTED_UNIT_DST, TTAProgram::ProgramAnnotation::ANN_REJECTED_UNIT_SRC, annotateAllInputs(), annotateAllOutputs(), assert, MoveNodeSet::at(), MoveNodeSet::count(), ddg(), ProgramOperation::inputNode(), isPreLoopSharedOperand(), TTAMachine::Component::name(), Operation::name(), Operation::numberOfInputs(), ProgramOperation::operation(), TTAMachine::BaseFUPort::parentUnit(), preSharedOperandPorts_, DataDependenceGraph::programOperation(), and DataDependenceGraph::programOperationCount().
Referenced by handleLoopDDG().
void BF2Scheduler::revertBBLiveRangeBookkeepingForDestination | ( | MoveNode * | mn | ) |
Definition at line 703 of file BF2Scheduler.cc.
References assert, BasicBlockNode::basicBlock(), ddg(), ddg_, TTAProgram::Move::destination(), eraseFromMoveNodeUseSet(), DataDependenceGraph::getBasicBlockNode(), TTAProgram::Terminal::index(), TTAProgram::Terminal::isGPR(), TTAProgram::BasicBlock::liveRangeData_, MoveNode::move(), LiveRangeData::regDefines_, LiveRangeData::regFirstDefines_, TTAProgram::Terminal::registerFile(), DisassemblyRegister::registerName(), MoveNode::toString(), and GraphBase< GraphNode, GraphEdge >::writeToDotFile().
void BF2Scheduler::revertBBLiveRangeBookkeepingForSource | ( | MoveNode * | mn | ) |
Definition at line 726 of file BF2Scheduler.cc.
References assert, BasicBlockNode::basicBlock(), ddg(), ddg_, eraseFromMoveNodeUseSet(), DataDependenceGraph::getBasicBlockNode(), TTAProgram::Terminal::index(), TTAProgram::Terminal::isGPR(), TTAProgram::BasicBlock::liveRangeData_, MoveNode::move(), LiveRangeData::regFirstUses_, TTAProgram::Terminal::registerFile(), DisassemblyRegister::registerName(), LiveRangeData::regLastUses_, TTAProgram::Move::source(), MoveNode::toString(), and GraphBase< GraphNode, GraphEdge >::writeToDotFile().
|
private |
Revert last optimization from the optimization stack.
Definition at line 1147 of file BF2Scheduler.cc.
References assert, scheduledStack_, and Reversible::undo().
Referenced by preAllocateFunctionUnits().
|
inline |
Definition at line 103 of file BF2Scheduler.hh.
References rm_.
Referenced by findBypassEdge(), handleDDG(), handleLoopDDG(), BFOptimization::rm(), and scheduleDDG().
void BF2Scheduler::scheduleDDG | ( | DataDependenceGraph & | ddg, |
SimpleResourceManager & | rm, | ||
const TTAMachine::Machine & | targetMachine | ||
) |
Definition at line 143 of file BF2Scheduler.cc.
References __func__, assert, BUMoveNodeSelector::candidates(), BFOptimization::clearPrologMoves(), ddg(), ddg_, BoostGraph< GraphNode, GraphEdge >::dropNode(), LLVMTCECmdLineOptions::dumpDDGsDot(), LLVMTCECmdLineOptions::dumpDDGsXML(), duplicator_, BoostGraph< GraphNode, GraphEdge >::hasNode(), RegisterRenamer::initialize(), isDeadResult(), MoveNode::isScheduled(), jumpGuardWrite_, latestCycle_, BoostGraph< GraphNode, GraphEdge >::name(), MoveNodeGroup::node(), MoveNodeGroup::nodeCount(), BoostGraph< GraphNode, GraphEdge >::nodeCount(), options_, preLoopSharedOperands_, prologRM_, renamer_, rm(), rm_, DataDependenceGraph::scheduledNodeCount(), scheduleFrontFromMove(), selector(), selector_, DataDependenceGraph::setMachine(), SimpleResourceManager::setMaxCycle(), RegisterRenamer::setSelector(), targetMachine(), targetMachine_, MoveNode::toString(), GraphBase< GraphNode, GraphEdge >::writeToDotFile(), and DataDependenceGraph::writeToXMLFile().
Referenced by handleDDG().
|
private |
Definition at line 1038 of file BF2Scheduler.cc.
References currentFront_, latestCycle_, and scheduledStack_.
Referenced by handleLoopDDG(), and scheduleDDG().
|
private |
|
inline |
Definition at line 105 of file BF2Scheduler.hh.
References selector_.
Referenced by handleLoopDDG(), scheduleDDG(), and BFOptimization::selector().
|
inline |
Definition at line 202 of file BF2Scheduler.hh.
References llResult_.
|
overridevirtual |
A short description of the pass, usually the optimization name, such as "basic block scheduler".
Implements SchedulerPass.
Definition at line 887 of file BF2Scheduler.cc.
|
private |
Definition at line 1099 of file BF2Scheduler.cc.
References MoveNodeSet::at(), Operation::canSwap(), MoveNodeSet::count(), Operation::numberOfInputs(), and scheduledStack_.
Referenced by preAllocateFunctionUnits().
|
inline |
Definition at line 127 of file BF2Scheduler.hh.
References targetMachine_.
Referenced by handleDDG(), handleLoopDDG(), BFEarlyBypasser::operator()(), preAllocateFunctionUnitsInner(), releasePortForOp(), scheduleDDG(), and BFOptimization::targetMachine().
|
inline |
Definition at line 184 of file BF2Scheduler.hh.
References tripCount_.
Referenced by handleLoopDDG().
|
private |
|
private |
Definition at line 1603 of file BF2Scheduler.cc.
References TTAProgram::ProgramAnnotation::ANN_CONN_CANDIDATE_UNIT_DST, TTAProgram::ProgramAnnotation::ANN_CONN_CANDIDATE_UNIT_SRC, TTAProgram::ProgramAnnotation::ANN_REJECTED_UNIT_DST, TTAProgram::ProgramAnnotation::ANN_REJECTED_UNIT_SRC, ddg(), TTAProgram::AnnotatedInstructionElement::hasAnnotations(), MoveNode::move(), BoostGraph< GraphNode, GraphEdge >::node(), BoostGraph< GraphNode, GraphEdge >::nodeCount(), and TTAProgram::AnnotatedInstructionElement::removeAnnotations().
Referenced by handleLoopDDG().
void BF2Scheduler::unschedule | ( | ) |
Definition at line 780 of file BF2Scheduler.cc.
References currentFront_, scheduledStack_, and Reversible::undo().
Referenced by handleDDG(), and handleLoopDDG().
|
staticprivate |
Definition at line 696 of file BF2Scheduler.cc.
|
private |
Nodes that may become ready due bypass removing antideps.
Definition at line 244 of file BF2Scheduler.hh.
|
private |
Definition at line 230 of file BF2Scheduler.hh.
Referenced by currentFront(), deletingNode(), scheduleFrontFromMove(), and unschedule().
|
private |
Definition at line 297 of file BF2Scheduler.hh.
Referenced by ddg(), finalizeSchedule(), findBypassEdge(), findJump(), handleDDG(), handleLoopDDG(), hasUnscheduledSuccessors(), revertBBLiveRangeBookkeepingForDestination(), revertBBLiveRangeBookkeepingForSource(), and scheduleDDG().
|
private |
Definition at line 236 of file BF2Scheduler.hh.
Referenced by finalizeSchedule(), isDeadResult(), nodeAndCopyKilled(), and nodeResurrected().
|
private |
Definition at line 315 of file BF2Scheduler.hh.
Referenced by duplicator(), handleDDG(), handleLoopDDG(), and scheduleDDG().
Definition at line 317 of file BF2Scheduler.hh.
Referenced by allocateFunctionUnits(), and countLoopInvariantValueUsages().
|
private |
Definition at line 318 of file BF2Scheduler.hh.
Referenced by allocateFunctionUnits(), and countLoopInvariantValueUsages().
|
private |
Definition at line 312 of file BF2Scheduler.hh.
Referenced by guardWriteNode(), handleLoopDDG(), and scheduleDDG().
|
private |
Definition at line 311 of file BF2Scheduler.hh.
Referenced by findJump(), handleLoopDDG(), jumpGuard(), and jumpNode().
|
private |
Definition at line 309 of file BF2Scheduler.hh.
Referenced by BF2Scheduler(), and killDeadResults().
|
private |
Definition at line 302 of file BF2Scheduler.hh.
Referenced by handleLoopDDG(), maximumAllowedCycle(), scheduleDDG(), and scheduleFrontFromMove().
|
private |
Definition at line 313 of file BF2Scheduler.hh.
Referenced by getLoopAnalysis(), loopLimitNode(), and setLoopLimits().
|
private |
Definition at line 327 of file BF2Scheduler.hh.
Referenced by handleDDG(), and handleLoopDDG().
|
private |
Definition at line 240 of file BF2Scheduler.hh.
|
private |
Definition at line 306 of file BF2Scheduler.hh.
Referenced by BF2Scheduler(), handleLoopDDG(), and scheduleDDG().
|
private |
Definition at line 246 of file BF2Scheduler.hh.
|
private |
Definition at line 325 of file BF2Scheduler.hh.
Referenced by allocateFunctionUnits(), handleLoopDDG(), isPreLoopSharedOperand(), and scheduleDDG().
|
private |
Definition at line 321 of file BF2Scheduler.hh.
Referenced by allocateFunctionUnits(), handleLoopDDG(), preAllocateFunctionUnits(), releasePortForOp(), and reservePreallocatedFUs().
|
static |
Definition at line 209 of file BF2Scheduler.hh.
Referenced by LoopPrologAndEpilogBuilder::addEpilogFromRM(), LoopPrologAndEpilogBuilder::addPrologFromRM(), BFOptimization::assignCopyToPrologEpilog(), BFOptimization::canAssign(), BFSchedulePreLoopShared::operator()(), BFPostpassLoopDRE::operator()(), BFDRELoop::operator()(), BFOptimization::rmEC(), and BFOptimization::rmLC().
|
private |
Definition at line 298 of file BF2Scheduler.hh.
Referenced by handleLoopDDG(), and prologDDG().
|
private |
Definition at line 300 of file BF2Scheduler.hh.
Referenced by finalizeSchedule(), handleLoopDDG(), prologRM(), and scheduleDDG().
|
private |
Definition at line 238 of file BF2Scheduler.hh.
Referenced by finalizeSchedule(), isDeadResult(), nodeKilled(), and nodeResurrected().
|
private |
Definition at line 307 of file BF2Scheduler.hh.
Referenced by handleLoopDDG(), renamer(), and scheduleDDG().
|
private |
Definition at line 299 of file BF2Scheduler.hh.
Referenced by handleDDG(), handleLoopDDG(), rm(), and scheduleDDG().
|
private |
Definition at line 233 of file BF2Scheduler.hh.
Referenced by bypassNodes(), finalizeSchedule(), handleLoopDDG(), revertTopOpt(), scheduleFrontFromMove(), swapToUntrigger(), unschedule(), and ~BF2Scheduler().
|
private |
Definition at line 305 of file BF2Scheduler.hh.
Referenced by handleLoopDDG(), scheduleDDG(), and selector().
|
private |
Definition at line 241 of file BF2Scheduler.hh.
|
private |
Definition at line 304 of file BF2Scheduler.hh.
Referenced by handleLoopDDG(), mustBeTrigger(), scheduleDDG(), and targetMachine().
|
private |
Definition at line 310 of file BF2Scheduler.hh.
Referenced by handleLoopDDG(), and tripCount().