Go to the documentation of this file.
52 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
53 std::cerr <<
"\t\t\t\tCannot loop-dre due too early result cycle"
71 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
72 std::cerr <<
"\t\t\t\tAssigned loop-bypassed dead result to"
73 <<
" epilog, cycle:" << prologCycle << std::endl;
81 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
82 std::cerr <<
"\t\t\t\tProlog cycle assign fail for loop-dre: "
84 <<
" prolog cycle: " << prologCycle << std::endl;
109 for (
auto edge: edges) {
MoveNodeDuplicator & duplicator() const
std::string toString() const
DataDependenceGraph::EdgeSet createdEdges_
bool killDeadResults() const
virtual void assign(int cycle, MoveNode &node, const TTAMachine::Bus *bus=NULL, const TTAMachine::FunctionUnit *srcFU=NULL, const TTAMachine::FunctionUnit *dstFU=NULL, int immWriteCycle=-1, const TTAMachine::ImmediateUnit *immu=nullptr, int immRegIndex=-1) override
virtual void unassign(MoveNode &node) override
virtual void dropNode(Node &node)
const TTAMachine::Machine & targetMachine() const
std::pair< MoveNode *, bool > duplicateMoveNode(MoveNode &mn, bool addToDDG, bool ignoreSameBBBackEdges)
#define assert(condition)
SimpleResourceManager * prologRM() const
std::set< DataDependenceEdge *, typename DataDependenceEdge ::Comparator > EdgeSet
void disposeMoveNode(MoveNode *newMN)
DataDependenceGraph & ddg()
static std::map< MoveNode *, MoveNode *, MoveNode::Comparator > prologMoves_
static const int PROLOG_CYCLE_BIAS
virtual EdgeSet outEdges(const Node &node) const
void nodeKilled(MoveNode &mn)
EdgeSet copyDepsOver(MoveNode &node, bool anti, bool raw)
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)