OpenASIP 2.2
Loading...
Searching...
No Matches
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.
 
Moveoperator= (const Move &)
 Assignment not allowed.
 

Private Attributes

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

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}
MoveGuard * guard_
The boolean expression that predicates the move.
Definition Move.hh:114
MoveGuard & guard() const
Definition Move.cc:345
const TTAMachine::Bus * bus_
The bus where the transport is carried.
Definition Move.hh:112
Terminal * dst_
The destination of the move.
Definition Move.hh:110
Terminal * src_
The source of the move.
Definition Move.hh:108
Instruction * parent_
Parent instruction of the move.
Definition Move.hh:106
const TTAMachine::Bus & bus() const
Definition Move.cc:373

◆ 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(), BFOptimization::assign(), SimpleBrokerDirector::assign(), BusBroker::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(), BFLateBypass::operator()(), BFLateBypassGuard::operator()(), BFPushAntidepDown::operator()(), BFScheduleBU::operator()(), BFScheduleTD::operator()(), BFShareOperandLate::operator()(), BFShareOperandWithScheduled::operator()(), SimProgramBuilder::processMove(), ControlFlowGraph::removeJumpToTarget(), RegisterRenamer::renameLiveRange(), AssignmentPlan::resetAssignments(), BFUnscheduleFromBody::returnOriginal(), BFUnscheduleMove::returnOriginal(), BFShareOperandLate::revert(), setBus(), PostpassOperandSharer::tryRemoveOperandWrite(), PreOptimizer::tryToRemoveGuardInversingOp(), BusBroker::unassign(), BFRescheduleMove::undoOnlyMe(), BFScheduleBU::undoOnlyMe(), BFScheduleTD::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}
int annotationCount(ProgramAnnotation::Id id=ProgramAnnotation::ANN_UNDEF_ID) const
ProgramAnnotation annotation(int index, ProgramAnnotation::Id id=ProgramAnnotation::ANN_UNDEF_ID) const
MoveGuard * copy() const
Definition MoveGuard.cc:96
bool isUnconditional() const
Definition Move.cc:154
static NullInstruction & instance()
virtual Terminal * copy() const =0

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::addConnectionRegisterCopies(), RegisterCopyAdder::addConnectionRegisterCopiesImmediate(), ProgramOperation::addInputNode(), TTAProgram::Instruction::addMove(), ProximMachineStateWindow::addMoves(), ProgramOperation::addNode(), StaticProgramAnalyzer::addProgram(), BusBroker::allAvailableResources(), InputFUBroker::allAvailableResources(), InputPSocketBroker::allAvailableResources(), CopyingDelaySlotFiller::allowedToSpeculate(), ResourceConstraintAnalyzer::analyzeMoveNode(), ResourceConstraintAnalyzer::analyzeRegisterAntideps(), SimpleBrokerDirector::assign(), InputFUBroker::assign(), InputPSocketBroker::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(), 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(), BasicBlockScheduler::handleLoopDDG(), BUBasicBlockScheduler::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(), BFDropPreShared::operator()(), BFLateBypasses::operator()(), BFLateBypassGuard::operator()(), BFPushMoveUp::operator()(), BFScheduleBU::operator()(), BFShareOperand::operator()(), BFShareOperands::operator()(), BFShareOperandsLate::operator()(), BFShareOperandWithScheduled::operator()(), BFPostpassBypass::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(), BUBasicBlockScheduler::scheduleMove(), BasicBlockScheduler::scheduleMove(), BasicBlockScheduler::scheduleOperandWrites(), SequentialScheduler::scheduleOperandWrites(), BUBasicBlockScheduler::scheduleOperandWrites(), BasicBlockScheduler::scheduleResultReads(), BUBasicBlockScheduler::scheduleResultReads(), BasicBlockScheduler::scheduleResultReadTempMoves(), BUBasicBlockScheduler::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(), BasicBlockScheduler::tryToSwitchInputs(), BUBasicBlockScheduler::tryToSwitchInputs(), InputFUBroker::unassign(), InputPSocketBroker::unassign(), SimpleBrokerDirector::unassign(), ExecutionPipelineResource::unassignDestination(), BFUpdateMoveOnBypass::undoOnlyMe(), BFRegCopyAfter::undoSplit(), DataDependenceGraph::unMergeUser(), BFUnscheduleFromBody::unscheduleOriginal(), BFUnscheduleMove::unscheduleOriginal(), BFMergeAndKeepUser::updateEdges(), SimpleIfConverter::writesRegister(), and CopyingDelaySlotFiller::writesRegister().

