X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=utils%2FTableGen%2FInstrInfoEmitter.h;h=870ea0c58780963223570e35898f984e418c3cfa;hb=b4ced5a3c488d58d98381c8562123640fdb6177a;hp=bf7da347ed2bc16f4723e09b1ee3870ffabd3e64;hpb=1fca5ff62bb2ecb5bfc8974f4dbfc56e9d3ca721;p=oota-llvm.git diff --git a/utils/TableGen/InstrInfoEmitter.h b/utils/TableGen/InstrInfoEmitter.h index bf7da347ed2..870ea0c5878 100644 --- a/utils/TableGen/InstrInfoEmitter.h +++ b/utils/TableGen/InstrInfoEmitter.h @@ -1,10 +1,10 @@ //===- InstrInfoEmitter.h - Generate a Instruction Set Desc. ----*- C++ -*-===// -// +// // The LLVM Compiler Infrastructure // -// This file was developed by the LLVM research group and is distributed under -// the University of Illinois Open Source License. See LICENSE.TXT for details. -// +// 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 @@ -16,31 +16,51 @@ #define INSTRINFO_EMITTER_H #include "TableGenBackend.h" +#include "CodeGenDAGPatterns.h" +#include +#include namespace llvm { class StringInit; class IntInit; class ListInit; -struct CodeGenInstruction; +class CodeGenInstruction; class InstrInfoEmitter : public TableGenBackend { RecordKeeper &Records; -public: - InstrInfoEmitter(RecordKeeper &R) : Records(R) {} + CodeGenDAGPatterns CDP; + std::map ItinClassMap; +public: + InstrInfoEmitter(RecordKeeper &R) : Records(R), CDP(R) { } + // 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(ListInit *LI, const std::string &Name, - std::ostream &OS) const; + typedef std::map, unsigned> OperandInfoMapTy; + void emitRecord(const CodeGenInstruction &Inst, unsigned Num, - Record *InstrInfo, std::ostream &OS); + Record *InstrInfo, + std::map, unsigned> &EL, + std::map &BM, + const OperandInfoMapTy &OpInfo, + std::ostream &OS); void emitShiftedValue(Record *R, StringInit *Val, IntInit *Shift, std::ostream &OS); + + // Itinerary information. + void GatherItinClasses(); + unsigned getItinClassNumber(const Record *InstRec); + + // Operand information. + void EmitOperandInfo(std::ostream &OS, OperandInfoMapTy &OperandInfoIDs); + std::vector GetOperandInfo(const CodeGenInstruction &Inst); + + void DetectRegisterClassBarriers(std::vector &Defs, + const std::vector &RCs, + std::vector &Barriers); }; } // End llvm namespace