//===- InstrInfoEmitter.h - Generate a Instruction Set Desc. ----*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This tablegen backend is responsible for emitting a description of the target // instruction set for the code generator. // //===----------------------------------------------------------------------===// #ifndef INSTRINFO_EMITTER_H #define INSTRINFO_EMITTER_H #include "TableGenBackend.h" #include #include namespace llvm { class StringInit; class IntInit; class ListInit; class CodeGenInstruction; class InstrInfoEmitter : public TableGenBackend { RecordKeeper &Records; bool IsItineraries; std::map ItinClassMap; public: InstrInfoEmitter(RecordKeeper &R) : Records(R), IsItineraries(false) {} // run - Output the instruction set description, returning true on failure. void run(std::ostream &OS); // runEnums - Print out enum values for all of the instructions. void runEnums(std::ostream &OS); private: void printDefList(const std::vector &Uses, unsigned Num, std::ostream &OS) const; void emitRecord(const CodeGenInstruction &Inst, unsigned Num, Record *InstrInfo, std::map, unsigned> &EL, std::map, unsigned> &OpInfo, std::ostream &OS); void GatherItinClasses(); unsigned ItinClassNumber(std::string ItinName); void emitShiftedValue(Record *R, StringInit *Val, IntInit *Shift, std::ostream &OS); std::vector GetOperandInfo(const CodeGenInstruction &Inst); }; } // End llvm namespace #endif