OpenASIP
2.0
|
#include <BFMergeAndKeepUser.hh>
Public Member Functions | |
BFMergeAndKeepUser (BF2Scheduler &sched, MoveNode &src, MoveNode &mn, bool force=false, bool updatePrologMove=true) | |
bool | operator() () override |
~BFMergeAndKeepUser () | |
![]() | |
BFOptimization (BF2Scheduler &sched) | |
virtual bool | isFinishFront () |
virtual void | mightBeReady (MoveNode &mn) |
![]() | |
virtual void | undo () |
virtual | ~Reversible () |
void | deleteChildren (std::stack< Reversible * > &children) |
int | id () |
Reversible () | |
Protected Member Functions | |
void | undoOnlyMe () override |
bool | updateEdges (MoveNode *src, MoveNode *dst, bool loopBypass, bool pre) |
![]() | |
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) |
Private Attributes | |
MoveNode & | src_ |
MoveNode & | dst_ |
bool | force_ |
TCEString | reg_ |
bool | updatePrologMove_ |
bool | duplicatedSrc_ |
Additional Inherited Members | |
![]() | |
static void | clearPrologMoves () |
static MoveNode * | getSisterTrigger (const MoveNode &mn, const TTAMachine::Machine &mach) |
![]() | |
BF2Scheduler & | sched_ |
![]() | |
std::stack< Reversible * > | preChildren_ |
std::stack< Reversible * > | postChildren_ |
![]() | |
static std::map< MoveNode *, MoveNode *, MoveNode::Comparator > | prologMoves_ |
Definition at line 41 of file BFMergeAndKeepUser.hh.
|
inline |
Definition at line 43 of file BFMergeAndKeepUser.hh.
|
inline |
Definition at line 53 of file BFMergeAndKeepUser.hh.
|
overridevirtual |
This performs the operation. Returns true if success, false if fail.
Implements Reversible.
Definition at line 150 of file BFMergeAndKeepUser.cc.
References BFOptimization::ddg(), dst_, duplicatedSrc_, MoveNodeDuplicator::duplicateMoveNode(), BFOptimization::duplicator(), force_, MoveNodeDuplicator::getMoveNode(), BFOptimization::ii(), BoostGraph< GraphNode, GraphEdge >::inDegree(), BoostGraph< GraphNode, GraphEdge >::inEdge(), DataDependenceEdge::isBackEdge(), DataDependenceEdge::isFalseDep(), DataDependenceGraph::isLoopBypass(), Reversible::runPostChild(), Reversible::runPreChild(), BFOptimization::sched_, src_, updateEdges(), and updatePrologMove_.
|
overrideprotectedvirtual |
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 197 of file BFMergeAndKeepUser.cc.
References MoveNodeDuplicator::disposeMoveNode(), duplicatedSrc_, BFOptimization::duplicator(), and src_.
|
protected |
Definition at line 47 of file BFMergeAndKeepUser.cc.
References BoostGraph< GraphNode, GraphEdge >::connectingEdges(), DataDependenceEdge::data(), BFOptimization::ddg(), DataDependenceEdge::DEP_WAR, DataDependenceEdge::DEP_WAW, DataDependenceEdge::dependenceType(), TTAProgram::Move::destination(), DataDependenceEdge::EDGE_RA, DataDependenceEdge::EDGE_REGISTER, DataDependenceEdge::edgeReason(), TTAProgram::Terminal::equals(), DataDependenceEdge::guardUse(), BoostGraph< GraphNode, GraphEdge >::headNode(), MoveNode::isSourceRA(), MoveNode::isSourceVariable(), MoveNode::move(), reg_, BoostGraph< GraphNode, GraphEdge >::rootGraph(), BoostGraph< GraphNode, GraphEdge >::rootGraphInDegree(), BoostGraph< GraphNode, GraphEdge >::rootGraphInEdge(), BoostGraph< GraphNode, GraphEdge >::rootGraphOutDegree(), BoostGraph< GraphNode, GraphEdge >::rootGraphOutEdge(), Reversible::runChild(), BFOptimization::sched_, TTAProgram::Move::source(), BoostGraph< GraphNode, GraphEdge >::tailNode(), DataDependenceEdge::tailPseudo(), and Reversible::undo().
Referenced by operator()().
|
private |
Definition at line 61 of file BFMergeAndKeepUser.hh.
Referenced by operator()().
|
private |
Definition at line 65 of file BFMergeAndKeepUser.hh.
Referenced by operator()(), and undoOnlyMe().
|
private |
Definition at line 62 of file BFMergeAndKeepUser.hh.
Referenced by operator()().
|
private |
Definition at line 63 of file BFMergeAndKeepUser.hh.
Referenced by updateEdges().
|
private |
Definition at line 60 of file BFMergeAndKeepUser.hh.
Referenced by operator()(), and undoOnlyMe().
|
private |
Definition at line 64 of file BFMergeAndKeepUser.hh.
Referenced by operator()().