OpenASIP 2.2
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
BFUnscheduleFromBody Class Reference

#include <BFUnscheduleFromBody.hh>

Inheritance diagram for BFUnscheduleFromBody:
Inheritance graph
Collaboration diagram for BFUnscheduleFromBody:
Collaboration graph

Public Member Functions

 BFUnscheduleFromBody (BF2Scheduler &sched, MoveNode &mn)
 
void unscheduleOriginal ()
 
void undoOnlyMe () override
 
bool operator() () override
 
- Public Member Functions inherited from BFOptimization
 BFOptimization (BF2Scheduler &sched)
 
virtual bool isFinishFront ()
 
virtual void mightBeReady (MoveNode &mn)
 
- Public Member Functions inherited from Reversible
virtual void undo ()
 
virtual ~Reversible ()
 
void deleteChildren (std::stack< Reversible * > &children)
 
int id ()
 
 Reversible ()
 

Protected Member Functions

void returnOriginal ()
 
- Protected Member Functions inherited from BFOptimization
DataDependenceGraphddg ()
 
DataDependenceGraphrootDDG ()
 
const DataDependenceGraphddg () const
 
DataDependenceGraphprologDDG ()
 
SimpleResourceManagerrm () const
 
SimpleResourceManagerprologRM () const
 
BUMoveNodeSelectorselector ()
 
const TTAMachine::MachinetargetMachine () const
 
unsigned int ii () const
 
MoveNodeDuplicatorduplicator () 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::RegisterFileRFReadPortCountPreventsScheduling (const MoveNode &mn)
 
bool immCountPreventsScheduling (const MoveNode &mn)
 
- Protected Member Functions inherited from Reversible
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)
 

Protected Attributes

MoveNodemn_
 
int oldCycle_
 
const TTAMachine::BusoldBus_
 
int oldImmWriteCycle_
 
const TTAMachine::FunctionUnitdstFU_
 
const TTAMachine::FunctionUnitsrcFU_
 
const TTAMachine::ImmediateUnitimmu_
 
int immRegIndex_
 
- Protected Attributes inherited from BFOptimization
BF2Schedulersched_
 
- Protected Attributes inherited from Reversible
std::stack< Reversible * > preChildren_
 
std::stack< Reversible * > postChildren_
 

Static Protected Attributes

static int recurseCounter_ = 0
 
- Static Protected Attributes inherited from BFOptimization
static std::map< MoveNode *, MoveNode *, MoveNode::ComparatorprologMoves_
 

Additional Inherited Members

- Static Public Member Functions inherited from BFOptimization
static void clearPrologMoves ()
 
static MoveNodegetSisterTrigger (const MoveNode &mn, const TTAMachine::Machine &mach)
 

Detailed Description

Definition at line 48 of file BFUnscheduleFromBody.hh.

Constructor & Destructor Documentation

◆ BFUnscheduleFromBody()

BFUnscheduleFromBody::BFUnscheduleFromBody ( BF2Scheduler sched,
MoveNode mn 
)
inline

Definition at line 51 of file BFUnscheduleFromBody.hh.

52 :
53 BFOptimization(sched), mn_(mn),
54 oldImmWriteCycle_(-1), dstFU_(NULL),
55 srcFU_(NULL), immu_(NULL), immRegIndex_(-1) {}
const TTAMachine::FunctionUnit * srcFU_
const TTAMachine::ImmediateUnit * immu_
const TTAMachine::FunctionUnit * dstFU_

Member Function Documentation

◆ operator()()

bool BFUnscheduleFromBody::operator() ( )
overridevirtual

This performs the operation. Returns true if success, false if fail.

Implements Reversible.

Definition at line 144 of file BFUnscheduleFromBody.cc.

144 {
146 return true;
147}

References unscheduleOriginal().

Here is the call graph for this function:

◆ returnOriginal()

void BFUnscheduleFromBody::returnOriginal ( )
protected

Definition at line 96 of file BFUnscheduleFromBody.cc.

