53 if (bypassEdge == NULL) {
59#ifdef DEBUG_BUBBLEFISH_SCHEDULER
60 std::cerr <<
"Bypass source illegal: " << src.
toString() << std::endl;
75 if (bypassSourceLC == -1) {
103 nodes.insert(&inputMove);
110 nodes.insert(&outputMove);
114 nodes.insert(&bypassSrc);
117 for (
auto mn : nodes) {
119 for (
auto e : edges) {
122 lc = std::min(lc, head.
cycle());
126 e->isBackEdge() || nodes.count(&head)) {
129#ifdef DEBUG_BUBBLEFISH_SCHEDULER
130 std::cerr <<
"\t\t\t\tEdge almost preventing bypass from: "
132 <<
": " << e->toString() <<
" dst: "
static CmdLineOptions * cmdLineOptions()
DataDependenceGraph::NodeSet illegalBypassSources_
bool isDeadResult(MoveNode &mn) const
TTAMachine::FUPort * isPreLoopSharedOperand(MoveNode &mn) const
const TTAMachine::Machine & targetMachine() const
DataDependenceEdge * findBypassEdge(const MoveNode &mn)
BF2ScheduleFront * currentFront()
BFEarlyBypasser(BF2Scheduler &sched, MoveNode &mn)
int bypassSourceLatestCycle(MoveNode &bypassSrc, MoveNode &bypassDst)
DataDependenceGraph & ddg()
virtual Node & headNode(const Edge &edge) const
virtual EdgeSet outEdges(const Node &node) const
virtual Node & tailNode(const Edge &edge) const
std::set< GraphNode *, typename GraphNode::Comparator > NodeSet
std::set< GraphEdge *, typename GraphEdge::Comparator > EdgeSet
static bool canBypass(const MoveNode &src, const MoveNode &user, const TTAMachine::Machine &targetMachine)
bool isInFrontier() const
ProgramOperation & sourceOperation() const
std::string toString() const
bool isSourceOperation() const
int outputMoveCount() const
int inputMoveCount() const
MoveNode & inputMove(int index) const
MoveNode & outputMove(int index) const
bool runPreChild(Reversible *preChild)
virtual int bypassDistance() const