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 ®istry) 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 Riddlevoid registerTestPDLLPasses() { PassRegistration<TestPDLLPass>(); } 50597fde54SRiver Riddle } // namespace test 51597fde54SRiver Riddle } // namespace mlir 52