OpenASIP  2.0
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) {}

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;
111  if (mn_.isDestinationOperation()) {
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 }

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_, TTAProgram::Instruction::move(), MoveNode::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
140  returnOriginal();
141 }

References returnOriginal().

Here is the call graph for this function:

◆ unscheduleOriginal()

void BFUnscheduleFromBody::unscheduleOriginal ( )

Definition at line 48 of file BFUnscheduleFromBody.cc.

48  {
49  oldCycle_ = mn_.cycle();
50  oldBus_ = &mn_.move().bus();
51 
52  if (mn_.isSourceOperation()) {
54  }
55 
58  }
59 
60  if (mn_.move().source().isImmediateRegister()) {
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 }

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:
SimpleResourceManager::immediateWriteCycle
virtual int immediateWriteCycle(const MoveNode &) const
Definition: SimpleResourceManager.cc:520
BFUnscheduleFromBody::immRegIndex_
int immRegIndex_
Definition: BFUnscheduleFromBody.hh:68
TTAMachine::Component::name
virtual TCEString name() const
Definition: MachinePart.cc:125
MoveNode::toString
std::string toString() const
Definition: MoveNode.cc:576
TTAProgram::Instruction::move
Move & move(int i) const
Definition: Instruction.cc:193
TTAProgram::Terminal::index
virtual int index() const
Definition: Terminal.cc:274
MoveNode::isDestinationOperation
bool isDestinationOperation() const
TTAProgram::Instruction
Definition: Instruction.hh:57
BFUnscheduleFromBody::returnOriginal
void returnOriginal()
Definition: BFUnscheduleFromBody.cc:96
TTAProgram::Move::destination
Terminal & destination() const
Definition: Move.cc:323
BFUnscheduleFromBody::oldBus_
const TTAMachine::Bus * oldBus_
Definition: BFUnscheduleFromBody.hh:63
TTAProgram::Move::bus
const TTAMachine::Bus & bus() const
Definition: Move.cc:373
SimpleResourceManager::assign
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
Definition: SimpleResourceManager.cc:221
BFUnscheduleFromBody::unscheduleOriginal
void unscheduleOriginal()
Definition: BFUnscheduleFromBody.cc:48
SimpleResourceManager::unassign
virtual void unassign(MoveNode &node) override
Definition: SimpleResourceManager.cc:252
MoveNode::sourceOperation
ProgramOperation & sourceOperation() const
Definition: MoveNode.cc:453
assert
#define assert(condition)
Definition: Application.hh:86
TTAProgram::Terminal::isImmediateRegister
virtual bool isImmediateRegister() const
Definition: Terminal.cc:97
BFUnscheduleFromBody::srcFU_
const TTAMachine::FunctionUnit * srcFU_
Definition: BFUnscheduleFromBody.hh:66
MoveNode::cycle
int cycle() const
Definition: MoveNode.cc:421
MoveNode::isSourceOperation
bool isSourceOperation() const
Definition: MoveNode.cc:168
TTAProgram::Terminal::immediateUnit
virtual const TTAMachine::ImmediateUnit & immediateUnit() const
Definition: Terminal.cc:240
BFOptimization::ddg
DataDependenceGraph & ddg()
Definition: BFOptimization.cc:70
BFOptimization::rm
SimpleResourceManager & rm() const
Definition: BFOptimization.cc:76
GraphBase::writeToDotFile
virtual void writeToDotFile(const TCEString &fileName) const
BFOptimization::BFOptimization
BFOptimization(BF2Scheduler &sched)
Definition: BFOptimization.hh:75
TTAProgram::Terminal::functionUnit
virtual const TTAMachine::FunctionUnit & functionUnit() const
Definition: Terminal.cc:251
BFUnscheduleFromBody::immu_
const TTAMachine::ImmediateUnit * immu_
Definition: BFUnscheduleFromBody.hh:67
MoveNode::destinationOperation
ProgramOperation & destinationOperation(unsigned int index=0) const
MoveNode::move
TTAProgram::Move & move()
ProgramOperation::toString
std::string toString() const
Definition: ProgramOperation.cc:746
POMDisassembler::disassemble
static std::string disassemble(const TTAProgram::Move &move)
Definition: POMDisassembler.cc:629
BFUnscheduleFromBody::dstFU_
const TTAMachine::FunctionUnit * dstFU_
Definition: BFUnscheduleFromBody.hh:65
BFUnscheduleFromBody::recurseCounter_
static int recurseCounter_
Definition: BFUnscheduleFromBody.hh:69
BFUnscheduleFromBody::oldCycle_
int oldCycle_
Definition: BFUnscheduleFromBody.hh:62
TTAProgram::Instruction::immediateCount
int immediateCount() const
Definition: Instruction.cc:267
BFUnscheduleFromBody::oldImmWriteCycle_
int oldImmWriteCycle_
Definition: BFUnscheduleFromBody.hh:64
TTAProgram::Move::source
Terminal & source() const
Definition: Move.cc:302
BFOptimization::canAssign
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)
Definition: BFOptimization.cc:495
TTAProgram::Instruction::moveCount
int moveCount() const
Definition: Instruction.cc:176
BFUnscheduleFromBody::mn_
MoveNode & mn_
Definition: BFUnscheduleFromBody.hh:61
SimpleResourceManager::instruction
virtual TTAProgram::Instruction * instruction(int cycle) const override
Definition: SimpleResourceManager.cc:442