OpenASIP  2.0
Public Member Functions | Private Attributes | List of all members
BFScheduleBU Class Reference

#include <BFScheduleBU.hh>

Inheritance diagram for BFScheduleBU:
Inheritance graph
Collaboration diagram for BFScheduleBU:
Collaboration graph

Public Member Functions

 BFScheduleBU (BF2Scheduler &sched, MoveNode &mn, int lc, bool allowEarlyBypass, bool allowLateBypass, bool allowEarlySharing)
 
virtual bool operator() ()
 
void undoOnlyMe ()
 
- Public Member Functions inherited from BFScheduleMove
 BFScheduleMove (BF2Scheduler &sched, MoveNode &mn)
 
- Public Member Functions inherited from BFOptimization
 BFOptimization (BF2Scheduler &sched)
 
virtual bool isFinishFront ()
 
virtual void mightBeReady (MoveNode &mn)
 
- Public Member Functions inherited from Reversible
virtual void undo ()
 
virtual ~Reversible ()
 
void deleteChildren (std::stack< Reversible * > &children)
 
int id ()
 
 Reversible ()
 

Private Attributes

int lc_
 
bool allowEarlyBypass_
 
bool allowLateBypass_
 
bool allowEarlySharing_
 
bool bypasserScheduled_
 
bool createdCopy_
 

Additional Inherited Members

- Static Public Member Functions inherited from BFOptimization
static void clearPrologMoves ()
 
static MoveNodegetSisterTrigger (const MoveNode &mn, const TTAMachine::Machine &mach)
 
- Protected Member Functions inherited from BFOptimization
DataDependenceGraphddg ()
 
DataDependenceGraphrootDDG ()
 
const DataDependenceGraphddg () const
 
DataDependenceGraphprologDDG ()
 
SimpleResourceManagerrm () const
 
SimpleResourceManagerprologRM () const
 
BUMoveNodeSelectorselector ()
 
const TTAMachine::MachinetargetMachine () const
 
unsigned int ii () const
 
MoveNodeDuplicatorduplicator () const
 
virtual bool assign (int cycle, MoveNode &, const TTAMachine::Bus *bus=nullptr, const TTAMachine::FunctionUnit *srcFU_=nullptr, const TTAMachine::FunctionUnit *dstFU=nullptr, const TTAMachine::Bus *prologBus=nullptr, int immWriteCycle=-1, int prologImmWriteCycle=-1, const TTAMachine::ImmediateUnit *immu=nullptr, int immRegIndex=-1, bool ignoreGuardWriteCycle=false)
 
virtual void unassign (MoveNode &mn, bool disposePrologCopy=true)
 
virtual int rmEC (int cycle, MoveNode &mn, const TTAMachine::Bus *bus=nullptr, const TTAMachine::FunctionUnit *srcFU=nullptr, const TTAMachine::FunctionUnit *dstFU=nullptr, const TTAMachine::Bus *prologBus=nullptr, int immWriteCycle=-1, int prologImmWriteCycle=-1, const TTAMachine::ImmediateUnit *immu=nullptr, int immRegIndex=-1)
 
virtual int rmLC (int cycle, MoveNode &mn, const TTAMachine::Bus *bus=nullptr, const TTAMachine::FunctionUnit *srcFU=nullptr, const TTAMachine::FunctionUnit *dstFU=nullptr, const TTAMachine::Bus *prologBus=nullptr, int immWriteCycle=-1, int prologImmWriteCycle=-1, const TTAMachine::ImmediateUnit *immu=nullptr, int immRegIndex=-1)
 
virtual bool canAssign (int cycle, MoveNode &mn, const TTAMachine::Bus *bus=nullptr, const TTAMachine::FunctionUnit *srcFU=nullptr, const TTAMachine::FunctionUnit *dstFU=nullptr, const TTAMachine::Bus *prologBus=nullptr, int immWriteCycle=-1, int prologImmWriteCycle=-1, const TTAMachine::ImmediateUnit *immu=nullptr, int immRegIndex=-1, bool ignoreGWN=false)
 
