OpenASIP  2.0
Public Member Functions | Private Member Functions | Private Attributes | List of all members
TTAProgram::Move Class Reference

#include <Move.hh>

Inheritance diagram for TTAProgram::Move:
Inheritance graph
Collaboration diagram for TTAProgram::Move:
Collaboration graph

Public Member Functions

 Move (Terminal *src, Terminal *dst, const TTAMachine::Bus &bus, MoveGuard *guard)
 
 Move (Terminal *src, Terminal *dst, const TTAMachine::Bus &bus)
 
 ~Move ()
 
Instructionparent () const
 
void setParent (Instruction &ins)
 
bool isInInstruction () const
 
bool isUnconditional () const
 
bool isConditional () const
 
bool isJump () const
 
bool isCall () const
 
bool isControlFlowMove () const
 
bool isReturn () const
 
bool isFunctionCall () const
 
bool isTriggering () const
 
Terminalsource () const
 
void setSource (Terminal *src)
 
Terminaldestination () const
 
void setDestination (Terminal *dst)
 
MoveGuardguard () const
 
void setGuard (MoveGuard *guard)
 
const TTAMachine::Busbus () const
 
void setBus (const TTAMachine::Bus &bus)
 
TTAMachine::SocketdestinationSocket () const
 
TTAMachine::SocketsourceSocket () const
 
int guardLatency () const
 
std::shared_ptr< Movecopy () const
 
std::string toString () const
 
bool hasSourceLineNumber () const
 
int sourceLineNumber () const
 
bool hasSourceFileName () const
 
std::string sourceFileName () const
 
- Public Member Functions inherited from TTAProgram::AnnotatedInstructionElement
 AnnotatedInstructionElement ()
 
 ~AnnotatedInstructionElement ()
 
void addAnnotation (const ProgramAnnotation &annotation)
 
void setAnnotation (const ProgramAnnotation &annotation)
 
ProgramAnnotation annotation (int index, ProgramAnnotation::Id id=ProgramAnnotation::ANN_UNDEF_ID) const
 
int annotationCount (ProgramAnnotation::Id id=ProgramAnnotation::ANN_UNDEF_ID) const
 
void removeAnnotations (ProgramAnnotation::Id id=ProgramAnnotation::ANN_UNDEF_ID)
 
bool hasAnnotations (ProgramAnnotation::Id id=ProgramAnnotation::ANN_UNDEF_ID) const
 
bool hasAnnotation (ProgramAnnotation::Id id, const TCEString &data) const
 
void copyAnnotationsFrom (const AnnotatedInstructionElement &other)
 

Private Member Functions

 Move (const Move &)
 Copying not allowed. More...
 
Moveoperator= (const Move &)
 Assignment not allowed. More...
 

Private Attributes

Instructionparent_
 Parent instruction of the move. More...
 
Terminalsrc_
 The source of the move. More...
 
Terminaldst_
 The destination of the move. More...
 
const TTAMachine::Busbus_
 The bus where the transport is carried. More...
 
MoveGuardguard_
 The boolean expression that predicates the move. More...
 

Detailed Description

Represents a data transport through the TTA programmable interconnection network.

Definition at line 55 of file Move.hh.

Constructor & Destructor Documentation

◆ Move() [1/3]

TTAProgram::Move::Move ( Terminal src,
Terminal dst,
const TTAMachine::Bus bus,
MoveGuard guard 
)

The constructor.

Creates a guarded move.

The ownership of the source and destination terminal objects and the guard will be passed to the move.

Parameters
srcThe source of the move.
dstThe destination of the move.
busThe bus on which the transport is carried.
guardThe Boolean expression the move is predicated with.

Definition at line 73 of file Move.cc.

75  :
76  parent_(NULL), src_(src), dst_(dst), bus_(&bus), guard_(guard) {
77 }

◆ Move() [2/3]

TTAProgram::Move::Move ( Terminal src,
Terminal dst,
const TTAMachine::Bus bus 
)

The constructor.

Creates an unguarded move.

Parameters
srcThe source of the move.
dstThe destination of the move.
busThe bus on which the transport is carried.

Definition at line 88 of file Move.cc.

89  :
90  parent_(NULL), src_(src), dst_(dst), bus_(&bus),
91  guard_(NULL) {
92 }

◆ ~Move()

TTAProgram::Move::~Move ( )

The destructor.

Definition at line 97 of file Move.cc.

97  {
98  delete dst_;
99  dst_ = NULL;
100 
101  delete src_;
102  src_ = NULL;
103 
104  if (guard_ != NULL) {
105  delete guard_;
106  guard_ = NULL;
107  }
108 }

References dst_, guard_, and src_.

◆ Move() [3/3]

TTAProgram::Move::Move ( const Move )
private

Copying not allowed.

Member Function Documentation

◆ bus()

const Bus & TTAProgram::Move::bus ( ) const

Returns the bus on which the move is carried.

Returns
the bus on which the move is carried.

Definition at line 373 of file Move.cc.

373  {
374  return *bus_;
375 }

References bus_.

Referenced by CodeCompressorPlugin::addBitsForDestinationField(), CodeCompressorPlugin::addBitsForSourceField(), SimpleICOptimizer::addConnections(), TTAProgram::Instruction::addMove(), ProximMachineStateWindow::addMoves(), BusBroker::allAvailableResources(), SimpleBrokerDirector::assign(), BusBroker::assign(), BFOptimization::assign(), BFOptimization::assignCopyToPrologEpilog(), ControlFlowGraph::buildMBBFromBB(), CycleLookBackSoftwareBypasser::bypassNode(), UtilizationStats::calculateForInstruction(), SimpleBrokerDirector::canAssign(), POMValidator::checkConnectivity(), CopyingDelaySlotFiller::collectMoves(), TTAProgram::ProgramWriter::createCodeSection(), POMDisassembler::createInstruction(), POMDisassembler::createMove(), POMDisassembler::disassemble(), CodeCompressorPlugin::encodeMove(), CopyingDelaySlotFiller::getMoveNode(), CodeCompressorPlugin::immediateTerminal(), DisasmExecPercentageAttrProvider::moveCellAttr(), CompiledSimSymbolGenerator::moveOperandSymbol(), BFLateBypassGuard::operator()(), BFShareOperandWithScheduled::operator()(), BFScheduleTD::operator()(), BFLateBypass::operator()(), BFPushAntidepDown::operator()(), BFScheduleBU::operator()(), BFShareOperandLate::operator()(), SimProgramBuilder::processMove(), ControlFlowGraph::removeJumpToTarget(), RegisterRenamer::renameLiveRange(), AssignmentPlan::resetAssignments(), BFUnscheduleFromBody::returnOriginal(), BFUnscheduleMove::returnOriginal(), BFShareOperandLate::revert(), setBus(), PostpassOperandSharer::tryRemoveOperandWrite(), PreOptimizer::tryToRemoveGuardInversingOp(), BusBroker::unassign(), BFRescheduleMove::undoOnlyMe(), BFScheduleTD::undoOnlyMe(), BFScheduleBU::undoOnlyMe(), BFUnscheduleFromBody::unscheduleOriginal(), BFUnscheduleMove::unscheduleOriginal(), and DataDependenceGraph::writeToXMLFile().

◆ copy()

