12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- //===--- 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 <cassert>
- #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
|