mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
Refactor some code, pulling it out into a function. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23839 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -101,6 +101,29 @@ bool LiveInterval::overlapsFrom(const LiveInterval& other,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// NontrivialOverlap - Check to see if the two live ranges specified by i and j
|
||||||
|
/// overlap. If so, check to see if they have value numbers that are not
|
||||||
|
/// iIdx/jIdx respectively. If both conditions are true, return true.
|
||||||
|
static inline bool NontrivialOverlap(LiveInterval::Ranges::const_iterator i,
|
||||||
|
LiveInterval::Ranges::const_iterator j,
|
||||||
|
unsigned iIdx, unsigned jIdx) {
|
||||||
|
if (i->start == j->start) {
|
||||||
|
// If this is not the allowed value merge, we cannot join.
|
||||||
|
if (i->ValId != iIdx || j->ValId != jIdx)
|
||||||
|
return true;
|
||||||
|
} else if (i->start < j->start) {
|
||||||
|
if (i->end > j->start && i->ValId != iIdx || j->ValId != jIdx) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (j->end > i->start &&
|
||||||
|
i->ValId != iIdx || j->ValId != jIdx)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/// joinable - Two intervals are joinable if the either don't overlap at all
|
/// joinable - Two intervals are joinable if the either don't overlap at all
|
||||||
/// or if the destination of the copy is a single assignment value, and it
|
/// or if the destination of the copy is a single assignment value, and it
|
||||||
/// only overlaps with one value in the source interval.
|
/// only overlaps with one value in the source interval.
|
||||||
@ -125,21 +148,9 @@ bool LiveInterval::joinable(const LiveInterval &other, unsigned CopyIdx) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (i != ie && j != je) {
|
while (i != ie && j != je) {
|
||||||
if (i->start == j->start) {
|
if (NontrivialOverlap(i, j, ThisValIdx, OtherValIdx))
|
||||||
// If this is not the allowed value merge, we cannot join.
|
return false;
|
||||||
if (i->ValId != ThisValIdx || j->ValId != OtherValIdx)
|
|
||||||
return false;
|
|
||||||
} else if (i->start < j->start) {
|
|
||||||
if (i->end > j->start) {
|
|
||||||
if (i->ValId != ThisValIdx || j->ValId != OtherValIdx)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (j->end > i->start) {
|
|
||||||
if (i->ValId != ThisValIdx || j->ValId != OtherValIdx)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i->end < j->end)
|
if (i->end < j->end)
|
||||||
++i;
|
++i;
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user