std::shared_ptr< Move > TTAProgram::Move::copy ( ) const

Makes a copy of the move.

The copy is identical, except that it is not registered to the instruction of the original move (and therefore, any address it refers to is not meaningful).

Returns
A copy of the move.

Definition at line 413 of file Move.cc.

413  {
414 
415  std::shared_ptr<Move> newMove = NULL;
416  if (isUnconditional()) {
417  newMove = std::make_shared<Move>(src_->copy(), dst_->copy(), *bus_);
418  } else {
419  newMove = std::make_shared<Move>(
420  src_->copy(), dst_->copy(), *bus_, guard_->copy());
421  }
422 
423  for (int i = 0; i < annotationCount(); i++ ) {
424  newMove->addAnnotation(annotation(i));
425  }
426 
427  newMove->setParent(NullInstruction::instance());
428 
429  return newMove;
430 }

References TTAProgram::AnnotatedInstructionElement::annotation(), TTAProgram::AnnotatedInstructionElement::annotationCount(), bus_, TTAProgram::MoveGuard::copy(), TTAProgram::Terminal::copy(), dst_, guard_, TTAProgram::NullInstruction::instance(), isUnconditional(), and src_.

Referenced by RegisterCopyAdder::addConnectionRegisterCopies(), RegisterCopyAdder::addConnectionRegisterCopiesImmediate(), Peel2BBLoops::appendBB(), SimpleIfConverter::appendBB(), TTAProgram::Instruction::copy(), MoveNodeDuplicator::duplicateMove(), CopyingDelaySlotFiller::getMove(), and BFRegCopy::operator()().

Here is the call graph for this function:

◆ destination()

Terminal & TTAProgram::Move::destination ( ) const

Returns the destination of this move.

Returns
the destination of this move.

Definition at line 323 of file Move.cc.

323  {
324  return *dst_;
325 }

References dst_.

Referenced by CodeCompressorPlugin::addBitsForDestinationField(), llvm::LLVMTCEBuilder::addCandidateLSUAnnotations(), RegisterCopyAdder::addConnectionRegisterCopies(), RegisterCopyAdder::addConnectionRegisterCopiesImmediate(), ProgramOperation::addInputNode(), TTAProgram::Instruction::addMove(), ProximMachineStateWindow::addMoves(), ProgramOperation::addNode(), StaticProgramAnalyzer::addProgram(), InputPSocketBroker::allAvailableResources(), InputFUBroker::allAvailableResources(), BusBroker::allAvailableResources(), CopyingDelaySlotFiller::allowedToSpeculate(), ResourceConstraintAnalyzer::analyzeMoveNode(), ResourceConstraintAnalyzer::analyzeRegisterAntideps(), InputPSocketBroker::assign(), SimpleBrokerDirector::assign(), InputFUBroker::assign(), ExecutionPipelineResource::assignDestination(), BFSwapOperands::BFSwapOperands(), MoveNodeGroupBuilder::build(), ControlFlowGraph::buildMBBFromBB(), llvm::LLVMTCEIRBuilder::buildTCECFG(), MachineConnectivityCheck::busConnectedToAnyFU(), MachineConnectivityCheck::busConnectedToDestination(), UtilizationStats::calculateForInstruction(), BusResource::canAssign(), SimpleBrokerDirector::canAssign(), ExecutionPipelineResource::canAssignDestination(), POMValidator::checkCompiledSimulatability(), POMValidator::checkConnectivity(), ExecutionPipelineResource::checkOperandAllowed(), POMValidator::checkSimulatability(), DataDependenceGraphBuilder::constructIndividualBB(), ProcedurePass::copyCfgToProcedure(), RegisterCopyAdder::countAndAddConnectionRegisterCopiesToRR(), TTAProgram::ProgramWriter::createCodeSection(), TTAProgram::CodeGenerator::createForLoopBufferInit(), ControlFlowGraph::createJumps(), POMDisassembler::createMove(), llvm::LLVMTCEIRBuilder::createMoveNode(), DataDependenceGraph::createRegisterAntiDependenciesBetweenNodes(), BFOptimization::destinationFU(), DataDependenceGraph::destRenamed(), POMDisassembler::disassemble(), MoveNodeDuplicator::duplicateMove(), ExecutionPipelineBroker::earliestFromDestination(), ExecutionPipelineBroker::earliestFromSource(), MoveNode::earliestResultReadCycle(), ControlFlowEdge::edgePredicateFromMove(), BUBasicBlockScheduler::finalizeSchedule(), BUBasicBlockScheduler::findBypassDestinations(), FUBroker::findDstFUOfMove(), CopyingDelaySlotFiller::findJumpImmediate(), ControlFlowGraph::findNextIndex(), MachineConnectivityCheck::findPossibleDestinationPorts(), DataDependenceGraphBuilder::findStaticRegisters(), DataDependenceGraph::firstRegisterCycle(), DataDependenceGraph::firstScheduledRegisterKill(), DataDependenceGraph::firstScheduledRegisterWrite(), DataDependenceGraph::firstScheduledRegisterWrites(), DataDependenceGraph::fixInterBBAntiEdges(), CompiledSimCodeGenerator::generateAddFUResult(), CompiledSimCodeGenerator::generateInstruction(), BF2Scheduler::getDstUnit(), CopyingDelaySlotFiller::getMove(), DataDependenceGraph::guardRenamed(), DataDependenceGraph::guardRestored(), SequentialScheduler::handleBasicBlock(), BUBasicBlockScheduler::handleDDG(), BasicBlockScheduler::handleDDG(), ProcedureTransferTracker::handleEvent(), RFAccessTracker::handleEvent(), BUBasicBlockScheduler::handleLoopDDG(), BasicBlockScheduler::handleLoopDDG(), BasicBlockScheduler::handleRemovedResultMoves(), llvm::LLVMTCEBuilder::hasAmbiguousASpaceRefs(), BFOptimization::immCountPreventsScheduling(), RegisterRenamer::initializeFreeRegisters(), BUMoveNodeSelector::initializeReadylist(), CriticalPathBBMoveNodeSelector::initializeReadylist(), InputFUBroker::isApplicable(), BusBroker::isAvailable(), BF2Scheduler::isDestinationUniversalReg(), ExecutionPipelineBroker::isMoveTrigger(), BF2Scheduler::isTrigger(), DataDependenceGraphBuilder::isTriggering(), BFOptimization::jumpGuardAvailableCycle(), DataDependenceGraph::lastRegisterCycle(), DataDependenceGraph::lastScheduledRegisterKill(), DataDependenceGraph::lastScheduledRegisterWrites(), DataDependenceEdge::latencySt(), ExecutionPipelineBroker::latestFromDestination(), ExecutionPipelineBroker::latestFromSource(), main(), DataDependenceGraph::mergeAndKeepSource(), DataDependenceGraph::mergeAndKeepUser(), BUMoveNodeSelector::mightBeReady(), CriticalPathBBMoveNodeSelector::mightBeReady(), BF2Scheduler::mustBeTrigger(), ExecutionPipelineResource::operandOverwritten(), ExecutionPipelineResource::operandPort(), ExecutionPipelineResource::operandTooLate(), BFLateBypassGuard::operator()(), BFDropPreShared::operator()(), BFShareOperandsLate::operator()(), BFLateBypasses::operator()(), BFShareOperand::operator()(), BFPostpassBypass::operator()(), BFShareOperandWithScheduled::operator()(), BFShareOperands::operator()(), BFPushMoveUp::operator()(), BFScheduleBU::operator()(), ExecutionPipelineResource::poConflictsWithInputPort(), DataDependenceGraphBuilder::processDestination(), SimProgramBuilder::processMove(), DataDependenceGraphBuilder::processOperand(), ProgramDependenceGraph::processPredicate(), DataDependenceGraphBuilder::processTriggerPO(), CycleLookBackSoftwareBypasser::removeDeadResults(), ProgramOperation::removeInputNode(), RegisterRenamer::renameDestinationRegister(), RegisterRenamer::renameLiveRange(), ExecutionPipelineResource::resourcesAllowTrigger(), ExecutionPipelineResource::resultCausesTriggerBetweenOperandSharing(), BF2Scheduler::revertBBLiveRangeBookkeepingForDestination(), BFOptimization::RFReadPortCountPreventsScheduling(), DataDependenceGraph::sanityCheck(), DataDependenceEdge::saveState(), BasicBlockScheduler::scheduleInputOperandTempMoves(), BUBasicBlockScheduler::scheduleInputOperandTempMoves(), BasicBlockScheduler::scheduleMove(), BUBasicBlockScheduler::scheduleMove(), SequentialScheduler::scheduleOperandWrites(), BasicBlockScheduler::scheduleOperandWrites(), BUBasicBlockScheduler::scheduleOperandWrites(), BasicBlockScheduler::scheduleResultReads(), BUBasicBlockScheduler::scheduleResultReads(), BUBasicBlockScheduler::scheduleResultReadTempMoves(), BasicBlockScheduler::scheduleResultReadTempMoves(), BUBasicBlockScheduler::scheduleRRMove(), BasicBlockScheduler::scheduleRRTempMoves(), BUBasicBlockScheduler::scheduleRRTempMoves(), ProgramOperation::setOperation(), BFOptimization::setPrologDstFUAnno(), DataDependenceGraph::sourceRenamed(), TTAProgram::BasicBlock::statistics(), ProgramOperation::switchInputs(), ProgramOperation::triggeringMove(), ExecutionPipelineResource::triggerTooEarly(), PostpassOperandSharer::tryRemoveOperandWrite(), PreOptimizer::tryToOptimizeAddressReg(), PreOptimizer::tryToRemoveGuardInversingOp(), BUBasicBlockScheduler::tryToSwitchInputs(), BasicBlockScheduler::tryToSwitchInputs(), InputPSocketBroker::unassign(), InputFUBroker::unassign(), SimpleBrokerDirector::unassign(), ExecutionPipelineResource::unassignDestination(), BFUpdateMoveOnBypass::undoOnlyMe(), BFRegCopyAfter::undoSplit(), DataDependenceGraph::unMergeUser(), BFUnscheduleFromBody::unscheduleOriginal(), BFUnscheduleMove::unscheduleOriginal(), BFMergeAndKeepUser::updateEdges(), CopyingDelaySlotFiller::writesRegister(), and SimpleIfConverter::writesRegister().

