diff options
author | Jacques Pienaar <jpienaar@google.com> | 2023-07-21 14:54:43 -0700 |
---|---|---|
committer | Jacques Pienaar <jpienaar@google.com> | 2023-07-21 14:54:43 -0700 |
commit | 863e8123df5e7dfb58af93e65e4da3ced96d358f (patch) | |
tree | 4f3711ea45d114f15aa1da4113834ba08ced5e64 | |
parent | f7e4304120506c9973a5ac939e06c106d8816911 (diff) | |
download | llvm-863e8123df5e7dfb58af93e65e4da3ced96d358f.zip llvm-863e8123df5e7dfb58af93e65e4da3ced96d358f.tar.gz llvm-863e8123df5e7dfb58af93e65e4da3ced96d358f.tar.bz2 |
[mlir] Move attr -> properties to not require Operation
This allows for converting before/without an Operation is created.
Differential Revision: https://reviews.llvm.org/D155996
-rw-r--r-- | mlir/include/mlir/IR/ExtensibleDialect.h | 5 | ||||
-rw-r--r-- | mlir/include/mlir/IR/OperationSupport.h | 24 | ||||
-rw-r--r-- | mlir/lib/IR/MLIRContext.cpp | 6 | ||||
-rw-r--r-- | mlir/lib/IR/Operation.cpp | 3 |
4 files changed, 25 insertions, 13 deletions
diff --git a/mlir/include/mlir/IR/ExtensibleDialect.h b/mlir/include/mlir/IR/ExtensibleDialect.h index 4ca27ea..9a35077 100644 --- a/mlir/include/mlir/IR/ExtensibleDialect.h +++ b/mlir/include/mlir/IR/ExtensibleDialect.h @@ -24,6 +24,7 @@ #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" @@ -485,7 +486,9 @@ public: 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(); } diff --git a/mlir/include/mlir/IR/OperationSupport.h b/mlir/include/mlir/IR/OperationSupport.h index 82efa9d..303e030 100644 --- a/mlir/include/mlir/IR/OperationSupport.h +++ b/mlir/include/mlir/IR/OperationSupport.h @@ -136,7 +136,8 @@ public: 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; @@ -215,8 +216,8 @@ protected: 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; @@ -425,9 +426,11 @@ public: /// 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 { @@ -614,11 +617,14 @@ public: *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(); diff --git a/mlir/lib/IR/MLIRContext.cpp b/mlir/lib/IR/MLIRContext.cpp index bb309d5..e19c3d4 100644 --- a/mlir/lib/IR/MLIRContext.cpp +++ b/mlir/lib/IR/MLIRContext.cpp @@ -24,6 +24,7 @@ #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" @@ -850,8 +851,9 @@ void OperationName::UnregisteredOpModel::deleteProperties( 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 diff --git a/mlir/lib/IR/Operation.cpp b/mlir/lib/IR/Operation.cpp index 1c70bc3..3453f9d 100644 --- a/mlir/lib/IR/Operation.cpp +++ b/mlir/lib/IR/Operation.cpp @@ -361,7 +361,8 @@ Operation::setPropertiesFromAttribute(Attribute attr, *getPropertiesStorage().as<Attribute *>() = attr; return success(); } - return info->setOpPropertiesFromAttribute(this, attr, diagnostic); + return info->setOpPropertiesFromAttribute( + this->getName(), this->getPropertiesStorage(), attr, diagnostic); } void Operation::copyProperties(OpaqueProperties rhs) { |