OpenASIP  2.0
ExecutionPipelineResource.hh
Go to the documentation of this file.
1 /*
2  Copyright (c) 2002-2009 Tampere University.
3 
4  This file is part of TTA-Based Codesign Environment (TCE).
5 
6  Permission is hereby granted, free of charge, to any person obtaining a
7  copy of this software and associated documentation files (the "Software"),
8  to deal in the Software without restriction, including without limitation
9  the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  and/or sell copies of the Software, and to permit persons to whom the
11  Software is furnished to do so, subject to the following conditions:
12 
13  The above copyright notice and this permission notice shall be included in
14  all copies or substantial portions of the Software.
15 
16  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  DEALINGS IN THE SOFTWARE.
23  */
24 /**
25  * @file ExecutionPipelineResource.hh
26  *
27  * Declaration of prototype of Resource Model:
28  * declaration of the ExecutionPipelineResource class.
29  *
30  * @author Vladimir Guzma 2006 (vladimir.guzma-no.spam-tut.fi)
31  * @author Heikki Kultala 2009 (heikki.kultala-no-spam-tut.fi)
32  * @note rating: red
33  */
34 
35 #ifndef TTA_EXECUTIONPIPELINERESOURCE_HH
36 #define TTA_EXECUTIONPIPELINERESOURCE_HH
37 
38 #include <climits>
39 #include <string>
40 #include <vector>
41 #include <map>
42 
43 #include "SchedulingResource.hh"
44 #include "MoveNode.hh"
45 #include "SparseVectorMap.hh"
46 
49 
50 class PSocketResource;
51 class ProgramOperation;
52 
53 namespace TTAMachine {
54  class FunctionUnit;
55  class Port;
56  class HWOperation;
57 }
58 
59 /**
60  * ExecutionPipelineResource keeps book of pipeline resource reservation
61  * status. It uses rather simple resource reservation table approach.
62  *
63  */
65 public:
67  const TTAMachine::FunctionUnit& fu,
68  const unsigned int ii = 0);
70 
71  virtual bool isInUse(const int cycle) const override;
72  virtual bool isAvailable(const int cycle) const override;
73  virtual bool canAssign(const int cycle, const MoveNode& node) const override;
74  virtual bool canAssignSource(
75  int cycle,
76  const MoveNode& node,
77  const TTAMachine::Port& resultPort) const;
78  virtual bool canAssignDestination(
79  const int cycle,
80  const MoveNode& node,
81  const bool triggering = false) const;
82  virtual void assign(const int cycle, MoveNode& node) override;
83  virtual void assignSource(
84  int cycle, MoveNode& node);
85  virtual void assignDestination(
86  const int cycle, MoveNode& node);
87  virtual void unassign(const int cycle, MoveNode& node) override;
88  virtual void unassignSource(
89  const int cycle, MoveNode& node);
90  virtual void unassignDestination(const int cycle, MoveNode& node);
91  virtual bool isExecutionPipelineResource() const override;
92  int highestKnownCycle() const;
93  int nextResultCycle(
94  const TTAMachine::Port& port,
95  int cycle, const MoveNode& node, const MoveNode* trigger = NULL,
96  int triggerCycle=INT_MAX) const;
97 
98  bool otherTriggerBeforeMyTrigger(const TTAMachine::Port& port, const MoveNode& node, int cycle) const;
99 
101  int resultReadCycle, int resultReadyCycle,
102  const MoveNode& node, const TTAMachine::Port& port,
103  const MoveNode* trigger, int triggerCycle) const;
104 
105  bool
107  const ProgramOperation& po,
108  const TTAMachine::Port&
109  port, int cycle) const;
110 
111  bool operandsOverwritten(
112  int triggerCycle, const MoveNode& trigger) const;
113 
114  void clear() override;
115  void setDDG(const DataDependenceGraph* ddg);
116  virtual void setMaxCycle(unsigned int maxCycle) override { maxCycle_ = maxCycle; }
117 protected:
118  virtual bool validateDependentGroups() override;
119  virtual bool validateRelatedGroups() override;
120  unsigned int size() const;
121 private:
122 
123  inline bool cyclesOverlap(
124  int rangeFirst, int rangeLast, int targetCycle) const ;
125 
126  bool cyclesConflict(
127  const MoveNode* mn1, const MoveNode* mn2, int guardCycle,
128  int rangeFirst, int rangeLast, int targetCycle) const;
129 
130  bool isLoopBypass(const MoveNode& node) const;
131 
132  struct ResultHelper {
133  unsigned int realCycle;
135  int count;
136  ResultHelper() : realCycle(0), po(NULL), count(0) {};
137  ResultHelper(int rc, const ProgramOperation* p, int c) :
138  realCycle(rc), po(p), count(c) {}
139  };
140 
142  unsigned int realCycle;
145  OperandUseHelper(int rc, const ProgramOperation* p): realCycle(rc), po(p){}
146  };
147 
148  typedef std::pair<ResultHelper,ResultHelper> ResultHelperPair;
149  typedef std::pair<OperandUseHelper,OperandUseHelper> OperandUsePair;
150 
151  typedef std::pair<const MoveNode*,const MoveNode*> ResourceReservation;
152 
153 
154  /// Type for resource vector, represents one cycle of use.
155  /// Includes the ownerships of the reservation.
156  typedef std::vector<ResourceReservation>
158 
159  /// Used for both result read and result written.
161 
162  typedef std::map<const TTAMachine::Port*, ResultVector> ResultMap;
163 
164  typedef std::pair<MoveNode*,MoveNode*> MoveNodePtrPair;
165 
168 
169  typedef std::map<const TTAMachine::Port*, OperandUseVector> OperandUseMap;
170  typedef std::map<const TTAMachine::Port*, OperandWriteVector>
172 
173  /// Type for resource reservation table, resource vector x latency.
174  /// Includes the ownerships of the reservation.
176 
177 
178  //Copying forbidden
180  // Assignment forbidden
182 
183  /// Find first and last cycles already scheduled for same PO
184  void findRange(
185  const int cycle,
186  const MoveNode& node,
187  int popIndex,
188  int& first,
189  int& last,
190  int& triggering) const;
191 
192  int resultReadyCycle(
193  const ProgramOperation& po, const TTAMachine::Port& resultPort) const;
194 
195  void setResultWriten(
196  const TTAMachine::Port& port,
197  unsigned int realCycle,
198  const ProgramOperation& po);
199 
200  void setResultWriten(
201  const ProgramOperation& po,
202  unsigned int triggerCycle);
203 
204  void unsetResultWriten(
205  const TTAMachine::Port& port, unsigned int realCycle,
206  const ProgramOperation& po);
207 
208  void unsetResultWriten(
209  const ProgramOperation& po,
210  unsigned int triggerCycle);
211 
212  void setOperandUsed(
213  const TTAMachine::Port& port,
214  unsigned int realCycle,
215  const ProgramOperation& po);
216 
217  void setOperandsUsed(
218  const ProgramOperation& po,
219  unsigned int triggerCycle);
220 
221  void unsetOperandUsed(
222  const TTAMachine::Port& port, unsigned int realCycle,
223  const ProgramOperation& po);
224 
225  void unsetOperandsUsed(
226  const ProgramOperation& po,
227  unsigned int triggerCycle);
228 
229  const TTAMachine::Port& operandPort(const MoveNode& mn) const;
230 
231  bool operandOverwritten(
232  int operandWriteCycle,
233  int triggerCycle,
234  const ProgramOperation& po,
235  const MoveNode& operand,
236  const MoveNode& trigger) const;
237 
238  bool operandOverwritten(const MoveNode& mn, int cycle) const;
239 
240  bool testTriggerResult(const MoveNode& trigger, int cycle) const;
242  int resultCycle, const ProgramOperation& po,
244  const MoveNode& trigger, int triggerCycle) const;
245 
246  bool resourcesAllowTrigger(int cycle, const MoveNode& move) const;
247 
249  const TTAMachine::Port& port, const MoveNode& mn, int cycle) const;
250 
252  const TTAMachine::Port& port, const MoveNode& mn, int cycle) const;
253 
254  bool checkOperandAllowed(
255  const MoveNode& currentMn,
256  const TTAMachine::Port& port,
257  int operandWriteCycle,
258  const OperandUseHelper &operandUse,
259  int operandUseModCycle, ProgramOperation& currOp) const;
260 
261  bool triggerTooEarly(const MoveNode& trigger, int cycle) const;
262 
263  bool operandTooLate(const MoveNode& node, int cycle) const;
264 
266  int inputCount,
267  const TTAMachine::HWOperation& hwop,
268  const MoveNode& node,
269  int cycle) const;
270 
272  const TTAMachine::Port& port, const MoveNode& mn, int cycle) const;
273 
275  const MoveNode& mn, int cycle) const;
276 
277  const MoveNode* nodeOfInputPort(
278  const ProgramOperation& po, TTAMachine::Port& port);
279 
280 
282  const TTAMachine::Port& port,
283  const ProgramOperation& po,
284  const MoveNode& mn) const;
285 
286  const TTAMachine::Port& resultPort(const MoveNode& mn) const;
287 
288  bool exclusiveMoves(
289  const MoveNode* mn1, const MoveNode* mn2, int cycle=INT_MAX) const;
290 
291  int latestTriggerWriteCycle(const MoveNode& mn) const;
292 
293  bool isDestOpOfMN(const MoveNode& mn, const ProgramOperation& po) const;
294 
296 
297  /// Stores one resource vector per cycle of scope for whole FU
299 
300  // Stores PO for each "result ready" a cycle in which it was produced,
301 #if 0
302  // Test if other program operation writes into same register
303  // in given cycle
304  bool sameRegisterWrite(
305  const MoveNode& node,
306  ProgramOperation* operation)const;
307 #endif
308 
311 
312  // counts number of results that are ready in that cycle
314  // Stores PO for each "result read" move a cycle in which it was read,
315  // counts number of reads in given cycle
317 
318  // Stores for each move a cycle in which the result is written to output
319  // register of FU, this information is not available elsewhere
320  // these are real cycles.
321  std::map<MoveNode*, int, MoveNode::Comparator> storedResultCycles_;
322  // stores the set of assigned source nodes
323  std::multimap<int, MoveNode*> assignedSourceNodes_;
324  // stores the set of assigned destination nodes
325  std::multimap<int, MoveNode*> assignedDestinationNodes_;
326 
327  mutable int cachedSize_;
329 
332 
333  // TODO: is this needed or not?
335 
337 };
338 
339 #endif
SparseVectorMap.hh
ExecutionPipelineResource
Definition: ExecutionPipelineResource.hh:64
ExecutionPipelineResource::ResultHelper::realCycle
unsigned int realCycle
Definition: ExecutionPipelineResource.hh:133
ExecutionPipelineResource::OperandUsePair
std::pair< OperandUseHelper, OperandUseHelper > OperandUsePair
Definition: ExecutionPipelineResource.hh:149
ExecutionPipelineResource::unassign
virtual void unassign(const int cycle, MoveNode &node) override
Definition: ExecutionPipelineResource.cc:582
ExecutionPipelineResource::clear
void clear() override
Definition: ExecutionPipelineResource.cc:1759
ExecutionPipelineResource::resourcesAllowTrigger
bool resourcesAllowTrigger(int cycle, const MoveNode &move) const
Definition: ExecutionPipelineResource.cc:1244
ExecutionPipelineResource::resultAllowedAtCycle
bool resultAllowedAtCycle(int resultCycle, const ProgramOperation &po, const TTAMachine::Port &resultPort, const MoveNode &trigger, int triggerCycle) const
Definition: ExecutionPipelineResource.cc:1852
ExecutionPipelineResource::cyclesOverlap
bool cyclesOverlap(int rangeFirst, int rangeLast, int targetCycle) const
Definition: ExecutionPipelineResource.cc:2823
ExecutionPipelineResource::canAssignSource
virtual bool canAssignSource(int cycle, const MoveNode &node, const TTAMachine::Port &resultPort) const
Definition: ExecutionPipelineResource.cc:819
ExecutionPipelineResource::MoveNodePtrPair
std::pair< MoveNode *, MoveNode * > MoveNodePtrPair
Definition: ExecutionPipelineResource.hh:164
ExecutionPipelineResource::operandOverwritten
bool operandOverwritten(int operandWriteCycle, int triggerCycle, const ProgramOperation &po, const MoveNode &operand, const MoveNode &trigger) const
Definition: ExecutionPipelineResource.cc:1137
TTAMachine::HWOperation
Definition: HWOperation.hh:52
ExecutionPipelineResource::operandAllowedAtCycle
bool operandAllowedAtCycle(const TTAMachine::Port &port, const MoveNode &mn, int cycle) const
Definition: ExecutionPipelineResource.cc:2131
ExecutionPipelineResource::operandSharePreventsTriggerForScheduledResult
bool operandSharePreventsTriggerForScheduledResult(const TTAMachine::Port &port, const MoveNode &mn, int cycle) const
Definition: ExecutionPipelineResource.cc:2605
ExecutionPipelineResource::ExecutionPipelineResource
ExecutionPipelineResource(const TTAMachine::FunctionUnit &fu, const unsigned int ii=0)
Definition: ExecutionPipelineResource.cc:82
ExecutionPipelineResource::operandsUsed_
OperandUseMap operandsUsed_
Definition: ExecutionPipelineResource.hh:310
ExecutionPipelineResource::setDDG
void setDDG(const DataDependenceGraph *ddg)
Definition: ExecutionPipelineResource.cc:1776
ExecutionPipelineResource::ddg_
const DataDependenceGraph * ddg_
Definition: ExecutionPipelineResource.hh:330
ExecutionPipelineResource::setMaxCycle
virtual void setMaxCycle(unsigned int maxCycle) override
Definition: ExecutionPipelineResource.hh:116
ExecutionPipelineResource::ResultHelperPair
std::pair< ResultHelper, ResultHelper > ResultHelperPair
Definition: ExecutionPipelineResource.hh:148
PSocketResource
Definition: PSocketResource.hh:48
ExecutionPipelineResource::unassignSource
virtual void unassignSource(const int cycle, MoveNode &node)
Definition: ExecutionPipelineResource.cc:597
ExecutionPipelineResource::setResultWriten
void setResultWriten(const TTAMachine::Port &port, unsigned int realCycle, const ProgramOperation &po)
Definition: ExecutionPipelineResource.cc:211
ExecutionPipelineResource::OperandWriteVector
SparseVector< MoveNodePtrPair > OperandWriteVector
Definition: ExecutionPipelineResource.hh:166
ProgramOperation
Definition: ProgramOperation.hh:70
MoveNode
Definition: MoveNode.hh:65
ExecutionPipelineResource::unsetResultWriten
void unsetResultWriten(const TTAMachine::Port &port, unsigned int realCycle, const ProgramOperation &po)
Definition: ExecutionPipelineResource.cc:305
ExecutionPipelineResource::resultPort
const TTAMachine::Port & resultPort(const MoveNode &mn) const
Definition: ExecutionPipelineResource.cc:2010
ExecutionPipelineResource::OperandUseMap
std::map< const TTAMachine::Port *, OperandUseVector > OperandUseMap
Definition: ExecutionPipelineResource.hh:169
ExecutionPipelineResource::triggerPort_
const TTAMachine::Port * triggerPort_
Definition: ExecutionPipelineResource.hh:334
ExecutionPipelineResource::cyclesConflict
bool cyclesConflict(const MoveNode *mn1, const MoveNode *mn2, int guardCycle, int rangeFirst, int rangeLast, int targetCycle) const
Definition: ExecutionPipelineResource.cc:2843
ExecutionPipelineResource::otherTriggerBeforeMyTrigger
bool otherTriggerBeforeMyTrigger(const TTAMachine::Port &port, const MoveNode &node, int cycle) const
Definition: ExecutionPipelineResource.cc:2425
ExecutionPipelineResource::testTriggerResult
bool testTriggerResult(const MoveNode &trigger, int cycle) const
Definition: ExecutionPipelineResource.cc:1785
ExecutionPipelineResource::poConflictsWithInputPort
bool poConflictsWithInputPort(const TTAMachine::Port &port, const ProgramOperation &po, const MoveNode &mn) const
Definition: ExecutionPipelineResource.cc:2866
ExecutionPipelineResource::findRange
void findRange(const int cycle, const MoveNode &node, int popIndex, int &first, int &last, int &triggering) const
Find first and last cycles already scheduled for same PO.
TTAMachine::FunctionUnit
Definition: FunctionUnit.hh:55
ExecutionPipelineResource::isAvailable
virtual bool isAvailable(const int cycle) const override
Definition: ExecutionPipelineResource.cc:178
ExecutionPipelineResource::nodeOfInputPort
const MoveNode * nodeOfInputPort(const ProgramOperation &po, TTAMachine::Port &port)
Definition: ExecutionPipelineResource.cc:2853
ExecutionPipelineResource::ResultHelper
Definition: ExecutionPipelineResource.hh:132
ExecutionPipelineResource::size
unsigned int size() const
Definition: ExecutionPipelineResource.cc:1417
ExecutionPipelineResource::OperandUseHelper::realCycle
unsigned int realCycle
Definition: ExecutionPipelineResource.hh:142
ExecutionPipelineResource::unassignDestination
virtual void unassignDestination(const int cycle, MoveNode &node)
Definition: ExecutionPipelineResource.cc:676
ExecutionPipelineResource::isLoopBypass
bool isLoopBypass(const MoveNode &node) const
Definition: ExecutionPipelineResource.cc:791
ExecutionPipelineResource::resultNotOverWritten
bool resultNotOverWritten(int resultReadCycle, int resultReadyCycle, const MoveNode &node, const TTAMachine::Port &port, const MoveNode *trigger, int triggerCycle) const
Definition: ExecutionPipelineResource.cc:2048
ExecutionPipelineResource::exclusiveMoves
bool exclusiveMoves(const MoveNode *mn1, const MoveNode *mn2, int cycle=INT_MAX) const
Definition: ExecutionPipelineResource.cc:1719
SchedulingResource
Definition: SchedulingResource.hh:52
ExecutionPipelineResource::OperandUseHelper
Definition: ExecutionPipelineResource.hh:141
SchedulingResource.hh
ExecutionPipelineResource::OperandWriteMap
std::map< const TTAMachine::Port *, OperandWriteVector > OperandWriteMap
Definition: ExecutionPipelineResource.hh:171
ExecutionPipelineResource::cachedSize_
int cachedSize_
Definition: ExecutionPipelineResource.hh:327
ExecutionPipelineResource::fuExecutionPipeline_
ResourceReservationTable fuExecutionPipeline_
Stores one resource vector per cycle of scope for whole FU.
Definition: ExecutionPipelineResource.hh:298
TTAMachine::Port
Definition: Port.hh:54
ExecutionPipelineResource::hasConflictingResultsOnCycle
bool hasConflictingResultsOnCycle(const ProgramOperation &po, const TTAMachine::Port &port, int cycle) const
Definition: ExecutionPipelineResource.cc:1559
ExecutionPipelineResource::ResultHelper::count
int count
Definition: ExecutionPipelineResource.hh:135
ExecutionPipelineResource::assignedDestinationNodes_
std::multimap< int, MoveNode * > assignedDestinationNodes_
Definition: ExecutionPipelineResource.hh:325
ExecutionPipelineResource::validateRelatedGroups
virtual bool validateRelatedGroups() override
Definition: ExecutionPipelineResource.cc:1399
ExecutionPipelineResource::fu_
const TTAMachine::FunctionUnit & fu_
Definition: ExecutionPipelineResource.hh:331
ExecutionPipelineResource::OperandUseHelper::po
const ProgramOperation * po
Definition: ExecutionPipelineResource.hh:143
ExecutionPipelineResource::checkOperandAllowed
bool checkOperandAllowed(const MoveNode &currentMn, const TTAMachine::Port &port, int operandWriteCycle, const OperandUseHelper &operandUse, int operandUseModCycle, ProgramOperation &currOp) const
Definition: ExecutionPipelineResource.cc:2234
ExecutionPipelineResource::operandsOverwritten
bool operandsOverwritten(int triggerCycle, const MoveNode &trigger) const
Definition: ExecutionPipelineResource.cc:1216
ExecutionPipelineResource::OperandUseVector
SparseVector< OperandUsePair > OperandUseVector
Definition: ExecutionPipelineResource.hh:167
ExecutionPipelineResource::assignSource
virtual void assignSource(int cycle, MoveNode &node)
Definition: ExecutionPipelineResource.cc:405
ExecutionPipelineResource::OperandUseHelper::OperandUseHelper
OperandUseHelper(int rc, const ProgramOperation *p)
Definition: ExecutionPipelineResource.hh:145
ExecutionPipelineResource::ResultHelper::ResultHelper
ResultHelper()
Definition: ExecutionPipelineResource.hh:136
ExecutionPipelineResource::operandPossibleAtCycle
bool operandPossibleAtCycle(const TTAMachine::Port &port, const MoveNode &mn, int cycle) const
Definition: ExecutionPipelineResource.cc:2106
ExecutionPipelineResource::resultRead_
ResultMap resultRead_
Definition: ExecutionPipelineResource.hh:316
ExecutionPipelineResource::resultWriten_
ResultMap resultWriten_
Definition: ExecutionPipelineResource.hh:313
ExecutionPipelineResource::triggerAllowedAtCycle
bool triggerAllowedAtCycle(int inputCount, const TTAMachine::HWOperation &hwop, const MoveNode &node, int cycle) const
Definition: ExecutionPipelineResource.cc:2369
SparseVector
Definition: SparseVectorMap.hh:43
ExecutionPipelineResource::ResourceReservationVector
std::vector< ResourceReservation > ResourceReservationVector
Type for resource vector, represents one cycle of use. Includes the ownerships of the reservation.
Definition: ExecutionPipelineResource.hh:157
ExecutionPipelineResource::setOperandUsed
void setOperandUsed(const TTAMachine::Port &port, unsigned int realCycle, const ProgramOperation &po)
Definition: ExecutionPipelineResource.cc:241
ExecutionPipelineResource::setOperandsUsed
void setOperandsUsed(const ProgramOperation &po, unsigned int triggerCycle)
Definition: ExecutionPipelineResource.cc:283
ExecutionPipelineResource::OperandUseHelper::OperandUseHelper
OperandUseHelper()
Definition: ExecutionPipelineResource.hh:144
ExecutionPipelineResource::resources
const ExecutionPipelineResourceTable * resources
Definition: ExecutionPipelineResource.hh:295
ExecutionPipelineResource::canAssignDestination
virtual bool canAssignDestination(const int cycle, const MoveNode &node, const bool triggering=false) const
Definition: ExecutionPipelineResource.cc:990
ExecutionPipelineResource::unsetOperandsUsed
void unsetOperandsUsed(const ProgramOperation &po, unsigned int triggerCycle)
Definition: ExecutionPipelineResource.cc:377
ExecutionPipelineResource::operandShareCount_
int operandShareCount_
Definition: ExecutionPipelineResource.hh:336
ExecutionPipelineResource::maxCycle_
int maxCycle_
Definition: ExecutionPipelineResource.hh:328
ExecutionPipelineResource::resultCausesTriggerBetweenOperandSharing
bool resultCausesTriggerBetweenOperandSharing(const MoveNode &mn, int cycle) const
Definition: ExecutionPipelineResource.cc:2488
ExecutionPipelineResource::operandsWriten_
OperandWriteMap operandsWriten_
Definition: ExecutionPipelineResource.hh:309
ExecutionPipelineResource::unsetOperandUsed
void unsetOperandUsed(const TTAMachine::Port &port, unsigned int realCycle, const ProgramOperation &po)
Definition: ExecutionPipelineResource.cc:336
ExecutionPipelineResource::nextResultCycle
int nextResultCycle(const TTAMachine::Port &port, int cycle, const MoveNode &node, const MoveNode *trigger=NULL, int triggerCycle=INT_MAX) const
Definition: ExecutionPipelineResource.cc:1602
DataDependenceGraph
Definition: DataDependenceGraph.hh:67
ExecutionPipelineResource::assign
virtual void assign(const int cycle, MoveNode &node) override
Definition: ExecutionPipelineResource.cc:392
ExecutionPipelineResource::triggerTooEarly
bool triggerTooEarly(const MoveNode &trigger, int cycle) const
Definition: ExecutionPipelineResource.cc:2327
ExecutionPipelineResource::validateDependentGroups
virtual bool validateDependentGroups() override
Definition: ExecutionPipelineResource.cc:1388
ExecutionPipelineResource::resultReadyCycle
int resultReadyCycle(const ProgramOperation &po, const TTAMachine::Port &resultPort) const
Definition: ExecutionPipelineResource.cc:1677
ExecutionPipelineResource::ResultHelper::po
const ProgramOperation * po
Definition: ExecutionPipelineResource.hh:134
ExecutionPipelineResource::assignDestination
virtual void assignDestination(const int cycle, MoveNode &node)
Definition: ExecutionPipelineResource.cc:487
ExecutionPipelineResource::ResourceReservationTable
SparseVector< ResourceReservationVector > ResourceReservationTable
Type for resource reservation table, resource vector x latency. Includes the ownerships of the reserv...
Definition: ExecutionPipelineResource.hh:175
ExecutionPipelineResource::storedResultCycles_
std::map< MoveNode *, int, MoveNode::Comparator > storedResultCycles_
Definition: ExecutionPipelineResource.hh:321
ExecutionPipelineResource::ResultVector
SparseVector< ResultHelperPair > ResultVector
Used for both result read and result written.
Definition: ExecutionPipelineResource.hh:160
ExecutionPipelineResource::isDestOpOfMN
bool isDestOpOfMN(const MoveNode &mn, const ProgramOperation &po) const
Definition: ExecutionPipelineResource.cc:2477
ExecutionPipelineResource::isInUse
virtual bool isInUse(const int cycle) const override
Definition: ExecutionPipelineResource.cc:117
ExecutionPipelineResourceTable
Definition: ExecutionPipelineResourceTable.hh:44
TTAMachine
Definition: Assembler.hh:48
ExecutionPipelineResource::ResultMap
std::map< const TTAMachine::Port *, ResultVector > ResultMap
Definition: ExecutionPipelineResource.hh:162
MoveNode.hh
ExecutionPipelineResource::ResourceReservation
std::pair< const MoveNode *, const MoveNode * > ResourceReservation
Definition: ExecutionPipelineResource.hh:151
ExecutionPipelineResource::assignedSourceNodes_
std::multimap< int, MoveNode * > assignedSourceNodes_
Definition: ExecutionPipelineResource.hh:323
ExecutionPipelineResource::canAssign
virtual bool canAssign(const int cycle, const MoveNode &node) const override
Definition: ExecutionPipelineResource.cc:102
ExecutionPipelineResource::highestKnownCycle
int highestKnownCycle() const
Definition: ExecutionPipelineResource.cc:1479
ExecutionPipelineResource::isExecutionPipelineResource
virtual bool isExecutionPipelineResource() const override
Definition: ExecutionPipelineResource.cc:1378
ExecutionPipelineResource::~ExecutionPipelineResource
virtual ~ExecutionPipelineResource()
Definition: ExecutionPipelineResource.cc:94
ExecutionPipelineResource::operandPort
const TTAMachine::Port & operandPort(const MoveNode &mn) const
Definition: ExecutionPipelineResource.cc:2027
ExecutionPipelineResource::latestTriggerWriteCycle
int latestTriggerWriteCycle(const MoveNode &mn) const
Definition: ExecutionPipelineResource.cc:2393
ExecutionPipelineResource::operandTooLate
bool operandTooLate(const MoveNode &node, int cycle) const
Definition: ExecutionPipelineResource.cc:2291
ExecutionPipelineResource::operator=
ExecutionPipelineResource & operator=(const ExecutionPipelineResource &)
ExecutionPipelineResource::ResultHelper::ResultHelper
ResultHelper(int rc, const ProgramOperation *p, int c)
Definition: ExecutionPipelineResource.hh:137