mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-07 12:28:24 +00:00
Use a list instead of a vector to store intervals. This will be needed
when we join intervals and one of the two will need to be removed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10892 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -24,6 +24,7 @@
|
|||||||
#include "llvm/CodeGen/MachineFunctionPass.h"
|
#include "llvm/CodeGen/MachineFunctionPass.h"
|
||||||
#include "llvm/CodeGen/MachineBasicBlock.h"
|
#include "llvm/CodeGen/MachineBasicBlock.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
@@ -83,7 +84,7 @@ namespace llvm {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<Interval> Intervals;
|
typedef std::list<Interval> Intervals;
|
||||||
typedef std::vector<MachineBasicBlock*> MachineBasicBlockPtrs;
|
typedef std::vector<MachineBasicBlock*> MachineBasicBlockPtrs;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -100,7 +101,7 @@ namespace llvm {
|
|||||||
typedef std::map<MachineInstr*, unsigned> Mi2IndexMap;
|
typedef std::map<MachineInstr*, unsigned> Mi2IndexMap;
|
||||||
Mi2IndexMap mi2iMap_;
|
Mi2IndexMap mi2iMap_;
|
||||||
|
|
||||||
typedef std::map<unsigned, unsigned> Reg2IntervalMap;
|
typedef std::map<unsigned, Intervals::iterator> Reg2IntervalMap;
|
||||||
Reg2IntervalMap r2iMap_;
|
Reg2IntervalMap r2iMap_;
|
||||||
|
|
||||||
Intervals intervals_;
|
Intervals intervals_;
|
||||||
|
@@ -24,6 +24,7 @@
|
|||||||
#include "llvm/CodeGen/MachineFunctionPass.h"
|
#include "llvm/CodeGen/MachineFunctionPass.h"
|
||||||
#include "llvm/CodeGen/MachineBasicBlock.h"
|
#include "llvm/CodeGen/MachineBasicBlock.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
@@ -83,7 +84,7 @@ namespace llvm {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<Interval> Intervals;
|
typedef std::list<Interval> Intervals;
|
||||||
typedef std::vector<MachineBasicBlock*> MachineBasicBlockPtrs;
|
typedef std::vector<MachineBasicBlock*> MachineBasicBlockPtrs;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -100,7 +101,7 @@ namespace llvm {
|
|||||||
typedef std::map<MachineInstr*, unsigned> Mi2IndexMap;
|
typedef std::map<MachineInstr*, unsigned> Mi2IndexMap;
|
||||||
Mi2IndexMap mi2iMap_;
|
Mi2IndexMap mi2iMap_;
|
||||||
|
|
||||||
typedef std::map<unsigned, unsigned> Reg2IntervalMap;
|
typedef std::map<unsigned, Intervals::iterator> Reg2IntervalMap;
|
||||||
Reg2IntervalMap r2iMap_;
|
Reg2IntervalMap r2iMap_;
|
||||||
|
|
||||||
Intervals intervals_;
|
Intervals intervals_;
|
||||||
|
@@ -114,7 +114,7 @@ bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
|
|||||||
unsigned reg = mop.getAllocatedRegNum();
|
unsigned reg = mop.getAllocatedRegNum();
|
||||||
Reg2IntervalMap::iterator r2iit = r2iMap_.find(reg);
|
Reg2IntervalMap::iterator r2iit = r2iMap_.find(reg);
|
||||||
assert(r2iit != r2iMap_.end());
|
assert(r2iit != r2iMap_.end());
|
||||||
intervals_[r2iit->second].weight += pow(10.0F, loopDepth);
|
r2iit->second->weight += pow(10.0F, loopDepth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -148,11 +148,11 @@ void LiveIntervals::handleVirtualRegisterDef(MachineBasicBlock* mbb,
|
|||||||
// add new interval
|
// add new interval
|
||||||
intervals_.push_back(Interval(reg));
|
intervals_.push_back(Interval(reg));
|
||||||
// update interval index for this register
|
// update interval index for this register
|
||||||
r2iMap_[reg] = intervals_.size() - 1;
|
r2iMap_.insert(std::make_pair(reg, --intervals_.end()));
|
||||||
interval = &intervals_.back();
|
interval = &intervals_.back();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
interval = &intervals_[r2iit->second];
|
interval = &*r2iit->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (MbbIndex2MbbMap::iterator
|
for (MbbIndex2MbbMap::iterator
|
||||||
@@ -241,15 +241,14 @@ exit:
|
|||||||
|
|
||||||
Reg2IntervalMap::iterator r2iit = r2iMap_.find(reg);
|
Reg2IntervalMap::iterator r2iit = r2iMap_.find(reg);
|
||||||
if (r2iit != r2iMap_.end()) {
|
if (r2iit != r2iMap_.end()) {
|
||||||
unsigned ii = r2iit->second;
|
Interval& interval = *r2iit->second;
|
||||||
Interval& interval = intervals_[ii];
|
|
||||||
interval.addRange(start, end);
|
interval.addRange(start, end);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
intervals_.push_back(Interval(reg));
|
intervals_.push_back(Interval(reg));
|
||||||
Interval& interval = intervals_.back();
|
Interval& interval = intervals_.back();
|
||||||
// update interval index for this register
|
// update interval index for this register
|
||||||
r2iMap_[reg] = intervals_.size() - 1;
|
r2iMap_.insert(std::make_pair(reg, --intervals_.end()));
|
||||||
interval.addRange(start, end);
|
interval.addRange(start, end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -318,7 +317,7 @@ void LiveIntervals::computeIntervals()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort(intervals_.begin(), intervals_.end(), StartPointComp());
|
intervals_.sort(StartPointComp());
|
||||||
DEBUG(std::copy(intervals_.begin(), intervals_.end(),
|
DEBUG(std::copy(intervals_.begin(), intervals_.end(),
|
||||||
std::ostream_iterator<Interval>(std::cerr, "\n")));
|
std::ostream_iterator<Interval>(std::cerr, "\n")));
|
||||||
}
|
}
|
||||||
|
@@ -24,6 +24,7 @@
|
|||||||
#include "llvm/CodeGen/MachineFunctionPass.h"
|
#include "llvm/CodeGen/MachineFunctionPass.h"
|
||||||
#include "llvm/CodeGen/MachineBasicBlock.h"
|
#include "llvm/CodeGen/MachineBasicBlock.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
@@ -83,7 +84,7 @@ namespace llvm {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector<Interval> Intervals;
|
typedef std::list<Interval> Intervals;
|
||||||
typedef std::vector<MachineBasicBlock*> MachineBasicBlockPtrs;
|
typedef std::vector<MachineBasicBlock*> MachineBasicBlockPtrs;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -100,7 +101,7 @@ namespace llvm {
|
|||||||
typedef std::map<MachineInstr*, unsigned> Mi2IndexMap;
|
typedef std::map<MachineInstr*, unsigned> Mi2IndexMap;
|
||||||
Mi2IndexMap mi2iMap_;
|
Mi2IndexMap mi2iMap_;
|
||||||
|
|
||||||
typedef std::map<unsigned, unsigned> Reg2IntervalMap;
|
typedef std::map<unsigned, Intervals::iterator> Reg2IntervalMap;
|
||||||
Reg2IntervalMap r2iMap_;
|
Reg2IntervalMap r2iMap_;
|
||||||
|
|
||||||
Intervals intervals_;
|
Intervals intervals_;
|
||||||
|
Reference in New Issue
Block a user