mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
Move r2iMap_ over to DenseMap from std::map.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54765 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6ab6422f25
commit
20e2839cb9
@ -55,6 +55,20 @@ namespace llvm {
|
|||||||
return LHS.first < RHS.first;
|
return LHS.first < RHS.first;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Provide DenseMapInfo for unsigned.
|
||||||
|
template<>
|
||||||
|
struct DenseMapInfo<unsigned> {
|
||||||
|
static inline unsigned getEmptyKey() { return (unsigned)-1; }
|
||||||
|
static inline unsigned getTombstoneKey() { return (unsigned)-2; }
|
||||||
|
static unsigned getHashValue(const unsigned Val) {
|
||||||
|
return Val * 37;
|
||||||
|
}
|
||||||
|
static bool isEqual(const unsigned LHS, const unsigned RHS) {
|
||||||
|
return LHS == RHS;
|
||||||
|
}
|
||||||
|
static bool isPod() { return true; }
|
||||||
|
};
|
||||||
|
|
||||||
class LiveIntervals : public MachineFunctionPass {
|
class LiveIntervals : public MachineFunctionPass {
|
||||||
MachineFunction* mf_;
|
MachineFunction* mf_;
|
||||||
@ -86,7 +100,7 @@ namespace llvm {
|
|||||||
typedef std::vector<MachineInstr*> Index2MiMap;
|
typedef std::vector<MachineInstr*> Index2MiMap;
|
||||||
Index2MiMap i2miMap_;
|
Index2MiMap i2miMap_;
|
||||||
|
|
||||||
typedef std::map<unsigned, LiveInterval*> Reg2IntervalMap;
|
typedef DenseMap<unsigned, LiveInterval*> Reg2IntervalMap;
|
||||||
Reg2IntervalMap r2iMap_;
|
Reg2IntervalMap r2iMap_;
|
||||||
|
|
||||||
BitVector allocatableRegs_;
|
BitVector allocatableRegs_;
|
||||||
@ -236,7 +250,7 @@ namespace llvm {
|
|||||||
LiveInterval &getOrCreateInterval(unsigned reg) {
|
LiveInterval &getOrCreateInterval(unsigned reg) {
|
||||||
Reg2IntervalMap::iterator I = r2iMap_.find(reg);
|
Reg2IntervalMap::iterator I = r2iMap_.find(reg);
|
||||||
if (I == r2iMap_.end())
|
if (I == r2iMap_.end())
|
||||||
I = r2iMap_.insert(I, std::make_pair(reg, createInterval(reg)));
|
I = r2iMap_.insert(std::make_pair(reg, createInterval(reg))).first;
|
||||||
return *I->second;
|
return *I->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,7 +262,7 @@ namespace llvm {
|
|||||||
// Interval removal
|
// Interval removal
|
||||||
|
|
||||||
void removeInterval(unsigned Reg) {
|
void removeInterval(unsigned Reg) {
|
||||||
std::map<unsigned, LiveInterval*>::iterator I = r2iMap_.find(Reg);
|
DenseMap<unsigned, LiveInterval*>::iterator I = r2iMap_.find(Reg);
|
||||||
delete I->second;
|
delete I->second;
|
||||||
r2iMap_.erase(I);
|
r2iMap_.erase(I);
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const {
|
|||||||
|
|
||||||
void LiveIntervals::releaseMemory() {
|
void LiveIntervals::releaseMemory() {
|
||||||
// Free the live intervals themselves.
|
// Free the live intervals themselves.
|
||||||
for (std::map<unsigned, LiveInterval*>::iterator I = r2iMap_.begin(),
|
for (DenseMap<unsigned, LiveInterval*>::iterator I = r2iMap_.begin(),
|
||||||
E = r2iMap_.end(); I != E; ++I)
|
E = r2iMap_.end(); I != E; ++I)
|
||||||
delete I->second;
|
delete I->second;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user