MLIR  19.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 
17 using namespace mlir;
18 
19 namespace {
20 /// Implementation of the TransformHandleTypeInterface for the PDL
21 /// OperationType. Accepts any payload operation.
22 struct PDLOperationTypeTransformHandleTypeInterfaceImpl
23  : public transform::TransformHandleTypeInterface::ExternalModel<
24  PDLOperationTypeTransformHandleTypeInterfaceImpl,
25  pdl::OperationType> {
26 
27  /// Accept any operation.
29  checkPayload(Type type, Location loc, ArrayRef<Operation *> payload) const {
31  }
32 };
33 } // namespace
34 
35 namespace {
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.
39 class PDLExtension : public transform::TransformDialectExtension<PDLExtension> {
40 public:
41  void init() {
42  registerTransformOps<
43 #define GET_OP_LIST
44 #include "mlir/Dialect/Transform/PDLExtension/PDLExtensionOps.cpp.inc"
45  >();
46 
47  addDialectDataInitializer<transform::PDLMatchHooks>(
48  [](transform::PDLMatchHooks &) {});
49 
50  // Declare PDL as dependent so we can attach an interface to its type in the
51  // later step.
52  declareDependentDialect<pdl::PDLDialect>();
53 
54  // PDLInterp is only relevant if we actually apply the transform IR so
55  // declare it as generated.
56  declareGeneratedDialect<pdl_interp::PDLInterpDialect>();
57 
58  // Make PDL OperationType usable as a transform dialect type.
59  addCustomInitializationStep([](MLIRContext *context) {
60  pdl::OperationType::attachInterface<
61  PDLOperationTypeTransformHandleTypeInterfaceImpl>(*context);
62  });
63  }
64 };
65 } // namespace
66 
68  dialectRegistry.addExtensions<PDLExtension>();
69 }
The result of a transform IR operation application.
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.
This class defines the main interface for locations in MLIR and acts as a non-nullable wrapper around...
Definition: Location.h:63
MLIRContext is the top-level object for a collection of MLIR operations.
Definition: MLIRContext.h:60
Instances of the Type class are uniqued, have an immutable identifier and an optional mutable compone...
Definition: Types.h:74
PDL constraint callbacks that can be used by the PDL extension of the Transform dialect.
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.