Skip to content

Commit 55693e8

Browse files
committed
add test that uses the new region op
1 parent 242873d commit 55693e8

File tree

4 files changed

+48
-7
lines changed

4 files changed

+48
-7
lines changed

mlir/test/lib/Dialect/TestIRDLToCpp/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ add_mlir_library(MLIRTestIRDLToCppDialect
1212
mlir_target_link_libraries(MLIRTestIRDLToCppDialect PUBLIC
1313
MLIRIR
1414
MLIRPass
15+
MLIRSCFDialect
1516
MLIRTransforms
1617
)

mlir/test/lib/Dialect/TestIRDLToCpp/TestIRDLToCppDialect.cpp

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// #include "mlir/IR/Dialect.h"
1414
#include "mlir/IR/Region.h"
1515

16+
#include "mlir/Dialect/SCF/IR/SCF.h"
1617
#include "mlir/IR/BuiltinTypes.h"
1718
#include "mlir/IR/DialectImplementation.h"
1819
#include "mlir/Interfaces/InferTypeOpInterface.h"
@@ -54,16 +55,34 @@ struct TestOpConversion : public OpConversionPattern<test_irdl_to_cpp::BeefOp> {
5455
}
5556
};
5657

58+
struct TestRegionConversion
59+
: public OpConversionPattern<test_irdl_to_cpp::ConditionalOp> {
60+
using OpConversionPattern::OpConversionPattern;
61+
62+
LogicalResult
63+
matchAndRewrite(mlir::test_irdl_to_cpp::ConditionalOp op, OpAdaptor adaptor,
64+
ConversionPatternRewriter &rewriter) const override {
65+
// Just exercising the C++ API even though these are not enforced in the
66+
// dialect definition
67+
assert(op.getThen().getBlocks().size() == 1);
68+
assert(adaptor.getElse().getBlocks().size() == 1);
69+
auto ifOp = scf::IfOp::create(rewriter, op.getLoc(), op.getInput());
70+
rewriter.replaceOp(op, ifOp);
71+
return success();
72+
}
73+
};
74+
5775
struct ConvertTestDialectToSomethingPass
5876
: PassWrapper<ConvertTestDialectToSomethingPass, OperationPass<ModuleOp>> {
5977
void runOnOperation() override {
6078
MLIRContext *ctx = &getContext();
6179
RewritePatternSet patterns(ctx);
62-
patterns.add<TestOpConversion>(ctx);
80+
patterns.add<TestOpConversion, TestRegionConversion>(ctx);
6381
ConversionTarget target(getContext());
64-
target.addIllegalOp<test_irdl_to_cpp::BeefOp>();
65-
target.addLegalOp<test_irdl_to_cpp::BarOp>();
66-
target.addLegalOp<test_irdl_to_cpp::HashOp>();
82+
target.addIllegalOp<test_irdl_to_cpp::BeefOp,
83+
test_irdl_to_cpp::ConditionalOp>();
84+
target.addLegalOp<test_irdl_to_cpp::BarOp, test_irdl_to_cpp::HashOp,
85+
scf::IfOp, scf::YieldOp>();
6786
if (failed(applyPartialConversion(getOperation(), target,
6887
std::move(patterns))))
6988
signalPassFailure();
@@ -73,6 +92,10 @@ struct ConvertTestDialectToSomethingPass
7392
StringRef getDescription() const final {
7493
return "Checks the convertability of an irdl dialect";
7594
}
95+
96+
void getDependentDialects(DialectRegistry &registry) const override {
97+
registry.insert<scf::SCFDialect>();
98+
}
7699
};
77100

78101
void registerIrdlTestDialect(mlir::DialectRegistry &registry) {

mlir/test/lib/Dialect/TestIRDLToCpp/test_conversion.testd.mlir

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,29 @@
1-
// RUN: mlir-opt %s --pass-pipeline="builtin.module(test-irdl-conversion-check)" | FileCheck %s
1+
// RUN: mlir-opt %s --allow-unregistered-dialect --pass-pipeline="builtin.module(test-irdl-conversion-check)" | FileCheck %s
22
// CHECK-LABEL: module {
33
module {
4-
// CHECK: func.func @test() {
4+
// CHECK: func.func @test(%[[test_arg:[^ ]*]]: i1) {
55
// CHECK: %[[v0:[^ ]*]] = "test_irdl_to_cpp.bar"() : () -> i32
66
// CHECK: %[[v1:[^ ]*]] = "test_irdl_to_cpp.bar"() : () -> i32
77
// CHECK: %[[v2:[^ ]*]] = "test_irdl_to_cpp.hash"(%[[v0]], %[[v0]]) : (i32, i32) -> i32
8+
// CHECK: scf.if %[[test_arg]]
89
// CHECK: return
910
// CHECK: }
10-
func.func @test() {
11+
func.func @test(%test_arg: i1) {
1112
%0 = "test_irdl_to_cpp.bar"() : () -> i32
1213
%1 = "test_irdl_to_cpp.beef"(%0, %0) : (i32, i32) -> i32
14+
"test_irdl_to_cpp.conditional"(%test_arg) ({
15+
^cond(%test: i1):
16+
%3 = "test_irdl_to_cpp.bar"() : () -> i32
17+
"fake.terminator"() : () -> ()
18+
}, {
19+
^then(%what: i1, %ever: i32):
20+
%4 = "test_irdl_to_cpp.bar"() : () -> i32
21+
"fake.terminator"() : () -> ()
22+
}, {
23+
^else():
24+
%5 = "test_irdl_to_cpp.bar"() : () -> i32
25+
"fake.terminator"() : () -> ()
26+
}) : (i1) -> ()
1327
return
1428
}
1529

mlir/test/lib/Dialect/TestIRDLToCpp/test_irdl_to_cpp.irdl.mlir

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,5 +77,8 @@ irdl.dialect @test_irdl_to_cpp {
7777
%v0 = irdl.any
7878
%r2 = irdl.region(%v0) // Region with one i1 entry block argument
7979
irdl.regions(cond: %r2, then: %r0, else: %r1)
80+
81+
%0 = irdl.any
82+
irdl.operands(input: %0)
8083
}
8184
}

0 commit comments

Comments
 (0)