Home | History | Annotate | Download | only in TableGen
      1 //===- AsmWriterEmitter.h - Generate an assembly writer ---------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This tablegen backend is responsible for emitting an assembly printer for the
     11 // code generator.
     12 //
     13 //===----------------------------------------------------------------------===//
     14 
     15 #ifndef ASMWRITER_EMITTER_H
     16 #define ASMWRITER_EMITTER_H
     17 
     18 #include "llvm/TableGen/TableGenBackend.h"
     19 #include <map>
     20 #include <vector>
     21 #include <cassert>
     22 
     23 namespace llvm {
     24   class AsmWriterInst;
     25   class CodeGenInstruction;
     26 
     27   class AsmWriterEmitter : public TableGenBackend {
     28     RecordKeeper &Records;
     29     std::map<const CodeGenInstruction*, AsmWriterInst*> CGIAWIMap;
     30     std::vector<const CodeGenInstruction*> NumberedInstructions;
     31   public:
     32     AsmWriterEmitter(RecordKeeper &R) : Records(R) {}
     33 
     34     // run - Output the asmwriter, returning true on failure.
     35     void run(raw_ostream &o);
     36 
     37 private:
     38     void EmitPrintInstruction(raw_ostream &o);
     39     void EmitGetRegisterName(raw_ostream &o);
     40     void EmitPrintAliasInstruction(raw_ostream &O);
     41 
     42     AsmWriterInst *getAsmWriterInstByID(unsigned ID) const {
     43       assert(ID < NumberedInstructions.size());
     44       std::map<const CodeGenInstruction*, AsmWriterInst*>::const_iterator I =
     45         CGIAWIMap.find(NumberedInstructions[ID]);
     46       assert(I != CGIAWIMap.end() && "Didn't find inst!");
     47       return I->second;
     48     }
     49     void FindUniqueOperandCommands(std::vector<std::string> &UOC,
     50                                    std::vector<unsigned> &InstIdxs,
     51                                    std::vector<unsigned> &InstOpsUsed) const;
     52   };
     53 }
     54 #endif
     55