@@ -1390,6 +1390,20 @@ void acc::ParallelOp::addPrivatization(MLIRContext *context,
1390
1390
setPrivatizationRecipesAttr (mlir::ArrayAttr::get (context, recipes));
1391
1391
}
1392
1392
1393
+ void acc::ParallelOp::addFirstPrivatization (
1394
+ MLIRContext *context, mlir::acc::FirstprivateOp op,
1395
+ mlir::acc::FirstprivateRecipeOp recipe) {
1396
+ getFirstprivateOperandsMutable ().append (op.getResult ());
1397
+
1398
+ llvm::SmallVector<mlir::Attribute> recipes;
1399
+
1400
+ if (getFirstprivatizationRecipesAttr ())
1401
+ llvm::copy (getFirstprivatizationRecipesAttr (), std::back_inserter (recipes));
1402
+
1403
+ recipes.push_back (
1404
+ mlir::SymbolRefAttr::get (context, recipe.getSymName ().str ()));
1405
+ setFirstprivatizationRecipesAttr (mlir::ArrayAttr::get (context, recipes));
1406
+ }
1393
1407
static ParseResult parseNumGangs (
1394
1408
mlir::OpAsmParser &parser,
1395
1409
llvm::SmallVectorImpl<mlir::OpAsmParser::UnresolvedOperand> &operands,
@@ -2041,6 +2055,21 @@ void acc::SerialOp::addPrivatization(MLIRContext *context,
2041
2055
setPrivatizationRecipesAttr (mlir::ArrayAttr::get (context, recipes));
2042
2056
}
2043
2057
2058
+ void acc::SerialOp::addFirstPrivatization (
2059
+ MLIRContext *context, mlir::acc::FirstprivateOp op,
2060
+ mlir::acc::FirstprivateRecipeOp recipe) {
2061
+ getFirstprivateOperandsMutable ().append (op.getResult ());
2062
+
2063
+ llvm::SmallVector<mlir::Attribute> recipes;
2064
+
2065
+ if (getFirstprivatizationRecipesAttr ())
2066
+ llvm::copy (getFirstprivatizationRecipesAttr (), std::back_inserter (recipes));
2067
+
2068
+ recipes.push_back (
2069
+ mlir::SymbolRefAttr::get (context, recipe.getSymName ().str ()));
2070
+ setFirstprivatizationRecipesAttr (mlir::ArrayAttr::get (context, recipes));
2071
+ }
2072
+
2044
2073
// ===----------------------------------------------------------------------===//
2045
2074
// KernelsOp
2046
2075
// ===----------------------------------------------------------------------===//
0 commit comments