bool putAlsoToPrologEpilog (int cycle, MoveNode &mn)
 
void setPrologSrcFUAnno (MoveNode &prologMN, MoveNode &loopMN)
 
void setPrologDstFUAnno (MoveNode &prologMN, MoveNode &loopMN)
 
void setJumpGuard (MoveNode &mn)
 
void unsetJumpGuard (MoveNode &mn)
 
bool needJumpGuard (const MoveNode &mn, int cycle)
 
int jumpGuardAvailableCycle (const MoveNode &mn)
 
bool canBeSpeculated (const Operation &op)
 
bool canBeSpeculated (const MoveNode &mn)
 
bool usePrologMove (const MoveNode &mn)
 
bool canBeScheduled (const MoveNode &mn)
 
const TTAMachine::RegisterFileRFReadPortCountPreventsScheduling (const MoveNode &mn)
 
bool immCountPreventsScheduling (const MoveNode &mn)
 
- Protected Member Functions inherited from Reversible
bool runPreChild (Reversible *preChild)
 
bool runPostChild (Reversible *preChild)
 
bool runChild (std::stack< Reversible * > &children, Reversible *child)
 
bool runChild (Reversible *child, bool pre)
 
void undoAndRemovePreChildren ()
 
void undoAndRemovePostChildren ()
 
void undoAndRemoveChildren (std::stack< Reversible * > &children)
 
- Protected Attributes inherited from BFScheduleMove
MoveNodemn_
 
bool createdPrologMove_
 
- Protected Attributes inherited from BFOptimization
BF2Schedulersched_
 
- Protected Attributes inherited from Reversible
std::stack< Reversible * > preChildren_
 
std::stack< Reversible * > postChildren_
 
- Static Protected Attributes inherited from BFOptimization
static std::map< MoveNode *, MoveNode *, MoveNode::ComparatorprologMoves_
 

Detailed Description

Definition at line 45 of file BFScheduleBU.hh.

Constructor & Destructor Documentation

◆ BFScheduleBU()

BFScheduleBU::BFScheduleBU ( BF2Scheduler sched,
MoveNode mn,
int  lc,
bool  allowEarlyBypass,
bool  allowLateBypass,
bool  allowEarlySharing 
)
inline

Definition at line 48 of file BFScheduleBU.hh.

50  :
51  BFScheduleMove(sched, mn), lc_(lc),
52  allowEarlyBypass_(allowEarlyBypass),
53  allowLateBypass_(allowLateBypass),
54  allowEarlySharing_(allowEarlySharing),
55  bypasserScheduled_(false),
56  createdCopy_(false) {}

Referenced by operator()().

Member Function Documentation

◆ operator()()

bool BFScheduleBU::operator() ( )
virtual

This performs the operation. Returns true if success, false if fail.

Another op may not come between these, so if this does not work, try without this

Implements Reversible.

Definition at line 66 of file BFScheduleBU.cc.

