|
bool | splitMove (BasicBlockNode &bbn) |
|
void | undoSplit () |
|
MoveNode * | createRegCopy (bool after) |
|
DataDependenceGraph & | ddg () |
|
DataDependenceGraph * | rootDDG () |
|
const DataDependenceGraph & | ddg () const |
|
DataDependenceGraph * | prologDDG () |
|
SimpleResourceManager & | rm () const |
|
SimpleResourceManager * | prologRM () const |
|
BUMoveNodeSelector & | selector () |
|
const TTAMachine::Machine & | targetMachine () const |
|
unsigned int | ii () const |
|
MoveNodeDuplicator & | duplicator () const |
|
virtual bool | assign (int cycle, MoveNode &, 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 ignoreGuardWriteCycle=false) |
|
virtual void | unassign (MoveNode &mn, bool disposePrologCopy=true) |
|
virtual int | rmEC (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) |
|
virtual int | rmLC (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) |
|
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) |
|
bool | putAlsoToPrologEpilog (int cycle, MoveNode &mn) |
|
void | setPrologSrcFUAnno (MoveNode &prologMN, MoveNode &loopMN) |
|
void | setPrologDstFUAnno (MoveNode &prologMN, MoveNode &loopMN) |
|
void | setJumpGuard (MoveNode &mn) |
|
void | unsetJumpGuard (MoveNode &mn) |
|
bool | needJumpGuard (const MoveNode &mn, int cycle) |
|
int | jumpGuardAvailableCycle (const MoveNode &mn) |
|
bool | canBeSpeculated (const Operation &op) |
|
bool | canBeSpeculated (const MoveNode &mn) |
|
bool | usePrologMove (const MoveNode &mn) |
|
bool | canBeScheduled (const MoveNode &mn) |
|
const TTAMachine::RegisterFile * | RFReadPortCountPreventsScheduling (const MoveNode &mn) |
|
bool | immCountPreventsScheduling (const MoveNode &mn) |
|
bool | runPreChild (Reversible *preChild) |
|
bool | runPostChild (Reversible *preChild) |
|
bool | runChild (std::stack< Reversible * > &children, Reversible *child) |
|
bool | runChild (Reversible *child, bool pre) |
|
void | undoAndRemovePreChildren () |
|
void | undoAndRemovePostChildren () |
|
void | undoAndRemoveChildren (std::stack< Reversible * > &children) |
|
Definition at line 44 of file BFRegCopyBefore.hh.
Implements BFRegCopy.
Definition at line 51 of file BFRegCopyBefore.cc.
51 {
52
56
57
58 if (rfs.empty()) {
59 return false;
60 }
61
63
64 int lastRegisterIndex = rf.
size()-1;
67
70
73
76
78 for (auto iEdge : iEdges) {
79 if (!iEdge->isRegisterOrRA() || iEdge->headPseudo()) {
80 continue;
81 }
82
83
84 if (iEdge->guardUse() &&
89 } else if (iEdge->isRAW()) {
93 }
94 }
95
97 for (auto oEdge : oEdges) {
98 if (!oEdge->isRegisterOrRA() || oEdge->tailPseudo()) {
99 continue;
100 }
102 !oEdge->guardUse()) {
106 }
107 }
108
111
116
118
121 tempRegName, bbn,
ii()!= 0);
122
123 return true;
124}
std::set< const TTAMachine::RegisterFile *, TTAMachine::MachinePart::Comparator > possibleTempRegRFs(const MoveNode &mn, bool tempRegAfter, const TTAMachine::RegisterFile *forbiddenRF=nullptr)
DataDependenceGraph & ddg()
void createAntidepsForReg(MoveNode &firstMove, MoveNode &lastMove, const TTAMachine::RegisterFile &rf, int index, TCEString regName, BasicBlockNode &bbn, bool loopScheduling)
virtual Node & headNode(const Edge &edge) const
virtual EdgeSet outEdges(const Node &node) const
virtual Node & tailNode(const Edge &edge) const
virtual EdgeSet inEdges(const Node &node) const
static std::string toString(const T &source)
TTAProgram::Move & move()
bool runPostChild(Reversible *preChild)
virtual TCEString name() const
Port * firstReadPort() const
Port * firstWritePort() const
void setSource(Terminal *src)
void setDestination(Terminal *dst)
References BFRegCopy::createAntidepsForReg(), BFOptimization::ddg(), DataDependenceEdge::DEP_RAW, DataDependenceEdge::DEP_WAR, DataDependenceEdge::EDGE_REGISTER, TTAMachine::RegisterFile::firstReadPort(), TTAMachine::RegisterFile::firstWritePort(), forbiddenRF_, BoostGraph< GraphNode, GraphEdge >::headNode(), BFOptimization::ii(), BoostGraph< GraphNode, GraphEdge >::inEdges(), BFRegCopy::mn_, MoveNode::move(), TTAMachine::Component::name(), BoostGraph< GraphNode, GraphEdge >::outEdges(), BF2Scheduler::possibleTempRegRFs(), BFRegCopy::regCopy_, BoostGraph< GraphNode, GraphEdge >::rootGraph(), Reversible::runPostChild(), BFOptimization::sched_, TTAProgram::Move::setDestination(), TTAProgram::Move::setSource(), TTAMachine::BaseRegisterFile::size(), BoostGraph< GraphNode, GraphEdge >::tailNode(), and Conversion::toString().