◆ destinationSocket()

Socket & TTAProgram::Move::destinationSocket ( ) const

Definition at line 388 of file Move.cc.

388  {
389  return *dst_->port().inputSocket();
390 }

References dst_, TTAMachine::Port::inputSocket(), and TTAProgram::Terminal::port().

Referenced by SimpleICOptimizer::addConnections(), and UtilizationStats::calculateForInstruction().

Here is the call graph for this function:

◆ guard()

MoveGuard & TTAProgram::Move::guard ( ) const

Returns the Boolean expression that guards this move.

Returns
the Boolean expression that guards this move.
Exceptions
InvalidDataif the move is not predicated.

Definition at line 345 of file Move.cc.

345  {
346  if (guard_ != NULL) {
347  return *guard_;
348  } else {
349  throw InvalidData(
350  __FILE__, __LINE__, "Move::guard()", "Move is not predicated.");
351  }
352 }

References guard_.

Referenced by CodeCompressorPlugin::addBitsForGuardField(), BusBroker::allAvailableResources(), LoopAnalyzer::analyze(), ResourceConstraintAnalyzer::analyzeRegisterAntideps(), SimpleBrokerDirector::assign(), BusBroker::assign(), UtilizationStats::calculateForInstruction(), InputPSocketResource::canAssign(), PSocketResource::canAssign(), OutputPSocketResource::canAssign(), SimpleBrokerDirector::canAssign(), MachineConnectivityCheck::canBypass(), MachineConnectivityCheck::canBypassOpToDst(), SimpleIfConverter::canConvert(), MachineConnectivityCheck::canSourceWriteToAnyDestinationPort(), BusBroker::canTransportImmediate(), CopyingDelaySlotFiller::collectMoves(), MachineConnectivityCheck::copyOpFUs(), TTAProgram::CodeGenerator::createBreakOperation(), TTAProgram::ProgramWriter::createCodeSection(), POMDisassembler::createMove(), DataDependenceGraph::destRenamed(), ControlFlowGraph::directJump(), MoveNodeDuplicator::duplicateMove(), ControlFlowEdge::edgePredicateFromMove(), DataDependenceGraph::exclusingGuards(), ExecutionPipelineResource::exclusiveMoves(), CopyingDelaySlotFiller::fillDelaySlots(), RegisterRenamer::findGuardRegisters(), CopyingDelaySlotFiller::findJump(), DataDependenceGraph::findLoopLimitAndIndex(), MachineConnectivityCheck::findPossibleDestinationPorts(), DataDependenceGraph::firstRegisterCycle(), DataDependenceGraph::fixInterBBAntiEdges(), CompiledSimCodeGenerator::generateGuardCondition(), CompiledSimCodeGenerator::generateGuardRead(), CopyingDelaySlotFiller::getMove(), guardLatency(), DataDependenceGraph::guardRenamed(), DataDependenceGraph::guardsAllowBypass(), CallsToJumps::handleControlFlowGraph(), BusBroker::hasGuard(), ControlFlowGraph::indirectJump(), PreOptimizer::inverseGuardsOfHeads(), OutputFUBroker::isApplicable(), BusBroker::isAvailable(), DataDependenceGraph::isNotAvoidable(), BF2Scheduler::jumpGuard(), DataDependenceGraph::lastRegisterCycle(), DataDependenceGraph::lastScheduledRegisterGuardReads(), BFLateBypassGuard::operator()(), BFEarlyGuardBypass::operator()(), BFRemoveGuard::operator()(), BFScheduleExact::operator()(), BFRemoveGuardFromSucc::operator()(), ProgramOperation::outputIndexFromGuardOfMove(), BF2Scheduler::possibleTempRegRFs(), DataDependenceGraphBuilder::processGuard(), SimProgramBuilder::processMove(), ProgramDependenceGraph::removeGuardedJump(), ControlFlowGraph::removeJumpToTarget(), RegisterRenamer::renameLiveRange(), ExecutionPipelineResource::resultPort(), DataDependenceGraph::sameGuards(), DataDependenceGraph::sanityCheck(), SequentialScheduler::scheduleMove(), BFRenameLiveRange::setGuard(), setGuard(), SimpleIfConverter::successors(), PostpassOperandSharer::tryRemoveOperandWrite(), BUBasicBlockScheduler::tryToOptimizeWaw(), and BasicBlockScheduler::tryToOptimizeWaw().

