//===--- CodeGenHwModes.h ---------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // 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 #include #include // 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 PairType; std::vector 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 ModeIds; // HwMode (string) -> HwModeId std::vector Modes; std::map ModeSelects; }; } #endif // LLVM_UTILS_TABLEGEN_CODEGENHWMODES_H