mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-15 07:33:18 +00:00
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:
parent
5d02eafaf2
commit
993141402f
@ -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
|
||||
///
|
||||
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());
|
||||
return true;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user