Go to the documentation of this file.
54 std::shared_ptr<LiveRange> liveRange,
57 targetCycle_(targetCycle) {}
68 bool usedAfter =
true;
69 std::set<TCEString> regs;
94 int newRegIndex = atoi(
newReg_.substr(
newReg_.find(
'.')+1).c_str());
122 for (
int j = 0 ; j < guardBus->
guardCount(); j++) {
188 !(*
liveRange_->writes.begin())->move().isUnconditional()) {
209 !(*
liveRange_->writes.begin())->move().isUnconditional()) {
322 bool usedBefore =
false;
327 assert(newReg.length() > 2);
333 int newRegIndex = atoi(
newReg_.substr(
newReg_.find(
'.')+1).c_str());
338 for (
auto j: firstWrites) {
339 for (
auto i: liveRange.
reads) {
340 if (
ddg().hasPath(*j, *i)) {
345 for (
auto i: liveRange.
writes) {
346 if (
ddg().hasPath(*j, *i)) {
353 for (
auto j: firstWrites) {
354 for (
auto i: liveRange.
writes) {
363 for (
auto i: liveRange.
reads) {
380 if (loopScheduling) {
381 updateAntiEdgesFromLRTo(liveRange, newReg,
bb_, 1);
430 for (
auto j: writeSuccessors) {
435 for (
auto j: writePredecessors) {
449 for (
auto j: successors) {
454 for (
auto j: predecessors) {
467 for (
auto j: successors) {
472 for (
auto j: predecessors) {
Port * firstReadPort() const
MoveNodeUseMapPair regLastKills_
virtual NodeSet predecessors(const Node &node, bool ignoreBackEdges=false, bool ignoreForwardEdges=false) const
virtual void connectNodes(const Node &nTail, const Node &nHead, Edge &e)
RegisterRenamer * renamer()
virtual void removeEdge(Edge &e)
virtual bool operator()()
void renamedToRegister(const TCEString &newReg)
void undoSetRegDefsAndLastUses()
virtual int index() const
std::shared_ptr< LiveRange > liveRange_
void undoSetFirstDefsAndUses()
int registerIndex() const
virtual const TTAMachine::RegisterFile & registerFile() const
std::set< MoveNode *, typename MoveNode ::Comparator > NodeSet
LiveRangeData::MoveNodeUseSet oldRegFirstDefines_
RegisterFileSet findConnectedRFs(LiveRange &lr, bool allowLimm)
MoveNodeUseMapSet regDefines_
DataDependenceGraph::UndoData guardRenamed(MoveNode &mn)
void setGuard(MoveGuard *guard)
MoveNodeUseMapPair regKills_
const TTAMachine::Machine & targetMachine() const
DataDependenceGraph::EdgeSet createdAntidepEdges_
#define assert(condition)
std::map< const MoveNode *, DataDependenceGraph::UndoData, MoveNode::Comparator > undoReadUpdateData_
void undo(UndoData &undoData)
LiveRangeData::MoveNodeUseSet oldRegFirstUses_
void setDestination(Terminal *dst)
TTAProgram::BasicBlock & bb()
Port * firstWritePort() const
BFRenameLiveRange(BF2Scheduler &sched, std::shared_ptr< LiveRange > liveRange, int targetCycle)
DataDependenceGraph::UndoData undoWriteUpdateData_
LiveRangeData * liveRangeData_
void setRegDefsAndLastUses()
void mightBeReady(MoveNode &n) override
class TTAProgram::Terminal * oldReg_
MoveGuard & guard() const
MoveNodeUseMapSet regFirstDefines_
MoveNodeUseMapSet regLastUses_
virtual void undoOnlyMe() override
DataDependenceGraph & ddg()
DataDependenceGraph::NodeSet writes
void setFirstDefsAndUses()
Guard * guard(int index) const
DataDependenceGraph::NodeSet reads
virtual Bus * parentBus() const
TTAProgram::BasicBlock * bb_
virtual RegisterFileNavigator registerFileNavigator() const
virtual ~BFRenameLiveRange()
BF2ScheduleFront * currentFront()
virtual bool isInverted() const
DataDependenceGraph::UndoData destRenamed(MoveNode &mn)
virtual Terminal * copy() const =0
LiveRangeData::MoveNodeUseSet oldRegDefines_
NodeSet firstScheduledRegisterWrites(const TTAMachine::BaseRegisterFile &rf, int registerIndex) const
void setGuard(TTAProgram::Move &move, const TTAMachine::RegisterFile &rf, int regIndex)
std::set< TCEString > findFreeRegistersInRF(const RegisterFileSet &rfs) const
ComponentType * item(int index) const
const TTAMachine::Guard & guard() const
void revertedRenameToRegister(const TCEString ®)
const RegisterFile * registerFile() const
virtual NodeSet successors(const Node &node, bool ignoreBackEdges=false, bool ignoreForwardEdges=false) const
std::set< TCEString > findPartiallyUsedRegistersInRFAfterCycle(const RegisterFileSet &rfs, int latestCycle) const
bool renameLiveRange(class LiveRange &liveRange, const class TCEString ®, bool usedAfter)
MoveNodeUseMapSet regFirstUses_
void setSource(Terminal *src)
DataDependenceGraph::UndoData sourceRenamed(MoveNode &mn)