struct Interval {
typedef std::pair<unsigned, unsigned> Range;
typedef std::vector<Range> Ranges;
- typedef std::vector<unsigned> Defs;
unsigned reg; // the register of this interval
float weight; // weight of this interval (number of uses
// * 10^loopDepth)
Ranges ranges; // the ranges in which this register is live
- Defs defs;
Interval(unsigned r);
bool empty() const { return ranges.empty(); }
rep(srcReg) == rep(dstReg)) {
// remove from def list
Interval& interval = getOrCreateInterval(rep(dstReg));
- unsigned defIndex = getInstructionIndex(mii);
- Interval::Defs::iterator d = std::lower_bound(
- interval.defs.begin(), interval.defs.end(), defIndex);
- assert(*d == defIndex && "Def index not found in def list!");
- interval.defs.erase(d);
// remove index -> MachineInstr and
// MachineInstr -> index mappings
Mi2IndexMap::iterator mi2i = mi2iMap_.find(mii);
}
unsigned baseIndex = getInstructionIndex(mi);
- interval.defs.push_back(baseIndex);
bool killedInDefiningBasicBlock = false;
for (int i = 0, e = vi.Kills.size(); i != e; ++i) {
MachineBasicBlock::iterator e = mbb->end();
unsigned baseIndex = getInstructionIndex(mi);
- interval.defs.push_back(baseIndex);
unsigned start = getDefIndex(baseIndex);
unsigned end = start;
cur = mergeRangesBackward(cur);
}
weight += other.weight;
- Defs u;
- std::set_union(defs.begin(), defs.end(),
- other.defs.begin(), other.defs.end(),
- std::back_inserter(u));
- defs = u;
++numJoins;
}
if (li.empty())
return os << "EMPTY";
- os << " {" << li.defs.front();
- for (LiveIntervals::Interval::Defs::const_iterator
- i = next(li.defs.begin()), e = li.defs.end(); i != e; ++i)
- os << "," << *i;
- os << "}";
-
os << " = ";
for (LiveIntervals::Interval::Ranges::const_iterator
i = li.ranges.begin(), e = li.ranges.end(); i != e; ++i) {
struct Interval {
typedef std::pair<unsigned, unsigned> Range;
typedef std::vector<Range> Ranges;
- typedef std::vector<unsigned> Defs;
unsigned reg; // the register of this interval
float weight; // weight of this interval (number of uses
// * 10^loopDepth)
Ranges ranges; // the ranges in which this register is live
- Defs defs;
Interval(unsigned r);
bool empty() const { return ranges.empty(); }