mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-14 03:29:57 +00:00
973ddb7d6e
In particular for Graph Regions, the terminator needs is just a historical artifact of the generalization of MLIR from CFG region. Operations like Module don't need a terminator, and before Module migrated to be an operation with region there wasn't any needed. To validate the feature, the ModuleOp is migrated to use this trait and the ModuleTerminator operation is deleted. This patch is likely to break clients, if you're in this case: - you may iterate on a ModuleOp with `getBody()->without_terminator()`, the solution is simple: just remove the ->without_terminator! - you created a builder with `Builder::atBlockTerminator(module_body)`, just use `Builder::atBlockEnd(module_body)` instead. - you were handling ModuleTerminator: it isn't needed anymore. - for generic code, a `Block::mayNotHaveTerminator()` may be used. Differential Revision: https://reviews.llvm.org/D98468
65 lines
1.4 KiB
MLIR
65 lines
1.4 KiB
MLIR
// RUN: mlir-opt -allow-unregistered-dialect %s -split-input-file -mlir-print-debuginfo -mlir-print-local-scope | FileCheck %s
|
|
|
|
// CHECK: module {
|
|
module {
|
|
}
|
|
|
|
// -----
|
|
|
|
// 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} {
|
|
}
|
|
}
|
|
}
|
|
|
|
// -----
|
|
|
|
// expected-error@below {{expects at most one data layout attribute}}
|
|
// expected-note@below {{'test.another_attribute' is a data layout attribute}}
|
|
// expected-note@below {{'test.random_attribute' is a data layout attribute}}
|
|
module attributes { test.random_attribute = #dlti.dl_spec<>,
|
|
test.another_attribute = #dlti.dl_spec<>} {
|
|
}
|