// 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 }