aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Pienaar <jpienaar@google.com>2023-07-21 14:54:43 -0700
committerJacques Pienaar <jpienaar@google.com>2023-07-21 14:54:43 -0700
commit863e8123df5e7dfb58af93e65e4da3ced96d358f (patch)
tree4f3711ea45d114f15aa1da4113834ba08ced5e64
parentf7e4304120506c9973a5ac939e06c106d8816911 (diff)
downloadllvm-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.h5
-rw-r--r--mlir/include/mlir/IR/OperationSupport.h24
-rw-r--r--mlir/lib/IR/MLIRContext.cpp6
-rw-r--r--mlir/lib/IR/Operation.cpp3
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) {