13 #ifndef MLIR_IR_STORAGEUNIQUERSUPPORT_H 14 #define MLIR_IR_STORAGEUNIQUERSUPPORT_H 28 template <
typename ConcreteT,
typename BaseT,
typename StorageT,
43 template <
typename T>
static bool classof(T val) {
44 static_assert(std::is_convertible<ConcreteT, T>::value,
45 "casting from a non-convertible type");
46 return ConcreteT::kindof(val.getKind());
53 template <
typename... Args>
54 static ConcreteT
get(
MLIRContext *ctx,
unsigned kind, Args... args) {
57 ConcreteT::verifyConstructionInvariants(
llvm::None, ctx, args...)));
58 return UniquerT::template get<ConcreteT>(ctx, kind, args...);
64 template <
typename... Args>
66 unsigned kind, Args... args) {
68 if (
failed(ConcreteT::verifyConstructionInvariants(loc, ctx, args...)))
70 return UniquerT::template get<ConcreteT>(ctx, kind, args...);
74 template <
typename... Args>
Definition: InferTypeOpInterface.cpp:20
Definition: STLExtras.h:95
bool failed(LogicalResult result)
Definition: LogicalResult.h:45
bool succeeded(LogicalResult result)
Definition: LogicalResult.h:39
static ConcreteT getChecked(const Location &loc, MLIRContext *ctx, unsigned kind, Args... args)
Definition: StorageUniquerSupport.h:65
Definition: Location.h:52
static ClassID * getClassID()
Return a unique identifier for the concrete type.
Definition: StorageUniquerSupport.h:39
LogicalResult success(bool isSuccess=true)
Definition: LogicalResult.h:25
Definition: LogicalResult.h:18
ImplType * getImpl() const
Utility for easy access to the storage instance.
Definition: StorageUniquerSupport.h:80
static bool classof(T val)
Definition: StorageUniquerSupport.h:43
Definition: StorageUniquerSupport.h:30
Definition: MLIRContext.h:34
Definition: StandardTypes.h:63
static LogicalResult verifyConstructionInvariants(Args... args)
Default implementation that just returns success.
Definition: StorageUniquerSupport.h:75
StorageT ImplType
Definition: StorageUniquerSupport.h:36