#define LLVM_CODEGEN_MACHINEVALUETYPE_H
#include "llvm/ADT/iterator_range.h"
+#include "llvm/ADT/DenseMapInfo.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include <cassert>
class MVT {
public:
enum SimpleValueType : uint8_t {
+ // clang-format off
+
// Simple value types that aren't explicitly part of this enumeration
// are considered extended value types.
INVALID_SIMPLE_VALUE_TYPE = 0,
// This value must be a multiple of 32.
MAX_ALLOWED_VALUETYPE = 128,
+ // tombstone value used for DenseMap / DenseSet.
+ // This is only for internal use!
+ tombstone = 247,
+
// A value of type llvm::TokenTy
token = 248,
// Any type. This is used for intrinsics that have overloadings.
// This is only for tblgen's consumption!
Any = 255
+
+ // clang-format on
};
SimpleValueType SimpleTy = INVALID_SIMPLE_VALUE_TYPE;
/// @}
};
+ template <> struct DenseMapInfo<MVT> {
+ static inline MVT getEmptyKey() {
+ return MVT(MVT::INVALID_SIMPLE_VALUE_TYPE);
+ }
+
+ static inline MVT getTombstoneKey() { return MVT(MVT::tombstone); }
+ static unsigned getHashValue(const MVT &Val) {
+ return unsigned(Val.SimpleTy);
+ }
+ static bool isEqual(const MVT &LHS, const MVT &RHS) { return LHS == RHS; }
+ };
+
} // end namespace llvm
#endif // LLVM_CODEGEN_MACHINEVALUETYPE_H