Go to the documentation of this file.
35 #ifndef TTA_REGISTER_COPY_ADDER_HH
36 #define TTA_REGISTER_COPY_ADDER_HH
97 bool buScheduler =
false);
101 typedef std::map<const MoveNode*, DataDependenceGraph::NodeSet>
138 int lastRegisterIndex,
140 bool bottomUpScheduling,
141 bool loopScheduling);
151 bool countOnly =
true,
153 int neededCopies = 0);
159 bool countOnly =
true,
162 int neededCopies = 0);
167 bool countOnly =
true,
174 bool countOnly =
true,
177 int neededCopies = 0);
192 std::vector<MoveNode*> intMoves,
195 std::vector<const TTAMachine::RegisterFile*> intRF,
197 int firstRegisterIndex,
198 std::vector<int> intRegisterIndex,
199 int lastRegisterIndex,
212 bool loopScheduling);
222 int tempRegisterIndex1,
223 int tempRegisterIndex2,
int addConnectionRegisterCopiesImmediate(MoveNode &originalMove, const TTAMachine::Port &destinationPort, bool countOnly=true, DataDependenceGraph *ddg=NULL, DataDependenceGraph::NodeSet *addedNodes=NULL)
std::map< const MoveNode *, DataDependenceGraph::NodeSet > AddedRegisterCopyMap
void addCandidateSetAnnotations(ProgramOperation &programOperation, const TTAMachine::Machine &machine)
TTAMachine::Machine * machine
the architecture definition of the estimated processor
void fixDDGEdgesInTempRegChainImmediate(DataDependenceGraph &ddg, MoveNode &originalMove, MoveNode *firstMove, MoveNode *regToRegCopy, MoveNode *lastMove, const TTAMachine::RegisterFile *tempRF1, const TTAMachine::RegisterFile *tempRF2, int tempRegisterIndex1, int tempRegisterIndex2, BasicBlockNode ¤tBBNode)
InterPassData & interPassData_
the inter pass data from which to fetch the scratch register list
std::set< MoveNode *, typename MoveNode ::Comparator > NodeSet
AddedRegisterCopyMap operandCopies_
std::map< const TTAMachine::FunctionUnit *, int, TTAMachine::FunctionUnit::Comparator > RegisterCopyCountIndex
container for storing the required register copies if the operation was bound to the given FU
AddedRegisterCopies addRegisterCopies(ProgramOperation &programOperation, const TTAMachine::FunctionUnit &fu, bool countOnly=true, DataDependenceGraph *ddg=NULL, int neededCopies=0)
static void fixDDGEdgesInTempReg(DataDependenceGraph &ddg, MoveNode &originalMove, MoveNode *firstMove, MoveNode *lastMove, const TTAMachine::RegisterFile *lastRF, int lastRegisterIndex, BasicBlockNode ¤tBBNode, bool bottomUpScheduling, bool loopScheduling)
RegisterCopyAdder(InterPassData &data, SimpleResourceManager &rm, MoveNodeSelector &selector, bool buScheduler=false)
RegisterCopyCountIndex requiredRegisterCopiesForEachFU(const TTAMachine::Machine &targetMachine, ProgramOperation &programOperation)
bool isAllowedUnit(const TTAMachine::FunctionUnit &fu, const ProgramOperation &po)
AddedRegisterCopies addRegisterCopiesToRRMove(MoveNode &moveNode, DataDependenceGraph *ddg)
static void findTempRegisters(const TTAMachine::Machine &machine, InterPassData &ipd)
void operandsScheduled(AddedRegisterCopies &copies, DataDependenceGraph &ddg)
SimpleResourceManager & rm_
the resource manager to check for machine resources in heuristics
virtual ~RegisterCopyAdder()
AddedRegisterCopyMap resultCopies_
void resultsScheduled(AddedRegisterCopies &copies, DataDependenceGraph &ddg)
static void createAntidepsForReg(const MoveNode &defMove, const MoveNode &useMove, const MoveNode &originalMove, const TTAMachine::RegisterFile &rf, int index, DataDependenceGraph &ddg, BasicBlockNode &bbn, bool backwards, bool loopScheduling)
void fixDDGEdgesInTempRegChain(DataDependenceGraph &ddg, MoveNode &originalMove, MoveNode *firstMove, std::vector< MoveNode * > intMoves, MoveNode *lastMove, const TTAMachine::RegisterFile *firstRF, std::vector< const TTAMachine::RegisterFile * > intRF, const TTAMachine::RegisterFile *lastRF, int firstRegisterIndex, std::vector< int > intRegisterIndex, int lastRegisterIndex, int regsRequired, BasicBlockNode ¤tBBNode)
int countAndAddConnectionRegisterCopiesToRR(MoveNode &moveNode, DataDependenceGraph *ddg=NULL, DataDependenceGraph::NodeSet *addedNodes=NULL)
int addConnectionRegisterCopies(MoveNode &originalMove, const TTAMachine::Port &sourcePort, const TTAMachine::Port &destinationPort, bool countOnly=true, DataDependenceGraph *ddg=NULL, DataDependenceGraph::NodeSet *addedNodes=NULL, int neededCopies=0)
bool buScheduler_
Indicate that register copy adder is called from bottom up scheduler, this causes search for first sc...
AddedRegisterCopies addMinimumRegisterCopies(ProgramOperation &programOperation, const TTAMachine::Machine &targetMachine, DataDependenceGraph *ddg)