68 lines · plain
1// RUN: mlir-opt -allow-unregistered-dialect %s -test-inline | FileCheck %s2 3// CHECK-LABEL: func @inline_with_arg4func.func @inline_with_arg(%arg0 : i32) -> i32 {5 // CHECK-NEXT: %[[ADD:.*]] = arith.addi %{{.*}}, %{{.*}} : i326 // CHECK-NEXT: return %[[ADD]] : i327 %fn = "test.functional_region_op"() ({8 ^bb0(%a : i32):9 %b = arith.addi %a, %a : i3210 "test.return"(%b) : (i32) -> ()11 }) : () -> ((i32) -> i32)12 13 %0 = call_indirect %fn(%arg0) : (i32) -> i3214 return %0 : i3215}16 17// CHECK-LABEL: func @no_inline_invalid_nested_operation18func.func @no_inline_invalid_nested_operation() {19 // CHECK: call_indirect20 21 // test.region is analyzed recursively, so it must not have an invalid op.22 23 %fn = "test.functional_region_op"() ({24 "test.region"() ({25 "foo.noinline_operation"() : () -> ()26 }) : () -> ()27 "test.return"() : () -> ()28 }) : () -> (() -> ())29 30 call_indirect %fn() : () -> ()31 return32}33 34// CHECK-LABEL: func @inline_ignore_invalid_nested_operation35func.func @inline_ignore_invalid_nested_operation() {36 // CHECK-NOT: call_indirect37 38 // test.functional_region_op is not analyzed recursively, so it may have an39 // invalid op.40 41 %fn = "test.functional_region_op"() ({42 %internal_fn = "test.functional_region_op"() ({43 "foo.noinline_operation"() : () -> ()44 }) : () -> (() -> ())45 "test.return"() : () -> ()46 }) : () -> (() -> ())47 48 call_indirect %fn() : () -> ()49 return50}51 52// CHECK-LABEL: func @no_inline_invalid_dest_region53func.func @no_inline_invalid_dest_region() {54 // CHECK: call_indirect55 56 // foo.unknown_region is unknown, so we can't inline into it.57 58 "foo.unknown_region"() ({59 %fn = "test.functional_region_op"() ({60 "test.return"() : () -> ()61 }) : () -> (() -> ())62 call_indirect %fn() : () -> ()63 "test.return"() : () -> ()64 }) : () -> ()65 66 return67}68