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) {
345 for (
auto i: liveRange.
writes) {
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) {
#define assert(condition)
void mightBeReady(MoveNode &n) override
RegisterRenamer * renamer()
BF2ScheduleFront * currentFront()
DataDependenceGraph & ddg()
const TTAMachine::Machine & targetMachine() const
void undoSetFirstDefsAndUses()
virtual void undoOnlyMe() override
DataDependenceGraph::EdgeSet createdAntidepEdges_
virtual bool operator()()
BFRenameLiveRange(BF2Scheduler &sched, std::shared_ptr< LiveRange > liveRange, int targetCycle)
TTAProgram::BasicBlock * bb_
LiveRangeData::MoveNodeUseSet oldRegFirstUses_
LiveRangeData::MoveNodeUseSet oldRegDefines_
void setGuard(TTAProgram::Move &move, const TTAMachine::RegisterFile &rf, int regIndex)
LiveRangeData::MoveNodeUseSet oldRegFirstDefines_
void setRegDefsAndLastUses()
class TTAProgram::Terminal * oldReg_
virtual ~BFRenameLiveRange()
std::map< const MoveNode *, DataDependenceGraph::UndoData, MoveNode::Comparator > undoReadUpdateData_
DataDependenceGraph::UndoData undoWriteUpdateData_
void undoSetRegDefsAndLastUses()
void setFirstDefsAndUses()
std::shared_ptr< LiveRange > liveRange_
bool renameLiveRange(class LiveRange &liveRange, const class TCEString ®, bool usedAfter)
virtual void removeEdge(Edge &e)
virtual NodeSet successors(const Node &node, bool ignoreBackEdges=false, bool ignoreForwardEdges=false) const
bool hasPath(GraphNode &src, const GraphNode &dest) const
virtual NodeSet predecessors(const Node &node, bool ignoreBackEdges=false, bool ignoreForwardEdges=false) const
virtual void connectNodes(const Node &nTail, const Node &nHead, Edge &e)
DataDependenceGraph::UndoData sourceRenamed(MoveNode &mn)
NodeSet firstScheduledRegisterWrites(const TTAMachine::BaseRegisterFile &rf, int registerIndex) const
DataDependenceGraph::UndoData guardRenamed(MoveNode &mn)
DataDependenceGraph::UndoData destRenamed(MoveNode &mn)
void undo(UndoData &undoData)
std::set< GraphNode *, typename GraphNode::Comparator > NodeSet
void revertedRenameToRegister(const TCEString ®)
TTAProgram::BasicBlock & bb()
std::set< TCEString > findFreeRegistersInRF(const RegisterFileSet &rfs) const
std::set< TCEString > findPartiallyUsedRegistersInRFAfterCycle(const RegisterFileSet &rfs, int latestCycle) const
void renamedToRegister(const TCEString &newReg)
RegisterFileSet findConnectedRFs(LiveRange &lr, bool allowLimm)
Guard * guard(int index) const
virtual bool isInverted() const
virtual Bus * parentBus() const
ComponentType * item(int index) const
virtual RegisterFileNavigator registerFileNavigator() const
Port * firstReadPort() const
Port * firstWritePort() const
int registerIndex() const
const RegisterFile * registerFile() const
LiveRangeData * liveRangeData_
const TTAMachine::Guard & guard() const
void setSource(Terminal *src)
MoveGuard & guard() const
void setGuard(MoveGuard *guard)
void setDestination(Terminal *dst)
virtual int index() const
virtual Terminal * copy() const =0
virtual const TTAMachine::RegisterFile & registerFile() const
MoveNodeUseMapSet regFirstUses_
MoveNodeUseMapSet regLastUses_
MoveNodeUseMapSet regFirstDefines_
MoveNodeUseMapPair regKills_
MoveNodeUseMapPair regLastKills_
MoveNodeUseMapSet regDefines_
DataDependenceGraph::NodeSet reads
DataDependenceGraph::NodeSet writes