OpenASIP
2.0
|
#include <Move.hh>
Private Member Functions | |
Move (const Move &) | |
Copying not allowed. More... | |
Move & | operator= (const Move &) |
Assignment not allowed. More... | |
Private Attributes | |
Instruction * | parent_ |
Parent instruction of the move. More... | |
Terminal * | src_ |
The source of the move. More... | |
Terminal * | dst_ |
The destination of the move. More... | |
const TTAMachine::Bus * | bus_ |
The bus where the transport is carried. More... | |
MoveGuard * | guard_ |
The boolean expression that predicates the move. More... | |
Represents a data transport through the TTA programmable interconnection network.
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.
src | The source of the move. |
dst | The destination of the move. |
bus | The bus on which the transport is carried. |
guard | The Boolean expression the move is predicated with. |
TTAProgram::Move::Move | ( | Terminal * | src, |
Terminal * | dst, | ||
const TTAMachine::Bus & | bus | ||
) |
TTAProgram::Move::~Move | ( | ) |
|
private |
Copying not allowed.
const Bus & TTAProgram::Move::bus | ( | ) | const |
Returns the bus on which the move is carried.
Definition at line 373 of file Move.cc.
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().
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).
Definition at line 413 of file Move.cc.
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()().
Terminal & TTAProgram::Move::destination | ( | ) | const |
Returns the destination of this move.
Definition at line 323 of file Move.cc.
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().
Socket & TTAProgram::Move::destinationSocket | ( | ) | const |
Definition at line 388 of file Move.cc.
References dst_, TTAMachine::Port::inputSocket(), and TTAProgram::Terminal::port().
Referenced by SimpleICOptimizer::addConnections(), and UtilizationStats::calculateForInstruction().
MoveGuard & TTAProgram::Move::guard | ( | ) | const |
Returns the Boolean expression that guards this move.
InvalidData | if the move is not predicated. |
Definition at line 345 of file Move.cc.
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().
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.
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().
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.
References sourceFileName().
Referenced by POMDisassembler::disassemble(), and ProximDebuggerWindow::loadProgram().
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.
References sourceLineNumber().
Referenced by PRegionAliasAnalyzer::analyze(), POMDisassembler::disassemble(), DataDependenceGraph::dotString(), BasicBlockNode::toString(), and ProximDebuggerWindow::updateAnnotations().
bool TTAProgram::Move::isCall | ( | ) | const |
Tells whether the move triggers a call operation.
Definition at line 190 of file Move.cc.
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().
|
inline |
Definition at line 69 of file Move.hh.
References isUnconditional().
bool TTAProgram::Move::isControlFlowMove | ( | ) | const |
Tells whether the move triggers an operation that controls the program flow.
Definition at line 233 of file Move.cc.
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().
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.
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().
bool TTAProgram::Move::isInInstruction | ( | ) | const |
Return true if this move belongs to an instruction.
Definition at line 144 of file Move.cc.
References TTAProgram::NullInstruction::instance(), and parent_.
Referenced by ITemplateBroker::assign(), POMDisassembler::createMove(), DataDependenceGraph::createSubgraph(), and ITemplateBroker::isAlreadyAssigned().
bool TTAProgram::Move::isJump | ( | ) | const |
Tells whether the move triggers a jump operation.
Definition at line 164 of file Move.cc.
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().
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.
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().
bool TTAProgram::Move::isTriggering | ( | ) | const |
Tells whether the move triggers an operation.
Definition at line 284 of file Move.cc.
References dst_, TTAProgram::Terminal::isFUPort(), and TTAProgram::TerminalFUPort::isTriggering().
Referenced by CopyingDelaySlotFiller::allowedToSpeculate(), ResourceConstraintAnalyzer::analyzeMoveNode(), ControlFlowGraph::buildMBBFromBB(), CycleLookBackSoftwareBypasser::bypass(), DataDependenceGraph::dotString(), ExecutionPipelineBroker::earliestFromDestination(), ExecutionPipelineBroker::earliestFromSource(), ControlFlowEdge::edgePredicateFromMove(), CompiledSimCodeGenerator::generateAddFUResult(), CompiledSimCodeGenerator::generateInstruction(), ExecutionPipelineBroker::isMoveTrigger(), DataDependenceEdge::latencySt(), ExecutionPipelineBroker::latestFromDestination(), ExecutionPipelineBroker::latestFromSource(), BFLateBypass::operator()(), DataDependenceEdge::saveState(), BasicBlockScheduler::tryToDelayOperands(), BasicBlockNode::updateHWloopLength(), and DataDependenceGraph::writeToXMLFile().
bool TTAProgram::Move::isUnconditional | ( | ) | const |
Tells whether the move is predicated or not.
Definition at line 154 of file Move.cc.
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().
Instruction & TTAProgram::Move::parent | ( | ) | const |
IllegalRegistration | if the move is independent. |
Definition at line 115 of file Move.cc.
References __func__, TTAProgram::NullInstruction::instance(), and parent_.
Referenced by ITemplateBroker::assign(), TTAProgram::ProgramWriter::createCodeSection(), POMDisassembler::createMove(), DataDependenceGraph::createSubgraph(), CopyingDelaySlotFiller::findJumpImmediate(), ITemplateBroker::isAlreadyAssigned(), TTAProgram::Instruction::removeMove(), PreOptimizer::tryToPrecalcConstantAdd(), PreOptimizer::tryToRemoveGuardInversingOp(), ITemplateBroker::unassign(), and CopyingDelaySlotFiller::updateJumpsAndCfg().
void TTAProgram::Move::setBus | ( | const TTAMachine::Bus & | bus | ) |
Sets a new bus for the move.
bus | The new bus. |
Definition at line 383 of file Move.cc.
Referenced by BusBroker::assign(), CycleLookBackSoftwareBypasser::bypassNode(), SimpleBrokerDirector::canAssign(), MoveNodeDuplicator::duplicateMove(), BFLateBypassGuard::operator()(), BFScheduleTD::operator()(), BFScheduleBU::operator()(), CycleLookBackSoftwareBypasser::removeBypass(), SimpleBrokerDirector::unassign(), BusBroker::unassign(), BUBasicBlockScheduler::undoBypass(), BFLateBypassGuard::undoOnlyMe(), BFScheduleTD::undoOnlyMe(), and BFScheduleBU::undoOnlyMe().
void TTAProgram::Move::setDestination | ( | Terminal * | dst | ) |
Sets a new destination for the move and deletes the old one.
dst | The new destination. |
Definition at line 333 of file Move.cc.
References dst_.
Referenced by RegisterCopyAdder::addConnectionRegisterCopies(), RegisterCopyAdder::addConnectionRegisterCopiesImmediate(), InputPSocketBroker::assign(), InputFUBroker::assign(), SimpleBrokerDirector::canAssign(), MoveNodeDuplicator::duplicateMove(), DataDependenceGraph::mergeAndKeepSource(), RegisterRenamer::renameLiveRange(), BFRenameLiveRange::setTerminals(), BFCopyRegWithOp::splitMove(), BFRegCopyAfter::splitMove(), BFRegCopyBefore::splitMove(), ProgramOperation::switchInputs(), PreOptimizer::tryToOptimizeAddressReg(), SimpleBrokerDirector::unassign(), BFRenameLiveRange::undoSetTerminal(), and BFRegCopyAfter::undoSplit().
void TTAProgram::Move::setGuard | ( | MoveGuard * | guard | ) |
Sets a new guard for the move and deletes the old one.
guard | The new guard. |
Definition at line 360 of file Move.cc.
References guard(), and guard_.
Referenced by BusBroker::assign(), LoopPrologAndEpilogBuilder::build(), SimpleBrokerDirector::canAssign(), CopyingDelaySlotFiller::collectMoves(), MoveNodeDuplicator::duplicateMove(), PreOptimizer::inverseGuardsOfHeads(), BFLateBypassGuard::operator()(), BFEarlyGuardBypass::operator()(), BFSchedulePreLoopShared::operator()(), BFRemoveGuard::operator()(), BFRemoveGuardFromSucc::operator()(), ControlFlowGraph::removeJumpToTarget(), RegisterRenamer::renameLiveRange(), BasicBlockScheduler::scheduleMove(), BUBasicBlockScheduler::scheduleMove(), BFRenameLiveRange::setGuard(), BFOptimization::setJumpGuard(), CopyingDelaySlotFiller::tryToAssignNodes(), CopyingDelaySlotFiller::tryToAssignOtherMovesOfOp(), BUBasicBlockScheduler::tryToOptimizeWaw(), BasicBlockScheduler::tryToOptimizeWaw(), SimpleBrokerDirector::unassign(), BFEarlyGuardBypass::undoOnlyMe(), BFLateBypassGuard::undoOnlyMe(), BFRemoveGuard::undoOnlyMe(), BFRemoveGuardFromSucc::undoOnlyMe(), and BFOptimization::unsetJumpGuard().
void TTAProgram::Move::setParent | ( | Instruction & | ins | ) |
Set a new parent for the move.
ins | The new parent. |
Definition at line 130 of file Move.cc.
References TTAProgram::NullInstruction::instance(), and parent_.
Referenced by TTAProgram::Instruction::addMove(), and TTAProgram::Instruction::removeMove().
void TTAProgram::Move::setSource | ( | Terminal * | src | ) |
Sets a new source for the move and deletes the old one.
src | The new source. |
Definition at line 312 of file Move.cc.
References src_.
Referenced by RegisterCopyAdder::addConnectionRegisterCopies(), RegisterCopyAdder::addConnectionRegisterCopiesImmediate(), OutputFUBroker::assign(), OutputPSocketBroker::assign(), IUBroker::assign(), CycleLookBackSoftwareBypasser::bypassNode(), SimpleBrokerDirector::canAssign(), CopyingDelaySlotFiller::collectMoves(), ControlFlowGraph::convertBBRefsToInstRefs(), TTAProgram::Program::convertSymbolRefsToInsRefs(), MoveNodeDuplicator::duplicateMove(), BUBasicBlockScheduler::handleLoopDDG(), DataDependenceGraph::mergeAndKeepUser(), BFUpdateMoveOnBypass::operator()(), RegisterRenamer::renameLiveRange(), TTAProgram::Program::replaceUniversalAddressSpaces(), BasicBlockScheduler::scheduleMove(), BFRenameLiveRange::setTerminals(), BFCopyRegWithOp::splitMove(), BFRegCopyAfter::splitMove(), BFRegCopyBefore::splitMove(), PreOptimizer::tryToOptimizeAddressReg(), PreOptimizer::tryToPrecalcConstantAdd(), IUResource::unassign(), SimpleBrokerDirector::unassign(), BFUpdateMoveOnBypass::undoOnlyMe(), BFScheduleExact::undoOnlyMe(), BFRenameLiveRange::undoSetTerminal(), BFCopyRegWithOp::undoSplit(), BFRegCopyBefore::undoSplit(), DataDependenceGraph::unMergeUser(), BasicBlockNode::updateHWloopLength(), and CopyingDelaySlotFiller::updateJumpsAndCfg().
Terminal & TTAProgram::Move::source | ( | ) | const |
Returns the source of this move.
Definition at line 302 of file Move.cc.
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().
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.
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().
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.
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().
Socket & TTAProgram::Move::sourceSocket | ( | ) | const |
Definition at line 393 of file Move.cc.
References TTAProgram::Terminal::isImmediate(), TTAMachine::Port::outputSocket(), TTAProgram::Terminal::port(), and src_.
Referenced by SimpleICOptimizer::addConnections(), and UtilizationStats::calculateForInstruction().
std::string TTAProgram::Move::toString | ( | ) | const |
Returns the disassembly of the move.
Definition at line 436 of file Move.cc.
References POMDisassembler::disassemble().
Referenced by llvm::LLVMTCEBuilder::addCandidateLSUAnnotations(), RegisterCopyAdder::addConnectionRegisterCopiesImmediate(), llvm::LLVMTCEBuilder::addPointerAnnotations(), PRegionAliasAnalyzer::analyze(), ResourceConstraintAnalyzer::analyze(), ResourceConstraintAnalyzer::analyzeMoveNode(), ResourceConstraintAnalyzer::analyzeRegisterAntideps(), MoveNodeGroupBuilder::build(), FindWindow::find(), CallsToJumps::handleControlFlowGraph(), BasicBlockScheduler::handleRemovedResultMoves(), SimProgramBuilder::processMove(), DataDependenceGraphBuilder::processResultRead(), BFRescheduleMove::undoOnlyMe(), and BasicBlockNode::updateHWloopLength().
|
private |
|
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().
|
private |
The boolean expression that predicates the move.
Definition at line 114 of file Move.hh.
Referenced by copy(), guard(), isUnconditional(), setGuard(), and ~Move().
|
private |
Parent instruction of the move.
Definition at line 106 of file Move.hh.
Referenced by isInInstruction(), parent(), and setParent().
|
private |
The source of the move.
Definition at line 108 of file Move.hh.
Referenced by copy(), setSource(), source(), sourceSocket(), and ~Move().