//===--- CodeGenHwModes.h ---------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // Classes to parse and store HW mode information for instruction selection. //===----------------------------------------------------------------------===// #ifndef LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H #define LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H #include "llvm/ADT/StringMap.h" #include <map> #include <string> #include <vector> // HwModeId -> list of predicates (definition) namespace llvm { class Record; class RecordKeeper; struct CodeGenHwModes; struct HwMode { HwMode(Record *R); StringRef Name; std::string Features; void dump() const; }; struct HwModeSelect { HwModeSelect(Record *R, CodeGenHwModes &CGH); typedef std::pair<unsigned, Record*> PairType; std::vector<PairType> Items; void dump() const; }; struct CodeGenHwModes { enum : unsigned { DefaultMode = 0 }; static StringRef DefaultModeName; CodeGenHwModes(RecordKeeper &R); unsigned getHwModeId(StringRef Name) const; const HwMode &getMode(unsigned Id) const { assert(Id != 0 && "Mode id of 0 is reserved for the default mode"); return Modes[Id-1]; } const HwModeSelect &getHwModeSelect(Record *R) const; unsigned getNumModeIds() const { return Modes.size()+1; } void dump() const; private: RecordKeeper &Records; StringMap<unsigned> ModeIds; // HwMode (string) -> HwModeId std::vector<HwMode> Modes; std::map<Record*,HwModeSelect> ModeSelects; }; } #endif // LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H