[Mlir-commits] [mlir] [OpenACC][NFC] Generalize wrapMultiBlockRegionWithSCFExecuteRegion (PR #187359)
Zhen Wang
llvmlistbot at llvm.org
Thu Mar 19 08:48:55 PDT 2026
https://github.com/wangzpgi updated https://github.com/llvm/llvm-project/pull/187359
>From e29dca0fe390c9ce1b40b300c183c49847edaf79 Mon Sep 17 00:00:00 2001
From: Zhen Wang <zhenw at nvidia.com>
Date: Wed, 18 Mar 2026 10:40:43 -0700
Subject: [PATCH 1/3] refactor wrapMultiBlockRegionWithSCFExecuteRegion
---
.../mlir/Dialect/OpenACC/OpenACCUtilsLoop.h | 25 +++++++++++++------
.../Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp | 7 ++++--
.../OpenACC/Utils/OpenACCUtilsLoop.cpp | 20 +++++++--------
.../Dialect/OpenACC/OpenACCUtilsLoopTest.cpp | 16 +++++++-----
4 files changed, 41 insertions(+), 27 deletions(-)
diff --git a/mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h b/mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h
index e0428bec620ca..b26d576bcd47c 100644
--- a/mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h
+++ b/mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h
@@ -30,25 +30,34 @@ std::pair<llvm::SmallVector<Value>, Block::iterator>
cloneACCRegionInto(Region *src, Block *dest, Block::iterator inlinePoint,
IRMapping &mapping, ValueRange resultsToReplace);
+/// Implementation detail for wrapMultiBlockRegionWithSCFExecuteRegion.
+scf::ExecuteRegionOp wrapMultiBlockRegionWithSCFExecuteRegionImpl(
+ Region ®ion, IRMapping &mapping, Location loc, RewriterBase &rewriter,
+ llvm::function_ref<bool(Operation *)> isTerminatorToReplace);
+
/// Wrap a multi-block region in an scf.execute_region.
-/// Clones the given region into a new scf.execute_region. Replaces acc.yield
-/// with scf.yield; when convertFuncReturn is true, also replaces func.return
-/// with scf.yield. Use this to convert unstructured control flow (e.g. multiple
-/// blocks with branches) into a single SCF region.
+/// Clones the given region into a new scf.execute_region. Terminators matching
+/// any of the \p TerminatorOps types are replaced with scf.yield. Use this to
+/// convert unstructured control flow (e.g. multiple blocks with branches) into
+/// a single SCF region.
/// @param region The region to wrap (cloned into the execute_region; not
/// modified).
/// @param mapping IR mapping for the clone; updated with block and value
/// mappings.
/// @param loc Location for the created execute_region op.
/// @param rewriter RewriterBase for creating and erasing operations.
-/// @param convertFuncReturn When true, replace func.return with scf.yield in
-/// addition to acc.yield. Default is false.
/// @return The created scf.execute_region operation, or nullptr if any replaced
/// terminator has operands (results not yet supported).
+template <typename... TerminatorOps>
scf::ExecuteRegionOp
wrapMultiBlockRegionWithSCFExecuteRegion(Region ®ion, IRMapping &mapping,
- Location loc, RewriterBase &rewriter,
- bool convertFuncReturn = false);
+ Location loc,
+ RewriterBase &rewriter) {
+ return wrapMultiBlockRegionWithSCFExecuteRegionImpl(
+ region, mapping, loc, rewriter,
+ [](Operation *op) { return isa<TerminatorOps...>(op); });
+}
+
/// Convert a structured acc.loop to scf.for.
/// The loop arguments are converted to index type. If enableCollapse is true,
/// nested loops are collapsed into a single loop.
diff --git a/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp b/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp
index 661074444a055..73d837e8c5002 100644
--- a/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp
+++ b/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp
@@ -11,6 +11,7 @@
//===----------------------------------------------------------------------===//
#include "mlir/Dialect/OpenACC/OpenACCUtilsCG.h"
+#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/Dialect/OpenACC/OpenACC.h"
#include "mlir/Dialect/OpenACC/OpenACCUtilsLoop.h"
#include "mlir/IR/BuiltinOps.h"
@@ -99,8 +100,10 @@ ComputeRegionOp buildComputeRegion(Location loc, ValueRange launchArgs,
rewriter.setInsertionPointToEnd(entryBlock);
YieldOp::create(rewriter, loc, yieldOperands);
} else {
- auto exeRegion = mlir::acc::wrapMultiBlockRegionWithSCFExecuteRegion(
- regionToClone, mapping, loc, rewriter, /*convertFuncReturn=*/true);
+ auto exeRegion =
+ mlir::acc::wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp,
+ func::ReturnOp>(
+ regionToClone, mapping, loc, rewriter);
if (!exeRegion) {
rewriter.eraseOp(computeRegion);
return nullptr;
diff --git a/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp b/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp
index 307d0afb8f697..f11fe2baca019 100644
--- a/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp
+++ b/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp
@@ -14,7 +14,6 @@
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/Arith/Utils/Utils.h"
-#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/Dialect/OpenACC/OpenACC.h"
#include "mlir/Dialect/SCF/IR/SCF.h"
#include "mlir/Dialect/SCF/Utils/Utils.h"
@@ -147,17 +146,15 @@ cloneACCRegionInto(Region *src, Block *dest, Block::iterator inlinePoint,
}
/// Wrap a multi-block region with scf.execute_region.
-scf::ExecuteRegionOp
-wrapMultiBlockRegionWithSCFExecuteRegion(Region ®ion, IRMapping &mapping,
- Location loc, RewriterBase &rewriter,
- bool convertFuncReturn) {
+scf::ExecuteRegionOp wrapMultiBlockRegionWithSCFExecuteRegionImpl(
+ Region ®ion, IRMapping &mapping, Location loc, RewriterBase &rewriter,
+ function_ref<bool(Operation *)> isTerminatorToReplace) {
SmallVector<Operation *> terminators;
for (Block &block : region.getBlocks()) {
if (block.empty())
continue;
Operation *term = block.getTerminator();
- if ((convertFuncReturn && isa<func::ReturnOp>(*term)) ||
- isa<acc::YieldOp>(*term))
+ if (isTerminatorToReplace(term))
terminators.push_back(term);
}
SmallVector<Type> resultTypes;
@@ -301,8 +298,9 @@ scf::ParallelOp convertACCLoopToSCFParallel(LoopOp loopOp,
mapping);
if (!loopOp.getRegion().hasOneBlock()) {
- auto exeRegion = wrapMultiBlockRegionWithSCFExecuteRegion(
- loopOp.getRegion(), mapping, loc, rewriter);
+ auto exeRegion =
+ wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp>(
+ loopOp.getRegion(), mapping, loc, rewriter);
if (!exeRegion) {
rewriter.eraseOp(parallelOp);
return nullptr;
@@ -333,8 +331,8 @@ convertUnstructuredACCLoopToSCFExecuteRegion(LoopOp loopOp,
"builder insertion point must not be inside the loop being converted");
IRMapping mapping;
- return wrapMultiBlockRegionWithSCFExecuteRegion(loopOp.getRegion(), mapping,
- loopOp->getLoc(), rewriter);
+ return wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp>(
+ loopOp.getRegion(), mapping, loopOp->getLoc(), rewriter);
}
} // namespace acc
diff --git a/mlir/unittests/Dialect/OpenACC/OpenACCUtilsLoopTest.cpp b/mlir/unittests/Dialect/OpenACC/OpenACCUtilsLoopTest.cpp
index f2b7295f68aec..d8720955cc82c 100644
--- a/mlir/unittests/Dialect/OpenACC/OpenACCUtilsLoopTest.cpp
+++ b/mlir/unittests/Dialect/OpenACC/OpenACCUtilsLoopTest.cpp
@@ -661,7 +661,8 @@ TEST_F(OpenACCUtilsLoopTest,
b.setInsertionPointAfter(parallelOp.get());
IRMapping mapping;
scf::ExecuteRegionOp exeRegionOp =
- wrapMultiBlockRegionWithSCFExecuteRegion(region, mapping, loc, b);
+ wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp>(region, mapping,
+ loc, b);
ASSERT_TRUE(exeRegionOp);
@@ -729,7 +730,8 @@ TEST_F(OpenACCUtilsLoopTest,
b.setInsertionPointAfter(parallelOp.get());
IRMapping mapping;
scf::ExecuteRegionOp exeRegionOp =
- wrapMultiBlockRegionWithSCFExecuteRegion(region, mapping, loc, b);
+ wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp>(region, mapping,
+ loc, b);
ASSERT_TRUE(exeRegionOp);
@@ -806,8 +808,9 @@ TEST_F(OpenACCUtilsLoopTest,
b.setInsertionPointAfter(funcOp);
IRMapping mapping;
- scf::ExecuteRegionOp exeRegionOp = wrapMultiBlockRegionWithSCFExecuteRegion(
- region, mapping, loc, b, /*convertFuncReturn=*/true);
+ scf::ExecuteRegionOp exeRegionOp =
+ wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp, func::ReturnOp>(
+ region, mapping, loc, b);
ASSERT_TRUE(exeRegionOp);
@@ -873,8 +876,9 @@ TEST_F(OpenACCUtilsLoopTest,
b.setInsertionPointAfter(funcOp);
IRMapping mapping;
- scf::ExecuteRegionOp exeRegionOp = wrapMultiBlockRegionWithSCFExecuteRegion(
- region, mapping, loc, b, /*convertFuncReturn=*/true);
+ scf::ExecuteRegionOp exeRegionOp =
+ wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp, func::ReturnOp>(
+ region, mapping, loc, b);
ASSERT_TRUE(exeRegionOp);
>From 571997a498bc5deb815e6ae9868fc66eaa172765 Mon Sep 17 00:00:00 2001
From: Zhen Wang <zhenw at nvidia.com>
Date: Wed, 18 Mar 2026 12:12:43 -0700
Subject: [PATCH 2/3] format
---
mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h | 3 +--
mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp | 6 ++----
mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp | 5 ++---
3 files changed, 5 insertions(+), 9 deletions(-)
diff --git a/mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h b/mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h
index b26d576bcd47c..b6f76b9983d7c 100644
--- a/mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h
+++ b/mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h
@@ -51,8 +51,7 @@ scf::ExecuteRegionOp wrapMultiBlockRegionWithSCFExecuteRegionImpl(
template <typename... TerminatorOps>
scf::ExecuteRegionOp
wrapMultiBlockRegionWithSCFExecuteRegion(Region ®ion, IRMapping &mapping,
- Location loc,
- RewriterBase &rewriter) {
+ Location loc, RewriterBase &rewriter) {
return wrapMultiBlockRegionWithSCFExecuteRegionImpl(
region, mapping, loc, rewriter,
[](Operation *op) { return isa<TerminatorOps...>(op); });
diff --git a/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp b/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp
index 73d837e8c5002..7359d6b699207 100644
--- a/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp
+++ b/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp
@@ -100,10 +100,8 @@ ComputeRegionOp buildComputeRegion(Location loc, ValueRange launchArgs,
rewriter.setInsertionPointToEnd(entryBlock);
YieldOp::create(rewriter, loc, yieldOperands);
} else {
- auto exeRegion =
- mlir::acc::wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp,
- func::ReturnOp>(
- regionToClone, mapping, loc, rewriter);
+ auto exeRegion = mlir::acc::wrapMultiBlockRegionWithSCFExecuteRegion<
+ acc::YieldOp, func::ReturnOp>(regionToClone, mapping, loc, rewriter);
if (!exeRegion) {
rewriter.eraseOp(computeRegion);
return nullptr;
diff --git a/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp b/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp
index f11fe2baca019..7d13c4a05033b 100644
--- a/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp
+++ b/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp
@@ -298,9 +298,8 @@ scf::ParallelOp convertACCLoopToSCFParallel(LoopOp loopOp,
mapping);
if (!loopOp.getRegion().hasOneBlock()) {
- auto exeRegion =
- wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp>(
- loopOp.getRegion(), mapping, loc, rewriter);
+ auto exeRegion = wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp>(
+ loopOp.getRegion(), mapping, loc, rewriter);
if (!exeRegion) {
rewriter.eraseOp(parallelOp);
return nullptr;
>From d59b2d89dd74c7988fbb17cd6b9ffff6edfd79d8 Mon Sep 17 00:00:00 2001
From: Zhen Wang <zhenw at nvidia.com>
Date: Wed, 18 Mar 2026 13:24:50 -0700
Subject: [PATCH 3/3] replace all terminators with no successors
---
.../mlir/Dialect/OpenACC/OpenACCUtilsLoop.h | 23 +++++--------------
.../Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp | 5 ++--
.../OpenACC/Utils/OpenACCUtilsLoop.cpp | 14 +++++------
.../Dialect/OpenACC/OpenACCUtilsLoopTest.cpp | 12 ++++------
4 files changed, 19 insertions(+), 35 deletions(-)
diff --git a/mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h b/mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h
index b6f76b9983d7c..faaa8231e696e 100644
--- a/mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h
+++ b/mlir/include/mlir/Dialect/OpenACC/OpenACCUtilsLoop.h
@@ -30,32 +30,21 @@ std::pair<llvm::SmallVector<Value>, Block::iterator>
cloneACCRegionInto(Region *src, Block *dest, Block::iterator inlinePoint,
IRMapping &mapping, ValueRange resultsToReplace);
-/// Implementation detail for wrapMultiBlockRegionWithSCFExecuteRegion.
-scf::ExecuteRegionOp wrapMultiBlockRegionWithSCFExecuteRegionImpl(
- Region ®ion, IRMapping &mapping, Location loc, RewriterBase &rewriter,
- llvm::function_ref<bool(Operation *)> isTerminatorToReplace);
-
/// Wrap a multi-block region in an scf.execute_region.
-/// Clones the given region into a new scf.execute_region. Terminators matching
-/// any of the \p TerminatorOps types are replaced with scf.yield. Use this to
-/// convert unstructured control flow (e.g. multiple blocks with branches) into
-/// a single SCF region.
+/// Clones the given region into a new scf.execute_region. Terminators with no
+/// successors (i.e., region exit points) are replaced with scf.yield. Use this
+/// to convert unstructured control flow (e.g. multiple blocks with branches)
+/// into a single SCF region.
/// @param region The region to wrap (cloned into the execute_region; not
/// modified).
/// @param mapping IR mapping for the clone; updated with block and value
/// mappings.
/// @param loc Location for the created execute_region op.
/// @param rewriter RewriterBase for creating and erasing operations.
-/// @return The created scf.execute_region operation, or nullptr if any replaced
-/// terminator has operands (results not yet supported).
-template <typename... TerminatorOps>
+/// @return The created scf.execute_region operation.
scf::ExecuteRegionOp
wrapMultiBlockRegionWithSCFExecuteRegion(Region ®ion, IRMapping &mapping,
- Location loc, RewriterBase &rewriter) {
- return wrapMultiBlockRegionWithSCFExecuteRegionImpl(
- region, mapping, loc, rewriter,
- [](Operation *op) { return isa<TerminatorOps...>(op); });
-}
+ Location loc, RewriterBase &rewriter);
/// Convert a structured acc.loop to scf.for.
/// The loop arguments are converted to index type. If enableCollapse is true,
diff --git a/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp b/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp
index 7359d6b699207..c5fa50642cade 100644
--- a/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp
+++ b/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsCG.cpp
@@ -11,7 +11,6 @@
//===----------------------------------------------------------------------===//
#include "mlir/Dialect/OpenACC/OpenACCUtilsCG.h"
-#include "mlir/Dialect/Func/IR/FuncOps.h"
#include "mlir/Dialect/OpenACC/OpenACC.h"
#include "mlir/Dialect/OpenACC/OpenACCUtilsLoop.h"
#include "mlir/IR/BuiltinOps.h"
@@ -100,8 +99,8 @@ ComputeRegionOp buildComputeRegion(Location loc, ValueRange launchArgs,
rewriter.setInsertionPointToEnd(entryBlock);
YieldOp::create(rewriter, loc, yieldOperands);
} else {
- auto exeRegion = mlir::acc::wrapMultiBlockRegionWithSCFExecuteRegion<
- acc::YieldOp, func::ReturnOp>(regionToClone, mapping, loc, rewriter);
+ auto exeRegion = mlir::acc::wrapMultiBlockRegionWithSCFExecuteRegion(
+ regionToClone, mapping, loc, rewriter);
if (!exeRegion) {
rewriter.eraseOp(computeRegion);
return nullptr;
diff --git a/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp b/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp
index 7d13c4a05033b..d9afba7c2daaf 100644
--- a/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp
+++ b/mlir/lib/Dialect/OpenACC/Utils/OpenACCUtilsLoop.cpp
@@ -146,15 +146,15 @@ cloneACCRegionInto(Region *src, Block *dest, Block::iterator inlinePoint,
}
/// Wrap a multi-block region with scf.execute_region.
-scf::ExecuteRegionOp wrapMultiBlockRegionWithSCFExecuteRegionImpl(
- Region ®ion, IRMapping &mapping, Location loc, RewriterBase &rewriter,
- function_ref<bool(Operation *)> isTerminatorToReplace) {
+scf::ExecuteRegionOp
+wrapMultiBlockRegionWithSCFExecuteRegion(Region ®ion, IRMapping &mapping,
+ Location loc, RewriterBase &rewriter) {
SmallVector<Operation *> terminators;
for (Block &block : region.getBlocks()) {
if (block.empty())
continue;
Operation *term = block.getTerminator();
- if (isTerminatorToReplace(term))
+ if (term->getNumSuccessors() == 0)
terminators.push_back(term);
}
SmallVector<Type> resultTypes;
@@ -298,7 +298,7 @@ scf::ParallelOp convertACCLoopToSCFParallel(LoopOp loopOp,
mapping);
if (!loopOp.getRegion().hasOneBlock()) {
- auto exeRegion = wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp>(
+ auto exeRegion = wrapMultiBlockRegionWithSCFExecuteRegion(
loopOp.getRegion(), mapping, loc, rewriter);
if (!exeRegion) {
rewriter.eraseOp(parallelOp);
@@ -330,8 +330,8 @@ convertUnstructuredACCLoopToSCFExecuteRegion(LoopOp loopOp,
"builder insertion point must not be inside the loop being converted");
IRMapping mapping;
- return wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp>(
- loopOp.getRegion(), mapping, loopOp->getLoc(), rewriter);
+ return wrapMultiBlockRegionWithSCFExecuteRegion(loopOp.getRegion(), mapping,
+ loopOp->getLoc(), rewriter);
}
} // namespace acc
diff --git a/mlir/unittests/Dialect/OpenACC/OpenACCUtilsLoopTest.cpp b/mlir/unittests/Dialect/OpenACC/OpenACCUtilsLoopTest.cpp
index d8720955cc82c..4296d56dfa4d9 100644
--- a/mlir/unittests/Dialect/OpenACC/OpenACCUtilsLoopTest.cpp
+++ b/mlir/unittests/Dialect/OpenACC/OpenACCUtilsLoopTest.cpp
@@ -661,8 +661,7 @@ TEST_F(OpenACCUtilsLoopTest,
b.setInsertionPointAfter(parallelOp.get());
IRMapping mapping;
scf::ExecuteRegionOp exeRegionOp =
- wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp>(region, mapping,
- loc, b);
+ wrapMultiBlockRegionWithSCFExecuteRegion(region, mapping, loc, b);
ASSERT_TRUE(exeRegionOp);
@@ -730,8 +729,7 @@ TEST_F(OpenACCUtilsLoopTest,
b.setInsertionPointAfter(parallelOp.get());
IRMapping mapping;
scf::ExecuteRegionOp exeRegionOp =
- wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp>(region, mapping,
- loc, b);
+ wrapMultiBlockRegionWithSCFExecuteRegion(region, mapping, loc, b);
ASSERT_TRUE(exeRegionOp);
@@ -809,8 +807,7 @@ TEST_F(OpenACCUtilsLoopTest,
b.setInsertionPointAfter(funcOp);
IRMapping mapping;
scf::ExecuteRegionOp exeRegionOp =
- wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp, func::ReturnOp>(
- region, mapping, loc, b);
+ wrapMultiBlockRegionWithSCFExecuteRegion(region, mapping, loc, b);
ASSERT_TRUE(exeRegionOp);
@@ -877,8 +874,7 @@ TEST_F(OpenACCUtilsLoopTest,
b.setInsertionPointAfter(funcOp);
IRMapping mapping;
scf::ExecuteRegionOp exeRegionOp =
- wrapMultiBlockRegionWithSCFExecuteRegion<acc::YieldOp, func::ReturnOp>(
- region, mapping, loc, b);
+ wrapMultiBlockRegionWithSCFExecuteRegion(region, mapping, loc, b);
ASSERT_TRUE(exeRegionOp);
More information about the Mlir-commits
mailing list