1597fde54SRiver Riddle //===- TestPDLByteCode.cpp - Test PDLL functionality ----------------------===//
2597fde54SRiver Riddle //
3597fde54SRiver Riddle // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4597fde54SRiver Riddle // See https://llvm.org/LICENSE.txt for license information.
5597fde54SRiver Riddle // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6597fde54SRiver Riddle //
7597fde54SRiver Riddle //===----------------------------------------------------------------------===//
8597fde54SRiver Riddle 
9597fde54SRiver Riddle #include "mlir/Dialect/PDL/IR/PDL.h"
10597fde54SRiver Riddle #include "mlir/Dialect/PDLInterp/IR/PDLInterp.h"
11597fde54SRiver Riddle #include "mlir/Parser/Parser.h"
12597fde54SRiver Riddle #include "mlir/Pass/Pass.h"
13597fde54SRiver Riddle #include "mlir/Pass/PassManager.h"
14597fde54SRiver Riddle #include "mlir/Transforms/GreedyPatternRewriteDriver.h"
15597fde54SRiver Riddle 
16597fde54SRiver Riddle using namespace mlir;
17597fde54SRiver Riddle 
18597fde54SRiver Riddle #include "TestPDLLPatterns.h.inc"
19597fde54SRiver Riddle 
20597fde54SRiver Riddle namespace {
21597fde54SRiver Riddle struct TestPDLLPass : public PassWrapper<TestPDLLPass, OperationPass<>> {
MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID__anon1273ab6f0111::TestPDLLPass22597fde54SRiver Riddle   MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestPDLLPass)
23597fde54SRiver Riddle 
24597fde54SRiver Riddle   StringRef getArgument() const final { return "test-pdll-pass"; }
getDescription__anon1273ab6f0111::TestPDLLPass25597fde54SRiver Riddle   StringRef getDescription() const final { return "Test PDLL functionality"; }
getDependentDialects__anon1273ab6f0111::TestPDLLPass26597fde54SRiver Riddle   void getDependentDialects(DialectRegistry &registry) const override {
27597fde54SRiver Riddle     registry.insert<pdl::PDLDialect, pdl_interp::PDLInterpDialect>();
28597fde54SRiver Riddle   }
initialize__anon1273ab6f0111::TestPDLLPass29597fde54SRiver Riddle   LogicalResult initialize(MLIRContext *ctx) override {
30597fde54SRiver Riddle     // Build the pattern set within the `initialize` to avoid recompiling PDL
31597fde54SRiver Riddle     // patterns during each `runOnOperation` invocation.
32*29794ab0SJacques Pienaar     RewritePatternSet patternList(ctx);
33597fde54SRiver Riddle     populateGeneratedPDLLPatterns(patternList);
34597fde54SRiver Riddle     patterns = std::move(patternList);
35597fde54SRiver Riddle     return success();
36597fde54SRiver Riddle   }
37597fde54SRiver Riddle 
runOnOperation__anon1273ab6f0111::TestPDLLPass38597fde54SRiver Riddle   void runOnOperation() final {
39597fde54SRiver Riddle     // Invoke the pattern driver with the provided patterns.
40597fde54SRiver Riddle     (void)applyPatternsAndFoldGreedily(getOperation(), patterns);
41597fde54SRiver Riddle   }
42597fde54SRiver Riddle 
43597fde54SRiver Riddle   FrozenRewritePatternSet patterns;
44597fde54SRiver Riddle };
45597fde54SRiver Riddle } // namespace
46597fde54SRiver Riddle 
47597fde54SRiver Riddle namespace mlir {
48597fde54SRiver Riddle namespace test {
registerTestPDLLPasses()49597fde54SRiver Riddle void registerTestPDLLPasses() { PassRegistration<TestPDLLPass>(); }
50597fde54SRiver Riddle } // namespace test
51597fde54SRiver Riddle } // namespace mlir
52