◆ guardLatency()

int TTAProgram::Move::guardLatency ( ) const

Returns the total guard latency of the guard of given move, or 0 if the move is unconditional.

Definition at line 503 of file Move.cc.

503  {
504  if (!isUnconditional()) {
505 
506  const TTAMachine::Guard& g = guard().guard();
507  const TTAMachine::RegisterGuard* rg =
508  dynamic_cast<const TTAMachine::RegisterGuard*>(&g);
509  if (rg != NULL) {
510  const TTAMachine::RegisterFile& rf =
511  *rg->registerFile();
512  return rf.guardLatency() +
514  } else {
515  return g.parentBus()->machine()->controlUnit()->globalGuardLatency();
516  }
517  } else {
518  return 0;
519  }
520 }

References TTAMachine::Machine::controlUnit(), TTAMachine::ControlUnit::globalGuardLatency(), TTAProgram::MoveGuard::guard(), guard(), TTAMachine::RegisterFile::guardLatency(), isUnconditional(), TTAMachine::Component::machine(), TTAMachine::Guard::parentBus(), and TTAMachine::RegisterGuard::registerFile().

Referenced by PostpassOperandSharer::tryRemoveOperandWrite(), and SimpleBrokerDirector::unassign().

Here is the call graph for this function:

◆ hasSourceFileName()

bool TTAProgram::Move::hasSourceFileName ( ) const

Returns true in case at least one source code filename is known for this move.

Definition at line 478 of file Move.cc.

478  {
479  return sourceFileName() != "";
480 }

References sourceFileName().

Referenced by POMDisassembler::disassemble(), and ProximDebuggerWindow::loadProgram().

Here is the call graph for this function:

◆ hasSourceLineNumber()

bool TTAProgram::Move::hasSourceLineNumber ( ) const

Returns true in case at least one source code line number is known for this move.

Definition at line 445 of file Move.cc.

445  {
446  return sourceLineNumber() != -1;
447 }

References sourceLineNumber().

Referenced by PRegionAliasAnalyzer::analyze(), POMDisassembler::disassemble(), DataDependenceGraph::dotString(), BasicBlockNode::toString(), and ProximDebuggerWindow::updateAnnotations().

Here is the call graph for this function:

◆ isCall()

bool TTAProgram::Move::isCall ( ) const

Tells whether the move triggers a call operation.

Returns
true if this move triggers a call operation.

Definition at line 190 of file Move.cc.

190  {
191 
192  if (dst_->isFUPort()) {
193  // there is already check. no need for double-check.
194  const TerminalFUPort* tfup = static_cast<const TerminalFUPort*>(dst_);
195  if (tfup->isOpcodeSetting()) {
196  if (tfup->operation().isCall()) {
197  return true;
198  }
199  } else {
200  Operation* tmpOp = &tfup->hintOperation();
201  if (tmpOp != &NullOperation::instance() &&
202  tfup->hintOperation().isCall()) {
203  return true;
204  }
205  }
206  }
207  return false;
208 }

References dst_, TTAProgram::TerminalFUPort::hintOperation(), NullOperation::instance(), Operation::isCall(), TTAProgram::Terminal::isFUPort(), TTAProgram::TerminalFUPort::isOpcodeSetting(), and TTAProgram::TerminalFUPort::operation().

Referenced by ControlFlowGraph::createBBEdges(), POMDisassembler::disassemble(), TTAProgram::Instruction::hasCall(), isFunctionCall(), and ProgramDependenceGraph::processRegion().

Here is the call graph for this function:

◆ isConditional()

bool TTAProgram::Move::isConditional ( ) const
inline

Definition at line 69 of file Move.hh.

69 { return !isUnconditional(); }

References isUnconditional().

Here is the call graph for this function:

◆ isControlFlowMove()

bool TTAProgram::Move::isControlFlowMove ( ) const

Tells whether the move triggers an operation that controls the program flow.

Returns
true if this move triggers a jump/call operation.

Definition at line 233 of file Move.cc.

233  {
234 
235  if (dst_->isFUPort()) {
236  const TerminalFUPort* tfup = dynamic_cast<const TerminalFUPort*>(dst_);
237  if (tfup->isOpcodeSetting()) {
238  if (tfup->operation().isControlFlowOperation()) {
239  return true;
240  }
241  } else {
242  Operation* tmpOp = &tfup->hintOperation();
243  if (tmpOp != &NullOperation::instance() &&
244  tfup->hintOperation().isControlFlowOperation()) {
245  return true;
246  }
247  }
248  }
249  return false;
250 }

References dst_, TTAProgram::TerminalFUPort::hintOperation(), NullOperation::instance(), Operation::isControlFlowOperation(), TTAProgram::Terminal::isFUPort(), TTAProgram::TerminalFUPort::isOpcodeSetting(), and TTAProgram::TerminalFUPort::operation().

Referenced by LoopPrologAndEpilogBuilder::build(), CycleLookBackSoftwareBypasser::bypass(), CopyingDelaySlotFiller::collectMoves(), ControlFlowGraph::computeLeadersFromJumpSuccessors(), DataDependenceGraph::edgeWeight(), BF2ScheduleFront::getPreferredLimits(), BasicBlockScheduler::handleLoopDDG(), TTAProgram::Instruction::hasControlFlowMove(), CriticalPathBBMoveNodeSelector::isReadyToBeScheduled(), BFPostpassBypass::operator()(), BFRescheduleResultClose::operator()(), BFPushMoveUp::operator()(), BFLateBypass::operator()(), BFPushAntidepDown::operator()(), BFPushMoveUp2::operator()(), BFScheduleBU::operator()(), RLBUPriorityCriticalPath::operator()(), DataDependenceGraphBuilder::processDestination(), SimProgramBuilder::processMove(), DataDependenceGraph::sanityCheck(), BF2ScheduleFront::scheduleFrontFromMove(), BasicBlockScheduler::scheduleMove(), BUBasicBlockScheduler::scheduleMove(), BFOptimization::usePrologMove(), and MoveNodeGroup::writesJumpGuard().

Here is the call graph for this function:

◆ isFunctionCall()

bool TTAProgram::Move::isFunctionCall ( ) const

Returns true in case the move performs a function call.

Currently two ways of calling functions are supported: the separate CALL operation, and regular JUMP with a separate RA save move. The latter is detected using an annotation in the JUMP move.

Definition at line 219 of file Move.cc.

219  {
220  if (isCall()) return true;
221  if (!isJump()) return false;
222 
224 }

References TTAProgram::ProgramAnnotation::ANN_JUMP_FUNCTION_CALL, TTAProgram::AnnotatedInstructionElement::hasAnnotations(), isCall(), and isJump().

Referenced by DataDependenceGraph::firstRegisterCycle(), ConstantAliasAnalyzer::getConstantAddress(), DataDependenceGraph::lastRegisterCycle(), DataDependenceGraphBuilder::processTriggerMemoryAndFUStates(), DataDependenceGraphBuilder::processTriggerRegistersAndOperations(), and DataDependenceGraph::sanityCheck().

Here is the call graph for this function:

