mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
Clean up code that calculate MBB live-in's.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43060 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -62,6 +62,7 @@ void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
}
|
||||
|
||||
void LiveIntervals::releaseMemory() {
|
||||
Idx2MBBMap.clear();
|
||||
mi2iMap_.clear();
|
||||
i2miMap_.clear();
|
||||
r2iMap_.clear();
|
||||
@@ -71,6 +72,22 @@ void LiveIntervals::releaseMemory() {
|
||||
delete ClonedMIs[i];
|
||||
}
|
||||
|
||||
namespace llvm {
|
||||
inline bool operator<(unsigned V, const IdxMBBPair &IM) {
|
||||
return V < IM.first;
|
||||
}
|
||||
|
||||
inline bool operator<(const IdxMBBPair &IM, unsigned V) {
|
||||
return IM.first < V;
|
||||
}
|
||||
|
||||
struct Idx2MBBCompare {
|
||||
bool operator()(const IdxMBBPair &LHS, const IdxMBBPair &RHS) const {
|
||||
return LHS.first < RHS.first;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/// runOnMachineFunction - Register allocate the whole function
|
||||
///
|
||||
bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
|
||||
@@ -100,7 +117,9 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
|
||||
|
||||
// Set the MBB2IdxMap entry for this MBB.
|
||||
MBB2IdxMap[MBB->getNumber()] = std::make_pair(StartIdx, MIIndex - 1);
|
||||
Idx2MBBMap.push_back(std::make_pair(StartIdx, MBB));
|
||||
}
|
||||
std::sort(Idx2MBBMap.begin(), Idx2MBBMap.end(), Idx2MBBCompare());
|
||||
|
||||
computeIntervals();
|
||||
|
||||
@@ -797,6 +816,23 @@ void LiveIntervals::computeIntervals() {
|
||||
}
|
||||
}
|
||||
|
||||
bool LiveIntervals::findLiveInMBBs(const LiveRange &LR,
|
||||
SmallVector<MachineBasicBlock*, 4> &MBBs) const {
|
||||
std::vector<IdxMBBPair>::const_iterator I =
|
||||
std::lower_bound(Idx2MBBMap.begin(), Idx2MBBMap.end(), LR.start);
|
||||
|
||||
bool ResVal = false;
|
||||
while (I != Idx2MBBMap.end()) {
|
||||
if (LR.end <= I->first)
|
||||
break;
|
||||
MBBs.push_back(I->second);
|
||||
ResVal = true;
|
||||
++I;
|
||||
}
|
||||
return ResVal;
|
||||
}
|
||||
|
||||
|
||||
LiveInterval LiveIntervals::createInterval(unsigned reg) {
|
||||
float Weight = MRegisterInfo::isPhysicalRegister(reg) ?
|
||||
HUGE_VALF : 0.0F;
|
||||
|
||||
Reference in New Issue
Block a user