diff options
author | Chris Lattner <sabre@nondot.org> | 2006-07-18 17:18:03 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2006-07-18 17:18:03 +0000 |
commit | bdff5f95b9cda9a6d24104201fa53204bd0c5a75 (patch) | |
tree | 469a4ae352d696c57bb7955089ceb977a035648f /utils/TableGen/AsmWriterEmitter.h | |
parent | 355746359ebca83ccb5accab0f3ffd20f0374a35 (diff) |
Completely change the structure of the generated asmprinter to be more table
based and less switch-statements-with-hundreds-of-cases based. This shrinks
the x86 asmprinters to about 1/3 their previous size.
Other improvements coming.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29177 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/AsmWriterEmitter.h')
-rw-r--r-- | utils/TableGen/AsmWriterEmitter.h | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/utils/TableGen/AsmWriterEmitter.h b/utils/TableGen/AsmWriterEmitter.h index 155dfc83c0..c7a9c60bff 100644 --- a/utils/TableGen/AsmWriterEmitter.h +++ b/utils/TableGen/AsmWriterEmitter.h @@ -16,16 +16,35 @@ #define ASMWRITER_EMITTER_H #include "TableGenBackend.h" +#include <map> +#include <vector> +#include <cassert> namespace llvm { - + class AsmWriterInst; + class CodeGenInstruction; + class AsmWriterEmitter : public TableGenBackend { RecordKeeper &Records; + std::map<const CodeGenInstruction*, AsmWriterInst*> CGIAWIMap; + std::vector<const CodeGenInstruction*> NumberedInstructions; public: AsmWriterEmitter(RecordKeeper &R) : Records(R) {} // run - Output the asmwriter, returning true on failure. void run(std::ostream &o); + +private: + AsmWriterInst *getAsmWriterInstByID(unsigned ID) const { + assert(ID < NumberedInstructions.size()); + std::map<const CodeGenInstruction*, AsmWriterInst*>::const_iterator I = + CGIAWIMap.find(NumberedInstructions[ID]); + assert(I != CGIAWIMap.end() && "Didn't find inst!"); + return I->second; + } + void FindUniqueOperandCommands(std::vector<std::string> &UOC, + std::vector<unsigned> &InstIdxs, + unsigned Op) const; }; } #endif |