◆ isInInstruction()

bool TTAProgram::Move::isInInstruction ( ) const

Return true if this move belongs to an instruction.

Returns
True if this move belongs to an instruction.

Definition at line 144 of file Move.cc.

144  {
145  return parent_ != NULL && parent_ != &NullInstruction::instance();
146 }

References TTAProgram::NullInstruction::instance(), and parent_.

Referenced by ITemplateBroker::assign(), POMDisassembler::createMove(), DataDependenceGraph::createSubgraph(), and ITemplateBroker::isAlreadyAssigned().

Here is the call graph for this function:

◆ isJump()

bool TTAProgram::Move::isJump ( ) const

Tells whether the move triggers a jump operation.

Returns
true if this move triggers a jump operation.

Definition at line 164 of file Move.cc.

164  {
165 
166  if (dst_->isFUPort()) {
167  // there is already check. no need for double-check.
168  const TerminalFUPort* tfup = static_cast<const TerminalFUPort*>(dst_);
169  if (tfup->isOpcodeSetting()) {
170  if (tfup->operation().isBranch()) {
171  return true;
172  }
173  } else {
174  Operation* tmpOp = &tfup->hintOperation();
175  if (tmpOp != &NullOperation::instance() &&
176  tfup->hintOperation().isBranch()) {
177  return true;
178  }
179  }
180  }
181  return false;
182 }

References dst_, TTAProgram::TerminalFUPort::hintOperation(), NullOperation::instance(), Operation::isBranch(), TTAProgram::Terminal::isFUPort(), TTAProgram::TerminalFUPort::isOpcodeSetting(), and TTAProgram::TerminalFUPort::operation().

Referenced by LoopAnalyzer::analyze(), ResourceConstraintAnalyzer::analyzeMoveNode(), SimpleIfConverter::appendBB(), BusBroker::canTransportImmediate(), CopyingDelaySlotFiller::collectMoves(), SimpleIfConverter::combineBlocks(), ControlFlowGraph::computeLeadersFromJumpSuccessors(), ProcedurePass::copyCfgToProcedure(), ControlFlowGraph::createBBEdges(), POMDisassembler::disassemble(), DataDependenceGraph::edgeWeight(), CopyingDelaySlotFiller::findJump(), BF2Scheduler::findJump(), BasicBlockNode::findJumps(), ProcedureTransferTracker::handleEvent(), ControlFlowGraph::hasInstructionAnotherJump(), TTAProgram::Instruction::hasJump(), PreOptimizer::inverseGuardsOfHeads(), isFunctionCall(), isReturn(), BFRemoveLoopChecksAndJump::operator()(), ProgramDependenceGraph::ProgramDependenceGraph(), ControlFlowGraph::removeJumpToTarget(), SimpleIfConverter::successors(), and BFOptimization::usePrologMove().

Here is the call graph for this function:

◆ isReturn()

bool TTAProgram::Move::isReturn ( ) const

Tells whether the move is used to return from a procedure.

Note: the detection is not always reliable, this method can return false even in case the move actually is a return in some cases.

Definition at line 259 of file Move.cc.

259  {
260 
261  if (!isJump()) {
262  return false;
263  }
264 
265  // direct gcu.ra -> gcu.jump.1 is considered a return
266  if (source().isRA()) {
267  return true;
268  }
269 
271  return true;
272  }
273 
274  return false;
275 }

References TTAProgram::ProgramAnnotation::ANN_STACKFRAME_PROCEDURE_RETURN, TTAProgram::AnnotatedInstructionElement::hasAnnotations(), isJump(), and source().

Referenced by RegisterCopyAdder::addConnectionRegisterCopies(), RegisterCopyAdder::addConnectionRegisterCopiesImmediate(), TTASimulationController::findProgramExitPoints(), TTAProgram::Instruction::hasReturn(), BFRegCopy::operator()(), DataDependenceGraphBuilder::processSource(), SequentialScheduler::scheduleMove(), BasicBlockScheduler::scheduleMove(), BUBasicBlockScheduler::scheduleMove(), and CopyingDelaySlotFiller::updateJumpsAndCfg().

Here is the call graph for this function:

◆ isTriggering()

bool TTAProgram::Move::isTriggering ( ) const

◆ isUnconditional()

bool TTAProgram::Move::isUnconditional ( ) const

Tells whether the move is predicated or not.

Returns
true if this move is not predicated.

Definition at line 154 of file Move.cc.

154  {
155  return (guard_ == NULL);
156 }

References guard_.

Referenced by CodeCompressorPlugin::addBitsForGuardField(), BFOptimization::addJumpGuardIfNeeded(), TTAProgram::Instruction::addMove(), BusBroker::allAvailableResources(), CopyingDelaySlotFiller::allowedToSpeculate(), SimpleBrokerDirector::assign(), BusBroker::assign(), CycleLookBackSoftwareBypasser::bypass(), CycleLookBackSoftwareBypasser::bypassNode(), UtilizationStats::calculateForInstruction(), InputPSocketResource::canAssign(), PSocketResource::canAssign(), OutputPSocketResource::canAssign(), SimpleBrokerDirector::canAssign(), BFOptimization::canAssign(), MachineConnectivityCheck::canBypass(), MachineConnectivityCheck::canBypassOpToDst(), SimpleIfConverter::canConvert(), MachineConnectivityCheck::canSourceWriteToAnyDestinationPort(), BusBroker::canTransportImmediate(), DataDependenceGraphBuilder::checkAndCreateMemAntideps(), CopyingDelaySlotFiller::collectMoves(), SimpleIfConverter::combineBlocks(), DataDependenceGraphBuilder::constructIndividualBB(), copy(), MachineConnectivityCheck::copyOpFUs(), BFRegCopy::createAntidepsForReg(), RegisterCopyAdder::createAntidepsForReg(), TTAProgram::CodeGenerator::createBreakOperation(), TTAProgram::ProgramWriter::createCodeSection(), POMDisassembler::createMove(), DataDependenceGraph::createRegisterAntiDependenciesBetweenNodes(), DataDependenceGraphBuilder::createTriggerDependencies(), DataDependenceGraph::destRenamed(), ControlFlowGraph::directJump(), MoveNodeDuplicator::duplicateMove(), ControlFlowEdge::edgePredicateFromMove(), DataDependenceGraph::exclusingGuards(), ExecutionPipelineResource::exclusiveMoves(), CopyingDelaySlotFiller::fillDelaySlots(), RegisterRenamer::findGuardRegisters(), CopyingDelaySlotFiller::findJump(), BF2Scheduler::findJump(), DataDependenceGraph::findLiveRange(), DataDependenceGraph::firstRegisterCycle(), DataDependenceGraph::firstScheduledRegisterKill(), DataDependenceGraph::fixInterBBAntiEdges(), CompiledSimCodeGenerator::generateInstruction(), CopyingDelaySlotFiller::getMove(), guardLatency(), DataDependenceGraph::guardRenamed(), DataDependenceGraph::guardsAllowBypass(), CallsToJumps::handleControlFlowGraph(), SimpleIfConverter::hasConditionals(), SimpleBrokerDirector::hasGuard(), ControlFlowGraph::indirectJump(), PreOptimizer::inverseGuardsOfHeads(), OutputFUBroker::isApplicable(), BusBroker::isAvailable(), isConditional(), DataDependenceGraph::isNotAvoidable(), BF2Scheduler::jumpGuard(), DataDependenceGraph::lastRegisterCycle(), DataDependenceGraph::lastScheduledRegisterGuardReads(), DataDependenceGraph::lastScheduledRegisterKill(), CompiledSimulation::moveExecutionCount(), ExecutionPipelineResource::operandAllowedAtCycle(), BFLateBypassGuard::operator()(), BFSchedulePreLoopShared::operator()(), BFShareOperandsLate::operator()(), BFTryRemoveGuard::operator()(), BFRemoveGuardsFromSuccs::operator()(), BFShareOperands::operator()(), BFRemoveGuard::operator()(), BFScheduleExact::operator()(), ProgramOperation::outputIndexFromGuardOfMove(), BF2Scheduler::possibleTempRegRFs(), DataDependenceGraphBuilder::processMemWrite(), SimProgramBuilder::processMove(), DataDependenceGraphBuilder::processRegWrite(), ControlFlowGraph::removeJumpToTarget(), ExecutionPipelineResource::resultAllowedAtCycle(), DataDependenceGraph::resultUsed(), BFOptimization::rmEC(), BFOptimization::rmLC(), DataDependenceGraph::rWawRawEdgesOutUncond(), DataDependenceGraph::sameGuards(), DataDependenceGraph::sanityCheck(), SequentialScheduler::scheduleMove(), BasicBlockScheduler::scheduleMove(), BUBasicBlockScheduler::scheduleMove(), BFOptimization::setJumpGuard(), SimpleIfConverter::successors(), PostpassOperandSharer::tryRemoveOperandWrite(), CopyingDelaySlotFiller::tryToAssignNodes(), CopyingDelaySlotFiller::tryToAssignOtherMovesOfOp(), BUBasicBlockScheduler::tryToOptimizeWaw(), and BasicBlockScheduler::tryToOptimizeWaw().

