[Mlir-commits] [flang] [mlir] [OpenMP][mlir] Add DynGroupPrivateClause in omp dialect (PR #153562)
Sergio Afonso
llvmlistbot at llvm.org
Mon Apr 13 05:42:20 PDT 2026
================
@@ -873,6 +873,113 @@ static void printNumTasksClause(OpAsmPrinter &p, Operation *op,
p, op, numTasksMod, numTasks, numTasksType, &stringifyClauseNumTasksType);
}
+//===----------------------------------------------------------------------===//
+// Parser, printer and verify for dyn_groupprivate Clause
+//===----------------------------------------------------------------------===//
+
+static LogicalResult
+verifyDynGroupprivateClause(Operation *op, AccessGroupModifierAttr accessGroup,
+ FallbackModifierAttr fallback,
+ Value dynGroupprivateSize) {
+ if (!dynGroupprivateSize && (accessGroup || fallback))
+ return op->emitOpError("dyn_groupprivate modifiers require a size operand");
+
+ return success();
+}
+
+static ParseResult parseDynGroupprivateClause(
+ OpAsmParser &parser, AccessGroupModifierAttr &accessGroupAttr,
+ FallbackModifierAttr &fallbackAttr,
+ std::optional<OpAsmParser::UnresolvedOperand> &dynGroupprivateSize,
+ Type &sizeType) {
+
+ bool parsedAccessGroup = false;
+ bool parsedFallback = false;
+
+ return parser.parseCommaSeparatedList([&]() -> ParseResult {
+ // Parse AccessGroupModifier.
+ if (succeeded(parser.parseOptionalKeyword("cgroup"))) {
+ if (parsedAccessGroup)
+ return parser.emitError(parser.getCurrentLocation(),
+ "duplicate access group modifier");
+ accessGroupAttr = AccessGroupModifierAttr::get(
+ parser.getContext(), AccessGroupModifier::cgroup);
+ parsedAccessGroup = true;
+ return success();
+ }
+ // Parse FallbackModifier.
+ if (succeeded(parser.parseOptionalKeyword("fallback"))) {
+ if (parsedFallback)
+ return parser.emitError(parser.getCurrentLocation(),
+ "duplicate fallback modifier");
+ if (parser.parseLParen())
+ return parser.emitError(parser.getCurrentLocation(),
+ "expected '(' after 'fallback'");
+ llvm::StringRef fbKind;
+ if (parser.parseKeyword(&fbKind))
+ return parser.emitError(
+ parser.getCurrentLocation(),
+ "expected fallback modifier (abort/null/default_mem)");
+ std::optional<FallbackModifier> fbEnum;
+ if (fbKind == "abort")
+ fbEnum = FallbackModifier::abort;
+ else if (fbKind == "null")
+ fbEnum = FallbackModifier::null;
+ else if (fbKind == "default_mem")
+ fbEnum = FallbackModifier::default_mem;
+ else
+ return parser.emitError(parser.getCurrentLocation(),
+ "invalid fallback modifier '" + fbKind + "'");
+ fallbackAttr = FallbackModifierAttr::get(parser.getContext(), *fbEnum);
+ if (parser.parseRParen())
+ return parser.emitError(parser.getCurrentLocation(),
+ "expected ')' after fallback modifier");
+ parsedFallback = true;
+ return success();
+ }
+ // Parse size operand.
+ OpAsmParser::UnresolvedOperand operand;
+ if (succeeded(parser.parseOperand(operand))) {
+ dynGroupprivateSize = operand;
----------------
skatrak wrote:
I think we should prevent duplicates for this case as well.
https://github.com/llvm/llvm-project/pull/153562
More information about the Mlir-commits
mailing list