OpenASIP 2.2
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Static Private Member Functions | List of all members
ImmediateAnalyzer Class Reference

#include <ImmediateAnalyzer.hh>

Collaboration diagram for ImmediateAnalyzer:
Collaboration graph

Public Member Functions

 ImmediateAnalyzer ()=default
 
virtual ~ImmediateAnalyzer ()=default
 

Static Public Member Functions

static ImmInfoanalyze (const TTAMachine::Machine &mach)
 

Static Private Member Functions

static void analyzeImmediateCapabilitiesForFU (const TTAMachine::FunctionUnit &fu, ImmInfo &result)
 
static void analyzeImmediateCapabilitiesForOperation (const TTAMachine::HWOperation &hwop, ImmInfo &result)
 

Detailed Description

Definition at line 50 of file ImmediateAnalyzer.hh.

Constructor & Destructor Documentation

◆ ImmediateAnalyzer()

ImmediateAnalyzer::ImmediateAnalyzer ( )
default

◆ ~ImmediateAnalyzer()

virtual ImmediateAnalyzer::~ImmediateAnalyzer ( )
virtualdefault

Member Function Documentation

◆ analyze()

ImmInfo * ImmediateAnalyzer::analyze ( const TTAMachine::Machine mach)
static

Collects short immediate capabilities of the machine.

Parameters
machThe machine.

Definition at line 60 of file ImmediateAnalyzer.cc.

60 {
61 std::unique_ptr<ImmInfo> result(new ImmInfo);
62
63 for (const FunctionUnit* fu : mach.functionUnitNavigator()) {
65 }
66
68 // ^ todo: fix this. operations of CU are not getting included in analysis.
69
70 //todo: remove duplicates (entries with identical (key, value pairs)).
71
72
73 return result.release();
74}
static void analyzeImmediateCapabilitiesForFU(const TTAMachine::FunctionUnit &fu, ImmInfo &result)
virtual ControlUnit * controlUnit() const
Definition Machine.cc:345

References analyzeImmediateCapabilitiesForFU(), TTAMachine::Machine::controlUnit(), and TTAMachine::Machine::functionUnitNavigator().

Referenced by TDGen::TDGen().

Here is the call graph for this function:

◆ analyzeImmediateCapabilitiesForFU()

void ImmediateAnalyzer::analyzeImmediateCapabilitiesForFU ( const TTAMachine::FunctionUnit fu,
ImmInfo result 
)
staticprivate

Collects short immediate capabilities for each operation in the FU.

Parameters
fuThe function unit.
resultThe short immediate analysis result object where the capabilities are inserted into.

Definition at line 85 of file ImmediateAnalyzer.cc.

86 {
87
88 for (int i = 0; i < fu.operationCount(); i++) {
89 HWOperation& hwop = *fu.operation(i);
91 }
92}
static void analyzeImmediateCapabilitiesForOperation(const TTAMachine::HWOperation &hwop, ImmInfo &result)
virtual HWOperation * operation(const std::string &name) const
virtual int operationCount() const

References analyzeImmediateCapabilitiesForOperation(), TTAMachine::FunctionUnit::operation(), and TTAMachine::FunctionUnit::operationCount().

Referenced by analyze().

Here is the call graph for this function:

◆ analyzeImmediateCapabilitiesForOperation()

void ImmediateAnalyzer::analyzeImmediateCapabilitiesForOperation ( const TTAMachine::HWOperation hwop,
ImmInfo result 
)
staticprivate

Collects immediate transport capabilities for the operation.

Parameters
hwopThe operation.
resultThe short immediate analysis result object where the capabilities are inserted into.

Definition at line 103 of file ImmediateAnalyzer.cc.

104 {
105
106 using std::make_pair;
107
108 for (int i = 0; i < hwop.operandCount(); i++) {
109 assert(hwop.port(i+1) != nullptr);
110 const FUPort& boundPort = *hwop.port(i+1);
111 const Machine& mach = *boundPort.parentUnit()->machine();
112 std::set<const TTAMachine::Bus*> connectedBuses =
114 for (const Bus* bus : connectedBuses) {
115 if (bus->immediateWidth() < 1) {
116 continue;
117 }
118 result.insert(
119 make_pair(
120 make_pair(TCEString::toUpper(hwop.name()), i+1),
121 ImmInfoValue(bus->immediateWidth(), bus->signExtends())));
122 }
123
124 for (const ImmediateUnit* iu : mach.immediateUnitNavigator()) {
125 if (MachineConnectivityCheck::isConnected(*iu, boundPort)) {
126 for (auto& it : mach.instructionTemplateNavigator()) {
127 int supportedWidth = it->supportedWidth(*iu);
128 if (supportedWidth < 1) {
129 continue;
130 }
131
132 result.insert(
133 make_pair(
134 make_pair(TCEString::toUpper(hwop.name()), i+1),
135 ImmInfoValue(supportedWidth, iu->signExtends())));
136 }
137 }
138 }
139 }
140}
#define assert(condition)
static std::set< const TTAMachine::Bus * > connectedSourceBuses(const TTAMachine::Port &port)
static bool isConnected(const TTAMachine::Port &sourcePort, const TTAMachine::Port &destinationPort, const TTAMachine::Guard *guard=NULL)
static TCEString toUpper(const TCEString &str, const std::locale &loc=std::locale())
Definition TCEString.cc:156
FunctionUnit * parentUnit() const
Definition BaseFUPort.cc:96
virtual Machine * machine() const
virtual FUPort * port(int operand) const
const std::string & name() const

References assert, MachineConnectivityCheck::connectedSourceBuses(), TTAMachine::Machine::immediateUnitNavigator(), TTAMachine::Machine::instructionTemplateNavigator(), MachineConnectivityCheck::isConnected(), TTAMachine::Component::machine(), TTAMachine::HWOperation::name(), TTAMachine::HWOperation::operandCount(), TTAMachine::BaseFUPort::parentUnit(), TTAMachine::HWOperation::port(), and TCEString::toUpper().

Referenced by analyzeImmediateCapabilitiesForFU().

Here is the call graph for this function:

The documentation for this class was generated from the following files: