Go to the documentation of this file.
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: "
DataDependenceGraph::NodeSet illegalBypassSources_
virtual Node & tailNode(const Edge &edge) const
std::string toString() const
virtual Node & headNode(const Edge &edge) const
std::set< MoveNode *, typename MoveNode ::Comparator > NodeSet
const TTAMachine::Machine & targetMachine() const
bool isDeadResult(MoveNode &mn) const
ProgramOperation & sourceOperation() const
DataDependenceEdge * findBypassEdge(const MoveNode &mn)
static bool canBypass(const MoveNode &src, const MoveNode &user, const TTAMachine::Machine &targetMachine)
int bypassSourceLatestCycle(MoveNode &bypassSrc, MoveNode &bypassDst)
TTAMachine::FUPort * isPreLoopSharedOperand(MoveNode &mn) const
std::set< DataDependenceEdge *, typename DataDependenceEdge ::Comparator > EdgeSet
static CmdLineOptions * cmdLineOptions()
bool isSourceOperation() const
DataDependenceGraph & ddg()
int inputMoveCount() const
int outputMoveCount() const
virtual EdgeSet outEdges(const Node &node) const
BF2ScheduleFront * currentFront()
bool isInFrontier() const
bool runPreChild(Reversible *preChild)
virtual int bypassDistance() const
MoveNode & outputMove(int index) const
BFEarlyBypasser(BF2Scheduler &sched, MoveNode &mn)
MoveNode & inputMove(int index) const