66  {
67 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
68  std::cerr << "\tPerforming BFSchduleBU for: " << mn_.toString() <<
69  " lc limit: " << lc_ << std::endl;
70 #endif
73  mn_.move().setBus(UniversalMachine::instance().universalBus());
74  }
75  // TODO: what about constants!
76 
79  /* this does not yet work, leads to schduler deadlock.
80  so commented out.
81  if (BF2ScheduleFront::getSisterTrigger(mn_, targetMachine()) == &mn_) {
82  ProgramOperationPtr poPtr = mn_.destinationOperationPtr();
83  for (int i = 0; i < poPtr->inputMoveCount(); i++) {
84  MoveNode& operand = poPtr->inputMove(i);
85  if (&operand != &mn_) {
86  if (!operand.isScheduled() && !sched_.isDeadResult(operand)) {
87 
88  BFShareOperands* shareOpers = new BFShareOperands(sched_, operand, lc_);
89  if ((*shareOpers)()) {
90  // if (shareOpers->removedNode()) {
91  // return true;
92  // }
93  preChildren_.push(shareOpers);
94  } else {
95  delete shareOpers;
96  }
97  }
98 
99  }
100  }
101  }
102  */
103  /** Another op may not come between these, so if this does
104  not work, try without this */
105  BFShareOperands* shareOpers = new BFShareOperands(sched_, mn_, lc_);
106  runPreChild(shareOpers);
107  }
108 
109  if (mn_.isSourceVariable()) {
110  bool forceBypass = BF2Scheduler::isSourceUniversalReg(mn_);
111  if (forceBypass && !allowEarlyBypass_) {
112  return false;
113  }
114  if (allowEarlyBypass_) {
116  if (!runPreChild(ebp)) {
117  if (forceBypass) {
118 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
119  std::cerr << "\t\tForced bypass failed" << std::endl;
120  ddg().writeToDotFile("forced_bypass_fail.dot");
121 #endif
122  return false;
123  }
124  }
125  if (mn_.isScheduled()) {
126  bypasserScheduled_ = true;
127  return true;
128  }
129  }
130  }
131 
134  if (runPreChild(lbp)) {
135  if (lbp->removedSource()) {
136  return true;
137  } else {
138  // late bypass without DRE .. we may want to do TD instead?
139  int prefCycle = BF2ScheduleFront::prefResultCycle(mn_);
140  if (prefCycle != INT_MAX) {
141  BFScheduleTD* td =
142  new BFScheduleTD(sched_, mn_, prefCycle, false);
143  if (runPostChild(td)) {
144  return true;
145  }
146  }
147  }
148  }
149  }
150 
151  BFRegCopy* regCopy = NULL;
152  BFRegCopy* regCopyBefore = NULL;
153  BFRegCopy* regCopyAfter = NULL;
154  if (!canBeScheduled(mn_)) {
155 
156  // can this be solved by dropping guard?
157  if (!runPreChild(new BFTryRemoveGuard(sched_, mn_))) {
158 
159  // no. need to add a regcopy.
160  if (mn_.isSourceOperation()) {
161  regCopy = regCopyAfter = new BFRegCopyAfter(sched_,mn_, lc_);
162  } else {
163  // check that we have copy op with suitable connectivity.
164  auto copyFUs =
166  if (!copyFUs.empty()) {
167  regCopy = regCopyBefore =
168  new BFCopyRegWithOp(sched_, mn_, lc_, copyFUs);
169  } else { // source not op, dest not reg(is op)
170  BFRenameSource* renSrc =
171  new BFRenameSource(sched_, mn_, lc_, lc_);
172  if (runPreChild(renSrc)) {
173  auto forbiddenRF =
175  if (forbiddenRF) {
176  renSrc->undo();
177  preChildren_.pop();
178  forbiddenRF =
180  regCopy = regCopyBefore =
181  new BFRegCopyBefore(sched_, mn_, lc_, forbiddenRF);
182  }
183  } else {
184  // could not use renaming to get rid of regcopy.
185  auto forbiddenRF =
187  regCopy = regCopyBefore =
188  new BFRegCopyBefore(sched_, mn_, lc_,forbiddenRF);
189  }
190  }
191  }
192  if (regCopy && !runPreChild(regCopy)) {
194  return false;
195  }
196  }
197  }
198  // ignore unsched successors
199  int ddglc = std::min(lc_,ddg().latestCycle(mn_, ii(), false, true));
200  int ddgec = ddg().earliestCycle(mn_, ii(), false, false);
201  int rmlc = rmLC(ddglc, mn_);
202 
203 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
204  std::cerr << "\t\tddg lc: " << ddglc << std::endl;
205  std::cerr << "\t\tddg ec: " << ddgec << std::endl;
206 #endif
207 
208  int latestIfRenamed =
209  std::min(lc_,
210  ddg().latestCycle(mn_, ii(), true, false));
211 // ddgReplyLimit = std::min(latestIfRenamed+3, ddgReplyLimit);
212  if (latestIfRenamed > ddglc && !mn_.move().isControlFlowMove()) {
213  latestIfRenamed = rmLC(latestIfRenamed, mn_);
214 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
215  std::cerr << "\t\tRenaming could benefit move: " << mn_.toString() <<
216  " lc: " << ddglc << " renamed lc: " << latestIfRenamed
217  << std::endl;
218 #endif
219  BFOptimization* adepPush = new BFPushAntidepsDown(
220  sched_, mn_, ddglc, latestIfRenamed);
221  if (runPreChild(adepPush)) {
222  ddglc = std::min(
223  lc_, ddg().latestCycle(mn_, ii(), false, false));
224 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
225  std::cerr << "\t\tPushed antidep dests down, new lc: "
226  << ddglc << std::endl;
227 #endif
228 
229  latestIfRenamed = std::min(lc_,
230  ddg().latestCycle(
231  mn_, ii(), true, false));
232  latestIfRenamed = rmLC(latestIfRenamed, mn_);
233 
234 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
235  } else {
236 
237  std::cerr << "\t\tCould not push antidep dests down" << std::endl;
238 #endif
239  }
240  rmlc = rmLC(ddglc, mn_);
241 
242  if (latestIfRenamed > ddglc &&
243  !mn_.move().isControlFlowMove() &&
244  mn_.isSourceVariable()) {
245 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
246  std::cerr << "Antideps still limit scheduling of: "
247  << mn_.toString() << " even after pushing? them down!"
248  << std::endl;
249 #endif
250  BFOptimization* renameSrc =
251  new BFRenameSource(sched_, mn_, ddglc, latestIfRenamed);
252  if (runPreChild(renameSrc)) {
253  int renamedDDGLC =
254  std::min(
255  lc_, ddg().latestCycle(mn_, ii(), false, false));
256 
257  int renamedRMLC = rmLC(renamedDDGLC, mn_);
258  if (renamedRMLC <= rmlc) {
259 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
260  std::cerr << "\t\tRenaming did not help rmlc, undoing"
261  << std::endl;
262 #endif
263  preChildren_.pop();
264  renameSrc->undo();
265  } else {
266  ddglc = renamedDDGLC;
267  rmlc = renamedRMLC;
268 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
269  std::cerr << "\t\tRenamed Source Reg, new lc: "
270  << ddglc << std::endl;
271 #endif
272  }
273  }
274  }
275  }
276 
277  if ((ddglc < ddgec || rmlc < ddgec) && ddglc >=0 && ii()) {
278 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
279  std::cerr << "\t\tPushing up deps could benefit move: "
280  << mn_.toString() << " lc: " << ddglc
281  << " ec: " << ddgec << std::endl;
282 #endif
283  if (runPreChild(new BFPushDepsUp(sched_, mn_, ddglc))) {
284  ddgec = ddg().earliestCycle(mn_, ii(), false, false);
285 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
286  std::cerr << "pushed antidep something up, ec now: "
287  << ddgec << std::endl;
288 #endif
289  }
290  }
291 
292 
293  if (mn_.move().destination().isGPR() &&
294  mn_.move().destination().registerFile().width() == 1) {
295  int latestNoGuard =
296  std::min(lc_,
297  ddg().latestCycle(mn_, ii(), false, false, true));
298  if (latestNoGuard > ddglc) {
299  BFOptimization* removeGuardsFromSuccs =
300  new BFRemoveGuardsFromSuccs(sched_, mn_, ddglc,latestNoGuard);
301  if (runPreChild(removeGuardsFromSuccs)) {
302  ddglc = std::min(lc_,
303  ddg().latestCycle(mn_, ii(), false, false));
304 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
305  std::cerr << "\t\tRemoved guards from dests, new lc: "
306  << ddglc << std::endl;
307 #endif
308  } else {
309 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
310  std::cerr << "\t\tCould not remove guards from dests"
311  << std::endl;
312 #endif
313  }
314  }
315  }
316 
317  rmlc = rmLC(ddglc, mn_);
318 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
319  std::cerr << "\t\tbfschdbu: rmlc: " << rmlc << std::endl;
320 #endif
321 
322  if (rmlc < ddgec && ii() != 0) {
323 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
324  std::cerr << "\t\t\tDDG ec " << ddgec << " on loop(II:"
325  << ii() << ") limits scheudling of: " << mn_.toString();
326 #endif
327  if (ddg().earliestCycle(mn_, INT_MAX/2, false, false) < rmlc) {
328 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
329  std::cerr << "Limiter is a loop edge" << std::endl;
330  std::cerr << "\t\t\t\tddgec was: " << ddgec << " ddglc was: "
331  << ddgec << " rmlc was: " << rmlc << std::endl;
332 #endif
333  BFOptimization* loopDepPush = new BFPushDepsUp(sched_, mn_, rmlc);
334  if (runPreChild(loopDepPush)) {
335 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
336  std::cerr << "Pushed loop deps up." << std::endl;
337 #endif
338  ddglc = std::min(lc_,ddg().latestCycle(mn_, ii(), false, false));
339  ddgec = ddg().earliestCycle(mn_, ii(), false, false);
340  rmlc = rmLC(ddglc, mn_);
341 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
342  std::cerr << "\t\t\t\tddgec now: " << ddgec << "ddglc now: "
343  << ddgec << "rmlc now: " << rmlc << std::endl;
344 #endif
345  } else {
346  // delete loopDepPush;
347 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
348  std::cerr << "loop dep psuh failed." << std::endl;
349 #endif
350  }
351 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
352  } else {
353  std::cerr << "Limiter not a loop edge." << std::endl;
354 #endif
355  }
356  }
357  rmlc = rmLC(ddglc, mn_);
358  if (rmlc >= ddgec && rmlc != INT_MAX) {
359 
360 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
361  std::cerr << "\t\tassigning to: " << rmlc << std::endl;
362 #endif
363 
364  createdCopy_ = assign(rmlc, mn_);
365 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
366  std::cerr << "\t\tAssigned ok:" << mn_.toString()
367  << " bus: " << mn_.move().bus().name() << std::endl;
368 #endif
369  if (regCopyBefore != NULL) {
370  MoveNode* regCopy = regCopyBefore->getRegCopy();
371  BFScheduleBU* regCopySched =
372  new BFScheduleBU(sched_, *regCopy, lc_, false, false, false);
373  if (!runPostChild(regCopySched)) {
374  undo();
375  return false;
376  }
377  }
378 
380  runPostChild(sol);
381 
382 #if 0
383  if (mn_.move().destination().isFUPort() &&
387  }
388 #endif
389  return true;
390  } else {
392  return false;
393  }
394 }

