[PATCH] D76603: [MLIR] Extend builder of `loop.if` op to support non-void ops.
Alexander Belyaev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 23 05:26:10 PDT 2020
pifon2a created this revision.
pifon2a added a reviewer: herhut.
Herald added subscribers: llvm-commits, Joonsoo, liufengdb, lucyrfox, mgester, arpith-jacob, nicolasvasilache, antiagainst, shauheen, burmako, jpienaar, rriddle, mehdi_amini.
Herald added a reviewer: nicolasvasilache.
Herald added a project: LLVM.
pifon2a added a reviewer: ftynse.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D76603
Files:
mlir/include/mlir/Dialect/LoopOps/LoopOps.td
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
@@ -200,13 +200,21 @@
//===----------------------------------------------------------------------===//
void IfOp::build(Builder *builder, OperationState &result, Value cond,
- bool withElseRegion) {
+ bool withElseRegion, ArrayRef<Type> resultTypes) {
result.addOperands(cond);
+ result.addTypes(resultTypes);
+
Region *thenRegion = result.addRegion();
- Region *elseRegion = result.addRegion();
- IfOp::ensureTerminator(*thenRegion, *builder, result.location);
- if (withElseRegion)
- IfOp::ensureTerminator(*elseRegion, *builder, result.location);
+ thenRegion->push_back(new Block());
+ if (resultTypes.empty())
+ IfOp::ensureTerminator(*thenRegion, *builder, result.location);
+
+ if (withElseRegion) {
+ Region *elseRegion = result.addRegion();
+ elseRegion->push_back(new Block());
+ if (resultTypes.empty())
+ IfOp::ensureTerminator(*elseRegion, *builder, result.location);
+ }
}
static LogicalResult verify(IfOp op) {
Index: mlir/include/mlir/Dialect/LoopOps/LoopOps.td
===================================================================
--- mlir/include/mlir/Dialect/LoopOps/LoopOps.td
+++ mlir/include/mlir/Dialect/LoopOps/LoopOps.td
@@ -220,20 +220,22 @@
let skipDefaultBuilders = 1;
let builders = [
- OpBuilder<"Builder *builder, OperationState &result, "
- "Value cond, bool withElseRegion">
+ OpBuilder<"Builder *builder, OperationState &result, Value cond, "
+ "bool withElseRegion, ArrayRef<Type> resultTypes = {}">
];
let extraClassDeclaration = [{
OpBuilder getThenBodyBuilder() {
assert(!thenRegion().empty() && "Unexpected empty 'then' region.");
Block &body = thenRegion().front();
- return OpBuilder(&body, std::prev(body.end()));
+ return OpBuilder(&body,
+ results().empty() ? body.end() : std::prev(body.end()));
}
OpBuilder getElseBodyBuilder() {
assert(!elseRegion().empty() && "Unexpected empty 'else' region.");
Block &body = elseRegion().front();
- return OpBuilder(&body, std::prev(body.end()));
+ return OpBuilder(&body,
+ results().empty() ? body.end() : std::prev(body.end()));
}
}];
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D76603.252000.patch
Type: text/x-patch
Size: 2453 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200323/57757166/attachment.bin>
More information about the llvm-commits
mailing list