Go to the documentation of this file.
51 std::cerr <<
"incoming lc -1 on pushmoveup!" << std::endl;
55 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
56 std::cerr <<
"\t\t|TCannot reschedule control flow move!" << std::endl;
62 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
63 std::cerr <<
"\t\t|TCannot reschedule guard write move!" << std::endl;
81 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
82 std::cerr <<
"ddg latest cycle -1 in pushmoveup2 of:"
89 int lc = std::min(
lc_, ddgLC);
102 unschedOperands.insert(&operand);
116 unschedResults.insert(&res);
118 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
120 std::cerr <<
"res which is not scheduled:" << res.
toString()
135 sched_, res, myLC,
false,
false,
false))) {
153 sched_, *trigger, lc,
false,
false,
false))) {
162 if (&operand != trigger) {
166 sched_, operand, lc,
false,
false,
false))) {
183 for (
auto e: inEdges) {
184 if (e->isBackEdge()) {
std::string toString() const
std::set< MoveNode *, typename MoveNode ::Comparator > NodeSet
MoveNode * triggeringMove() const
ProgramOperation & sourceOperation() const
#define assert(condition)
EdgeSet operationInEdges(const MoveNode &node) const
bool isControlFlowMove() const
bool isSourceOperation() const
DataDependenceGraph & ddg()
int inputMoveCount() const
BFUnscheduleMove(BF2Scheduler &sched, MoveNode &mn)
int outputMoveCount() const
bool isLoopBypass(MoveNode &mn)
int earliestCycle(const MoveNode &moveNode, unsigned int ii=UINT_MAX, bool ignoreRegWaRs=false, bool ignoreRegWaWs=false, bool ignoreGuards=false, bool ignoreFUDeps=false, bool ignoreSameOperationEdges=false, bool assumeBypassing=false) const
void unscheduleOriginal()
TTAProgram::Move & move()
MoveNode * guardWriteNode()
bool runPostChild(Reversible *preChild)
MoveNode & outputMove(int index) const
MoveNode & inputMove(int index) const
int latestCycle(const MoveNode &moveNode, unsigned int ii=UINT_MAX, bool ignoreRegAntideps=false, bool ignoreUnscheduledSuccessors=true, bool ignoreGuards=false, bool ignoreFUDeps=false, bool ignoreSameOperationEdges=false) const