diff options
author | Chris Lattner <sabre@nondot.org> | 2008-08-26 06:43:25 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-08-26 06:43:25 +0000 |
commit | 690d80eefeb522c8697ef39d9e6d19b0be276f0e (patch) | |
tree | 08551a11eb6121cb91dd1b818ab5a9dc4771c138 /utils/TableGen/RegisterInfoEmitter.cpp | |
parent | 6ba50a92525521b46ef5c72ee5a0f80ba0263c01 (diff) | |
download | llvm-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.cpp | 12 |
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) |