[PATCH] D83522: [flang] Adopt NoRegionArguments (WhereOp) and ParentOneOf (ResultOp) traits
Rahul Joshi via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 16 08:35:48 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG2e046be90e51: [flang] Adopt NoRegionArguments (WhereOp) and ParentOneOf (ResultOp) traits (authored by jurahul).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D83522/new/
https://reviews.llvm.org/D83522
Files:
flang/include/flang/Optimizer/Dialect/FIROps.td
flang/lib/Optimizer/Dialect/FIROps.cpp
Index: flang/lib/Optimizer/Dialect/FIROps.cpp
===================================================================
--- flang/lib/Optimizer/Dialect/FIROps.cpp
+++ flang/lib/Optimizer/Dialect/FIROps.cpp
@@ -968,19 +968,12 @@
auto results = parentOp->getResults();
auto operands = op.getOperands();
- if (isa<fir::WhereOp>(parentOp) || isa<fir::LoopOp>(parentOp) ||
- isa<fir::IterWhileOp>(parentOp)) {
- if (parentOp->getNumResults() != op.getNumOperands())
- return op.emitOpError() << "parent of result must have same arity";
- for (auto e : llvm::zip(results, operands)) {
- if (std::get<0>(e).getType() != std::get<1>(e).getType())
- return op.emitOpError()
- << "types mismatch between result op and its parent";
- }
- } else {
- return op.emitOpError()
- << "result only terminates if, do_loop, or iterate_while regions";
- }
+ if (parentOp->getNumResults() != op.getNumOperands())
+ return op.emitOpError() << "parent of result must have same arity";
+ for (auto e : llvm::zip(results, operands))
+ if (std::get<0>(e).getType() != std::get<1>(e).getType())
+ return op.emitOpError()
+ << "types mismatch between result op and its parent";
return success();
}
@@ -1452,16 +1445,6 @@
}
static LogicalResult verify(fir::WhereOp op) {
- // Verify that the entry of each child region does not have arguments.
- for (auto ®ion : op.getOperation()->getRegions()) {
- if (region.empty())
- continue;
-
- for (auto &b : region)
- if (b.getNumArguments() != 0)
- return op.emitOpError(
- "requires that child entry blocks have no arguments");
- }
if (op.getNumResults() != 0 && op.otherRegion().empty())
return op.emitOpError("must have an else block if defining values");
Index: flang/include/flang/Optimizer/Dialect/FIROps.td
===================================================================
--- flang/include/flang/Optimizer/Dialect/FIROps.td
+++ flang/include/flang/Optimizer/Dialect/FIROps.td
@@ -1853,7 +1853,9 @@
// Fortran loops
//===----------------------------------------------------------------------===//
-def fir_ResultOp : fir_Op<"result", [NoSideEffect, ReturnLike, Terminator]> {
+def fir_ResultOp : fir_Op<"result",
+ [NoSideEffect, ReturnLike, Terminator,
+ ParentOneOf<["WhereOp", "LoopOp", "IterWhileOp"]>]> {
let summary = "special terminator for use in fir region operations";
let description = [{
@@ -1970,7 +1972,7 @@
}];
}
-def fir_WhereOp : region_Op<"if"> {
+def fir_WhereOp : region_Op<"if", [NoRegionArguments]> {
let summary = "if-then-else conditional operation";
let description = [{
Used to conditionally execute operations. This operation is the FIR
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83522.278501.patch
Type: text/x-patch
Size: 2771 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200716/5a1fe346/attachment.bin>
More information about the llvm-commits
mailing list