X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=utils%2FTableGen%2FInstrInfoEmitter.h;h=657939e46388508edf81c59af42161b4f0bddc8d;hb=717ce2b8d81f0c12145248e92c37ee7547276ce2;hp=0415f043ce48bacdf3805e798e2006b56bebfbfc;hpb=a3ae6143c1ec9c39a7beb07960f89edd4736b018;p=oota-llvm.git diff --git a/utils/TableGen/InstrInfoEmitter.h b/utils/TableGen/InstrInfoEmitter.h index 0415f043ce4..657939e4638 100644 --- a/utils/TableGen/InstrInfoEmitter.h +++ b/utils/TableGen/InstrInfoEmitter.h @@ -1,5 +1,12 @@ //===- 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. // @@ -8,26 +15,54 @@ #ifndef INSTRINFO_EMITTER_H #define INSTRINFO_EMITTER_H -#include -class RecordKeeper; -class Record; +#include "TableGenBackend.h" +#include "CodeGenDAGPatterns.h" +#include +#include + +namespace llvm { + class StringInit; class IntInit; +class ListInit; +class CodeGenInstruction; -class InstrInfoEmitter { +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); + void run(raw_ostream &OS); - // runEnums - Print out enum values for all of the instructions. - void runEnums(std::ostream &OS); private: - void emitRecord(Record *R, unsigned Num, Record *InstrInfo, std::ostream &OS); + typedef std::map, unsigned> OperandInfoMapTy; + + void emitRecord(const CodeGenInstruction &Inst, unsigned Num, + Record *InstrInfo, + std::map, unsigned> &EL, + std::map &BM, + const OperandInfoMapTy &OpInfo, + raw_ostream &OS); void emitShiftedValue(Record *R, StringInit *Val, IntInit *Shift, - std::ostream &OS); + raw_ostream &OS); + + // Itinerary information. + void GatherItinClasses(); + unsigned getItinClassNumber(const Record *InstRec); + + // Operand information. + void EmitOperandInfo(raw_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 + #endif