diff options
author | River Riddle <riddleriver@gmail.com> | 2020-06-15 15:30:21 -0700 |
---|---|---|
committer | River Riddle <riddleriver@gmail.com> | 2020-06-15 15:57:44 -0700 |
commit | 552ef9fc094f7c0b0d7bf7a9b4d5da1319a2a67a (patch) | |
tree | 30f1e4eb93fcc59df97946b26c01c26f043ecaf3 | |
parent | 0e360744f36c5fa8a74f3f9e1e539ec9d43e27ee (diff) | |
download | llvm-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.h | 6 | ||||
-rw-r--r-- | mlir/lib/Dialect/SPIRV/SPIRVLowering.cpp | 7 | ||||
-rw-r--r-- | mlir/test/lib/Transforms/TestBufferPlacement.cpp | 4 |
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) { |