| // RUN: mlir-opt -allow-unregistered-dialect %s -test-inline-callback | FileCheck %s | |
| // Test inlining with multiple blocks and scf.execute_region transformation | |
| // CHECK-LABEL: func @test_inline_multiple_blocks | |
| func.func @test_inline_multiple_blocks(%arg0: i32) -> i32 { | |
| // CHECK: %[[RES:.*]] = scf.execute_region -> i32 | |
| // CHECK-NEXT: %[[ADD1:.*]] = arith.addi %arg0, %arg0 | |
| // CHECK-NEXT: cf.br ^bb1(%[[ADD1]] : i32) | |
| // CHECK: ^bb1(%[[ARG:.*]]: i32): | |
| // CHECK-NEXT: %[[ADD2:.*]] = arith.addi %[[ARG]], %[[ARG]] | |
| // CHECK-NEXT: scf.yield %[[ADD2]] | |
| // CHECK: return %[[RES]] | |
| %fn = "test.functional_region_op"() ({ | |
| ^bb0(%a : i32): | |
| %b = arith.addi %a, %a : i32 | |
| cf.br ^bb1(%b: i32) | |
| ^bb1(%c: i32): | |
| %d = arith.addi %c, %c : i32 | |
| "test.return"(%d) : (i32) -> () | |
| }) : () -> ((i32) -> i32) | |
| %0 = call_indirect %fn(%arg0) : (i32) -> i32 | |
| return %0 : i32 | |
| } |