mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-30 20:34:21 +00:00
Switch a std::map to a DenseMap in CodeGenRegisters.
The keys of the map are unique by pointer address, so there's no need to use the llvm::less comparator. This allows us to use DenseMap instead, which reduces tblgen time by 20% on my stress test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230769 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b0e53cd656
commit
ecf670391b
@ -258,6 +258,8 @@ CodeGenRegister::computeSubRegs(CodeGenRegBank &RegBank) {
|
||||
|
||||
// Look at the possible compositions of Idx.
|
||||
// They may not all be supported by SR.
|
||||
// NOTE: Iteration order does not matter here because the EnumValue's
|
||||
// of subreg indices are unique.
|
||||
for (CodeGenSubRegIndex::CompMap::const_iterator I = Comps.begin(),
|
||||
E = Comps.end(); I != E; ++I) {
|
||||
SubRegMap::const_iterator SRI = Map.find(I->first);
|
||||
|
@ -74,8 +74,7 @@ namespace llvm {
|
||||
std::string getQualifiedName() const;
|
||||
|
||||
// Map of composite subreg indices.
|
||||
typedef std::map<CodeGenSubRegIndex *, CodeGenSubRegIndex *,
|
||||
deref<llvm::less>> CompMap;
|
||||
typedef DenseMap<CodeGenSubRegIndex *, CodeGenSubRegIndex *> CompMap;
|
||||
|
||||
// Returns the subreg index that results from composing this with Idx.
|
||||
// Returns NULL if this and Idx don't compose.
|
||||
|
@ -610,17 +610,19 @@ static void printMask(raw_ostream &OS, unsigned Val) {
|
||||
static bool combine(const CodeGenSubRegIndex *Idx,
|
||||
SmallVectorImpl<CodeGenSubRegIndex*> &Vec) {
|
||||
const CodeGenSubRegIndex::CompMap &Map = Idx->getComposites();
|
||||
for (CodeGenSubRegIndex::CompMap::const_iterator
|
||||
I = Map.begin(), E = Map.end(); I != E; ++I) {
|
||||
CodeGenSubRegIndex *&Entry = Vec[I->first->EnumValue - 1];
|
||||
if (Entry && Entry != I->second)
|
||||
for (const auto &I : Map) {
|
||||
CodeGenSubRegIndex *&Entry = Vec[I.first->EnumValue - 1];
|
||||
if (Entry && Entry != I.second)
|
||||
return false;
|
||||
}
|
||||
|
||||
// All entries are compatible. Make it so.
|
||||
for (CodeGenSubRegIndex::CompMap::const_iterator
|
||||
I = Map.begin(), E = Map.end(); I != E; ++I)
|
||||
Vec[I->first->EnumValue - 1] = I->second;
|
||||
for (const auto &I : Map) {
|
||||
auto *&Entry = Vec[I.first->EnumValue - 1];
|
||||
assert((!Entry || Entry == I.second) &&
|
||||
"Expected EnumValue to be unique");
|
||||
Entry = I.second;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user