OpenASIP 2.2
Loading...
Searching...
No Matches
BFEarlyGuardBypass.cc
Go to the documentation of this file.
3#include "Operation.hh"
4#include "Move.hh"
5#include "MoveGuard.hh"
7#include "Bus.hh"
8#include "Guard.hh"
9#include "Terminal.hh"
10#include "FUPort.hh"
11
13
15 if (!src_) {
16 return false;
17 }
19 const Operation& op = po->operation();
20
23
24 // TODO: this is not deterministic as this uses pointer as the key!
25 std::set<const TTAMachine::Bus*> buses;
26
27 for (auto p: dPorts) {
29 }
30
31 for (auto bus: buses) {
32 for (int i = 0; i < bus->guardCount(); i++) {
33 const TTAMachine::Guard* guard = bus->guard(i);
34 const TTAMachine::PortGuard* pg =
35 dynamic_cast<const TTAMachine::PortGuard*>(guard);
36 if (pg == NULL || pg->isInverted() != mn_.move().guard().isInverted()) {
37 continue;
38 }
39 const TTAMachine::FUPort* port = pg->port();
40 const TTAMachine::FunctionUnit* gfu = port->parentUnit();
41
42 if (gfu->hasOperation(op.name()) &&
43 po->outputIndexFromGuard(*pg) ==
45
46 if (!po->isLegalFU(*gfu)) {
47#ifdef DEBUG_BUBBLEFISH_SCHEDULER
48 std::cerr << "\t\t\tFU: " << gfu->name() << " not allowed for operation: " << po->toString() << std::endl;
49#endif
50 continue;
51 }
52
54 // TODO: backup old guard.
57 return true;
58 }
59 }
60 }
61 return false;
62}
63
std::shared_ptr< ProgramOperation > ProgramOperationPtr
Definition MoveNode.hh:53
void undoOnlyMe() override
const TTAMachine::Guard * originalGuard_
bool operator()() override
DataDependenceGraph & ddg()
const TTAMachine::Machine & targetMachine() const
void guardConverted(MoveNode &guardSrc, MoveNode &dst)
MoveNode * onlyRegisterRawSource(const MoveNode &mn, int allowGuardEdges=2, int backEdges=0) const
void guardRestored(MoveNode &guardSrc, MoveNode &dst)
static void appendConnectedSourceBuses(const TTAMachine::Port &port, std::set< const TTAMachine::Bus * > &buses)
static PortSet findPossibleDestinationPorts(const TTAMachine::Machine &mach, const MoveNode &node)
ProgramOperationPtr sourceOperationPtr() const
Definition MoveNode.cc:458
TTAProgram::Move & move()
virtual TCEString name() const
Definition Operation.cc:93
FunctionUnit * parentUnit() const
Definition BaseFUPort.cc:96
virtual TCEString name() const
virtual bool hasOperation(const std::string &name) const
virtual bool isInverted() const
FUPort * port() const
bool isInverted() const
Definition MoveGuard.cc:76
const TTAMachine::Guard & guard() const
Definition MoveGuard.cc:86
MoveGuard & guard() const
Definition Move.cc:345
Terminal & source() const
Definition Move.cc:302
void setGuard(MoveGuard *guard)
Definition Move.cc:360
virtual int operationIndex() const
Definition Terminal.cc:364