◆ operator=()

Move& TTAProgram::Move::operator= ( const Move )
private

Assignment not allowed.

◆ parent()

Instruction & TTAProgram::Move::parent ( ) const

◆ setBus()

void TTAProgram::Move::setBus ( const TTAMachine::Bus bus)

◆ setDestination()

void TTAProgram::Move::setDestination ( Terminal dst)

◆ setGuard()

void TTAProgram::Move::setGuard ( MoveGuard guard)

◆ setParent()

void TTAProgram::Move::setParent ( Instruction ins)

Set a new parent for the move.

Parameters
insThe new parent.

Definition at line 130 of file Move.cc.

130  {
131  if (&ins == &NullInstruction::instance()) {
132  parent_ = NULL;
133  } else {
134  parent_ = &ins;
135  }
136 }

References TTAProgram::NullInstruction::instance(), and parent_.

Referenced by TTAProgram::Instruction::addMove(), and TTAProgram::Instruction::removeMove().

Here is the call graph for this function:

◆ setSource()

void TTAProgram::Move::setSource ( Terminal src)

◆ source()

Terminal & TTAProgram::Move::source ( ) const

Returns the source of this move.

Returns
the source of this move.

Definition at line 302 of file Move.cc.

302  {
303  return *src_;
304 }

References src_.

