Set weight of zero length intervals to infinite to prevent them from being

spilled.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28220 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Evan Cheng 2006-05-11 07:29:24 +00:00
parent 5d02eafaf2
commit 993141402f

View File

@ -80,6 +80,15 @@ void LiveIntervals::releaseMemory()
} }
static bool isZeroLengthInterval(LiveInterval *li) {
for (LiveInterval::Ranges::const_iterator
i = li->ranges.begin(), e = li->ranges.end(); i != e; ++i)
if (i->end - i->start > LiveIntervals::InstrSlots::NUM)
return false;
return true;
}
/// runOnMachineFunction - Register allocate the whole function /// runOnMachineFunction - Register allocate the whole function
/// ///
bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) { bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
@ -199,6 +208,16 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
} }
} }
for (iterator I = begin(), E = end(); I != E; ++I) {
LiveInterval &li = I->second;
if (MRegisterInfo::isVirtualRegister(li.reg))
// If the live interval legnth is essentially zero, i.e. in every live
// range the use follows def immediately, it doesn't make sense to spill
// it and hope it will be easier to allocate for this li.
if (isZeroLengthInterval(&li))
li.weight = float(HUGE_VAL);
}
DEBUG(dump()); DEBUG(dump());
return true; return true;
} }