blob: 84fd7a7e87b3e510774db4f28430039338910798 [file] [log] [blame]
// RUN: mlir-opt %s \
// RUN: -test-print-number-of-block-executions \
// RUN: -split-input-file 2>&1 \
// RUN: | FileCheck %s --dump-input=always
// CHECK-LABEL: Number of executions: empty
func @empty() {
// CHECK: Block: 0
// CHECK-NEXT: Number of executions: 1
return
}
// -----
// CHECK-LABEL: Number of executions: sequential
func @sequential() {
// CHECK: Block: 0
// CHECK-NEXT: Number of executions: 1
br ^bb1
^bb1:
// CHECK: Block: 1
// CHECK-NEXT: Number of executions: 1
br ^bb2
^bb2:
// CHECK: Block: 2
// CHECK-NEXT: Number of executions: 1
return
}
// -----
// CHECK-LABEL: Number of executions: conditional
func @conditional(%cond : i1) {
// CHECK: Block: 0
// CHECK-NEXT: Number of executions: 1
br ^bb1
^bb1:
// CHECK: Block: 1
// CHECK-NEXT: Number of executions: 1
cond_br %cond, ^bb2, ^bb3
^bb2:
// CHECK: Block: 2
// CHECK-NEXT: Number of executions: <unknown>
br ^bb4
^bb3:
// CHECK: Block: 3
// CHECK-NEXT: Number of executions: <unknown>
br ^bb4
^bb4:
// CHECK: Block: 4
// CHECK-NEXT: Number of executions: <unknown>
return
}
// -----
// CHECK-LABEL: Number of executions: loop
func @loop(%cond : i1) {
// CHECK: Block: 0
// CHECK-NEXT: Number of executions: 1
br ^bb1
^bb1:
// CHECK: Block: 1
// CHECK-NEXT: Number of executions: <unknown>
br ^bb2
^bb2:
// CHECK: Block: 2
// CHECK-NEXT: Number of executions: <unknown>
br ^bb3
^bb3:
// CHECK: Block: 3
// CHECK-NEXT: Number of executions: <unknown>
cond_br %cond, ^bb1, ^bb4
^bb4:
// CHECK: Block: 4
// CHECK-NEXT: Number of executions: <unknown>
return
}
// -----
// CHECK-LABEL: Number of executions: scf_if_dynamic_branch
func @scf_if_dynamic_branch(%cond : i1) {
// CHECK: Block: 0
// CHECK-NEXT: Number of executions: 1
scf.if %cond {
// CHECK: Block: 1
// CHECK-NEXT: Number of executions: <unknown>
} else {
// CHECK: Block: 2
// CHECK-NEXT: Number of executions: <unknown>
}
return
}
// -----
// CHECK-LABEL: Number of executions: async_execute
func @async_execute() {
// CHECK: Block: 0
// CHECK-NEXT: Number of executions: 1
async.execute {
// CHECK: Block: 1
// CHECK-NEXT: Number of executions: 1
async.yield
}
return
}
// -----
// CHECK-LABEL: Number of executions: async_execute_with_scf_if
func @async_execute_with_scf_if(%cond : i1) {
// CHECK: Block: 0
// CHECK-NEXT: Number of executions: 1
async.execute {
// CHECK: Block: 1
// CHECK-NEXT: Number of executions: 1
scf.if %cond {
// CHECK: Block: 2
// CHECK-NEXT: Number of executions: <unknown>
} else {
// CHECK: Block: 3
// CHECK-NEXT: Number of executions: <unknown>
}
async.yield
}
return
}
// -----
// CHECK-LABEL: Number of executions: scf_for_constant_bounds
func @scf_for_constant_bounds() {
// CHECK: Block: 0
// CHECK-NEXT: Number of executions: 1
%c0 = arith.constant 0 : index
%c1 = arith.constant 1 : index
%c2 = arith.constant 2 : index
scf.for %i = %c0 to %c2 step %c1 {
// CHECK: Block: 1
// CHECK-NEXT: Number of executions: 2
}
return
}
// -----
// CHECK-LABEL: Number of executions: propagate_parent_num_executions
func @propagate_parent_num_executions() {
// CHECK: Block: 0
// CHECK-NEXT: Number of executions: 1
%c0 = arith.constant 0 : index
%c1 = arith.constant 1 : index
%c2 = arith.constant 2 : index
scf.for %i = %c0 to %c2 step %c1 {
// CHECK: Block: 1
// CHECK-NEXT: Number of executions: 2
async.execute {
// CHECK: Block: 2
// CHECK-NEXT: Number of executions: 2
async.yield
}
}
return
}
// -----
// CHECK-LABEL: Number of executions: clear_num_executions
func @clear_num_executions(%step : index) {
// CHECK: Block: 0
// CHECK-NEXT: Number of executions: 1
%c0 = arith.constant 0 : index
%c2 = arith.constant 2 : index
scf.for %i = %c0 to %c2 step %step {
// CHECK: Block: 1
// CHECK-NEXT: Number of executions: <unknown>
async.execute {
// CHECK: Block: 2
// CHECK-NEXT: Number of executions: <unknown>
async.yield
}
}
return
}