Referenced by CodeCompressorPlugin::addBitsForSourceField(), llvm::LLVMTCEBuilder::addCandidateLSUAnnotations(), RegisterCopyAdder::addConnectionRegisterCopies(), RegisterCopyAdder::addConnectionRegisterCopiesImmediate(), SimpleICOptimizer::addConnections(), TTAProgram::Instruction::addMove(), ProximMachineStateWindow::addMoves(), ProgramOperation::addNode(), ProgramOperation::addOutputNode(), StaticProgramAnalyzer::addProgram(), OutputFUBroker::allAvailableResources(), OutputPSocketBroker::allAvailableResources(), IUBroker::allAvailableResources(), BusBroker::allAvailableResources(), LoopAnalyzer::analyze(), OffsetAliasAnalyzer::analyze(), ResourceConstraintAnalyzer::analyzeMoveNode(), ResourceConstraintAnalyzer::analyzeRegisterAntideps(), OutputPSocketResource::assign(), OutputFUBroker::assign(), OutputPSocketBroker::assign(), IUResource::assign(), ITemplateBroker::assign(), SimpleBrokerDirector::assign(), IUBroker::assign(), BFOptimization::assignCopyToPrologEpilog(), BFSwapOperands::BFSwapOperands(), MoveNodeGroupBuilder::build(), LLVMTCEDataDependenceGraphBuilder::buildLocalDDG(), ControlFlowGraph::buildMBBFromBB(), CycleLookBackSoftwareBypasser::bypassNode(), UtilizationStats::calculateForInstruction(), OutputPSocketResource::canAssign(), BusResource::canAssign(), IUResource::canAssign(), SimpleBrokerDirector::canAssign(), BFOptimization::canAssign(), ExecutionPipelineResource::canAssignSource(), MachineConnectivityCheck::canBypass(), SimpleIfConverter::canConvert(), MachineConnectivityCheck::canSourceWriteToAnyDestinationPort(), BusBroker::canTransportImmediate(), POMValidator::checkConnectivity(), CopyingDelaySlotFiller::checkImmediatesAfter(), CopyingDelaySlotFiller::collectMoves(), ControlFlowGraph::computeLeadersFromJumpSuccessors(), DataDependenceGraphBuilder::constructIndividualBB(), ControlFlowGraph::convertBBRefsToInstRefs(), TTAProgram::Program::convertSymbolRefsToInsRefs(), ProcedurePass::copyCfgToProcedure(), RegisterCopyAdder::countAndAddConnectionRegisterCopiesToRR(), BF2Scheduler::countLoopInvariantValueUsages(), ControlFlowGraph::createBBEdges(), TTAProgram::ProgramWriter::createCodeSection(), TTAProgram::CodeGenerator::createForLoopBufferInit(), TTAProgram::TPEFProgramFactory::createInstruction(), ControlFlowGraph::createJumps(), POMDisassembler::createMove(), llvm::LLVMTCEIRBuilder::createMoveNode(), DataDependenceGraph::createRegisterAntiDependenciesBetweenNodes(), DataDependenceGraph::destRenamed(), MemoryAliasAnalyzer::detectConstantScale(), POMDisassembler::disassemble(), MoveNodeDuplicator::duplicateMove(), ExecutionPipelineBroker::earliestFromSource(), CopyingDelaySlotFiller::fillDelaySlots(), BUBasicBlockScheduler::finalizeSchedule(), LoopAnalyzer::findEndCond(), MemoryAliasAnalyzer::findIncrement(), LoopAnalyzer::findInitAndUpdate(), CopyingDelaySlotFiller::findJumpImmediate(), ControlFlowGraph::findLimmWrite(), DataDependenceGraph::findLoopIndexUpdate(), DataDependenceGraph::findLoopLimitAndIndex(), MachineConnectivityCheck::findPossibleDestinationPorts(), MachineConnectivityCheck::findPossibleSourcePorts(), DataDependenceGraphBuilder::findStaticRegisters(), DataDependenceGraph::firstRegisterCycle(), DataDependenceGraph::firstScheduledRegisterRead(), DataDependenceGraph::firstScheduledRegisterReads(), TTAProgram::Program::fixInstructionReferences(), DataDependenceGraph::fixInterBBAntiEdges(), CompiledSimCodeGenerator::generateAddFUResult(), CompiledSimCodeGenerator::generateInstruction(), ProgramImageGenerator::generateProgramImage(), ConstantAliasAnalyzer::getConstantAddress(), getInstructionReferenceTerminals(), CopyingDelaySlotFiller::getMove(), StackAliasAnalyzer::getStackOffset(), CallsToJumps::handleControlFlowGraph(), BasicBlockScheduler::handleDDG(), RFAccessTracker::handleEvent(), BUBasicBlockScheduler::handleLoopDDG(), CodeCompressorPlugin::immediateTerminal(), IUResource::immediateValue(), IUResource::immediateWriteCycle(), ControlFlowGraph::indirectJump(), RegisterRenamer::initializeFreeRegisters(), OffsetAliasAnalyzer::isAddressTraceable(), OutputPSocketBroker::isAnyResourceAvailable(), OutputFUBroker::isApplicable(), OutputPSocketBroker::isApplicable(), BusBroker::isAvailable(), isReturn(), MoveNode::isSourceReg(), BF2Scheduler::isSourceUniversalReg(), DataDependenceGraph::lastRegisterCycle(), DataDependenceGraph::lastScheduledRegisterRead(), DataDependenceGraph::lastScheduledRegisterReads(), ExecutionPipelineBroker::latestFromDestination(), ExecutionPipelineBroker::latestFromSource(), MoveNode::latestTriggerWriteCycle(), main(), DataDependenceGraph::mergeAndKeepSource(), DataDependenceGraph::mergeAndKeepUser(), BUMoveNodeSelector::mightBeReady(), CriticalPathBBMoveNodeSelector::mightBeReady(), LoopPrologAndEpilogBuilder::moveJumpDestination(), ExecutionPipelineResource::operandSharePreventsTriggerForScheduledResult(), BFLateBypassGuard::operator()(), BFEarlyGuardBypass::operator()(), BFShareOperandsLate::operator()(), BFRenameSource::operator()(), BFPostpassBypass::operator()(), BFShareOperandWithScheduled::operator()(), BFShareOperandLate::operator()(), ResourceConstraintAnalyzer::optimalScheduleResourceUsage(), LoopPrologAndEpilogBuilder::optimizeProlog(), ProgramOperation::outputIndexOfMove(), BF2Scheduler::preAllocateFunctionUnits(), BF2ScheduleFront::prefResultCycle(), SimProgramBuilder::processMove(), DataDependenceGraphBuilder::processSource(), CycleLookBackSoftwareBypasser::removeDeadResults(), ControlFlowGraph::removeJumpToTarget(), ProgramOperation::removeOutputNode(), RegisterRenamer::renameLiveRange(), RegisterRenamer::renameSourceRegister(), TTAProgram::Program::replaceUniversalAddressSpaces(), ExecutionPipelineResource::resultPort(), BF2Scheduler::revertBBLiveRangeBookkeepingForSource(), BFOptimization::RFReadPortCountPreventsScheduling(), BFOptimization::rmEC(), BFOptimization::rmLC(), DataDependenceGraph::sanityCheck(), BasicBlockScheduler::scheduleMove(), BUBasicBlockScheduler::scheduleOperand(), BUBasicBlockScheduler::scheduleRRMove(), MemoryAliasAnalyzer::searchLoopIndexBasedIncrement(), ProgramOperation::setOperation(), BFOptimization::setPrologSrcFUAnno(), BFOptimization::sourceFU(), DataDependenceGraph::sourceRenamed(), TTAProgram::BasicBlock::statistics(), ExecutionPipelineResource::testTriggerResult(), PostpassOperandSharer::tryRemoveOperandWrite(), CopyingDelaySlotFiller::tryToAssignNodes(), PreOptimizer::tryToOptimizeAddressReg(), PreOptimizer::tryToPrecalcConstantAdd(), PreOptimizer::tryToRemoveEq(), PreOptimizer::tryToRemoveGuardInversingOp(), PreOptimizer::tryToRemoveXor(), LoopAnalyzer::tryTrackCommonAncestor(), OutputFUBroker::unassign(), IUResource::unassign(), SimpleBrokerDirector::unassign(), BFCopyRegWithOp::undoSplit(), BFRegCopyBefore::undoSplit(), DataDependenceGraph::unMergeUser(), BFUnscheduleMove::unscheduleOriginal(), BFUnscheduleFromBody::unscheduleOriginal(), BFMergeAndKeepUser::updateEdges(), BasicBlockNode::updateHWloopLength(), and CopyingDelaySlotFiller::updateJumpsAndCfg().

◆ sourceFileName()

std::string TTAProgram::Move::sourceFileName ( ) const

Returns one source code filename for this move.

Returns "" if no source code line info has been set.

Definition at line 488 of file Move.cc.

488  {
489  std::string fileName = "";
492  if (hasAnnotations(id)) {
493  fileName=annotation(0,id).stringValue();
494  }
495  return fileName;
496 
497 }

References TTAProgram::ProgramAnnotation::ANN_DEBUG_SOURCE_CODE_PATH, TTAProgram::AnnotatedInstructionElement::annotation(), TTAProgram::AnnotatedInstructionElement::hasAnnotations(), and TTAProgram::ProgramAnnotation::stringValue().

Referenced by POMDisassembler::disassemble(), hasSourceFileName(), ProximDebuggerWindow::loadProgram(), and ProximDebuggerWindow::updateAnnotations().

Here is the call graph for this function:

◆ sourceLineNumber()

int TTAProgram::Move::sourceLineNumber ( ) const

Returns one source code line number for this move.

There can be at most two source code line numbers associated to a move in case it's bypassed. This method returns the smaller of them.

Returns -1 if no source code line info has been set.

Definition at line 459 of file Move.cc.

459  {
460  int lineNumber = -1;
463  if (hasAnnotations(id)) {
464  lineNumber = INT_MAX;
465  for (int i = 0; i < annotationCount(id); ++i) {
466  lineNumber = std::min(lineNumber, annotation(i, id).intValue());
467  }
468  }
469  return lineNumber;
470 }

References TTAProgram::ProgramAnnotation::ANN_DEBUG_SOURCE_CODE_LINE, TTAProgram::AnnotatedInstructionElement::annotation(), TTAProgram::AnnotatedInstructionElement::annotationCount(), and TTAProgram::AnnotatedInstructionElement::hasAnnotations().

Referenced by PRegionAliasAnalyzer::analyze(), POMDisassembler::disassemble(), DataDependenceGraph::dotString(), hasSourceLineNumber(), BasicBlockNode::toString(), and ProximDebuggerWindow::updateAnnotations().

Here is the call graph for this function:

◆ sourceSocket()

Socket & TTAProgram::Move::sourceSocket ( ) const

Definition at line 393 of file Move.cc.

393  {
394  if (src_->isImmediate()) {
395  throw WrongSubclass(
396  __FILE__, __LINE__, "Move::sourceSocket()",
397  "Move source is an immediate.");
398  } else {
399  return *src_->port().outputSocket();
400  }
401 }