References allowEarlyBypass_, allowEarlySharing_, allowLateBypass_, assert, BFOptimization::assign(), BFScheduleBU(), TTAProgram::Move::bus(), bypasserScheduled_, BFOptimization::canBeScheduled(), MachineConnectivityCheck::copyOpFUs(), createdCopy_, BFOptimization::ddg(), TTAProgram::Move::destination(), MoveNode::destinationOperation(), DataDependenceGraph::earliestCycle(), BFRegCopy::getRegCopy(), BFOptimization::ii(), UniversalMachine::instance(), TTAProgram::Move::isControlFlowMove(), MoveNode::isDestinationOperation(), MoveNode::isDestinationVariable(), TTAProgram::Terminal::isFUPort(), TTAProgram::Terminal::isGPR(), MoveNode::isScheduled(), MoveNode::isSourceOperation(), BF2Scheduler::isSourceUniversalReg(), MoveNode::isSourceVariable(), TTAProgram::Terminal::isTriggering(), lc_, BFScheduleMove::mn_, MoveNode::move(), TTAMachine::Component::name(), Reversible::preChildren_, BF2ScheduleFront::prefResultCycle(), TTAProgram::Terminal::registerFile(), BFLateBypasses::removedSource(), BFOptimization::RFReadPortCountPreventsScheduling(), BFOptimization::rmLC(), Reversible::runPostChild(), Reversible::runPreChild(), BFOptimization::sched_, TTAProgram::Move::setBus(), BFOptimization::targetMachine(), MoveNode::toString(), Reversible::undo(), Reversible::undoAndRemovePreChildren(), UniversalMachine::universalBus(), TTAMachine::BaseRegisterFile::width(), and GraphBase< GraphNode, GraphEdge >::writeToDotFile().

