#include "mlir/IR/DialectInterface.h"
#include "mlir/IR/MLIRContext.h"
#include "mlir/IR/OpDefinition.h"
+#include "mlir/IR/OperationSupport.h"
#include "mlir/Support/TypeID.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/Support/ErrorHandling.h"
void populateDefaultProperties(OperationName opName,
OpaqueProperties properties) final {}
- LogicalResult setPropertiesFromAttr(Operation *op, Attribute attr,
+ LogicalResult setPropertiesFromAttr(OperationName opName,
+ OpaqueProperties properties,
+ Attribute attr,
InFlightDiagnostic *diag) final {
return failure();
}
virtual void deleteProperties(OpaqueProperties) = 0;
virtual void populateDefaultProperties(OperationName opName,
OpaqueProperties properties) = 0;
- virtual LogicalResult setPropertiesFromAttr(Operation *, Attribute,
+ virtual LogicalResult setPropertiesFromAttr(OperationName, OpaqueProperties,
+ Attribute,
InFlightDiagnostic *) = 0;
virtual Attribute getPropertiesAsAttr(Operation *) = 0;
virtual void copyProperties(OpaqueProperties, OpaqueProperties) = 0;
void deleteProperties(OpaqueProperties) final;
void populateDefaultProperties(OperationName opName,
OpaqueProperties properties) final;
- LogicalResult setPropertiesFromAttr(Operation *, Attribute,
- InFlightDiagnostic *) final;
+ LogicalResult setPropertiesFromAttr(OperationName, OpaqueProperties,
+ Attribute, InFlightDiagnostic *) final;
Attribute getPropertiesAsAttr(Operation *) final;
void copyProperties(OpaqueProperties, OpaqueProperties) final;
llvm::hash_code hashProperties(OpaqueProperties) final;
/// Define the op properties from the provided Attribute.
LogicalResult
- setOpPropertiesFromAttribute(Operation *op, Attribute properties,
+ setOpPropertiesFromAttribute(OperationName opName,
+ OpaqueProperties properties, Attribute attr,
InFlightDiagnostic *diagnostic) const {
- return getImpl()->setPropertiesFromAttr(op, properties, diagnostic);
+ return getImpl()->setPropertiesFromAttr(opName, properties, attr,
+ diagnostic);
}
void copyOpProperties(OpaqueProperties lhs, OpaqueProperties rhs) const {
*properties.as<Properties *>());
}
- LogicalResult setPropertiesFromAttr(Operation *op, Attribute attr,
+ LogicalResult setPropertiesFromAttr(OperationName opName,
+ OpaqueProperties properties,
+ Attribute attr,
InFlightDiagnostic *diag) final {
- if constexpr (hasProperties)
- return ConcreteOp::setPropertiesFromAttr(
- cast<ConcreteOp>(op).getProperties(), attr, diag);
+ if constexpr (hasProperties) {
+ auto p = properties.as<Properties *>();
+ return ConcreteOp::setPropertiesFromAttr(*p, attr, diag);
+ }
if (diag)
*diag << "This operation does not support properties";
return failure();
#include "mlir/IR/IntegerSet.h"
#include "mlir/IR/Location.h"
#include "mlir/IR/OpImplementation.h"
+#include "mlir/IR/OperationSupport.h"
#include "mlir/IR/Types.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DenseSet.h"
void OperationName::UnregisteredOpModel::populateDefaultProperties(
OperationName opName, OpaqueProperties properties) {}
LogicalResult OperationName::UnregisteredOpModel::setPropertiesFromAttr(
- Operation *op, Attribute attr, InFlightDiagnostic *diag) {
- *op->getPropertiesStorage().as<Attribute *>() = attr;
+ OperationName opName, OpaqueProperties properties, Attribute attr,
+ InFlightDiagnostic *diag) {
+ *properties.as<Attribute *>() = attr;
return success();
}
Attribute