References TTAProgram::Terminal::isImmediate(), TTAMachine::Port::outputSocket(), TTAProgram::Terminal::port(), and src_.

Referenced by SimpleICOptimizer::addConnections(), and UtilizationStats::calculateForInstruction().

Here is the call graph for this function:

◆ toString()

std::string TTAProgram::Move::toString ( ) const

Member Data Documentation

◆ bus_

const TTAMachine::Bus* TTAProgram::Move::bus_
private

The bus where the transport is carried.

Definition at line 112 of file Move.hh.

Referenced by bus(), copy(), and setBus().

◆ dst_

Terminal* TTAProgram::Move::dst_
private

The destination of the move.

Definition at line 110 of file Move.hh.

Referenced by copy(), destination(), destinationSocket(), isCall(), isControlFlowMove(), isJump(), isTriggering(), setDestination(), and ~Move().

◆ guard_

MoveGuard* TTAProgram::Move::guard_
private

The boolean expression that predicates the move.

Definition at line 114 of file Move.hh.

Referenced by copy(), guard(), isUnconditional(), setGuard(), and ~Move().

◆ parent_

Instruction* TTAProgram::Move::parent_
private

Parent instruction of the move.

Definition at line 106 of file Move.hh.

Referenced by isInInstruction(), parent(), and setParent().

◆ src_

Terminal* TTAProgram::Move::src_
private

The source of the move.

Definition at line 108 of file Move.hh.

Referenced by copy(), setSource(), source(), sourceSocket(), and ~Move().


The documentation for this class was generated from the following files:
TTAMachine::Guard
Definition: Guard.hh:55
TTAProgram::Move::sourceFileName
std::string sourceFileName() const
Definition: Move.cc:488
TTAProgram::Terminal::isFUPort
virtual bool isFUPort() const
Definition: Terminal.cc:118
TTAMachine::Port::inputSocket
virtual Socket * inputSocket() const
Definition: Port.cc:261
TTAProgram::ProgramAnnotation::ANN_JUMP_FUNCTION_CALL
@ ANN_JUMP_FUNCTION_CALL
The JUMP in the annotated move is a function call and should be treated as such in the data dependenc...
Definition: ProgramAnnotation.hh:129
TTAProgram::Move::dst_
Terminal * dst_
The destination of the move.
Definition: Move.hh:110
TTAProgram::Move::isUnconditional
bool isUnconditional() const
Definition: Move.cc:154
TTAProgram::ProgramAnnotation::stringValue
std::string stringValue() const
Definition: ProgramAnnotation.cc:90
TTAProgram::Move::sourceLineNumber
int sourceLineNumber() const
Definition: Move.cc:459
TTAProgram::Move::bus
const TTAMachine::Bus & bus() const
Definition: Move.cc:373
TTAProgram::ProgramAnnotation::ANN_DEBUG_SOURCE_CODE_LINE
@ ANN_DEBUG_SOURCE_CODE_LINE
The line number in the source code file the annotated move originates from.
Definition: ProgramAnnotation.hh:138
NullOperation::instance
static NullOperation & instance()
TTAProgram::ProgramAnnotation::Id
Id
the ID in TPEF is 24 bits, here enum
Definition: ProgramAnnotation.hh:52
TTAMachine::Machine::controlUnit
virtual ControlUnit * controlUnit() const
Definition: Machine.cc:345
TTAProgram::Move::isCall
bool isCall() const
Definition: Move.cc:190
InvalidData
Definition: Exception.hh:149
WrongSubclass
Definition: Exception.hh:336
TTAMachine::RegisterGuard
Definition: Guard.hh:137
TTAProgram::Move::guard
MoveGuard & guard() const
Definition: Move.cc:345
NullOperation::isControlFlowOperation
virtual bool isControlFlowOperation() const
Definition: Operation.cc:900
TTAProgram::Move::src_
Terminal * src_
The source of the move.
Definition: Move.hh:108
__func__
#define __func__
Definition: Application.hh:67
TTAProgram::Move::bus_
const TTAMachine::Bus * bus_
The bus where the transport is carried.
Definition: Move.hh:112
TTAProgram::NullInstruction::instance
static NullInstruction & instance()
Definition: NullInstruction.cc:66
Operation
Definition: Operation.hh:59
TTAProgram::AnnotatedInstructionElement::hasAnnotations
bool hasAnnotations(ProgramAnnotation::Id id=ProgramAnnotation::ANN_UNDEF_ID) const
Definition: AnnotatedInstructionElement.cc:165
IllegalRegistration
Definition: Exception.hh:532
TTAProgram::AnnotatedInstructionElement::annotation
ProgramAnnotation annotation(int index, ProgramAnnotation::Id id=ProgramAnnotation::ANN_UNDEF_ID) const
Definition: AnnotatedInstructionElement.cc:100
TTAProgram::Move::parent_
Instruction * parent_
Parent instruction of the move.
Definition: Move.hh:106
TTAMachine::Guard::parentBus
virtual Bus * parentBus() const
POMDisassembler::disassemble
static std::string disassemble(const TTAProgram::Move &move)
Definition: POMDisassembler.cc:629
TTAProgram::ProgramAnnotation::ANN_STACKFRAME_PROCEDURE_RETURN
@ ANN_STACKFRAME_PROCEDURE_RETURN
precedure return jmp
Definition: ProgramAnnotation.hh:76
TTAMachine::Component::machine
virtual Machine * machine() const
TTAProgram::Terminal::copy
virtual Terminal * copy() const =0
TTAMachine::Port::outputSocket
virtual Socket * outputSocket() const
Definition: Port.cc:281
TTAProgram::Move::source
Terminal & source() const
Definition: Move.cc:302
TTAProgram::ProgramAnnotation::ANN_DEBUG_SOURCE_CODE_PATH
@ ANN_DEBUG_SOURCE_CODE_PATH
debugging info annotations
Definition: ProgramAnnotation.hh:134
TTAProgram::MoveGuard::copy
MoveGuard * copy() const
Definition: MoveGuard.cc:96
TTAProgram::Terminal::port
virtual const TTAMachine::Port & port() const
Definition: Terminal.cc:378
TTAProgram::Move::guard_
MoveGuard * guard_
The boolean expression that predicates the move.
Definition: Move.hh:114
TTAMachine::RegisterFile::guardLatency
virtual int guardLatency() const
Definition: RegisterFile.cc:333
TTAMachine::RegisterFile
Definition: RegisterFile.hh:47
TTAProgram::MoveGuard::guard
const TTAMachine::Guard & guard() const
Definition: MoveGuard.cc:86
TTAProgram::Move::isJump
bool isJump() const
Definition: Move.cc:164
TTAMachine::ControlUnit::globalGuardLatency
int globalGuardLatency() const
TTAProgram::Terminal::isImmediate
virtual bool isImmediate() const
Definition: Terminal.cc:63
NullOperation::isCall
virtual bool isCall() const
Definition: Operation.cc:910
TTAMachine::RegisterGuard::registerFile
const RegisterFile * registerFile() const
NullOperation::isBranch
virtual bool isBranch() const
Definition: Operation.cc:920
TTAProgram::AnnotatedInstructionElement::annotationCount
int annotationCount(ProgramAnnotation::Id id=ProgramAnnotation::ANN_UNDEF_ID) const
Definition: AnnotatedInstructionElement.cc:133