96 {
97#ifdef DEBUG_BUBBLEFISH_SCHEDULER
98 for (int i = 0; i < recurseCounter_*2; i++)
99 std::cerr << "\t";
100
101 std::cerr << "\t\treturning original: " <<mn_.toString()<<" current bus: "
102 << mn_.move().bus().name() << " old bus: " << oldBus_->name()
103 << " cycle: " << oldCycle_ << std::endl;
104#endif
105
106#ifdef DEBUG_BUBBLEFISH_SCHEDULER
109 std::cerr << "Cannot return to old cycle: " << mn_.toString()
110 << " cycle: " << oldCycle_ << std::endl;
112 std::cerr << "dstPO: " << mn_.destinationOperation().toString()
113 << std::endl;
114 }
115 if (mn_.isSourceOperation()) {
116 std::cerr << "srcPO: " << mn_.sourceOperation().toString()
117 << std::endl;
118 }
119 std::cerr << "Original bus: " << oldBus_->name() << std::endl;
120 ddg().writeToDotFile("cannot_return_old_cycle.dot");
122 for (int i = 0; i < ins->moveCount(); i++) {
123 std::cerr << "\t" << POMDisassembler::disassemble(ins->move(i))
124 << " bus: " << ins->move(i).bus().name()
125 << std::endl;
126 }
127 std::cerr << "ins contains " << ins->immediateCount()
128 << " immediates." << std::endl;
129 assert(false);
130 }
131#endif
134}
#define assert(condition)
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)
DataDependenceGraph & ddg()
SimpleResourceManager & rm() const
const TTAMachine::Bus * oldBus_
virtual void writeToDotFile(const TCEString &fileName) const
ProgramOperation & sourceOperation() const
Definition MoveNode.cc:453
bool isDestinationOperation() const
std::string toString() const
Definition MoveNode.cc:576
TTAProgram::Move & move()
bool isSourceOperation() const
Definition MoveNode.cc:168
ProgramOperation & destinationOperation(unsigned int index=0) const
static std::string disassemble(const TTAProgram::Move &move)
std::string toString() 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 TTAProgram::Instruction * instruction(int cycle) const override
virtual TCEString name() const
Move & move(int i) const
const TTAMachine::Bus & bus() const
Definition Move.cc:373

References assert, SimpleResourceManager::assign(), TTAProgram::Move::bus(), BFOptimization::canAssign(), BFOptimization::ddg(), MoveNode::destinationOperation(), POMDisassembler::disassemble(), dstFU_, TTAProgram::Instruction::immediateCount(), immRegIndex_, immu_, SimpleResourceManager::instruction(), MoveNode::isDestinationOperation(), MoveNode::isSourceOperation(), mn_, MoveNode::move(), TTAProgram::Instruction::move(), TTAProgram::Instruction::moveCount(), TTAMachine::Component::name(), oldBus_, oldCycle_, oldImmWriteCycle_, recurseCounter_, BFOptimization::rm(), MoveNode::sourceOperation(), srcFU_, MoveNode::toString(), ProgramOperation::toString(), and GraphBase< GraphNode, GraphEdge >::writeToDotFile().

Referenced by undoOnlyMe().

Here is the call graph for this function:

◆ undoOnlyMe()

void BFUnscheduleFromBody::undoOnlyMe ( )
overridevirtual

Undoes the operations done by this class but not children. This method should be overloaded by most derived classes.

Reimplemented from Reversible.

Definition at line 136 of file BFUnscheduleFromBody.cc.

136 {
137#ifdef DEBUG_BUBBLEFISH_SCHEDULER
138 std::cerr << "BFUnscheudleMove undo" << std::endl;
139#endif
141}

References returnOriginal().

Here is the call graph for this function:

◆ unscheduleOriginal()

void BFUnscheduleFromBody::unscheduleOriginal ( )

Definition at line 48 of file BFUnscheduleFromBody.cc.

