81 bool addLoopProperty) {
83 for (MoveNodeUseMapSet::const_iterator srcIter = srcMap.begin();
84 srcIter != srcMap.end(); srcIter++) {
89 size_t size = dstSet.size();
92 if (dstSet.size() > size) {
110 bool setLoopProperty) {
112 for (LiveRangeData::MoveNodeUseSet::const_iterator i =
113 src.begin(); i != src.end(); i++) {
115 if (setLoopProperty || mnu.
loop()) {
130 std::set<TCEString> aliveRegs;
134 for (MoveNodeUseMapSet::iterator rdrIter =
regDefReaches_.begin();
142 aliveRegs.insert(reg);
148 for (MoveNodeUseSet::iterator iter = firstUses.begin();
149 iter != firstUses.end(); iter++) {
152 int mnCycle = mn.
cycle();
153 if (iter->pseudo()) {
154 mnCycle += delaySlots;
156 if (cycle <= mnCycle) {
157 aliveRegs.insert(reg);
160 aliveRegs.insert(reg);
172 for (MoveNodeUseSet::iterator iter = lastDefs.begin();
173 iter != lastDefs.end(); iter++) {
176 int mnCycle = mn.
cycle();
177 if (iter->pseudo()) {
178 mnCycle += delaySlots;
180 if (cycle >= mnCycle) {
181 aliveRegs.insert(reg);
191 for (
int i = 0; i < ddg.
nodeCount(); i++) {
200 for (DataDependenceGraph::EdgeSet::iterator eIter =
201 edges.begin(); eIter != edges.end(); eIter++) {
212 if (node.
cycle() + delaySlots > cycle) {
217 int delay = edge.
headPseudo() ? delaySlots : 0;
220 headNode.
cycle()+delay >= cycle) {
221 aliveRegs.insert(reg);
virtual Node & headNode(const Edge &edge) const
Node & node(const int index) const
virtual EdgeSet outEdges(const Node &node) const
DependenceType dependenceType() const
EdgeReason edgeReason() const
const TCEString data() const
std::set< GraphEdge *, typename GraphEdge::Comparator > EdgeSet
static bool appendUseMapSets(const MoveNodeUseMapSet &srcMap, MoveNodeUseMapSet &dstMap, bool addLoopProperty)
void merge(LiveRangeData &succ)
MoveNodeUseMapSet regFirstUses_
MoveNodeUseMapSet regLastUses_
std::set< MoveNodeUse > MoveNodeUseSet
std::set< TCEString > registersUsedAfter_
MoveNodeUseMapSet regFirstDefines_
std::set< TCEString > registersAlive(int cycle, int delaySlots, class DataDependenceGraph &ddg)
std::map< TCEString, MoveNodeUseSet > MoveNodeUseMapSet
MoveNodeUseMapPair regKills_
static void appendMoveNodeUse(const MoveNodeUseSet &src, MoveNodeUseSet &dst, bool setLoopProperty)
MoveNodeUseMapSet regDefines_
MoveNodeUseMapSet regDefReaches_