| // RUN: mlir-opt -allow-unregistered-dialect %s -split-input-file -mlir-print-debuginfo -mlir-print-local-scope | FileCheck %s |
| |
| // CHECK: module { |
| module { |
| } |
| |
| // CHECK: module { |
| // CHECK-NEXT: } |
| module { |
| "module_terminator"() : () -> () |
| } |
| |
| // CHECK: module attributes {foo.attr = true} { |
| module attributes {foo.attr = true} { |
| } |
| |
| // CHECK: module { |
| module { |
| // CHECK-NEXT: "foo.result_op"() : () -> i32 |
| %result = "foo.result_op"() : () -> i32 |
| } |
| |
| // ----- |
| |
| // Check that a top-level module is always created, with location info. |
| // CHECK: module { |
| // CHECK-NEXT: } loc({{.*}}module-op.mlir{{.*}}) |
| |
| // ----- |
| |
| // Check that the top-level module can be defined via a single module operation. |
| // CHECK: module { |
| // CHECK-NOT: module { |
| module { |
| } |
| |
| // ----- |
| |
| // Check that the implicit top-level module is also a name scope for SSA |
| // values. This should not crash. |
| // CHECK: module { |
| // CHECK: %{{.*}} = "op" |
| // CHECK: } |
| %0 = "op"() : () -> i32 |
| |
| // ----- |
| |
| // CHECK-LABEL: module @foo |
| // CHECK-NOT: attributes |
| module @foo { |
| // CHECK: module |
| module { |
| // CHECK: module @bar attributes |
| module @bar attributes {foo.bar} { |
| } |
| } |
| } |