forked from OSchip/llvm-project
45 lines
1.4 KiB
MLIR
45 lines
1.4 KiB
MLIR
// Invoke the test control-flow sink pass to test the utilities.
|
|
// RUN: mlir-opt -test-control-flow-sink %s | FileCheck %s
|
|
|
|
// CHECK-LABEL: func @test_sink
|
|
func.func @test_sink() {
|
|
%0 = "test.sink_me"() : () -> i32
|
|
// CHECK-NEXT: test.sink_target
|
|
"test.sink_target"() ({
|
|
// CHECK-NEXT: %[[V0:.*]] = "test.sink_me"() {was_sunk = 0 : i32}
|
|
// CHECK-NEXT: "test.use"(%[[V0]])
|
|
"test.use"(%0) : (i32) -> ()
|
|
}) : () -> ()
|
|
return
|
|
}
|
|
|
|
// CHECK-LABEL: func @test_sink_first_region_only
|
|
func.func @test_sink_first_region_only() {
|
|
%0 = "test.sink_me"() {first} : () -> i32
|
|
// CHECK-NEXT: %[[V1:.*]] = "test.sink_me"() {second}
|
|
%1 = "test.sink_me"() {second} : () -> i32
|
|
// CHECK-NEXT: test.sink_target
|
|
"test.sink_target"() ({
|
|
// CHECK-NEXT: %[[V0:.*]] = "test.sink_me"() {first, was_sunk = 0 : i32}
|
|
// CHECK-NEXT: "test.use"(%[[V0]])
|
|
"test.use"(%0) : (i32) -> ()
|
|
}, {
|
|
"test.use"(%1) : (i32) -> ()
|
|
}) : () -> ()
|
|
return
|
|
}
|
|
|
|
// CHECK-LABEL: func @test_sink_targeted_op_only
|
|
func.func @test_sink_targeted_op_only() {
|
|
%0 = "test.sink_me"() : () -> i32
|
|
// CHECK-NEXT: %[[V1:.*]] = "test.dont_sink_me"
|
|
%1 = "test.dont_sink_me"() : () -> i32
|
|
// CHECK-NEXT: test.sink_target
|
|
"test.sink_target"() ({
|
|
// CHECK-NEXT: %[[V0:.*]] = "test.sink_me"
|
|
// CHECK-NEXT: "test.use"(%[[V0]], %[[V1]])
|
|
"test.use"(%0, %1) : (i32, i32) -> ()
|
|
}) : () -> ()
|
|
return
|
|
}
|