MLIR 22.0.0git
PDLExtension.cpp
Go to the documentation of this file.
1//===- PDLExtension.cpp - PDL extension for the Transform dialect ---------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
16
17using namespace mlir;
18
19namespace {
20/// Implementation of the TransformHandleTypeInterface for the PDL
21/// OperationType. Accepts any payload operation.
22struct PDLOperationTypeTransformHandleTypeInterfaceImpl
23 : public transform::TransformHandleTypeInterface::ExternalModel<
24 PDLOperationTypeTransformHandleTypeInterfaceImpl,
25 pdl::OperationType> {
26
27 /// Accept any operation.
28 DiagnosedSilenceableFailure
29 checkPayload(Type type, Location loc, ArrayRef<Operation *> payload) const {
31 }
32};
33} // namespace
34
35namespace {
36/// PDL extension of the Transform dialect. This provides transform operations
37/// that connect to PDL matching as well as interfaces for PDL types to be used
38/// with Transform dialect operations.
39class PDLExtension : public transform::TransformDialectExtension<PDLExtension> {
40public:
42
43 void init() {
44 registerTransformOps<
45#define GET_OP_LIST
46#include "mlir/Dialect/Transform/PDLExtension/PDLExtensionOps.cpp.inc"
47 >();
48
49 addDialectDataInitializer<transform::PDLMatchHooks>(
50 [](transform::PDLMatchHooks &) {});
51
52 // Declare PDL as dependent so we can attach an interface to its type in the
53 // later step.
54 declareDependentDialect<pdl::PDLDialect>();
55
56 // PDLInterp is only relevant if we actually apply the transform IR so
57 // declare it as generated.
58 declareGeneratedDialect<pdl_interp::PDLInterpDialect>();
59
60 // Make PDL OperationType usable as a transform dialect type.
61 addCustomInitializationStep([](MLIRContext *context) {
62 pdl::OperationType::attachInterface<
63 PDLOperationTypeTransformHandleTypeInterfaceImpl>(*context);
64 });
65 }
66};
67} // namespace
68
70 dialectRegistry.addExtensions<PDLExtension>();
71}
#define MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(CLASS_NAME)
Definition TypeID.h:331
static DiagnosedSilenceableFailure success()
Constructs a DiagnosedSilenceableFailure in the success state.
The DialectRegistry maps a dialect namespace to a constructor for the matching dialect.
void addExtensions()
Add the given extensions to the registry.
Base class for extensions of the Transform dialect that supports injecting operations into the Transf...
void registerPDLExtension(DialectRegistry &dialectRegistry)
Registers the PDL extension of the Transform dialect in the given registry.
Include the generated interface declarations.