Here is the call graph for this function:

◆ undoOnlyMe()

void BFScheduleBU::undoOnlyMe ( )
virtual

Undoes the operations done by this class but not children. This method should be overloaded by most derived classes.

Reimplemented from BFScheduleMove.

Definition at line 397 of file BFScheduleBU.cc.

397  {
398 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
399  std::cerr << "\t\tUndoing BU schedule of: " << mn_.toString() <<std::endl;
400 #endif
401 
402  if (!bypasserScheduled_) {
403 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
404  std::cerr << "\t\t\tunassigning here." << std::endl;
405 #endif
406  if (mn_.isScheduled()) {
408  }
409  if (&mn_.move().bus() !=
411  mn_.move().setBus(UniversalMachine::instance().universalBus());
412  }
413 #ifdef DEBUG_BUBBLEFISH_SCHEDULER
414  } else {
415  std::cerr << "\t\t\tbypasser scheduled this, no need to undo here"
416  << std::endl;
417 #endif
418  }
419 }

References TTAProgram::Move::bus(), bypasserScheduled_, createdCopy_, UniversalMachine::instance(), MoveNode::isScheduled(), BFScheduleMove::mn_, MoveNode::move(), TTAProgram::Move::setBus(), MoveNode::toString(), BFOptimization::unassign(), and UniversalMachine::universalBus().

