34#ifndef TTA_BB_SCHEDULER_HH
35#define TTA_BB_SCHEDULER_HH
75 bool testOnly =
false)
override;
103 MoveNode& move,
int earliestCycle,
bool allowPredicationAndRenaming);
127 bool resetCounter =
false)
const;
140 std::set<std::pair<TTAProgram::Move*, int> > removedMoves);
TTAMachine::Machine * machine
the architecture definition of the estimated processor
virtual DataDependenceGraphBuilder & ddgBuilder()
void scheduleMove(MoveNode &move, int earliestCycle, bool allowPredicationAndRenaming)
void scheduleRRTempMoves(MoveNode ®ToRegMove, MoveNode &firstMove, int lastUse)
MoveNodeSelector * selector_
bool tryToSwitchInputs(ProgramOperation &op)
void unscheduleInputOperandTempMoves(MoveNode &operandMove)
void unscheduleAllNodes()
static MoveNode * findTriggerFromUnit(const ProgramOperation &po, const TTAMachine::Unit &unit)
bool tryToOptimizeWaw(const MoveNode &moveNode)
void tryToDelayOperands(MoveNodeGroup &moves)
SimpleResourceManager * rm_
Resource Manager of the currently scheduled BB.
static MoveNode * findTrigger(const ProgramOperation &po, const TTAMachine::Machine &mach)
int scheduleOperandWrites(int &cycle, MoveNodeGroup &moves)
bool scheduleResultReads(MoveNodeGroup &moves)
void unscheduleResultReadTempMoves(MoveNode &resultMove)
virtual int handleDDG(DataDependenceGraph &ddg, SimpleResourceManager &rm, const TTAMachine::Machine &targetMachine, int minCycle=0, bool testOnly=false) override
void scheduleRRMove(MoveNode &moveNode)
SoftwareBypasser * softwareBypasser_
The software bypasser to use to bypass registers when possible.
virtual std::string longDescription() const
void scheduleInputOperandTempMoves(MoveNode &operandMove, MoveNode &operandWrite)
const TTAMachine::Machine * targetMachine_
The target machine we are scheduling the program against.
virtual ~BasicBlockScheduler()
DataDependenceGraph * ddg_
DDG of the currently scheduled BB.
virtual int handleLoopDDG(DataDependenceGraph &ddg, SimpleResourceManager &rm, const TTAMachine::Machine &targetMachine, int tripCount, SimpleResourceManager *prologRM, bool testOnly=false) override
virtual std::string shortDescription() const
std::map< const MoveNode *, DataDependenceGraph::NodeSet > scheduledTempMoves_
Stores the MoveNodes that were scheduled as temp moves during scheduling of the operand move.
void scheduleOperation(MoveNodeGroup &moves)
void handleRemovedResultMoves(std::set< std::pair< TTAProgram::Move *, int > > removedMoves)
int getTriggerOperand(const Operation &operation, const TTAMachine::Machine &machine)
LLVMTCECmdLineOptions * options_
void scheduleResultReadTempMoves(MoveNode &resultMove, MoveNode &resultRead, int lastUse)
int minCycle_
The earliest cycle to schedule moves in. Used to leave room for sched_yield() by the sched_yield() em...
void notifyScheduled(MoveNodeGroup &moves, MoveNodeSelector &selector)
void unschedule(MoveNode &moveNode)
MoveNode * succeedingTempMove(MoveNode ¤t)
virtual void printStats() const
RegisterRenamer * renamer_
void ddgSnapshot(DataDependenceGraph &ddg, const std::string &name, DataDependenceGraph::DumpFileFormat format, bool final, bool resetCounter=false) const