aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRiver Riddle <riddleriver@gmail.com>2020-06-15 15:30:21 -0700
committerRiver Riddle <riddleriver@gmail.com>2020-06-15 15:57:44 -0700
commit552ef9fc094f7c0b0d7bf7a9b4d5da1319a2a67a (patch)
tree30f1e4eb93fcc59df97946b26c01c26f043ecaf3
parent0e360744f36c5fa8a74f3f9e1e539ec9d43e27ee (diff)
downloadllvm-552ef9fc094f7c0b0d7bf7a9b4d5da1319a2a67a.zip
llvm-552ef9fc094f7c0b0d7bf7a9b4d5da1319a2a67a.tar.gz
llvm-552ef9fc094f7c0b0d7bf7a9b4d5da1319a2a67a.tar.bz2
[mlir][DialectConversion] Add overload of addDynamicallyLegalDialect to support lambdas
This allows for passing a lambda to addDynamicallyLegalDialect without needing to explicit wrap with Optional<DynamicLegalityCallbackFn>. Differential Revision: https://reviews.llvm.org/D81680
-rw-r--r--mlir/include/mlir/Transforms/DialectConversion.h6
-rw-r--r--mlir/lib/Dialect/SPIRV/SPIRVLowering.cpp7
-rw-r--r--mlir/test/lib/Transforms/TestBufferPlacement.cpp4
3 files changed, 10 insertions, 7 deletions
diff --git a/mlir/include/mlir/Transforms/DialectConversion.h b/mlir/include/mlir/Transforms/DialectConversion.h
index f9d6671a..3e7d503 100644
--- a/mlir/include/mlir/Transforms/DialectConversion.h
+++ b/mlir/include/mlir/Transforms/DialectConversion.h
@@ -607,6 +607,12 @@ public:
if (callback)
setLegalityCallback(dialectNames, *callback);
}
+ template <typename... Args>
+ void addDynamicallyLegalDialect(DynamicLegalityCallbackFn callback) {
+ SmallVector<StringRef, 2> dialectNames({Args::getDialectNamespace()...});
+ setDialectAction(dialectNames, LegalizationAction::Dynamic);
+ setLegalityCallback(dialectNames, callback);
+ }
/// Register unknown operations as dynamically legal. For operations(and
/// dialects) that do not have a set legalization action, treat them as
diff --git a/mlir/lib/Dialect/SPIRV/SPIRVLowering.cpp b/mlir/lib/Dialect/SPIRV/SPIRVLowering.cpp
index 490e670..7df2be9 100644
--- a/mlir/lib/Dialect/SPIRV/SPIRVLowering.cpp
+++ b/mlir/lib/Dialect/SPIRV/SPIRVLowering.cpp
@@ -657,10 +657,9 @@ spirv::SPIRVConversionTarget::get(spirv::TargetEnvAttr targetAttr) {
new SPIRVConversionTarget(targetAttr));
SPIRVConversionTarget *targetPtr = target.get();
target->addDynamicallyLegalDialect<SPIRVDialect>(
- Optional<ConversionTarget::DynamicLegalityCallbackFn>(
- // We need to capture the raw pointer here because it is stable:
- // target will be destroyed once this function is returned.
- [targetPtr](Operation *op) { return targetPtr->isLegalOp(op); }));
+ // We need to capture the raw pointer here because it is stable:
+ // target will be destroyed once this function is returned.
+ [targetPtr](Operation *op) { return targetPtr->isLegalOp(op); });
return target;
}
diff --git a/mlir/test/lib/Transforms/TestBufferPlacement.cpp b/mlir/test/lib/Transforms/TestBufferPlacement.cpp
index cbccb7d..0976f71 100644
--- a/mlir/test/lib/Transforms/TestBufferPlacement.cpp
+++ b/mlir/test/lib/Transforms/TestBufferPlacement.cpp
@@ -127,9 +127,7 @@ struct TestBufferPlacementPreparationPass
auto isLegalOperation = [&](Operation *op) {
return converter.isLegal(op);
};
- target.addDynamicallyLegalDialect<linalg::LinalgDialect>(
- Optional<ConversionTarget::DynamicLegalityCallbackFn>(
- isLegalOperation));
+ target.addDynamicallyLegalDialect<linalg::LinalgDialect>(isLegalOperation);
// Mark Standard Return operations illegal as long as one operand is tensor.
target.addDynamicallyLegalOp<mlir::ReturnOp>([&](mlir::ReturnOp returnOp) {