Here is the call graph for this function:

Member Data Documentation

◆ allowEarlyBypass_

bool BFScheduleBU::allowEarlyBypass_
private

Definition at line 62 of file BFScheduleBU.hh.

Referenced by operator()().

◆ allowEarlySharing_

bool BFScheduleBU::allowEarlySharing_
private

Definition at line 64 of file BFScheduleBU.hh.

Referenced by operator()().

◆ allowLateBypass_

bool BFScheduleBU::allowLateBypass_
private

Definition at line 63 of file BFScheduleBU.hh.

Referenced by operator()().

◆ bypasserScheduled_

bool BFScheduleBU::bypasserScheduled_
private

Definition at line 65 of file BFScheduleBU.hh.

Referenced by operator()(), and undoOnlyMe().

◆ createdCopy_

bool BFScheduleBU::createdCopy_
private

Definition at line 66 of file BFScheduleBU.hh.

Referenced by operator()(), and undoOnlyMe().

◆ lc_

int BFScheduleBU::lc_
private

Definition at line 61 of file BFScheduleBU.hh.

Referenced by operator()().


The documentation for this class was generated from the following files:
BFScheduleBU::createdCopy_
bool createdCopy_
Definition: BFScheduleBU.hh:66
TTAProgram::Terminal::isFUPort
virtual bool isFUPort() const
Definition: Terminal.cc:118
BFOptimization::unassign
virtual void unassign(MoveNode &mn, bool disposePrologCopy=true)
Definition: BFOptimization.cc:196
BFPushDepsUp
Definition: BFPushDepsUp.hh:43
TTAProgram::Terminal::isTriggering
virtual bool isTriggering() const
Definition: Terminal.cc:298
Reversible::undoAndRemovePreChildren
void undoAndRemovePreChildren()
Definition: Reversible.cc:80
BFOptimization::assign
virtual bool assign(int cycle, MoveNode &, const TTAMachine::Bus *bus=nullptr, const TTAMachine::FunctionUnit *srcFU_=nullptr, const TTAMachine::FunctionUnit *dstFU=nullptr, const TTAMachine::Bus *prologBus=nullptr, int immWriteCycle=-1, int prologImmWriteCycle=-1, const TTAMachine::ImmediateUnit *immu=nullptr, int immRegIndex=-1, bool ignoreGuardWriteCycle=false)
Definition: BFOptimization.cc:103
MoveNode::isDestinationVariable
bool isDestinationVariable() const
Definition: MoveNode.cc:264
TTAMachine::Component::name
virtual TCEString name() const
Definition: MachinePart.cc:125
MoveNode::toString
std::string toString() const
Definition: MoveNode.cc:576
BFPushAntidepsDown
Definition: BFPushAntidepsDown.hh:44
BFLateBypasses
Definition: BFLateBypasses.hh:44
TTAProgram::Terminal::registerFile
virtual const TTAMachine::RegisterFile & registerFile() const
Definition: Terminal.cc:225
BFOptimization::RFReadPortCountPreventsScheduling
const TTAMachine::RegisterFile * RFReadPortCountPreventsScheduling(const MoveNode &mn)
Definition: BFOptimization.cc:1030
MoveNode::isDestinationOperation
bool isDestinationOperation() const
BFOptimization::ii
unsigned int ii() const
Definition: BFOptimization.cc:85
UniversalMachine::universalBus
TTAMachine::Bus & universalBus() const
Definition: UniversalMachine.cc:306
BFScheduleBU::BFScheduleBU
BFScheduleBU(BF2Scheduler &sched, MoveNode &mn, int lc, bool allowEarlyBypass, bool allowLateBypass, bool allowEarlySharing)
Definition: BFScheduleBU.hh:48
TTAProgram::Move::destination
Terminal & destination() const
Definition: Move.cc:323
UniversalMachine::instance
static UniversalMachine & instance()
Definition: UniversalMachine.cc:73
TTAProgram::Move::bus
const TTAMachine::Bus & bus() const
Definition: Move.cc:373
MoveNode
Definition: MoveNode.hh:65
BFOptimization
Definition: BFOptimization.hh:73
Reversible::preChildren_
std::stack< Reversible * > preChildren_
Definition: Reversible.hh:57
BFRegCopy::getRegCopy
MoveNode * getRegCopy()
Definition: BFRegCopy.hh:52
BFOptimization::targetMachine
const TTAMachine::Machine & targetMachine() const
Definition: BFOptimization.cc:81
BFOptimization::sched_
BF2Scheduler & sched_
Definition: BFOptimization.hh:103
BFScheduleBU::lc_
int lc_
Definition: BFScheduleBU.hh:61
BFRegCopy
Definition: BFRegCopy.hh:47
assert
#define assert(condition)
Definition: Application.hh:86
BFRegCopyAfter
Definition: BFRegCopyAfter.hh:44
BFScheduleBU
Definition: BFScheduleBU.hh:45
BFEarlyBypasser
Definition: BFEarlyBypasser.hh:42
TTAProgram::Move::isControlFlowMove
bool isControlFlowMove() const
Definition: Move.cc:233
BF2Scheduler::isSourceUniversalReg
static bool isSourceUniversalReg(const MoveNode &mn)
Definition: BF2Scheduler.cc:765
Reversible::undo
virtual void undo()
Definition: Reversible.cc:69
TTAProgram::Terminal::isGPR
virtual bool isGPR() const
Definition: Terminal.cc:107
MoveNode::isSourceOperation
bool isSourceOperation() const
Definition: MoveNode.cc:168
BFOptimization::ddg
DataDependenceGraph & ddg()
Definition: BFOptimization.cc:70
BFRescheduleResultsClose
Definition: BFRescheduleResultsClose.hh:48
BFOptimization::canBeScheduled
bool canBeScheduled(const MoveNode &mn)
Definition: BFOptimization.cc:1067
BFCopyRegWithOp
Definition: BFCopyRegWithOp.hh:8
BFScheduleBU::allowEarlyBypass_
bool allowEarlyBypass_
Definition: BFScheduleBU.hh:62
BF2ScheduleFront::prefResultCycle
static int prefResultCycle(const MoveNode &mn)
Definition: BF2ScheduleFront.cc:406
GraphBase::writeToDotFile
virtual void writeToDotFile(const TCEString &fileName) const
DataDependenceGraph::earliestCycle
int earliestCycle(const MoveNode &moveNode, unsigned int ii=UINT_MAX, bool ignoreRegWaRs=false, bool ignoreRegWaWs=false, bool ignoreGuards=false, bool ignoreFUDeps=false, bool ignoreSameOperationEdges=false, bool assumeBypassing=false) const
Definition: DataDependenceGraph.cc:388
BFScheduleMove::BFScheduleMove
BFScheduleMove(BF2Scheduler &sched, MoveNode &mn)
Definition: BFScheduleMove.hh:45
BFShareOperandsLate
Definition: BFShareOperandsLate.hh:42
MoveNode::isSourceVariable
bool isSourceVariable() const
Definition: MoveNode.cc:196
MoveNode::destinationOperation
ProgramOperation & destinationOperation(unsigned int index=0) const
BFLateBypasses::removedSource
bool removedSource()
Definition: BFLateBypasses.hh:49
MoveNode::move
TTAProgram::Move & move()
BFScheduleTD
Definition: BFScheduleTD.hh:43
BFRenameSource
Definition: BFRenameSource.hh:42
BFTryRemoveGuard
Definition: BFTryRemoveGuard.hh:43
BFRegCopyBefore
Definition: BFRegCopyBefore.hh:44
BFOptimization::rmLC
virtual int rmLC(int cycle, MoveNode &mn, const TTAMachine::Bus *bus=nullptr, const TTAMachine::FunctionUnit *srcFU=nullptr, const TTAMachine::FunctionUnit *dstFU=nullptr, const TTAMachine::Bus *prologBus=nullptr, int immWriteCycle=-1, int prologImmWriteCycle=-1, const TTAMachine::ImmediateUnit *immu=nullptr, int immRegIndex=-1)
Definition: BFOptimization.cc:363
BFShareOperands
Definition: BFShareOperands.hh:40
Reversible::runPreChild
bool runPreChild(Reversible *preChild)
Definition: Reversible.cc:127
BFScheduleBU::allowLateBypass_
bool allowLateBypass_
Definition: BFScheduleBU.hh:63
MoveNode::isScheduled
bool isScheduled() const
Definition: MoveNode.cc:409
BFRemoveGuardsFromSuccs
Definition: BFRemoveGuardsFromSuccs.hh:45
Reversible::runPostChild
bool runPostChild(Reversible *preChild)
Definition: Reversible.cc:139
TTAMachine::BaseRegisterFile::width
virtual int width() const
BFScheduleMove::mn_
MoveNode & mn_
Definition: BFScheduleMove.hh:50
MachineConnectivityCheck::copyOpFUs
static FUSet copyOpFUs(const TTAMachine::Machine &mach, const MoveNode &mn)
Definition: MachineConnectivityCheck.cc:2040
TTAProgram::Move::setBus
void setBus(const TTAMachine::Bus &bus)
Definition: Move.cc:383
BFScheduleBU::allowEarlySharing_
bool allowEarlySharing_
Definition: BFScheduleBU.hh:64
BFScheduleBU::bypasserScheduled_
bool bypasserScheduled_
Definition: BFScheduleBU.hh:65