[flang-commits] [flang] [llvm] [mlir] [flang][MLIR][OpenMP] make reduction by-ref toggled per variable (PR #92244)
Tom Eccles via flang-commits
flang-commits at lists.llvm.org
Thu May 16 04:08:59 PDT 2024
================
@@ -486,24 +496,32 @@ static void printClauseWithRegionArgs(OpAsmPrinter &p, Operation *op,
static ParseResult parseParallelRegion(
OpAsmParser &parser, Region ®ion,
SmallVectorImpl<OpAsmParser::UnresolvedOperand> &reductionVarOperands,
- SmallVectorImpl<Type> &reductionVarTypes, ArrayAttr &reductionSymbols,
+ SmallVectorImpl<Type> &reductionVarTypes,
+ DenseBoolArrayAttr &reductionByRef, ArrayAttr &reductionSymbols,
llvm::SmallVectorImpl<OpAsmParser::UnresolvedOperand> &privateVarOperands,
llvm::SmallVectorImpl<Type> &privateVarsTypes,
ArrayAttr &privatizerSymbols) {
llvm::SmallVector<OpAsmParser::Argument> regionPrivateArgs;
if (succeeded(parser.parseOptionalKeyword("reduction"))) {
if (failed(parseClauseWithRegionArgs(parser, region, reductionVarOperands,
- reductionVarTypes, reductionSymbols,
- regionPrivateArgs)))
+ reductionVarTypes, reductionByRef,
+ reductionSymbols, regionPrivateArgs)))
return failure();
}
if (succeeded(parser.parseOptionalKeyword("private"))) {
+ auto privateByRef = DenseBoolArrayAttr::get(parser.getContext(), {});
if (failed(parseClauseWithRegionArgs(parser, region, privateVarOperands,
- privateVarsTypes, privatizerSymbols,
- regionPrivateArgs)))
+ privateVarsTypes, privateByRef,
+ privatizerSymbols, regionPrivateArgs)))
return failure();
+ if (llvm::any_of(privateByRef.asArrayRef(),
+ [](bool byref) { return byref; })) {
+ parser.emitError(parser.getCurrentLocation(),
+ "private clause cannot have byref attributes");
+ return failure();
+ }
----------------
tblah wrote:
It is necessary because there is no toggle for byref on variable privatization. One alternative would be to silently ignore it.
https://github.com/llvm/llvm-project/pull/92244
More information about the flang-commits
mailing list