summaryrefslogtreecommitdiff
path: root/llvm/utils/TableGen/CodeGenHwModes.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/utils/TableGen/CodeGenHwModes.h')
-rw-r--r--llvm/utils/TableGen/CodeGenHwModes.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/CodeGenHwModes.h b/llvm/utils/TableGen/CodeGenHwModes.h
new file mode 100644
index 000000000000..1ff2faaa0e52
--- /dev/null
+++ b/llvm/utils/TableGen/CodeGenHwModes.h
@@ -0,0 +1,63 @@
+//===--- 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 <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