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 | |
parent | 6ba50a92525521b46ef5c72ee5a0f80ba0263c01 (diff) | |
download | external_llvm-690d80eefeb522c8697ef39d9e6d19b0be276f0e.zip external_llvm-690d80eefeb522c8697ef39d9e6d19b0be276f0e.tar.gz external_llvm-690d80eefeb522c8697ef39d9e6d19b0be276f0e.tar.bz2 |
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')
-rw-r--r-- | utils/TableGen/Record.h | 17 | ||||
-rw-r--r-- | utils/TableGen/RegisterInfoEmitter.cpp | 12 | ||||
-rw-r--r-- | utils/TableGen/SubtargetEmitter.cpp | 18 |
3 files changed, 25 insertions, 22 deletions
diff --git a/utils/TableGen/Record.h b/utils/TableGen/Record.h index c36d808..d597715 100644 --- a/utils/TableGen/Record.h +++ b/utils/TableGen/Record.h @@ -1175,6 +1175,23 @@ public: void dump() const; }; +/// LessRecord - Sorting predicate to sort record pointers by name. +/// +struct LessRecord { + bool operator()(const Record *Rec1, const Record *Rec2) const { + return Rec1->getName() < Rec2->getName(); + } +}; + +/// LessRecord - Sorting predicate to sort record pointers by their name field. +/// +struct LessRecordFieldName { + bool operator()(const Record *Rec1, const Record *Rec2) const { + return Rec1->getValueAsString("Name") < Rec2->getValueAsString("Name"); + } +}; + + std::ostream &operator<<(std::ostream &OS, const RecordKeeper &RK); extern RecordKeeper Records; diff --git a/utils/TableGen/RegisterInfoEmitter.cpp b/utils/TableGen/RegisterInfoEmitter.cpp index d514bf7..7517c5e 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) diff --git a/utils/TableGen/SubtargetEmitter.cpp b/utils/TableGen/SubtargetEmitter.cpp index 1f833ef..9b5f6df 100644 --- a/utils/TableGen/SubtargetEmitter.cpp +++ b/utils/TableGen/SubtargetEmitter.cpp @@ -20,24 +20,6 @@ using namespace llvm; // -// Record sort by name function. -// -struct LessRecord { - bool operator()(const Record *Rec1, const Record *Rec2) const { - return Rec1->getName() < Rec2->getName(); - } -}; - -// -// Record sort by field "Name" function. -// -struct LessRecordFieldName { - bool operator()(const Record *Rec1, const Record *Rec2) const { - return Rec1->getValueAsString("Name") < Rec2->getValueAsString("Name"); - } -}; - -// // Enumeration - Emit the specified class as an enumeration. // void SubtargetEmitter::Enumeration(std::ostream &OS, |