48 {
50 oldBus_ = &mn_.move().bus();
51
52 if (mn_.isSourceOperation()) {
54 }
55
58 }
59
64 }
65
66#ifdef DEBUG_BUBBLEFISH_SCHEDULER
67 for (int i = 0; i < recurseCounter_*2; i++)
68 std::cerr << "\t";
69
70 std::cerr << "\t\tUnscheduling original: " << mn_.toString()
71 << " bus: " << oldBus_->name() << std::endl;
72#endif
73 rm().unassign(mn_);
74#ifdef DEBUG_BUBBLEFISH_SCHEDULER
77 for (int i = 0; i < recurseCounter_*2; i++)
78 std::cerr << "\t";
79
80 std::cerr << "\t\tCannot assign to old cycle: " << mn_.toString()
81 << " old cycle: " << oldCycle_ << std::endl;
82 ddg().writeToDotFile("cannot_assign_old_cycle.dot");
83 if (mn_.isSourceOperation()) {
84 std::cerr << "\t\twhole src PO: "
85 << mn_.sourceOperation().toString() << std::endl;
86 }
88 std::cerr << "\t\twhole dst PO: "
89 << mn_.destinationOperation().toString() << std::endl;
90 }
91 assert(false);
92 }
93#endif
94}
int cycle() const
Definition MoveNode.cc:421
virtual void unassign(MoveNode &node) override
virtual int immediateWriteCycle(const MoveNode &) const
Terminal & source() const
Definition Move.cc:302
Terminal & destination() const
Definition Move.cc:323
virtual const TTAMachine::FunctionUnit & functionUnit() const
Definition Terminal.cc:251
virtual int index() const
Definition Terminal.cc:274
virtual bool isImmediateRegister() const
Definition Terminal.cc:97
virtual const TTAMachine::ImmediateUnit & immediateUnit() const
Definition Terminal.cc:240

References assert, TTAProgram::Move::bus(), BFOptimization::canAssign(), MoveNode::cycle(), BFOptimization::ddg(), TTAProgram::Move::destination(), MoveNode::destinationOperation(), dstFU_, TTAProgram::Terminal::functionUnit(), TTAProgram::Terminal::immediateUnit(), SimpleResourceManager::immediateWriteCycle(), immRegIndex_, immu_, TTAProgram::Terminal::index(), MoveNode::isDestinationOperation(), TTAProgram::Terminal::isImmediateRegister(), MoveNode::isSourceOperation(), mn_, MoveNode::move(), TTAMachine::Component::name(), oldBus_, oldCycle_, oldImmWriteCycle_, recurseCounter_, BFOptimization::rm(), TTAProgram::Move::source(), MoveNode::sourceOperation(), srcFU_, MoveNode::toString(), ProgramOperation::toString(), SimpleResourceManager::unassign(), and GraphBase< GraphNode, GraphEdge >::writeToDotFile().

Referenced by operator()().

Here is the call graph for this function:

Member Data Documentation

◆ dstFU_

const TTAMachine::FunctionUnit* BFUnscheduleFromBody::dstFU_
protected

Definition at line 65 of file BFUnscheduleFromBody.hh.

Referenced by returnOriginal(), and unscheduleOriginal().

◆ immRegIndex_

int BFUnscheduleFromBody::immRegIndex_
protected

Definition at line 68 of file BFUnscheduleFromBody.hh.

Referenced by returnOriginal(), and unscheduleOriginal().

◆ immu_

const TTAMachine::ImmediateUnit* BFUnscheduleFromBody::immu_
protected

Definition at line 67 of file BFUnscheduleFromBody.hh.

Referenced by returnOriginal(), and unscheduleOriginal().

◆ mn_

MoveNode& BFUnscheduleFromBody::mn_
protected

Definition at line 61 of file BFUnscheduleFromBody.hh.

Referenced by returnOriginal(), and unscheduleOriginal().

◆ oldBus_

const TTAMachine::Bus* BFUnscheduleFromBody::oldBus_
protected

Definition at line 63 of file BFUnscheduleFromBody.hh.

Referenced by returnOriginal(), and unscheduleOriginal().

◆ oldCycle_

int BFUnscheduleFromBody::oldCycle_
protected

Definition at line 62 of file BFUnscheduleFromBody.hh.

Referenced by returnOriginal(), and unscheduleOriginal().

◆ oldImmWriteCycle_

int BFUnscheduleFromBody::oldImmWriteCycle_
protected

Definition at line 64 of file BFUnscheduleFromBody.hh.

Referenced by returnOriginal(), and unscheduleOriginal().

◆ recurseCounter_

int BFUnscheduleFromBody::recurseCounter_ = 0
staticprotected

Definition at line 69 of file BFUnscheduleFromBody.hh.

Referenced by returnOriginal(), and unscheduleOriginal().

◆ srcFU_

const TTAMachine::FunctionUnit* BFUnscheduleFromBody::srcFU_
protected

Definition at line 66 of file BFUnscheduleFromBody.hh.

Referenced by returnOriginal(), and unscheduleOriginal().


The documentation for this class was generated from the following files: