[PATCH] D77389: [MLIR] Don't insert YieldOp for non-void loop.for by default.
Alexander Belyaev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 3 06:57:24 PDT 2020
pifon2a updated this revision to Diff 254777.
pifon2a added a comment.
Reformat.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D77389/new/
https://reviews.llvm.org/D77389
Files:
mlir/lib/Conversion/LoopToStandard/LoopToStandard.cpp
mlir/lib/Dialect/LoopOps/LoopOps.cpp
Index: mlir/lib/Dialect/LoopOps/LoopOps.cpp
===================================================================
--- mlir/lib/Dialect/LoopOps/LoopOps.cpp
+++ mlir/lib/Dialect/LoopOps/LoopOps.cpp
@@ -47,7 +47,9 @@
for (Value v : iterArgs)
result.addTypes(v.getType());
Region *bodyRegion = result.addRegion();
- ForOp::ensureTerminator(*bodyRegion, *builder, result.location);
+ bodyRegion->push_back(new Block());
+ if (iterArgs.empty())
+ ForOp::ensureTerminator(*bodyRegion, *builder, result.location);
bodyRegion->front().addArgument(builder->getIndexType());
for (Value v : iterArgs)
bodyRegion->front().addArgument(v.getType());
@@ -201,7 +203,7 @@
void IfOp::build(Builder *builder, OperationState &result, Value cond,
bool withElseRegion) {
- build(builder, result, /*resultTypes=*/llvm::None, cond, withElseRegion);
+ build(builder, result, /*resultTypes=*/llvm::None, cond, withElseRegion);
}
void IfOp::build(Builder *builder, OperationState &result,
Index: mlir/lib/Conversion/LoopToStandard/LoopToStandard.cpp
===================================================================
--- mlir/lib/Conversion/LoopToStandard/LoopToStandard.cpp
+++ mlir/lib/Conversion/LoopToStandard/LoopToStandard.cpp
@@ -301,15 +301,11 @@
// the results of the parallel loop when it is fully rewritten.
loopResults.assign(forOp.result_begin(), forOp.result_end());
first = false;
- } else {
- // A loop is constructed with an empty "yield" terminator by default.
- // Replace it with another "yield" that forwards the results of the nested
- // loop to the parent loop. We need to explicitly make sure the new
- // terminator is the last operation in the block because further
- // transforms rely on this.
+ } else if (!forOp.getResults().empty()) {
+ // A loop is constructed with an empty "yield" terminator if there are
+ // no results.
rewriter.setInsertionPointToEnd(rewriter.getInsertionBlock());
- rewriter.replaceOpWithNewOp<YieldOp>(
- rewriter.getInsertionBlock()->getTerminator(), forOp.getResults());
+ rewriter.create<YieldOp>(loc, forOp.getResults());
}
rewriter.setInsertionPointToStart(forOp.getBody());
@@ -342,9 +338,10 @@
mapping.lookup(reduceBlock.getTerminator()->getOperand(0)));
}
- rewriter.setInsertionPointToEnd(rewriter.getInsertionBlock());
- rewriter.replaceOpWithNewOp<YieldOp>(
- rewriter.getInsertionBlock()->getTerminator(), yieldOperands);
+ if (!yieldOperands.empty()) {
+ rewriter.setInsertionPointToEnd(rewriter.getInsertionBlock());
+ rewriter.create<YieldOp>(loc, yieldOperands);
+ }
rewriter.replaceOp(parallelOp, loopResults);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D77389.254777.patch
Type: text/x-patch
Size: 2750 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200403/d3fd776d/attachment.bin>
More information about the llvm-commits
mailing list