diff --git a/mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp b/mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp index fb179e64d8e7b..47c99642b9c37 100644 --- a/mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/BufferizableOpInterfaceImpl.cpp @@ -188,8 +188,8 @@ struct ExecuteRegionOpInterface TypeRange newResultTypes(yieldOp.getResults()); // Create new op and move over region. - auto newOp = - scf::ExecuteRegionOp::create(rewriter, op->getLoc(), newResultTypes); + auto newOp = scf::ExecuteRegionOp::create( + rewriter, op->getLoc(), newResultTypes, executeRegionOp.getNoInline()); newOp.getRegion().takeBody(executeRegionOp.getRegion()); // Bufferize every block. diff --git a/mlir/test/Dialect/Bufferization/Transforms/one-shot-module-bufferize.mlir b/mlir/test/Dialect/Bufferization/Transforms/one-shot-module-bufferize.mlir index eb0093106dc11..6054a61912532 100644 --- a/mlir/test/Dialect/Bufferization/Transforms/one-shot-module-bufferize.mlir +++ b/mlir/test/Dialect/Bufferization/Transforms/one-shot-module-bufferize.mlir @@ -380,6 +380,20 @@ func.func @execute_region_test(%t1 : tensor) // ----- +// CHECK-LABEL: func @no_inline_execute_region_not_canonicalized +func.func @no_inline_execute_region_not_canonicalized() { + %c = arith.constant 42 : i32 + // CHECK: scf.execute_region + // CHECK-SAME: no_inline + %v = scf.execute_region -> i32 no_inline { + scf.yield %c : i32 + } + // CHECK: return + return +} + +// ----- + // CHECK: func private @some_external_func(memref>) func.func private @some_external_func(tensor)