OpenASIP  2.0
BF2Scheduler.hh
Go to the documentation of this file.
1 /*
2  Copyright (c) 2002-2014 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 /**
26  * @file BF2Scheduler.hh
27  *
28  * Declaration of BF2Scheduler class.
29  *
30  * Bypassing Bottom-up Breadth-First-Search Instruction Scheduler
31  * (BubblefishScheduler)
32  *
33  * @author Heikki Kultala 2014-2020(heikki.kultala-no.spam-tuni.fi)
34  * @note rating: red
35  */
36 
37 #ifndef TTA_BF2_SCHEDULER_HH
38 #define TTA_BF2_SCHEDULER_HH
39 
40 #include "DDGPass.hh"
41 
42 #include <map>
43 
44 #include "DataDependenceGraph.hh"
45 #include "MachinePart.hh"
46 
47 #include "LiveRangeData.hh"
48 #include "LoopAnalyzer.hh"
49 
50 class ResourceManager;
52 class BUMoveNodeSelector;
54 class RegisterRenamer;
55 class BFOptimization;
56 class MoveNodeDuplicator;
57 class BF2ScheduleFront;
58 class BFScheduleLoopBufferInit;
59 
60 namespace TTAMachine {
61  class Unit;
62  class RegisterFile;
63  class Port;
64  class Bus;
65  class FUPort;
66  class HWOperation;
67 }
68 
69 namespace TTAProgram {
70  class Terminal;
71  class MoveGuard;
72 }
73 
74 class BF2Scheduler : public DDGPass {
75 
76 public:
80 
81  ~BF2Scheduler();
82 
83  virtual int handleDDG(
85  const TTAMachine::Machine& targetMachine, int minCycle = 0,
86  bool testOnly = false);
87 
88  void scheduleDDG(
92 
93  virtual std::string shortDescription() const override;
94 
95  virtual int handleLoopDDG(
97  const TTAMachine::Machine&, int tripCount,
98  SimpleResourceManager*, bool testOnly) override;
99 
100  DataDependenceGraph& ddg() { return *ddg_; }
101  const DataDependenceGraph& ddg() const { return *ddg_; }
103  SimpleResourceManager& rm() { return *rm_; }
107  assert(duplicator_!=NULL);
108  return *duplicator_;
109  }
110  bool killDeadResults() const { return killDeadResults_; }
111 
114 
115  std::set<const TTAMachine::RegisterFile*,
117  possibleTempRegRFs(const MoveNode& mn, bool tempRegAfter,
118  const TTAMachine::RegisterFile* forbiddenRF = nullptr);
119 
120  static bool isSourceUniversalReg(const MoveNode& mn);
122 
123  void nodeKilled(MoveNode& mn);
124  void nodeResurrected(MoveNode& mn);
125  void nodeAndCopyKilled(MoveNode& mn);
126 
128 
129  // This is not yet used, but will be used soon.
131  // Old version
133  };
134 
140  };
141 
142  /** Struct for return values */
148  sharedMN_(NULL),
149  sharedPort_(NULL) {}
151  state_(SHARED),
152  sharedMN_(&mn),
153  sharedPort_(&port) {}
154  };
155 
161  };
162 
163  bool isDeadResult(MoveNode& mn) const;
165 
171  latestCycle(INT_MAX) {}
172  };
173 
174  static bool isDestinationUniversalReg(const MoveNode& mn);
175 
176  typedef std::map<MoveNode*, MoveNode*, MoveNode::Comparator>
178 
180  bool isTrigger(const TTAMachine::Unit& unit, MoveNode& mn);
181 
182  bool hasUnscheduledSuccessors(MoveNode& mn) const;
183 
184  int tripCount() { return tripCount_; }
185 
186  int maximumAllowedCycle() const { return latestCycle_; }
187 
189 
192  MoveNode* jumpNode() { return jumpNode_; }
193 
195  return llResult_ == 0 ? NULL : llResult_->counterValueNode;
196  }
197 
199  return llResult_;
200  }
201 
203  llResult_ = llResult;
204  }
205 
206  bool mustBeTrigger(const MoveNode& mn, const ProgramOperation& po);
207 
208  // just to allow prolog to be longer than loop body.
209  static const int PROLOG_CYCLE_BIAS = 1000;
210 
211  std::list<ProgramOperation*> loopBufOps();
212 
213  void deletingNode(MoveNode* deletedNode);
214 
215  void finalizeSchedule();
216 
217  void unschedule();
218 
220 
222 protected:
223 
224  int handleLoopDDG(BUMoveNodeSelector& selector, bool allowPreLoopOpshare);
225 
226 private:
227 
228  bool findJump();
229 
232 
233  std::vector<BFOptimization*> scheduledStack_;
234 
235  // kill copy also for these
237  // do not kill copy for these
239 
242 
243  /// Nodes that may become ready due bypass removing antideps
245 
247 
249 
250 
251  void initializeQueues();
252 
254 
255  static void writeDotWithNameAndNodeID(
257  const TCEString& namePrefix, const MoveNode& mn);
258 
259  bool isRegCopyBefore(MoveNode& mn);
260  bool isRegCopyAfter(MoveNode& mn);
261 
262  bool pushAntidepDestsDown(MoveNode& mn, int oldLC, int maxLC);
263  void undoPushAntideps(MoveNode& aDepSource);
264 
267  const TCEString& reg, MoveNode* mn);
268 
269  int swapToUntrigger(
270  ProgramOperationPtr po, const Operation& op,
271  int operandIndex, MoveNode& trig);
272 
273  void revertTopOpt();
274 
276  void allocateFunctionUnits();
277  void reservePreallocatedFUs();
279 
281  ProgramOperationPtr po, const Operation& op,
282  const TTAMachine::HWOperation& hwop, bool onlySharedWithAnother);
283 
284 
286  ProgramOperationPtr po, const Operation& op, int operandIndex,
287  const TTAMachine::HWOperation& hwop, bool onlySharedWithAnother);
288 
290  ProgramOperationPtr po, const Operation& op,
291  bool onlySharedWithAnother);
292 
294 
295  void releasePortForOp(const Operation& op);
296 
301 
303 
308 
314 
316 
317  std::multimap<TCEString, MoveNode*> invariants_;
318  std::multimap<int, TCEString> invariantsOfCount_;
319 
320  // NULL as movenode means no operand share, FU used mutliple times
321  std::multimap<TTAMachine::FUPort*, MoveNode*> preSharedOperandPorts_;
322 
323  // NULL as movenode means no operand share, FU used multiple times
324  std::map<MoveNode*, TTAMachine::FUPort*, MoveNode::Comparator>
326 
327  std::list<ProgramOperation*> loopBufOps_;
328 };
329 
330 #endif
BF2Scheduler::loopLimitNode
MoveNode * loopLimitNode()
Definition: BF2Scheduler.hh:194
BF2Scheduler::tripCount
int tripCount()
Definition: BF2Scheduler.hh:184
BF2Scheduler::deletingNode
void deletingNode(MoveNode *deletedNode)
Definition: BF2Scheduler.cc:1633
TTAProgram
Definition: Estimator.hh:65
BF2Scheduler::getDstUnit
TTAMachine::Unit * getDstUnit(MoveNode &mn)
Definition: BF2Scheduler.cc:122
BF2Scheduler::SchedulingLimits::direction
SchedulingDirection direction
Definition: BF2Scheduler.hh:167
BF2Scheduler::PreLoopShareInfo::PreLoopShareInfo
PreLoopShareInfo(PreLoopOperandEnum state)
Definition: BF2Scheduler.hh:147
BF2Scheduler::jumpNode_
MoveNode * jumpNode_
Definition: BF2Scheduler.hh:311
BF2Scheduler::isRegCopyAfter
bool isRegCopyAfter(MoveNode &mn)
BF2Scheduler::renamer
RegisterRenamer * renamer()
Definition: BF2Scheduler.hh:221
BF2Scheduler::ddg
const DataDependenceGraph & ddg() const
Definition: BF2Scheduler.hh:101
TTAMachine::HWOperation
Definition: HWOperation.hh:52
MoveNodeDuplicator
Definition: MoveNodeDuplicator.hh:38
BF2Scheduler::possibleTempRegRFs
std::set< const TTAMachine::RegisterFile *, TTAMachine::MachinePart::Comparator > possibleTempRegRFs(const MoveNode &mn, bool tempRegAfter, const TTAMachine::RegisterFile *forbiddenRF=nullptr)
Definition: BF2Scheduler.cc:899
BF2Scheduler::hasUnscheduledSuccessors
bool hasUnscheduledSuccessors(MoveNode &mn) const
Definition: BF2Scheduler.cc:1054
BF2Scheduler::BF2Scheduler
BF2Scheduler(InterPassData &ipd, RegisterRenamer *renamer)
Definition: BF2Scheduler.cc:92
BF2Scheduler::isDestinationUniversalReg
static bool isDestinationUniversalReg(const MoveNode &mn)
Definition: BF2Scheduler.cc:773
BF2Scheduler::killDeadResults
bool killDeadResults() const
Definition: BF2Scheduler.hh:110
BoostGraph< MoveNode, DataDependenceEdge >::NodeSet
std::set< MoveNode *, typename MoveNode ::Comparator > NodeSet
Definition: BoostGraph.hh:86
BF2Scheduler::selectMoveToSchedule
MoveNode * selectMoveToSchedule()
BF2Scheduler::targetMachine
const TTAMachine::Machine & targetMachine() const
Definition: BF2Scheduler.hh:127
BF2Scheduler::preAllocateFunctionUnits
void preAllocateFunctionUnits(ProgramOperationPtr po)
Definition: BF2Scheduler.cc:1283
BF2Scheduler::ddg
DataDependenceGraph & ddg()
Definition: BF2Scheduler.hh:100
BF2Scheduler::prologDDG
DataDependenceGraph * prologDDG()
Definition: BF2Scheduler.hh:102
BF2Scheduler::isDeadResult
bool isDeadResult(MoveNode &mn) const
Definition: BF2Scheduler.cc:798
BF2Scheduler::operandShareRemovedMoves_
MoveNodeMap operandShareRemovedMoves_
Definition: BF2Scheduler.hh:240
BF2Scheduler::PreLoopShareInfo::PreLoopShareInfo
PreLoopShareInfo(MoveNode &mn, TTAMachine::FUPort &port)
Definition: BF2Scheduler.hh:150
BF2Scheduler::PreLoopOperandEnum
PreLoopOperandEnum
Definition: BF2Scheduler.hh:135
DataDependenceGraph.hh
ProgramOperation
Definition: ProgramOperation.hh:70
MoveNode
Definition: MoveNode.hh:65
BF2Scheduler::prologRM_
SimpleResourceManager * prologRM_
Definition: BF2Scheduler.hh:300
BF2Scheduler::NO_LOOP_SCHEDULER
@ NO_LOOP_SCHEDULER
Definition: BF2Scheduler.hh:132
BF2Scheduler::MoveNodeMap
std::map< MoveNode *, MoveNode *, MoveNode::Comparator > MoveNodeMap
Definition: BF2Scheduler.hh:177
BUMoveNodeSelector
Definition: BUMoveNodeSelector.hh:70
BF2Scheduler::SchedulingLimits::latestCycle
int latestCycle
Definition: BF2Scheduler.hh:169
BFOptimization
Definition: BFOptimization.hh:73
BF2Scheduler::duplicator_
MoveNodeDuplicator * duplicator_
Definition: BF2Scheduler.hh:315
BF2Scheduler::latestCycle_
int latestCycle_
Definition: BF2Scheduler.hh:302
LiveRangeData::MoveNodeUseMapSet
std::map< TCEString, MoveNodeUseSet > MoveNodeUseMapSet
Definition: LiveRangeData.hh:52
BF2Scheduler::shortDescription
virtual std::string shortDescription() const override
Definition: BF2Scheduler.cc:887
BF2Scheduler::SchedulingLimits::earliestCycle
int earliestCycle
Definition: BF2Scheduler.hh:168
BF2Scheduler::loopBufOps
std::list< ProgramOperation * > loopBufOps()
MachinePart.hh
BF2Scheduler::pendingMoves_
DataDependenceGraph::NodeSet pendingMoves_
Definition: BF2Scheduler.hh:246
BF2Scheduler::PreLoopShareInfo
Definition: BF2Scheduler.hh:143
BF2Scheduler::duplicator
MoveNodeDuplicator & duplicator()
Definition: BF2Scheduler.hh:106
BF2Scheduler::isTrigger
bool isTrigger(const TTAMachine::Unit &unit, MoveNode &mn)
Definition: BF2Scheduler.cc:819
ProgramOperationPtr
std::shared_ptr< ProgramOperation > ProgramOperationPtr
Definition: MoveNode.hh:52
BF2Scheduler::writeDotWithNameAndNodeID
static void writeDotWithNameAndNodeID(DataDependenceGraph &ddg, const TCEString &namePrefix, const MoveNode &mn)
Definition: BF2Scheduler.cc:696
BF2Scheduler::allocateFunctionUnits
void allocateFunctionUnits()
Definition: BF2Scheduler.cc:1234
BF2Scheduler::initializeQueues
void initializeQueues()
BF2Scheduler::findBypassEdge
DataDependenceEdge * findBypassEdge(const MoveNode &mn)
Definition: BF2Scheduler.cc:838
assert
#define assert(condition)
Definition: Application.hh:86
BF2Scheduler::releasePortForOp
void releasePortForOp(const Operation &op)
Definition: BF2Scheduler.cc:1310
BF2Scheduler::preSharedOperandPorts_
std::multimap< TTAMachine::FUPort *, MoveNode * > preSharedOperandPorts_
Definition: BF2Scheduler.hh:321
BF2Scheduler::countLoopInvariantValueUsages
void countLoopInvariantValueUsages()
Definition: BF2Scheduler.cc:1155
BF2Scheduler::PreLoopShareInfo::state_
PreLoopOperandEnum state_
Definition: BF2Scheduler.hh:144
TTAMachine::FUPort
Definition: FUPort.hh:46
BF2Scheduler::isPreLoopSharedOperand
TTAMachine::FUPort * isPreLoopSharedOperand(MoveNode &mn) const
Definition: BF2Scheduler.cc:1625
BF2Scheduler::TOPDOWN
@ TOPDOWN
Definition: BF2Scheduler.hh:158
BF2Scheduler::invariantsOfCount_
std::multimap< int, TCEString > invariantsOfCount_
Definition: BF2Scheduler.hh:318
TTAMachine::Unit
Definition: Unit.hh:51
BF2Scheduler::removedMoves_
DataDependenceGraph::NodeSet removedMoves_
Definition: BF2Scheduler.hh:238
LoopAnalyzer::LoopAnalysisResult::counterValueNode
MoveNode * counterValueNode
Definition: LoopAnalyzer.hh:16
BF2Scheduler::EXACTCYCLE
@ EXACTCYCLE
Definition: BF2Scheduler.hh:160
BF2Scheduler::targetMachine_
const TTAMachine::Machine * targetMachine_
Definition: BF2Scheduler.hh:304
BF2Scheduler::getLoopAnalysis
LoopAnalyzer::LoopAnalysisResult * getLoopAnalysis()
Definition: BF2Scheduler.hh:198
BF2Scheduler::setLoopLimits
void setLoopLimits(LoopAnalyzer::LoopAnalysisResult *llResult)
Definition: BF2Scheduler.hh:202
BF2Scheduler::isSourceUniversalReg
static bool isSourceUniversalReg(const MoveNode &mn)
Definition: BF2Scheduler.cc:765
BF2Scheduler::nodeAndCopyKilled
void nodeAndCopyKilled(MoveNode &mn)
Definition: BF2Scheduler.cc:803
BF2Scheduler::unschedule
void unschedule()
Definition: BF2Scheduler.cc:780
BF2Scheduler::preLoopSharedOperands_
std::map< MoveNode *, TTAMachine::FUPort *, MoveNode::Comparator > preLoopSharedOperands_
Definition: BF2Scheduler.hh:325
BF2Scheduler::jumpGuardWrite_
MoveNode * jumpGuardWrite_
Definition: BF2Scheduler.hh:312
BF2Scheduler::unreservePreallocatedFUs
void unreservePreallocatedFUs()
Definition: BF2Scheduler.cc:1603
BF2Scheduler::options_
LLVMTCECmdLineOptions * options_
Definition: BF2Scheduler.hh:306
BF2Scheduler::jumpGuard
TTAProgram::MoveGuard * jumpGuard()
Definition: BF2Scheduler.cc:1087
ResourceManager
Definition: ResourceManager.hh:53
BF2Scheduler::handleDDG
virtual int handleDDG(DataDependenceGraph &ddg, SimpleResourceManager &rm, const TTAMachine::Machine &targetMachine, int minCycle=0, bool testOnly=false)
Definition: BF2Scheduler.cc:244
BF2Scheduler::prologDDG_
DataDependenceGraph * prologDDG_
Definition: BF2Scheduler.hh:298
BF2Scheduler::PreLoopShareInfo::sharedMN_
MoveNode * sharedMN_
Definition: BF2Scheduler.hh:145
BF2Scheduler::killDeadResults_
bool killDeadResults_
Definition: BF2Scheduler.hh:309
BF2Scheduler::selector
BUMoveNodeSelector & selector()
Definition: BF2Scheduler.hh:105
BF2Scheduler::mustBeTrigger
bool mustBeTrigger(const MoveNode &mn, const ProgramOperation &po)
Definition: BF2Scheduler.cc:1123
BF2Scheduler
Definition: BF2Scheduler.hh:74
InterPassData
Definition: InterPassData.hh:48
BF2Scheduler::sharedOperands_
MoveNodeMap sharedOperands_
Definition: BF2Scheduler.hh:241
BF2Scheduler::reservePreallocatedFUs
void reservePreallocatedFUs()
Definition: BF2Scheduler.cc:1546
BF2Scheduler::EITHER
@ EITHER
Definition: BF2Scheduler.hh:157
BF2Scheduler::dreRemovedMoves_
DataDependenceGraph::NodeSet dreRemovedMoves_
Definition: BF2Scheduler.hh:236
BF2Scheduler::selector_
BUMoveNodeSelector * selector_
Definition: BF2Scheduler.hh:305
MoveNodeSet
Definition: MoveNodeSet.hh:41
BF2Scheduler::bypassPredecessors_
DataDependenceGraph::NodeSet bypassPredecessors_
Nodes that may become ready due bypass removing antideps.
Definition: BF2Scheduler.hh:244
LLVMTCECmdLineOptions
Definition: LLVMTCECmdLineOptions.hh:48
BF2Scheduler::SchedulingLimits::SchedulingLimits
SchedulingLimits()
Definition: BF2Scheduler.hh:170
Operation
Definition: Operation.hh:59
BF2Scheduler::rm_
SimpleResourceManager * rm_
Definition: BF2Scheduler.hh:299
BF2Scheduler::SchedulingLimits
Definition: BF2Scheduler.hh:166
BF2Scheduler::LoopSchedulingMode
LoopSchedulingMode
Definition: BF2Scheduler.hh:130
BF2Scheduler::prologRM
SimpleResourceManager * prologRM()
Definition: BF2Scheduler.hh:104
BF2Scheduler::PROLOG_CYCLE_BIAS
static const int PROLOG_CYCLE_BIAS
Definition: BF2Scheduler.hh:209
LoopAnalyzer::LoopAnalysisResult
Definition: LoopAnalyzer.hh:13
BF2Scheduler::~BF2Scheduler
~BF2Scheduler()
Definition: BF2Scheduler.cc:1638
DDGPass
Definition: DDGPass.hh:51
BF2Scheduler::tripCount_
int tripCount_
Definition: BF2Scheduler.hh:310
BF2Scheduler::rm
SimpleResourceManager & rm()
Definition: BF2Scheduler.hh:103
LiveRangeData.hh
BF2Scheduler::SchedulingDirection
SchedulingDirection
Definition: BF2Scheduler.hh:156
BF2Scheduler::currentFront
BF2ScheduleFront * currentFront()
Definition: BF2Scheduler.hh:188
BF2Scheduler::jumpNode
MoveNode * jumpNode()
Definition: BF2Scheduler.hh:192
BF2Scheduler::undoPushAntideps
void undoPushAntideps(MoveNode &aDepSource)
BF2Scheduler::currentFront_
BF2ScheduleFront * currentFront_
Definition: BF2Scheduler.hh:230
BF2Scheduler::nodeResurrected
void nodeResurrected(MoveNode &mn)
Definition: BF2Scheduler.cc:811
BF2Scheduler::renamer_
RegisterRenamer * renamer_
Definition: BF2Scheduler.hh:307
BF2Scheduler::revertTopOpt
void revertTopOpt()
Definition: BF2Scheduler.cc:1147
BF2Scheduler::SHARED
@ SHARED
Definition: BF2Scheduler.hh:137
TCEString
Definition: TCEString.hh:53
DDGPass.hh
BF2Scheduler::scheduleFrontFromMove
int scheduleFrontFromMove(MoveNode &mn)
Definition: BF2Scheduler.cc:1038
BF2Scheduler::loopBufOps_
std::list< ProgramOperation * > loopBufOps_
Definition: BF2Scheduler.hh:327
DataDependenceGraph
Definition: DataDependenceGraph.hh:67
BF2Scheduler::finalizeSchedule
void finalizeSchedule()
Definition: BF2Scheduler.cc:641
BF2Scheduler::revertBBLiveRangeBookkeepingForSource
void revertBBLiveRangeBookkeepingForSource(MoveNode *mn)
Definition: BF2Scheduler.cc:726
BF2Scheduler::invariants_
std::multimap< TCEString, MoveNode * > invariants_
Definition: BF2Scheduler.hh:317
BF2Scheduler::scheduledStack_
std::vector< BFOptimization * > scheduledStack_
Definition: BF2Scheduler.hh:233
BF2Scheduler::pushAntidepDestsDown
bool pushAntidepDestsDown(MoveNode &mn, int oldLC, int maxLC)
DataDependenceEdge
Definition: DataDependenceEdge.hh:43
BF2Scheduler::swapToUntrigger
int swapToUntrigger(ProgramOperationPtr po, const Operation &op, int operandIndex, MoveNode &trig)
Definition: BF2Scheduler.cc:1099
SimpleResourceManager
Definition: SimpleResourceManager.hh:58
BF2Scheduler::findSiblings
MoveNodeSet findSiblings(MoveNode &mn)
BF2Scheduler::llResult_
LoopAnalyzer::LoopAnalysisResult * llResult_
Definition: BF2Scheduler.hh:313
BF2Scheduler::nodeKilled
void nodeKilled(MoveNode &mn)
Definition: BF2Scheduler.cc:807
BF2Scheduler::NO_LOOP_INVARIANT
@ NO_LOOP_INVARIANT
Definition: BF2Scheduler.hh:139
TTAMachine::RegisterFile
Definition: RegisterFile.hh:47
BF2Scheduler::guardWriteNode
MoveNode * guardWriteNode()
Definition: BF2Scheduler.hh:191
BF2Scheduler::bypassNodes
MoveNodeMap bypassNodes()
Definition: BF2Scheduler.cc:1646
TTAMachine
Definition: Assembler.hh:48
LoopAnalyzer.hh
BF2Scheduler::eraseFromMoveNodeUseSet
void eraseFromMoveNodeUseSet(LiveRangeData::MoveNodeUseMapSet &mnuMap, const TCEString &reg, MoveNode *mn)
Definition: BF2Scheduler.cc:749
TTAMachine::MachinePart::Comparator
Definition: MachinePart.hh:59
BF2Scheduler::maximumAllowedCycle
int maximumAllowedCycle() const
Definition: BF2Scheduler.hh:186
TTAProgram::MoveGuard
Definition: MoveGuard.hh:47
BF2Scheduler::handleLoopDDG
virtual int handleLoopDDG(DataDependenceGraph &, SimpleResourceManager &, const TTAMachine::Machine &, int tripCount, SimpleResourceManager *, bool testOnly) override
Definition: BF2Scheduler.cc:402
BF2Scheduler::findJump
bool findJump()
Definition: BF2Scheduler.cc:1076
BF2Scheduler::revertBBLiveRangeBookkeepingForDestination
void revertBBLiveRangeBookkeepingForDestination(MoveNode *mn)
Definition: BF2Scheduler.cc:703
RegisterRenamer
Definition: RegisterRenamer.hh:59
BF2Scheduler::preAllocateFunctionUnitsInner
PreLoopShareInfo preAllocateFunctionUnitsInner(ProgramOperationPtr po, const Operation &op, bool onlySharedWithAnother)
Definition: BF2Scheduler.cc:1364
BF2Scheduler::NOT_SHARED
@ NOT_SHARED
Definition: BF2Scheduler.hh:138
BF2ScheduleFront
Definition: BF2ScheduleFront.hh:50
BF2Scheduler::BOTTOMUP
@ BOTTOMUP
Definition: BF2Scheduler.hh:159
BF2Scheduler::NO_PORT
@ NO_PORT
Definition: BF2Scheduler.hh:136
BF2Scheduler::ddg_
DataDependenceGraph * ddg_
Definition: BF2Scheduler.hh:297
BF2Scheduler::scheduleDDG
void scheduleDDG(DataDependenceGraph &ddg, SimpleResourceManager &rm, const TTAMachine::Machine &targetMachine)
Definition: BF2Scheduler.cc:143
TTAMachine::Machine
Definition: Machine.hh:73
BF2Scheduler::PreLoopShareInfo::sharedPort_
TTAMachine::FUPort * sharedPort_
Definition: BF2Scheduler.hh:146
BF2Scheduler::isRegCopyBefore
bool isRegCopyBefore(MoveNode &mn)