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()) {
#define assert(condition)
MoveNode * guardWriteNode()
DataDependenceGraph & ddg()
bool isLoopBypass(MoveNode &mn)
void unscheduleOriginal()
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
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
EdgeSet operationInEdges(const MoveNode &node) const
std::set< GraphNode *, typename GraphNode::Comparator > NodeSet
ProgramOperation & sourceOperation() const
std::string toString() const
TTAProgram::Move & move()
bool isSourceOperation() const
int outputMoveCount() const
int inputMoveCount() const
MoveNode * triggeringMove() const
MoveNode & inputMove(int index) const
MoveNode & outputMove(int index) const
bool runPostChild(Reversible *preChild)
bool isControlFlowMove() const