◆ destinationSocket()

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

Definition at line 388 of file Move.cc.

388 {
389 return *dst_->port().inputSocket();
390}
virtual Socket * inputSocket() const
Definition Port.cc:261
virtual const TTAMachine::Port & port() const
Definition Terminal.cc:378

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(), OutputPSocketResource::canAssign(), PSocketResource::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()(), BFScheduleExact::operator()(), BFEarlyGuardBypass::operator()(), BFRemoveGuard::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(), setGuard(), BFRenameLiveRange::setGuard(), SimpleIfConverter::successors(), PostpassOperandSharer::tryRemoveOperandWrite(), BasicBlockScheduler::tryToOptimizeWaw(), and BUBasicBlockScheduler::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 {
516 }
517 } else {
518 return 0;
519 }
520}
virtual Machine * machine() const
int globalGuardLatency() const
virtual Bus * parentBus() const
virtual ControlUnit * controlUnit() const
Definition Machine.cc:345
virtual int guardLatency() const
const RegisterFile * registerFile() const
const TTAMachine::Guard & guard() const
Definition MoveGuard.cc:86

References TTAMachine::Machine::controlUnit(), TTAMachine::ControlUnit::globalGuardLatency(), guard(), TTAProgram::MoveGuard::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}
std::string sourceFileName() const
Definition Move.cc:488

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}
int sourceLineNumber() const
Definition Move.cc:459

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}
virtual bool isCall() const
Definition Operation.cc:910
static NullOperation & instance()
virtual bool isFUPort() const
Definition Terminal.cc:118

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}
virtual bool isControlFlowOperation() const
Definition Operation.cc:900

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(), BFLateBypass::operator()(), BFPushAntidepDown::operator()(), BFPushMoveUp::operator()(), BFPushMoveUp2::operator()(), BFRescheduleResultClose::operator()(), BFScheduleBU::operator()(), BFPostpassBypass::operator()(), RLBUPriorityCriticalPath::operator()(), DataDependenceGraphBuilder::processDestination(), SimProgramBuilder::processMove(), DataDependenceGraph::sanityCheck(), BF2ScheduleFront::scheduleFrontFromMove(), BUBasicBlockScheduler::scheduleMove(), BasicBlockScheduler::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}
bool hasAnnotations(ProgramAnnotation::Id id=ProgramAnnotation::ANN_UNDEF_ID) const
bool isJump() const
Definition Move.cc:164
bool isCall() const
Definition Move.cc:190
@ ANN_JUMP_FUNCTION_CALL
The JUMP in the annotated move is a function call and should be treated as such in the data dependenc...

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}
virtual bool isBranch() const
Definition Operation.cc:920

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(), BF2Scheduler::findJump(), CopyingDelaySlotFiller::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}
Terminal & source() const
Definition Move.cc:302
@ ANN_STACKFRAME_PROCEDURE_RETURN
precedure return jmp

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(), BUBasicBlockScheduler::scheduleMove(), BasicBlockScheduler::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(), OutputPSocketResource::canAssign(), PSocketResource::canAssign(), BFOptimization::canAssign(), SimpleBrokerDirector::canAssign(), MachineConnectivityCheck::canBypass(), MachineConnectivityCheck::canBypassOpToDst(), SimpleIfConverter::canConvert(), MachineConnectivityCheck::canSourceWriteToAnyDestinationPort(), BusBroker::canTransportImmediate(), DataDependenceGraphBuilder::checkAndCreateMemAntideps(), CopyingDelaySlotFiller::collectMoves(), SimpleIfConverter::combineBlocks(), DataDependenceGraphBuilder::constructIndividualBB(), copy(), MachineConnectivityCheck::copyOpFUs(), RegisterCopyAdder::createAntidepsForReg(), BFRegCopy::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(), BF2Scheduler::findJump(), CopyingDelaySlotFiller::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()(), BFScheduleExact::operator()(), BFSchedulePreLoopShared::operator()(), BFShareOperands::operator()(), BFShareOperandsLate::operator()(), BFRemoveGuard::operator()(), BFRemoveGuardsFromSuccs::operator()(), BFTryRemoveGuard::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(), BUBasicBlockScheduler::scheduleMove(), BasicBlockScheduler::scheduleMove(), BFOptimization::setJumpGuard(), SimpleIfConverter::successors(), PostpassOperandSharer::tryRemoveOperandWrite(), CopyingDelaySlotFiller::tryToAssignNodes(), CopyingDelaySlotFiller::tryToAssignOtherMovesOfOp(), BasicBlockScheduler::tryToOptimizeWaw(), and BUBasicBlockScheduler::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::addConnectionRegisterCopies(), RegisterCopyAdder::addConnectionRegisterCopiesImmediate(), SimpleICOptimizer::addConnections(), TTAProgram::Instruction::addMove(), ProximMachineStateWindow::addMoves(), ProgramOperation::addNode(), ProgramOperation::addOutputNode(), StaticProgramAnalyzer::addProgram(), BusBroker::allAvailableResources(), OutputFUBroker::allAvailableResources(), OutputPSocketBroker::allAvailableResources(), IUBroker::allAvailableResources(), LoopAnalyzer::analyze(), OffsetAliasAnalyzer::analyze(), ResourceConstraintAnalyzer::analyzeMoveNode(), ResourceConstraintAnalyzer::analyzeRegisterAntideps(), IUResource::assign(), OutputPSocketResource::assign(), IUResource::assign(), SimpleBrokerDirector::assign(), ITemplateBroker::assign(), OutputFUBroker::assign(), OutputPSocketBroker::assign(), IUBroker::assign(), BFOptimization::assignCopyToPrologEpilog(), BFSwapOperands::BFSwapOperands(), MoveNodeGroupBuilder::build(), LLVMTCEDataDependenceGraphBuilder::buildLocalDDG(), ControlFlowGraph::buildMBBFromBB(), CycleLookBackSoftwareBypasser::bypassNode(), UtilizationStats::calculateForInstruction(), OutputPSocketResource::canAssign(), BusResource::canAssign(), IUResource::canAssign(), BFOptimization::canAssign(), SimpleBrokerDirector::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(), ControlFlowGraph::createJumps(), POMDisassembler::createMove(), 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(), OutputPSocketBroker::isApplicable(), OutputFUBroker::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()(), BFRenameSource::operator()(), BFShareOperandLate::operator()(), BFShareOperandsLate::operator()(), BFShareOperandWithScheduled::operator()(), BFEarlyGuardBypass::operator()(), BFPostpassBypass::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(), IUResource::unassign(), OutputFUBroker::unassign(), SimpleBrokerDirector::unassign(), BFCopyRegWithOp::undoSplit(), BFRegCopyBefore::undoSplit(), DataDependenceGraph::unMergeUser(), BFUnscheduleFromBody::unscheduleOriginal(), BFUnscheduleMove::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}
Id
the ID in TPEF is 24 bits, here enum
@ ANN_DEBUG_SOURCE_CODE_PATH
debugging info annotations

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}
@ ANN_DEBUG_SOURCE_CODE_LINE
The line number in the source code file the annotated move originates from.

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}
virtual Socket * outputSocket() const
Definition Port.cc:281
virtual bool isImmediate() const
Definition Terminal.cc:63

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: