41#include <boost/format.hpp> 
   76    move_(newMove), immediate_(nullptr), srcOp_(nullptr), guardOp_(nullptr),
 
 
   88    move_(nullptr), immediate_(imm),  srcOp_(nullptr), guardOp_(nullptr),
 
 
  100    move_(nullptr), immediate_(nullptr), srcOp_(nullptr), guardOp_(nullptr),
 
 
  172    return srcOp_.get() != NULL;
 
 
  200    return move_->source().isGPR();
 
 
  214    return move_->source().isRA();
 
 
  227    return move_->source().isImmediateRegister();
 
 
  268    return move_->destination().isGPR();
 
 
  320        for (
unsigned int i = 0; i < dopCount2; i++) {
 
  327    for (
unsigned int i = 0; i < dopCount1; i++) {
 
  335        for (
unsigned int j = 0; j < dopCount2; j++) {
 
 
  371        return parent != NULL &&
 
  382    if (!
move_->bus().machine()->isUniversalMachine()) {
 
  386            (
move_->source().port().parentUnit()->machine() !=
 
  387             move_->bus().machine())) {
 
  391            (
move_->destination().port().parentUnit()->machine() !=
 
  392             move_->bus().machine())) {
 
 
  423        std::string msg = 
"MoveNode was not placed yet: " + 
toString();
 
 
  462                "MoveNode: '%s' source is not Operation.") % 
toString()).
 
 
  488                "MoveNode: '%s' guard is not Operation.") % 
toString()).
 
 
  505        std::string msg = 
"MoveNode is already placed in cycle ";
 
 
  521        std::string msg = 
"MoveNode is not placed.";
 
 
  578        return "-1:\tENTRYNODE";
 
  588        content += 
" Bus: " + 
move_->bus().name();
 
 
  606        unsigned operationId = 0;
 
  619        int operationColor = rand() / (RAND_MAX>>24);
 
  623                ",color=\"#%.6x\"") % operationColor).str();
 
  628            contents += 
",shape=hexagon";
 
  630            contents += 
",shape=box";
 
  634            contents += 
",shape=ellipse";
 
  636            contents += 
",shape=diamond";
 
 
  659        outputIndex = 
move_->source().operationIndex();
 
  663                __FILE__, __LINE__, 
__func__, 
"Not a result read move.");
 
 
  702            __FILE__, __LINE__, 
__func__, 
"Not a result read move.");
 
  705    int latestTrigger = INT_MAX;
 
  717        int latency = hwop.
latency(outputIndex);
 
  718        latestTrigger = std::min(latestTrigger, result.
cycle() - latency);
 
  720    return latestTrigger;
 
 
  742    for (std::vector<ProgramOperationPtr>::iterator i = 
dstOps_.begin();
 
  744        if (((*i).get()) == ptr) {
 
  749    std::string msg = 
"Removed destination op not found in MoveNode";
 
 
  783    return move_->guardLatency();
 
 
  802    if (!
move().source().isGPR()) {
 
  808    size_t dotPlace = reg.find(
'.');
 
  810    if (reg.compare(0, dotPlace, rfName) != 0) {
 
 
  827            if (&inputNode != 
this && !inputNode.
isScheduled()) {
 
 
#define abortWithError(message)
find Finds info of the inner loops in the false
std::shared_ptr< ProgramOperation > ProgramOperationPtr
static std::string toString(const T &source)
std::string errorMessageStack(bool messagesOnly=false) const
virtual std::string dotString() const
std::string dotString() const
int earliestResultReadCycle() const
bool isOperationMove() const
void setGuardOperationPtr(ProgramOperationPtr po)
void setSourceOperationPtr(ProgramOperationPtr po)
ProgramOperationPtr sourceOperationPtr() const
bool isInFrontier_
This is in scheduling frontier(used in Bubblefish scheduler)
bool isSourceReg(const std::string ®) const
unsigned int destinationOperationCount() const
bool isRegisterMove() const
bool isGuardOperation() const
int latestTriggerWriteCycle() const
void unsetSourceOperation()
ProgramOperationPtr guardOperationPtr() const
void removeDestinationOperation(const ProgramOperation *po)
bool placed_
True when the node placed (is given a cycle in program).
bool isSourceVariable() const
ProgramOperationPtr srcOp_
std::shared_ptr< TTAProgram::Immediate > immediatePtr()
int cycle_
Cycle in which the node is placed. Each cycle uniquely identifies an instruction slot within the curr...
ProgramOperation & sourceOperation() const
bool isDestinationOperation() const
std::string toString() const
ProgramOperation & guardOperation() const
void unsetGuardOperation()
const std::shared_ptr< TTAProgram::Immediate > immediate_
Pointer to Immediate this node represents, Node itself do not change move.
TTAProgram::Move & move()
ProgramOperationPtr guardOp_
bool isSourceOperation() const
void setCycle(const int newcycle)
bool isSourceImmediateRegister() const
bool isSourceConstant() const
bool isLastUnscheduledMoveOfDstOp() const
void clearDestinationOperation()
std::vector< ProgramOperationPtr > dstOps_
bool isDestinationVariable() const
ProgramOperationPtr destinationOperationPtr(unsigned int index=0) const
bool inSameOperation(const MoveNode &other) const
const std::shared_ptr< TTAProgram::Move > move_
Pointer to Move this node represents, Node itself do not change move.
void addDestinationOperationPtr(ProgramOperationPtr po)
MoveNode()
Node can be entry node.
TTAProgram::Immediate & immediate()
ProgramOperation & destinationOperation(unsigned int index=0) const
virtual TCEString name() const
static std::string disassemble(const TTAProgram::Move &move)
int outputMoveCount() const
const Operation & operation() const
void addOutputNode(MoveNode &node, int outputIndex)
unsigned int poId() const
int inputMoveCount() const
MoveNode * triggeringMove() const
MoveNode & inputMove(int index) const
void removeInputNode(MoveNode &node)
void removeGuardOutputNode(MoveNode &node)
void removeOutputNode(MoveNode &node, int outputIndex)
void addInputNode(MoveNode &node)
MoveNode & outputMove(int index) const
int outputIndexOfMove(const MoveNode &mn) const
virtual TCEString name() const
virtual HWOperation * operation(const std::string &name) const
static NullInstructionTemplate & instance()
CodeSnippet & parent() const
const TTAMachine::InstructionTemplate & instructionTemplate() const
Terminal & source() const
Terminal & destination() const
virtual const TTAMachine::FunctionUnit & functionUnit() const
virtual int index() const
virtual int operationIndex() const
virtual const TTAMachine::RegisterFile & registerFile() const