[mlir][py] Enable loading only specified dialects during creation. (#121421)
[llvm-project.git] / mlir / test / IR / region.mlir
blob0b959915d6bbbe8087873582fc24652faa07a4f6
1 // RUN: mlir-opt -allow-unregistered-dialect %s -split-input-file -verify-diagnostics | FileCheck %s
3 //===----------------------------------------------------------------------===//
4 // Test the number of regions
5 //===----------------------------------------------------------------------===//
7 func.func @correct_number_of_regions() {
8     // CHECK: test.two_region_op
9     "test.two_region_op"()(
10       {"work"() : () -> ()},
11       {"work"() : () -> ()}
12     ) : () -> ()
13     return
16 // -----
18 func.func @missing_regions() {
19     // expected-error@+1 {{expected 2 regions}}
20     "test.two_region_op"()(
21       {"work"() : () -> ()}
22     ) : () -> ()
23     return
26 // -----
28 func.func @extra_regions() {
29     // expected-error@+1 {{expected 2 regions}}
30     "test.two_region_op"()(
31       {"work"() : () -> ()},
32       {"work"() : () -> ()},
33       {"work"() : () -> ()}
34     ) : () -> ()
35     return
38 // -----
40 //===----------------------------------------------------------------------===//
41 // Test SizedRegion
42 //===----------------------------------------------------------------------===//
44 func.func @unnamed_region_has_wrong_number_of_blocks() {
45     // expected-error@+1 {{region #1 failed to verify constraint: region with 1 blocks}}
46     "test.sized_region_op"() (
47     {
48         "work"() : () -> ()
49         cf.br ^next1
50       ^next1:
51         "work"() : () -> ()
52     },
53     {
54         "work"() : () -> ()
55         cf.br ^next2
56       ^next2:
57         "work"() : () -> ()
58     }) : () -> ()
59     return
62 // -----
64 // Test region name in error message
65 func.func @named_region_has_wrong_number_of_blocks() {
66     // expected-error@+1 {{region #0 ('my_region') failed to verify constraint: region with 2 blocks}}
67     "test.sized_region_op"() (
68     {
69         "work"() : () -> ()
70     },
71     {
72         "work"() : () -> ()
73     }) : () -> ()
74     return
77 // -----
79 // Region with single block and not terminator.
80 // CHECK: unregistered_without_terminator
81 "test.unregistered_without_terminator"() ({
82   ^bb0:
83 }) : () -> ()
85 // -----
87 // CHECK: test.single_no_terminator_op
88 "test.single_no_terminator_op"() (
89   {
90     %foo = arith.constant 1 : i32
91   }
92 ) : () -> ()
94 // CHECK: test.variadic_no_terminator_op
95 "test.variadic_no_terminator_op"() (
96   {
97     %foo = arith.constant 1 : i32
98   },
99   {
100     %bar = arith.constant 1 : i32
101   }
102 ) : () -> ()
104 // CHECK: test.single_no_terminator_custom_asm_op
105 // CHECK-NEXT: important_dont_drop
106 test.single_no_terminator_custom_asm_op {
107   "important_dont_drop"() : () -> ()