OpenASIP
2.0
|
#include <BFOptimization.hh>
Public Member Functions | |
BFOptimization (BF2Scheduler &sched) | |
virtual bool | isFinishFront () |
virtual void | mightBeReady (MoveNode &mn) |
Public Member Functions inherited from Reversible | |
virtual bool | operator() ()=0 |
virtual void | undo () |
virtual | ~Reversible () |
void | deleteChildren (std::stack< Reversible * > &children) |
int | id () |
Reversible () | |
Static Public Member Functions | |
static void | clearPrologMoves () |
static MoveNode * | getSisterTrigger (const MoveNode &mn, const TTAMachine::Machine &mach) |
Protected Member Functions | |
DataDependenceGraph & | ddg () |
DataDependenceGraph * | rootDDG () |
const DataDependenceGraph & | ddg () const |
DataDependenceGraph * | prologDDG () |
SimpleResourceManager & | rm () const |
SimpleResourceManager * | prologRM () const |
BUMoveNodeSelector & | selector () |
const TTAMachine::Machine & | targetMachine () const |
unsigned int | ii () const |
MoveNodeDuplicator & | duplicator () const |
virtual bool | assign (int cycle, MoveNode &, const TTAMachine::Bus *bus=nullptr, const TTAMachine::FunctionUnit *srcFU_=nullptr, const TTAMachine::FunctionUnit *dstFU=nullptr, const TTAMachine::Bus *prologBus=nullptr, int immWriteCycle=-1, int prologImmWriteCycle=-1, const TTAMachine::ImmediateUnit *immu=nullptr, int immRegIndex=-1, bool ignoreGuardWriteCycle=false) |
virtual void | unassign (MoveNode &mn, bool disposePrologCopy=true) |
virtual int | rmEC (int cycle, MoveNode &mn, const TTAMachine::Bus *bus=nullptr, const TTAMachine::FunctionUnit *srcFU=nullptr, const TTAMachine::FunctionUnit *dstFU=nullptr, const TTAMachine::Bus *prologBus=nullptr, int immWriteCycle=-1, int prologImmWriteCycle=-1, const TTAMachine::ImmediateUnit *immu=nullptr, int immRegIndex=-1) |
virtual int | rmLC (int cycle, MoveNode &mn, const TTAMachine::Bus *bus=nullptr, const TTAMachine::FunctionUnit *srcFU=nullptr, const TTAMachine::FunctionUnit *dstFU=nullptr, const TTAMachine::Bus *prologBus=nullptr, int immWriteCycle=-1, int prologImmWriteCycle=-1, const TTAMachine::ImmediateUnit *immu=nullptr, int immRegIndex=-1) |
virtual bool | canAssign (int cycle, MoveNode &mn, const TTAMachine::Bus *bus=nullptr, const TTAMachine::FunctionUnit *srcFU=nullptr, const TTAMachine::FunctionUnit *dstFU=nullptr, const TTAMachine::Bus *prologBus=nullptr, int immWriteCycle=-1, int prologImmWriteCycle=-1, const TTAMachine::ImmediateUnit *immu=nullptr, int immRegIndex=-1, bool ignoreGWN=false) |
bool | putAlsoToPrologEpilog (int cycle, MoveNode &mn) |
void | setPrologSrcFUAnno (MoveNode &prologMN, MoveNode &loopMN) |
void | setPrologDstFUAnno (MoveNode &prologMN, MoveNode &loopMN) |
void | setJumpGuard (MoveNode &mn) |
void | unsetJumpGuard (MoveNode &mn) |
bool | needJumpGuard (const MoveNode &mn, int cycle) |
int | jumpGuardAvailableCycle (const MoveNode &mn) |
bool | canBeSpeculated (const Operation &op) |
bool | canBeSpeculated (const MoveNode &mn) |
bool | usePrologMove (const MoveNode &mn) |
bool | canBeScheduled (const MoveNode &mn) |
const TTAMachine::RegisterFile * | RFReadPortCountPreventsScheduling (const MoveNode &mn) |
bool | immCountPreventsScheduling (const MoveNode &mn) |
Protected Member Functions inherited from Reversible | |
bool | runPreChild (Reversible *preChild) |
bool | runPostChild (Reversible *preChild) |
bool | runChild (std::stack< Reversible * > &children, Reversible *child) |
bool | runChild (Reversible *child, bool pre) |
void | undoAndRemovePreChildren () |
void | undoAndRemovePostChildren () |
void | undoAndRemoveChildren (std::stack< Reversible * > &children) |
virtual void | undoOnlyMe () |
Protected Attributes | |
BF2Scheduler & | sched_ |
Protected Attributes inherited from Reversible | |
std::stack< Reversible * > | preChildren_ |
std::stack< Reversible * > | postChildren_ |
Static Protected Attributes | |
static std::map< MoveNode *, MoveNode *, MoveNode::Comparator > | prologMoves_ |
Private Member Functions | |
void | unsetJumpGuardIfNeeded (MoveNode &mn, int cycle) |
void | assignCopyToPrologEpilog (int cycle, MoveNode &mn, MoveNode &loopMN, const TTAMachine::Bus *prologBus, int prologImmWriteCycle) |
void | unassignCopyFromPrologEpilog (MoveNode &mh, bool disposePrologCopy=true) |
std::pair< MoveNode *, bool > | createCopyForPrologEpilog (MoveNode &mn) |
bool | addJumpGuardIfNeeded (MoveNode &mn, int cycle, bool ignoreGuardWriteCycle=false) |
void | setPrologFUAnnos (MoveNode &prologMN, MoveNode &loopMN) |
bool | hasAmbiguousResources (MoveNode &mn) const |
const TTAMachine::FunctionUnit * | sourceFU (const MoveNode &mn) |
const TTAMachine::FunctionUnit * | destinationFU (const MoveNode &mn) |
const TTAMachine::FunctionUnit * | fuOfTerminal (const TTAProgram::Terminal &t) |
void | checkPrologDDG (MoveNode &prologEpilogMN) |
Definition at line 73 of file BFOptimization.hh.
|
inline |
Definition at line 75 of file BFOptimization.hh.
|
private |
Returns false if needs guard but guard not available yet
Definition at line 889 of file BFOptimization.cc.
References TTAProgram::Move::isUnconditional(), jumpGuardAvailableCycle(), MoveNode::move(), needJumpGuard(), and setJumpGuard().
Referenced by assign().
|
protectedvirtual |
Definition at line 103 of file BFOptimization.cc.
References addJumpGuardIfNeeded(), TTAProgram::AnnotatedInstructionElement::annotation(), TTAProgram::AnnotatedInstructionElement::annotationCount(), assert, SimpleResourceManager::assign(), assignCopyToPrologEpilog(), TTAProgram::Move::bus(), canAssign(), checkPrologDDG(), createCopyForPrologEpilog(), ddg(), MoveNode::destinationOperation(), TTAProgram::ProgramAnnotation::id(), ii(), MoveNode::isDestinationOperation(), MoveNode::isSourceOperation(), MoveNode::move(), TTAMachine::Component::name(), rm(), MoveNode::sourceOperation(), TTAProgram::ProgramAnnotation::stringValue(), MoveNode::toString(), ProgramOperation::toString(), usePrologMove(), and GraphBase< GraphNode, GraphEdge >::writeToDotFile().
Referenced by BFLateBypassGuard::operator()(), BFShareOperandWithScheduled::operator()(), BFScheduleTD::operator()(), BFLateBypass::operator()(), BFPushMoveUp::operator()(), BFPushAntidepDown::operator()(), BFScheduleExact::operator()(), BFSchedule::operator()(), BFScheduleBU::operator()(), BFShareOperandLate::operator()(), BFUnscheduleMove::returnOriginal(), BFShareOperandLate::revert(), BFLateBypassGuard::undoOnlyMe(), BFLateBypass::undoOnlyMe(), and BFShareOperandWithScheduled::undoOnlyMe().
|
private |
Definition at line 747 of file BFOptimization.cc.
References assert, SimpleResourceManager::assign(), TTAProgram::Move::bus(), canAssign(), ddg(), destinationFU(), MoveNode::destinationOperation(), TTAProgram::Terminal::immediateUnit(), TTAProgram::Terminal::index(), SimpleResourceManager::instruction(), MoveNode::isDestinationOperation(), MoveNode::isSourceImmediateRegister(), SimpleResourceManager::largestCycle(), MoveNode::move(), TTAMachine::Component::name(), BF2Scheduler::PROLOG_CYCLE_BIAS, prologDDG(), prologRM(), SimpleResourceManager::smallestCycle(), TTAProgram::Move::source(), sourceFU(), TTAProgram::Instruction::toString(), MoveNode::toString(), ProgramOperation::toString(), and GraphBase< GraphNode, GraphEdge >::writeToDotFile().
Referenced by assign().
|
protectedvirtual |
Definition at line 495 of file BFOptimization.cc.
References SimpleResourceManager::assign(), SimpleResourceManager::canAssign(), destinationFU(), MoveNode::destinationOperation(), MoveNodeDuplicator::disposeMoveNode(), MoveNodeDuplicator::duplicateMoveNode(), duplicator(), hasAmbiguousResources(), ii(), TTAProgram::Terminal::immediateUnit(), TTAProgram::Terminal::index(), MoveNode::isDestinationOperation(), MoveNode::isSourceImmediateRegister(), TTAProgram::Move::isUnconditional(), jumpGuardAvailableCycle(), MoveNode::move(), TTAMachine::Component::name(), needJumpGuard(), BF2Scheduler::PROLOG_CYCLE_BIAS, prologRM(), rm(), setJumpGuard(), TTAProgram::Move::source(), sourceFU(), MoveNode::toString(), ProgramOperation::toString(), SimpleResourceManager::unassign(), unsetJumpGuard(), unsetJumpGuardIfNeeded(), and usePrologMove().
Referenced by assign(), assignCopyToPrologEpilog(), BFLateBypassGuard::operator()(), BFAssignToBody::operator()(), BFPostpassLoopDRE::operator()(), BFDRELoop::operator()(), BFPushAntidepDown::operator()(), BFScheduleExact::operator()(), BFSchedule::operator()(), BFShareOperandLate::operator()(), BFUnscheduleFromBody::returnOriginal(), BFUnscheduleMove::returnOriginal(), BFShareOperandLate::revert(), BFLateBypassGuard::undoOnlyMe(), BFLateBypass::undoOnlyMe(), BFUnscheduleFromBody::unscheduleOriginal(), and BFUnscheduleMove::unscheduleOriginal().
|
protected |
Definition at line 1067 of file BFOptimization.cc.
References MachineConnectivityCheck::canTransportMove(), immCountPreventsScheduling(), machine, RFReadPortCountPreventsScheduling(), and rm().
Referenced by BFScheduleTD::operator()(), BFScheduleBU::operator()(), and BFScheduleExact::operator()().
|
protected |
Definition at line 865 of file BFOptimization.cc.
References canBeSpeculated(), MoveNode::destinationOperation(), getSisterTrigger(), MoveNode::isDestinationOperation(), ProgramOperation::operation(), and targetMachine().
|
protected |
Definition at line 857 of file BFOptimization.cc.
References Operation::affectsCount(), Operation::hasSideEffects(), Operation::isControlFlowOperation(), and Operation::usesMemory().
Referenced by canBeSpeculated(), needJumpGuard(), BFTryRemoveGuard::operator()(), and BFRemoveGuardsFromSuccs::operator()().
|
private |
Definition at line 1079 of file BFOptimization.cc.
References assert, MoveNode::cycle(), ddg(), BoostGraph< GraphNode, GraphEdge >::headNode(), BoostGraph< GraphNode, GraphEdge >::inEdges(), MoveNode::isScheduled(), BoostGraph< GraphNode, GraphEdge >::outEdges(), prologDDG(), BoostGraph< GraphNode, GraphEdge >::tailNode(), MoveNode::toString(), and GraphBase< GraphNode, GraphEdge >::writeToDotFile().
Referenced by assign().
|
static |
Definition at line 844 of file BFOptimization.cc.
References prologMoves_.
Referenced by BF2Scheduler::handleLoopDDG(), and BF2Scheduler::scheduleDDG().
Definition at line 674 of file BFOptimization.cc.
References MoveNodeDuplicator::duplicateMoveNode(), duplicator(), and prologMoves_.
Referenced by assign().
|
protected |
Definition at line 70 of file BFOptimization.cc.
References BF2Scheduler::ddg(), and sched_.
Referenced by BF2ScheduleFront::allNodesOfSameOperation(), assign(), assignCopyToPrologEpilog(), BFEarlyBypasser::bypassSourceLatestCycle(), BFRemoveLoopChecksAndJump::checkAliveMove(), BFRemoveLoopChecksAndJump::checkAlivePO(), checkPrologDDG(), BFRegCopy::createAntidepsForReg(), BFDRELoop::dreAllowed(), BFPostpassLoopDRE::dreAllowed(), BF2ScheduleFront::getMoveNodeFromFrontBU(), BFPushMoveUp2::isLoopBypass(), BFRenameLiveRange::notifySelector(), BFRemoveLoopChecksAndJump::operator()(), BFLateBypassGuard::operator()(), BFEarlyGuardBypass::operator()(), BFEarlyBypass::operator()(), BFDRELate::operator()(), BFDREEarly::operator()(), BFShareOperandsLate::operator()(), BFDropPreShared::operator()(), BFEarlyBypasser::operator()(), BFPostpassBypasser::operator()(), BFPostpassDRE::operator()(), BFRenameSource::operator()(), BFConnectNodes::operator()(), BFKillNode::operator()(), BFLateBypasses::operator()(), BFRemoveEdge::operator()(), BFPostpassBypass::operator()(), BFPostpassLoopDRE::operator()(), BFPushAntidepsDown::operator()(), BFPushDepsUp::operator()(), BFDRELoop::operator()(), BFRegCopy::operator()(), BFRemoveGuardsFromSuccs::operator()(), BFMergeAndKeepUser::operator()(), BFShareOperandWithScheduled::operator()(), BFScheduleTD::operator()(), BFShareOperands::operator()(), BFLateBypass::operator()(), BFPushMoveUp::operator()(), BFPushAntidepDown::operator()(), BFRescheduleSuccessorsClose::operator()(), BFRemoveGuard::operator()(), BFPushMoveUp2::operator()(), BFScheduleBU::operator()(), BFScheduleExact::operator()(), BFRemoveGuardFromSucc::operator()(), BFShareOperandLate::operator()(), BFRemoveLoopChecksAndJump::removeMoveFromQueue(), BFRemoveLoopChecksAndJump::removePoFromQueue(), BFRenameLiveRange::renameLiveRange(), BFUnscheduleFromBody::returnOriginal(), BFUnscheduleMove::returnOriginal(), BFShareOperandLate::revert(), rootDDG(), BF2ScheduleFront::scheduleFrontFromMove(), BFCopyRegWithOp::splitMove(), BFRegCopyAfter::splitMove(), BFRegCopyBefore::splitMove(), BFPostpassBypasser::tryBypassNode(), BFRegCopy::undoDDG(), BFRenameLiveRange::undoNewAntiDeps(), BFRemoveLoopChecksAndJump::undoOnlyMe(), BFEarlyGuardBypass::undoOnlyMe(), BFLateBypassGuard::undoOnlyMe(), BFDropPreShared::undoOnlyMe(), BFKillNode::undoOnlyMe(), BFConnectNodes::undoOnlyMe(), BFRemoveEdge::undoOnlyMe(), BFPostpassLoopDRE::undoOnlyMe(), BFLateBypass::undoOnlyMe(), BFShareOperandWithScheduled::undoOnlyMe(), BFRenameLiveRange::undoOnlyMe(), BFCopyRegWithOp::undoSplit(), BFUnscheduleFromBody::unscheduleOriginal(), BFUnscheduleMove::unscheduleOriginal(), unsetJumpGuard(), and BFMergeAndKeepUser::updateEdges().
|
protected |
|
private |
Definition at line 731 of file BFOptimization.cc.
References TTAProgram::Move::destination(), fuOfTerminal(), and MoveNode::move().
Referenced by assignCopyToPrologEpilog(), canAssign(), rmEC(), and rmLC().
|
protected |
Definition at line 87 of file BFOptimization.cc.
References BF2Scheduler::duplicator(), and sched_.
Referenced by canAssign(), createCopyForPrologEpilog(), BFSchedulePreLoopShared::operator()(), BFShareOperand::operator()(), BFPostpassLoopDRE::operator()(), BFDRELoop::operator()(), BFMergeAndKeepUser::operator()(), BFShareOperandWithScheduled::operator()(), BFLateBypass::operator()(), BFRemoveGuardFromSucc::operator()(), BFShareOperandLate::operator()(), rmEC(), rmLC(), unassignCopyFromPrologEpilog(), BFSchedulePreLoopShared::undoOnlyMe(), BFShareOperand::undoOnlyMe(), BFDRELoop::undoOnlyMe(), BFMergeAndKeepUser::undoOnlyMe(), BFRemoveGuardFromSucc::undoOnlyMe(), and BFUnscheduleMove::unscheduleOriginal().
|
private |
Definition at line 736 of file BFOptimization.cc.
References TTAProgram::Terminal::functionUnit(), and TTAProgram::Terminal::isFUPort().
Referenced by destinationFU(), and sourceFU().
|
static |
Definition at line 848 of file BFOptimization.cc.
References MoveNode::destinationOperation(), BasicBlockScheduler::findTrigger(), and MoveNode::isDestinationOperation().
Referenced by canBeSpeculated(), BF2ScheduleFront::getMoveNodeFromFrontBU(), BF2ScheduleFront::getPreferredLimits(), BFDropPreShared::operator()(), and BFShareOperands::operator()().
|
private |
Definition at line 957 of file BFOptimization.cc.
References TTAProgram::ProgramAnnotation::ANN_ALLOWED_UNIT_SRC, TTAProgram::ProgramAnnotation::ANN_CONN_CANDIDATE_UNIT_DST, TTAProgram::ProgramAnnotation::ANN_CONN_CANDIDATE_UNIT_SRC, TTAProgram::AnnotatedInstructionElement::annotationCount(), MoveNode::isDestinationOperation(), MoveNode::isSourceConstant(), MoveNode::isSourceOperation(), and MoveNode::move().
Referenced by canAssign(), rmEC(), and rmLC().
|
protected |
Definition at line 85 of file BFOptimization.cc.
Referenced by assign(), canAssign(), jumpGuardAvailableCycle(), needJumpGuard(), BFEarlyBypass::operator()(), BFEarlyBypasser::operator()(), BFShareOperandsLate::operator()(), BFRenameSource::operator()(), BFShareOperand::operator()(), BFPostpassBypass::operator()(), BFPushDepsUp::operator()(), BFDRELoop::operator()(), BFRemoveGuardsFromSuccs::operator()(), BFMergeAndKeepUser::operator()(), BFRenameLiveRange::operator()(), BFShareOperandWithScheduled::operator()(), BFLateBypass::operator()(), BFPushMoveUp::operator()(), BFScheduleTD::operator()(), BFShareOperands::operator()(), BFPushMoveUp2::operator()(), BFScheduleExact::operator()(), BFScheduleBU::operator()(), BFRemoveGuardFromSucc::operator()(), BFShareOperandLate::operator()(), rmEC(), rmLC(), BFRegCopyAfter::splitMove(), BFRegCopyBefore::splitMove(), BFShareOperand::undoOnlyMe(), BFRemoveGuardFromSucc::undoOnlyMe(), and BFUnscheduleMove::unscheduleOriginal().
|
protected |
Definition at line 979 of file BFOptimization.cc.
References MachineConnectivityCheck::canTransportImmediate(), TTAProgram::Move::destination(), MoveNode::destinationOperation(), TTAProgram::Terminal::functionUnit(), ProgramOperation::inputMove(), ProgramOperation::inputMoveCount(), MoveNode::isDestinationOperation(), TTAProgram::Terminal::isFUPort(), MoveNode::isScheduled(), MachineConnectivityCheck::maxLIMMCount(), MachineConnectivityCheck::maxSIMMCount(), MoveNode::move(), Operation::name(), TTAMachine::FunctionUnit::operation(), ProgramOperation::operation(), TTAMachine::HWOperation::port(), and targetMachine().
Referenced by canBeScheduled().
|
inlinevirtual |
Definition at line 81 of file BFOptimization.hh.
|
protected |
Definition at line 918 of file BFOptimization.cc.
References TTAMachine::Machine::controlUnit(), MoveNode::cycle(), TTAProgram::Move::destination(), TTAMachine::ControlUnit::globalGuardLatency(), BF2Scheduler::guardWriteNode(), ii(), MoveNode::isGuardOperation(), MoveNode::isScheduled(), BF2Scheduler::jumpNode(), MoveNode::move(), TTAProgram::Terminal::registerFile(), sched_, targetMachine(), and MoveNode::toString().
Referenced by addJumpGuardIfNeeded(), canAssign(), rmEC(), and rmLC().
|
virtual |
Reimplemented in BF2ScheduleFront.
Definition at line 953 of file BFOptimization.cc.
References BF2Scheduler::currentFront(), BF2ScheduleFront::mightBeReady(), and sched_.
Referenced by BFEarlyBypass::operator()(), BFDRELate::operator()(), BFDREEarly::operator()(), and BFLateBypass::operator()().
|
protected |
Definition at line 878 of file BFOptimization.cc.
References canBeSpeculated(), and ii().
Referenced by addJumpGuardIfNeeded(), canAssign(), rmEC(), rmLC(), and unsetJumpGuardIfNeeded().
|
protected |
Definition at line 75 of file BFOptimization.cc.
References BF2Scheduler::prologDDG(), and sched_.
Referenced by assignCopyToPrologEpilog(), checkPrologDDG(), and BFSchedulePreLoopShared::operator()().
|
protected |
Definition at line 77 of file BFOptimization.cc.
References BF2Scheduler::prologRM(), and sched_.
Referenced by assignCopyToPrologEpilog(), canAssign(), BFSchedulePreLoopShared::operator()(), BFPostpassLoopDRE::operator()(), BFDRELoop::operator()(), BFShareOperandWithScheduled::operator()(), BFShareOperandLate::operator()(), rmEC(), rmLC(), BF2ScheduleFront::tryToScheduleMoveOuter(), unassignCopyFromPrologEpilog(), BFSchedulePreLoopShared::undoOnlyMe(), BFPostpassLoopDRE::undoOnlyMe(), BFDRELoop::undoOnlyMe(), BFUnscheduleMove::unscheduleOriginal(), and usePrologMove().
|
protected |
|
protected |
Definition at line 1030 of file BFOptimization.cc.
References TTAProgram::Move::destination(), MoveNode::destinationOperation(), TTAProgram::Terminal::functionUnit(), ProgramOperation::inputMove(), ProgramOperation::inputMoveCount(), MoveNode::isDestinationOperation(), TTAProgram::Terminal::isFUPort(), MoveNode::isScheduled(), TTAMachine::RegisterFile::maxReads(), MoveNode::move(), Operation::name(), TTAMachine::FunctionUnit::operation(), ProgramOperation::operation(), TTAMachine::HWOperation::port(), TTAProgram::Terminal::registerFile(), and TTAProgram::Move::source().
Referenced by canBeScheduled(), and BFScheduleBU::operator()().
|
protected |
Definition at line 76 of file BFOptimization.cc.
References BF2Scheduler::rm(), and sched_.
Referenced by assign(), canAssign(), canBeScheduled(), BFSchedulePreLoopShared::operator()(), BFShareOperandsLate::operator()(), BFLateBypasses::operator()(), BFAssignToBody::operator()(), BFRemoveGuardsFromSuccs::operator()(), BFShareOperandWithScheduled::operator()(), BFShareOperandLate::operator()(), BFUnscheduleFromBody::returnOriginal(), BFUnscheduleMove::returnOriginal(), BFShareOperandLate::revert(), rmEC(), rmLC(), BF2ScheduleFront::scheduleFrontFromMove(), unassign(), BFAssignToBody::undoOnlyMe(), BFUnscheduleMove::unscheduleOriginal(), and BFUnscheduleFromBody::unscheduleOriginal().
|
protectedvirtual |
Definition at line 213 of file BFOptimization.cc.
References assert, SimpleResourceManager::assign(), SimpleResourceManager::canAssign(), destinationFU(), MoveNodeDuplicator::disposeMoveNode(), MoveNodeDuplicator::duplicateMoveNode(), duplicator(), SimpleResourceManager::earliestCycle(), hasAmbiguousResources(), ii(), TTAProgram::Terminal::immediateUnit(), TTAProgram::Terminal::index(), MoveNode::isSourceImmediateRegister(), TTAProgram::Move::isUnconditional(), jumpGuardAvailableCycle(), MoveNode::move(), needJumpGuard(), BF2Scheduler::PROLOG_CYCLE_BIAS, prologRM(), rm(), setJumpGuard(), TTAProgram::Move::source(), sourceFU(), MoveNode::toString(), SimpleResourceManager::unassign(), unsetJumpGuard(), and usePrologMove().
Referenced by BFScheduleTD::operator()(), and BFPushAntidepDown::operator()().
|
protectedvirtual |
Definition at line 363 of file BFOptimization.cc.
References SimpleResourceManager::assign(), SimpleResourceManager::canAssign(), destinationFU(), POMDisassembler::disassemble(), MoveNodeDuplicator::disposeMoveNode(), MoveNodeDuplicator::duplicateMoveNode(), duplicator(), hasAmbiguousResources(), ii(), TTAProgram::Terminal::immediateUnit(), TTAProgram::Terminal::index(), MoveNode::isSourceImmediateRegister(), TTAProgram::Move::isUnconditional(), jumpGuardAvailableCycle(), SimpleResourceManager::latestCycle(), MoveNode::move(), needJumpGuard(), BF2Scheduler::PROLOG_CYCLE_BIAS, prologRM(), rm(), setJumpGuard(), TTAProgram::Move::source(), sourceFU(), MoveNode::toString(), SimpleResourceManager::unassign(), unsetJumpGuard(), and usePrologMove().
Referenced by BFPushMoveUp::operator()(), BFPushAntidepDown::operator()(), and BFScheduleBU::operator()().
|
protected |
Definition at line 71 of file BFOptimization.cc.
References ddg(), and BoostGraph< GraphNode, GraphEdge >::rootGraph().
|
protected |
Definition at line 80 of file BFOptimization.cc.
References sched_, and BF2Scheduler::selector().
Referenced by BF2ScheduleFront::scheduleFrontFromMove().
|
protected |
Definition at line 612 of file BFOptimization.cc.
References assert, TTAProgram::MoveGuard::copy(), TTAProgram::MoveGuard::guard(), TTAProgram::Move::isUnconditional(), BF2Scheduler::jumpGuard(), MoveNode::move(), sched_, TTAProgram::Move::setGuard(), and MoveNode::toString().
Referenced by addJumpGuardIfNeeded(), canAssign(), rmEC(), and rmLC().
Definition at line 703 of file BFOptimization.cc.
References TTAProgram::ProgramAnnotation::ANN_CONN_CANDIDATE_UNIT_DST, assert, TTAProgram::Move::destination(), TTAProgram::Terminal::functionUnit(), MoveNode::isDestinationOperation(), TTAProgram::Terminal::isFUPort(), MoveNode::move(), TTAMachine::Component::name(), TTAProgram::AnnotatedInstructionElement::removeAnnotations(), TTAProgram::AnnotatedInstructionElement::setAnnotation(), and MoveNode::toString().
Referenced by setPrologFUAnnos().
Definition at line 742 of file BFOptimization.cc.
References setPrologDstFUAnno(), and setPrologSrcFUAnno().
Definition at line 681 of file BFOptimization.cc.
References TTAProgram::ProgramAnnotation::ANN_CONN_CANDIDATE_UNIT_SRC, assert, TTAProgram::Terminal::functionUnit(), TTAProgram::Terminal::isFUPort(), MoveNode::isSourceOperation(), MoveNode::move(), TTAMachine::Component::name(), TTAProgram::AnnotatedInstructionElement::removeAnnotations(), TTAProgram::AnnotatedInstructionElement::setAnnotation(), TTAProgram::Move::source(), and MoveNode::toString().
Referenced by setPrologFUAnnos().
|
private |
Definition at line 726 of file BFOptimization.cc.
References fuOfTerminal(), MoveNode::move(), and TTAProgram::Move::source().
Referenced by assignCopyToPrologEpilog(), canAssign(), rmEC(), and rmLC().
|
protected |
Definition at line 81 of file BFOptimization.cc.
References sched_, and BF2Scheduler::targetMachine().
Referenced by canBeSpeculated(), BF2ScheduleFront::getMoveNodeFromFrontBU(), BF2ScheduleFront::getPreferredLimits(), immCountPreventsScheduling(), jumpGuardAvailableCycle(), BFEarlyGuardBypass::operator()(), BFEarlyBypass::operator()(), BFDREEarly::operator()(), BFDRELate::operator()(), BFDropPreShared::operator()(), BFPostpassDRE::operator()(), BFTryRemoveGuard::operator()(), BFLateBypasses::operator()(), BFDRELoop::operator()(), BFShareOperands::operator()(), BFScheduleBU::operator()(), BFRenameLiveRange::renameLiveRange(), BF2ScheduleFront::scheduleFrontFromMove(), BFRenameLiveRange::setTerminals(), and BFCopyRegWithOp::splitMove().
|
protectedvirtual |
Definition at line 196 of file BFOptimization.cc.
References MoveNode::cycle(), rm(), MoveNode::toString(), SimpleResourceManager::unassign(), unassignCopyFromPrologEpilog(), unsetJumpGuardIfNeeded(), and usePrologMove().
Referenced by BFLateBypassGuard::operator()(), BFShareOperandWithScheduled::operator()(), BFLateBypass::operator()(), BFShareOperandLate::operator()(), BFScheduleMove::undoOnlyMe(), BFRescheduleMove::undoOnlyMe(), BFScheduleTD::undoOnlyMe(), BFScheduleExact::undoOnlyMe(), BFScheduleBU::undoOnlyMe(), BFShareOperandLate::undoOnlyMe(), and BFUnscheduleMove::unscheduleOriginal().
|
private |
Definition at line 810 of file BFOptimization.cc.
References MoveNodeDuplicator::disposeMoveNode(), duplicator(), prologMoves_, prologRM(), MoveNode::toString(), and SimpleResourceManager::unassign().
Referenced by unassign().
|
protected |
Definition at line 662 of file BFOptimization.cc.
References ddg(), MoveNode::move(), DataDependenceGraph::removeIncomingGuardEdges(), TTAProgram::Move::setGuard(), and MoveNode::toString().
Referenced by canAssign(), rmEC(), rmLC(), and unsetJumpGuardIfNeeded().
|
private |
Definition at line 912 of file BFOptimization.cc.
References needJumpGuard(), and unsetJumpGuard().
Referenced by canAssign(), and unassign().
|
protected |
Definition at line 91 of file BFOptimization.cc.
References TTAProgram::Move::isControlFlowMove(), TTAProgram::Move::isJump(), MoveNode::move(), and prologRM().
Referenced by assign(), canAssign(), rmEC(), rmLC(), and unassign().
|
staticprotected |
Definition at line 146 of file BFOptimization.hh.
Referenced by clearPrologMoves(), createCopyForPrologEpilog(), unassignCopyFromPrologEpilog(), and BFDRELoop::undoOnlyMe().
|
protected |
Definition at line 103 of file BFOptimization.hh.
Referenced by BFSwapOperands::BFSwapOperands(), BFEarlyBypasser::bypassSourceLatestCycle(), BFRegCopy::createAntidepsForReg(), ddg(), duplicator(), BF2ScheduleFront::findInducingBypassSource(), BF2ScheduleFront::findInducingBypassSourceFromOperation(), BF2ScheduleFront::getMoveNodeFromFrontBU(), jumpGuardAvailableCycle(), mightBeReady(), BFRenameLiveRange::notifySelector(), BFLateBypassGuard::operator()(), BFEarlyBypass::operator()(), BFDREEarly::operator()(), BFDRELate::operator()(), BFEarlyBypasser::operator()(), BFShareOperandsLate::operator()(), BFDropPreShared::operator()(), BFPostpassDRE::operator()(), BFTryRemoveGuard::operator()(), BFKillNode::operator()(), BFLateBypasses::operator()(), BFRenameSource::operator()(), BFPostpassBypass::operator()(), BFPostpassLoopDRE::operator()(), BFPushAntidepsDown::operator()(), BFPushDepsUp::operator()(), BFDRELoop::operator()(), BFRemoveGuardsFromSuccs::operator()(), BFRescheduleResultClose::operator()(), BFMergeAndKeepUser::operator()(), BFShareOperandWithScheduled::operator()(), BFRenameLiveRange::operator()(), BFShareOperands::operator()(), BFLateBypass::operator()(), BFPushMoveUp::operator()(), BFScheduleTD::operator()(), BFPushAntidepDown::operator()(), BFRescheduleSuccessorsClose::operator()(), BFRescheduleResultsClose::operator()(), BFRemoveGuard::operator()(), BFPushMoveUp2::operator()(), BFScheduleExact::operator()(), BFScheduleBU::operator()(), BFRemoveGuardFromSucc::operator()(), BFShareOperandLate::operator()(), BF2ScheduleFront::printFront(), prologDDG(), prologRM(), BFRenameLiveRange::renameLiveRange(), BFShareOperandLate::revert(), rm(), BF2ScheduleFront::scheduleFrontFromMove(), BF2ScheduleFront::scheduleMove(), selector(), setJumpGuard(), BFRegCopyAfter::splitMove(), BFRegCopyBefore::splitMove(), targetMachine(), BFPostpassBypasser::tryBypassNode(), BF2ScheduleFront::tryRevertEarlierBypass(), BF2ScheduleFront::tryToScheduleMoveOuter(), BFRegCopy::undoDDG(), BFEarlyBypass::undoOnlyMe(), BFDropPreShared::undoOnlyMe(), BFKillNode::undoOnlyMe(), BFPostpassLoopDRE::undoOnlyMe(), BFShareOperandWithScheduled::undoOnlyMe(), BFRenameLiveRange::undoOnlyMe(), and BFMergeAndKeepUser::updateEdges().