|
static void | clearPrologMoves () |
|
static MoveNode * | getSisterTrigger (const MoveNode &mn, const TTAMachine::Machine &mach) |
|
void | returnOriginal () |
|
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) |
|
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) |
|
std::stack< Reversible * > | midChildren_ |
|
MoveNode & | mn_ |
|
int | oldCycle_ |
|
const TTAMachine::Bus * | oldBus_ |
|
const TTAMachine::Bus * | prologBus_ |
|
int | oldImmWriteCycle_ |
|
int | prologImmWriteCycle_ |
|
const TTAMachine::FunctionUnit * | dstFU_ |
|
const TTAMachine::FunctionUnit * | srcFU_ |
|
const TTAMachine::ImmediateUnit * | immu_ |
|
int | immRegIndex_ |
|
BF2Scheduler & | sched_ |
|
std::stack< Reversible * > | preChildren_ |
|
std::stack< Reversible * > | postChildren_ |
|
static int | recurseCounter_ = 0 |
|
static std::map< MoveNode *, MoveNode *, MoveNode::Comparator > | prologMoves_ |
|
Definition at line 48 of file BFPushMoveUp.hh.
bool BFPushMoveUp::operator() |
( |
| ) |
|
|
virtual |
This performs the operation. Returns true if success, false if fail.
Implements Reversible.
Definition at line 47 of file BFPushMoveUp.cc.
49 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
50 static int dotCount = 0;
56 std::cerr <<
"incoming lc -1 on pushmoveup!" << std::endl;
60 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
61 std::cerr <<
"\t\t|TCannot reschedule control flow move!" << std::endl;
67 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
68 std::cerr <<
"\t\t|TCannot reschedule guard write move!" << std::endl;
73 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
79 std::cerr <<
"\t\tPushing move up: " <<
mn_.
toString() <<
" to cycle: "
103 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
104 std::cerr <<
"ddg latest cycle -1 in pushmoveup of:"
110 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
114 std::cerr <<
"\t\tPushing move: " <<
mn_.
toString()
115 <<
" up, ddgLC now: " << ddgLC << std::endl;
117 int lc = std::min(
lc_, ddgLC);
121 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
125 std::cerr <<
"\t\tMay need to push predecessors.." << std::endl;
132 std::cerr <<
"\t\tDDG earliest cycle still too early: "
133 << ddgEC << std::endl;
137 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
141 std::cerr <<
"\t\tPredecessors pushed ok!" << std::endl;
145 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
150 std::cerr <<
"\t\tDDG ec too late, Need to recursively push more,"
151 <<
" which failed" << std::endl;
156 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
163 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
168 <<
" after pushing preds: " << ddgLC << std::endl;
172 if (rmlc == -1 || rmlc < ddgEC) {
174 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
175 std::cerr <<
"\t\tlc too small, cannot push again" << std::endl;
180 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
185 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
189 std::cerr <<
"\t\trmlc problem: " <<rmlc
190 <<
"ddgec: " << ddgEC << std::endl;
192 dotName <<
mn_.
nodeID() <<
"_" <<
ii() <<
"_" << dotCount++ <<
".dot";
193 std::cerr <<
"Writing dot: " << dotName << std::endl;
199 std::cerr <<
"\t\tRM lc -1 when pushing move up, failing:"
205 std::cerr <<
"\t\tddgLC is: " << ddgLC << std::endl;
208 std::cerr <<
"Trying to push preds one more up." << std::endl;
218 std::cerr <<
"\t\tDDG earliest cycle STILL too early: "
219 << ddgEC << std::endl;
225 if (rmlc == -1 || rmlc < ddgEC) {
226 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
227 std::cerr <<
"still failing, now giving up" << std::endl;
239 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
240 std::cerr <<
"\t\tUndoing recursive pushs of predecessors"
245 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
249 std::cerr <<
"\t\tReturning the original" << std::endl;
253 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
258 std::cerr <<
"\t\treturned original: "<<
mn_.
toString()
267 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
271 std::cerr <<
"\tPushed move successfully: " <<
mn_.
toString()
References assert, BFOptimization::assign(), BFPushMoveUp(), MoveNode::cycle(), BFOptimization::ddg(), TTAProgram::Move::destination(), MoveNode::destinationOperation(), DataDependenceGraph::earliestCycle(), BF2Scheduler::guardWriteNode(), BFOptimization::ii(), ProgramOperation::inputMove(), ProgramOperation::inputMoveCount(), TTAProgram::Move::isControlFlowMove(), MoveNode::isDestinationOperation(), MoveNode::isScheduled(), TTAProgram::Terminal::isTriggering(), DataDependenceGraph::latestCycle(), lc_, BFRescheduleMove::midChildren_, BFUnscheduleMove::mn_, MoveNode::move(), GraphNode::nodeID(), Reversible::preChildren_, BFUnscheduleMove::recurseCounter_, BFUnscheduleMove::returnOriginal(), BFOptimization::rmLC(), Reversible::runPreChild(), BFOptimization::sched_, MoveNode::toString(), Reversible::undoAndRemoveChildren(), BFUnscheduleMove::unscheduleOriginal(), and GraphBase< GraphNode, GraphEdge >::writeToDotFile().