annotate mlir/unittests/Transforms/Canonicalizer.cpp @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents c4bab56944e8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
236
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
1 //===- DialectConversion.cpp - Dialect conversion unit tests --------------===//
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
2 //
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
6 //
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
8
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
9 #include "mlir/IR/PatternMatch.h"
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
10 #include "mlir/Parser/Parser.h"
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
11 #include "mlir/Pass/PassManager.h"
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
12 #include "mlir/Transforms/GreedyPatternRewriteDriver.h"
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
13 #include "mlir/Transforms/Passes.h"
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
14 #include "gtest/gtest.h"
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
15
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
16 using namespace mlir;
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
17
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
18 namespace {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
19
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
20 struct DisabledPattern : public RewritePattern {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
21 DisabledPattern(MLIRContext *context)
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
22 : RewritePattern("test.foo", /*benefit=*/0, context,
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
23 /*generatedNamed=*/{}) {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
24 setDebugName("DisabledPattern");
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
25 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
26
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
27 LogicalResult matchAndRewrite(Operation *op,
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
28 PatternRewriter &rewriter) const override {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
29 if (op->getNumResults() != 1)
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
30 return failure();
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
31 rewriter.eraseOp(op);
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
32 return success();
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
33 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
34 };
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
35
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
36 struct EnabledPattern : public RewritePattern {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
37 EnabledPattern(MLIRContext *context)
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
38 : RewritePattern("test.foo", /*benefit=*/0, context,
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
39 /*generatedNamed=*/{}) {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
40 setDebugName("EnabledPattern");
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
41 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
42
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
43 LogicalResult matchAndRewrite(Operation *op,
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
44 PatternRewriter &rewriter) const override {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
45 if (op->getNumResults() == 1)
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
46 return failure();
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
47 rewriter.eraseOp(op);
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
48 return success();
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
49 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
50 };
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
51
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
52 struct TestDialect : public Dialect {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
53 MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(TestDialect)
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
54
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
55 static StringRef getDialectNamespace() { return "test"; }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
56
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
57 TestDialect(MLIRContext *context)
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
58 : Dialect(getDialectNamespace(), context, TypeID::get<TestDialect>()) {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
59 allowUnknownOperations();
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
60 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
61
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
62 void getCanonicalizationPatterns(RewritePatternSet &results) const override {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
63 results.add<DisabledPattern, EnabledPattern>(results.getContext());
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
64 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
65 };
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
66
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
67 TEST(CanonicalizerTest, TestDisablePatterns) {
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
68 MLIRContext context;
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
69 context.getOrLoadDialect<TestDialect>();
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
70 PassManager mgr(&context);
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
71 mgr.addPass(
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
72 createCanonicalizerPass(GreedyRewriteConfig(), {"DisabledPattern"}));
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
73
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
74 const char *const code = R"mlir(
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
75 %0:2 = "test.foo"() {sym_name = "A"} : () -> (i32, i32)
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
76 %1 = "test.foo"() {sym_name = "B"} : () -> (f32)
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
77 )mlir";
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
78
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
79 OwningOpRef<ModuleOp> module = parseSourceString<ModuleOp>(code, &context);
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
80 ASSERT_TRUE(succeeded(mgr.run(*module)));
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
81
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
82 EXPECT_TRUE(module->lookupSymbol("B"));
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
83 EXPECT_FALSE(module->lookupSymbol("A"));
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
84 }
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
85
c4bab56944e8 LLVM 16
kono
parents:
diff changeset
86 } // end anonymous namespace