X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=utils%2FTableGen%2FInstrInfoEmitter.h;h=abb1c6bc188cbd94e9ee7c15cb9ec6153dcdb0ea;hb=0b85d07d4611e7d704bf6550fbc624aff36a53b4;hp=adc871129e1ffd1bba8b70846ba1237960948c07;hpb=a0cca4ae267bc28143e8f4737e119349d95e4825;p=oota-llvm.git diff --git a/utils/TableGen/InstrInfoEmitter.h b/utils/TableGen/InstrInfoEmitter.h index adc871129e1..abb1c6bc188 100644 --- a/utils/TableGen/InstrInfoEmitter.h +++ b/utils/TableGen/InstrInfoEmitter.h @@ -2,8 +2,8 @@ // // 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. // //===----------------------------------------------------------------------===// // @@ -16,6 +16,7 @@ #define INSTRINFO_EMITTER_H #include "TableGenBackend.h" +#include "CodeGenDAGPatterns.h" #include #include @@ -28,30 +29,36 @@ class CodeGenInstruction; class InstrInfoEmitter : public TableGenBackend { RecordKeeper &Records; - bool IsItineraries; + CodeGenDAGPatterns CDP; std::map ItinClassMap; public: - InstrInfoEmitter(RecordKeeper &R) : Records(R), IsItineraries(false) {} + 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 printDefList(const std::vector &Uses, unsigned Num, - std::ostream &OS) const; + typedef std::map, unsigned> OperandInfoMapTy; + void emitRecord(const CodeGenInstruction &Inst, unsigned Num, Record *InstrInfo, std::map, unsigned> &EL, - std::map, unsigned> &OpInfo, - std::ostream &OS); + std::map &BM, + const OperandInfoMapTy &OpInfo, + raw_ostream &OS); + + // Itinerary information. void GatherItinClasses(); - unsigned ItinClassNumber(std::string ItinName); - void emitShiftedValue(Record *R, StringInit *Val, IntInit *Shift, - std::ostream &OS); + 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