forked from OSchip/llvm-project
70 lines
1.5 KiB
MLIR
70 lines
1.5 KiB
MLIR
// RUN: mlir-opt %s -inline -mlir-disable-inline-simplify | FileCheck %s
|
|
|
|
// Basic test that functions within affine operations are inlined.
|
|
func @func_with_affine_ops(%N: index) {
|
|
%c = constant 200 : index
|
|
affine.for %i = 1 to 10 {
|
|
affine.if affine_set<(i)[N] : (i - 2 >= 0, 4 - i >= 0)>(%i)[%c] {
|
|
%w = affine.apply affine_map<(d0,d1)[s0] -> (d0+d1+s0)> (%i, %i) [%N]
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// CHECK-LABEL: func @inline_with_affine_ops
|
|
func @inline_with_affine_ops() {
|
|
%c = constant 1 : index
|
|
|
|
// CHECK: affine.for
|
|
// CHECK-NEXT: affine.if
|
|
// CHECK-NEXT: affine.apply
|
|
// CHECK-NOT: call
|
|
call @func_with_affine_ops(%c) : (index) -> ()
|
|
return
|
|
}
|
|
|
|
// CHECK-LABEL: func @not_inline_in_affine_op
|
|
func @not_inline_in_affine_op() {
|
|
%c = constant 1 : index
|
|
|
|
// CHECK-NOT: affine.if
|
|
// CHECK: call
|
|
affine.for %i = 1 to 10 {
|
|
call @func_with_affine_ops(%c) : (index) -> ()
|
|
}
|
|
return
|
|
}
|
|
|
|
// -----
|
|
|
|
// Test when an invalid operation is nested in an affine op.
|
|
func @func_with_invalid_nested_op() {
|
|
affine.for %i = 1 to 10 {
|
|
"foo.opaque"() : () -> ()
|
|
}
|
|
return
|
|
}
|
|
|
|
// CHECK-LABEL: func @not_inline_invalid_nest_op
|
|
func @not_inline_invalid_nest_op() {
|
|
// CHECK: call @func_with_invalid_nested_op
|
|
call @func_with_invalid_nested_op() : () -> ()
|
|
return
|
|
}
|
|
|
|
// -----
|
|
|
|
// Test that calls are not inlined into affine structures.
|
|
func @func_noop() {
|
|
return
|
|
}
|
|
|
|
// CHECK-LABEL: func @not_inline_into_affine_ops
|
|
func @not_inline_into_affine_ops() {
|
|
// CHECK: call @func_noop
|
|
affine.for %i = 1 to 10 {
|
|
call @func_noop() : () -> ()
|
|
}
|
|
return
|
|
}
|