diff --git a/mlir/include/mlir/Transforms/DialectConversion.h b/mlir/include/mlir/Transforms/DialectConversion.h --- a/mlir/include/mlir/Transforms/DialectConversion.h +++ b/mlir/include/mlir/Transforms/DialectConversion.h @@ -607,6 +607,12 @@ if (callback) setLegalityCallback(dialectNames, *callback); } + template + void addDynamicallyLegalDialect(DynamicLegalityCallbackFn callback) { + SmallVector 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 --- a/mlir/lib/Dialect/SPIRV/SPIRVLowering.cpp +++ b/mlir/lib/Dialect/SPIRV/SPIRVLowering.cpp @@ -657,10 +657,9 @@ new SPIRVConversionTarget(targetAttr)); SPIRVConversionTarget *targetPtr = target.get(); target->addDynamicallyLegalDialect( - Optional( - // 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 --- a/mlir/test/lib/Transforms/TestBufferPlacement.cpp +++ b/mlir/test/lib/Transforms/TestBufferPlacement.cpp @@ -127,9 +127,7 @@ auto isLegalOperation = [&](Operation *op) { return converter.isLegal(op); }; - target.addDynamicallyLegalDialect( - Optional( - isLegalOperation)); + target.addDynamicallyLegalDialect(isLegalOperation); // Mark Standard Return operations illegal as long as one operand is tensor. target.addDynamicallyLegalOp([&](mlir::ReturnOp returnOp) {