mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-05 13:09:10 +00:00
Add ability to give hints to the overlaps routines.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17934 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cbb5625cec
commit
bae74d9192
@ -76,11 +76,14 @@ namespace llvm {
|
||||
: reg(Reg), weight(Weight), NumValues(0) {
|
||||
}
|
||||
|
||||
|
||||
typedef Ranges::iterator iterator;
|
||||
iterator begin() { return ranges.begin(); }
|
||||
iterator end() { return ranges.end(); }
|
||||
|
||||
typedef Ranges::const_iterator const_iterator;
|
||||
const_iterator begin() const { return ranges.begin(); }
|
||||
const_iterator end() const { return ranges.end(); }
|
||||
|
||||
|
||||
/// advanceTo - Advance the specified iterator to point to the LiveRange
|
||||
/// containing the specified position, or end() if the position is past the
|
||||
@ -139,7 +142,16 @@ namespace llvm {
|
||||
bool joinable(const LiveInterval& other, unsigned CopyIdx) const;
|
||||
|
||||
|
||||
bool overlaps(const LiveInterval& other) const;
|
||||
/// overlaps - Return true if the intersection of the two live intervals is
|
||||
/// not empty.
|
||||
bool overlaps(const LiveInterval& other) const {
|
||||
return overlapsFrom(other, other.begin());
|
||||
}
|
||||
|
||||
/// overlapsFrom - Return true if the intersection of the two live intervals
|
||||
/// is not empty. The specified iterator is a hint that we can begin
|
||||
/// scanning the Other interval starting at I.
|
||||
bool overlapsFrom(const LiveInterval& other, const_iterator I) const;
|
||||
|
||||
/// addRange - Add the specified LiveRange to this interval, merging
|
||||
/// intervals as appropriate. This returns an iterator to the inserted live
|
||||
|
@ -42,6 +42,9 @@ bool LiveInterval::liveAt(unsigned I) const {
|
||||
return r->contains(I);
|
||||
}
|
||||
|
||||
// overlaps - Return true if the intersection of the two live intervals is
|
||||
// not empty.
|
||||
//
|
||||
// An example for overlaps():
|
||||
//
|
||||
// 0: A = ...
|
||||
@ -56,11 +59,16 @@ bool LiveInterval::liveAt(unsigned I) const {
|
||||
//
|
||||
// A->overlaps(C) should return false since we want to be able to join
|
||||
// A and C.
|
||||
bool LiveInterval::overlaps(const LiveInterval& other) const {
|
||||
Ranges::const_iterator i = ranges.begin();
|
||||
Ranges::const_iterator ie = ranges.end();
|
||||
Ranges::const_iterator j = other.ranges.begin();
|
||||
Ranges::const_iterator je = other.ranges.end();
|
||||
//
|
||||
bool LiveInterval::overlapsFrom(const LiveInterval& other,
|
||||
const_iterator StartPos) const {
|
||||
const_iterator i = begin();
|
||||
const_iterator ie = end();
|
||||
const_iterator j = StartPos;
|
||||
const_iterator je = other.end();
|
||||
|
||||
assert((StartPos->start <= i->start || StartPos == other.begin()) &&
|
||||
"Bogus start position hint!");
|
||||
|
||||
if (i->start < j->start) {
|
||||
i = std::upper_bound(i, ie, j->start);
|
||||
|
@ -76,11 +76,14 @@ namespace llvm {
|
||||
: reg(Reg), weight(Weight), NumValues(0) {
|
||||
}
|
||||
|
||||
|
||||
typedef Ranges::iterator iterator;
|
||||
iterator begin() { return ranges.begin(); }
|
||||
iterator end() { return ranges.end(); }
|
||||
|
||||
typedef Ranges::const_iterator const_iterator;
|
||||
const_iterator begin() const { return ranges.begin(); }
|
||||
const_iterator end() const { return ranges.end(); }
|
||||
|
||||
|
||||
/// advanceTo - Advance the specified iterator to point to the LiveRange
|
||||
/// containing the specified position, or end() if the position is past the
|
||||
@ -139,7 +142,16 @@ namespace llvm {
|
||||
bool joinable(const LiveInterval& other, unsigned CopyIdx) const;
|
||||
|
||||
|
||||
bool overlaps(const LiveInterval& other) const;
|
||||
/// overlaps - Return true if the intersection of the two live intervals is
|
||||
/// not empty.
|
||||
bool overlaps(const LiveInterval& other) const {
|
||||
return overlapsFrom(other, other.begin());
|
||||
}
|
||||
|
||||
/// overlapsFrom - Return true if the intersection of the two live intervals
|
||||
/// is not empty. The specified iterator is a hint that we can begin
|
||||
/// scanning the Other interval starting at I.
|
||||
bool overlapsFrom(const LiveInterval& other, const_iterator I) const;
|
||||
|
||||
/// addRange - Add the specified LiveRange to this interval, merging
|
||||
/// intervals as appropriate. This returns an iterator to the inserted live
|
||||
|
Loading…
Reference in New Issue
Block a user