summaryrefslogtreecommitdiff
path: root/utils/TableGen/RegisterInfoEmitter.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-08-26 06:43:25 +0000
committerChris Lattner <sabre@nondot.org>2008-08-26 06:43:25 +0000
commit690d80eefeb522c8697ef39d9e6d19b0be276f0e (patch)
tree08551a11eb6121cb91dd1b818ab5a9dc4771c138 /utils/TableGen/RegisterInfoEmitter.cpp
parent6ba50a92525521b46ef5c72ee5a0f80ba0263c01 (diff)
downloadllvm-690d80eefeb522c8697ef39d9e6d19b0be276f0e.tar.gz
llvm-690d80eefeb522c8697ef39d9e6d19b0be276f0e.tar.bz2
llvm-690d80eefeb522c8697ef39d9e6d19b0be276f0e.tar.xz
Stabilize 'getDwarfRegNumFull' output to not depend on random memory
orders, part of PR2590 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55359 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/RegisterInfoEmitter.cpp')
-rw-r--r--utils/TableGen/RegisterInfoEmitter.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/utils/TableGen/RegisterInfoEmitter.cpp b/utils/TableGen/RegisterInfoEmitter.cpp
index d514bf7deb..7517c5eee5 100644
--- a/utils/TableGen/RegisterInfoEmitter.cpp
+++ b/utils/TableGen/RegisterInfoEmitter.cpp
@@ -422,7 +422,8 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
std::map<Record*, std::set<Record*> > RegisterSuperRegs;
std::map<Record*, std::set<Record*> > RegisterAliases;
std::map<Record*, std::vector<std::pair<int, Record*> > > SubRegVectors;
- std::map<Record*, std::vector<int> > DwarfRegNums;
+ typedef std::map<Record*, std::vector<int>, LessRecord> DwarfRegNumsMapTy;
+ DwarfRegNumsMapTy DwarfRegNums;
const std::vector<CodeGenRegister> &Regs = Target.getRegisters();
@@ -693,8 +694,8 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
}
// Now we know maximal length of number list. Append -1's, where needed
- for (std::map<Record*, std::vector<int> >::iterator
- I = DwarfRegNums.begin(), E = DwarfRegNums.end(); I != E; ++I)
+ for (DwarfRegNumsMapTy::iterator
+ I = DwarfRegNums.begin(), E = DwarfRegNums.end(); I != E; ++I)
for (unsigned i = I->second.size(), e = maxLength; i != e; ++i)
I->second.push_back(-1);
@@ -712,8 +713,11 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
<< " default:\n"
<< " assert(0 && \"Invalid RegNum\");\n"
<< " return -1;\n";
+
+ // Sort by name to get a stable order.
+
- for (std::map<Record*, std::vector<int> >::iterator
+ for (DwarfRegNumsMapTy::iterator
I = DwarfRegNums.begin(), E = DwarfRegNums.end(); I != E; ++I) {
int RegNo = I->second[i];
if (RegNo != -2)