[Mlir-commits] [mlir] [MLIR][OpenMP] Add `omp.private` op (PR #80955)
Kiran Chandramohan
llvmlistbot at llvm.org
Wed Feb 7 04:21:13 PST 2024
================
@@ -1594,6 +1594,61 @@ LogicalResult DataBoundsOp::verify() {
return success();
}
+LogicalResult PrivateClauseOp::verify() {
+ Region &body = getBody();
+ auto argumentTypes = getArgumentTypes();
+ auto resultTypes = getResultTypes();
+
+ if (argumentTypes.empty()) {
+ return emitError() << "'" << getOperationName()
+ << "' must accept at least one argument.";
+ }
+
+ if (resultTypes.empty()) {
+ return emitError() << "'" << getOperationName()
+ << "' must return at least one result.";
+ }
+
+ for (Block &block : body) {
+ if (block.empty() || !block.mightHaveTerminator())
+ return mlir::emitError(block.empty() ? getLoc() : block.back().getLoc())
+ << "expected all blocks to have terminators.";
+
+ Operation *terminator = block.getTerminator();
+
+ if (!terminator->hasSuccessors() && !llvm::isa<YieldOp>(terminator))
+ return mlir::emitError(terminator->getLoc())
+ << "expected exit block terminator to be an `omp.yield` op.";
+
+ YieldOp yieldOp = llvm::cast<YieldOp>(terminator);
+ auto yieldedTypes = yieldOp.getResults().getTypes();
+
+ if (yieldedTypes.empty())
+ return mlir::emitError(yieldOp.getLoc())
+ << "'" << getOperationName() << "' must yield a value.";
+
+ bool yieldIsValid = [&]() {
+ if (yieldedTypes.size() != resultTypes.size()) {
+ return false;
+ }
+ for (size_t typeIdx = 0; typeIdx < yieldedTypes.size(); ++typeIdx) {
+ if (yieldedTypes[typeIdx] != resultTypes[typeIdx]) {
+ return false;
+ }
+ }
----------------
kiranchandramohan wrote:
Nit: You probably don't need braces in all these places since LLVM prefers that.
https://llvm.org/docs/CodingStandards.html#don-t-use-braces-on-simple-single-statement-bodies-of-if-else-loop-statements
https://github.com/llvm/llvm-project/pull/80955
More information about the Mlir-commits
mailing list