@@ -53,6 +53,7 @@ class OpenACCClauseCIREmitter final
5353 template <typename FriendOpTy> friend class OpenACCClauseCIREmitter ;
5454
5555 OpTy &operation;
56+ mlir::OpBuilder::InsertPoint &recipeInsertLocation;
5657 CIRGen::CIRGenFunction &cgf;
5758 CIRGen::CIRGenBuilderTy &builder;
5859
@@ -148,7 +149,7 @@ class OpenACCClauseCIREmitter final
148149 mlir::OpBuilder::InsertionGuard guardCase (builder);
149150 builder.setInsertionPoint (operation.loopOp );
150151 OpenACCClauseCIREmitter<mlir::acc::LoopOp> loopEmitter{
151- operation.loopOp , cgf, builder, dirKind, dirLoc};
152+ operation.loopOp , recipeInsertLocation, cgf, builder, dirKind, dirLoc};
152153 loopEmitter.lastDeviceTypeValues = lastDeviceTypeValues;
153154 loopEmitter.Visit (&c);
154155 }
@@ -159,7 +160,12 @@ class OpenACCClauseCIREmitter final
159160 mlir::OpBuilder::InsertionGuard guardCase (builder);
160161 builder.setInsertionPoint (operation.computeOp );
161162 OpenACCClauseCIREmitter<typename OpTy::ComputeOpTy> computeEmitter{
162- operation.computeOp , cgf, builder, dirKind, dirLoc};
163+ operation.computeOp ,
164+ recipeInsertLocation,
165+ cgf,
166+ builder,
167+ dirKind,
168+ dirLoc};
163169
164170 computeEmitter.lastDeviceTypeValues = lastDeviceTypeValues;
165171
@@ -358,11 +364,13 @@ class OpenACCClauseCIREmitter final
358364 }
359365
360366public:
361- OpenACCClauseCIREmitter (OpTy &operation, CIRGen::CIRGenFunction &cgf,
367+ OpenACCClauseCIREmitter (OpTy &operation,
368+ mlir::OpBuilder::InsertPoint &recipeInsertLocation,
369+ CIRGen::CIRGenFunction &cgf,
362370 CIRGen::CIRGenBuilderTy &builder,
363371 OpenACCDirectiveKind dirKind, SourceLocation dirLoc)
364- : operation(operation), cgf(cgf), builder(builder), dirKind(dirKind ),
365- dirLoc (dirLoc) {}
372+ : operation(operation), recipeInsertLocation(recipeInsertLocation ),
373+ cgf (cgf), builder(builder), dirKind(dirKind), dirLoc(dirLoc) {}
366374
367375 void VisitClause (const OpenACCClause &clause) {
368376 clauseNotImplemented (clause);
@@ -992,8 +1000,8 @@ class OpenACCClauseCIREmitter final
9921000 auto recipe =
9931001 OpenACCRecipeBuilder<mlir::acc::PrivateRecipeOp>(cgf, builder)
9941002 .getOrCreateRecipe (
995- cgf.getContext (), varExpr, varRecipe. AllocaDecl ,
996- varRecipe.InitExpr ,
1003+ cgf.getContext (), recipeInsertLocation, varExpr ,
1004+ varRecipe.AllocaDecl , varRecipe. InitExpr ,
9971005 /* temporary=*/ nullptr , OpenACCReductionOperator::Invalid,
9981006 Decl::castToDeclContext (cgf.curFuncDecl ), opInfo.origType ,
9991007 opInfo.bounds .size (), opInfo.boundTypes , opInfo.baseType ,
@@ -1039,8 +1047,9 @@ class OpenACCClauseCIREmitter final
10391047 OpenACCRecipeBuilder<mlir::acc::FirstprivateRecipeOp>(cgf,
10401048 builder)
10411049 .getOrCreateRecipe (
1042- cgf.getContext (), varExpr, varRecipe.AllocaDecl ,
1043- varRecipe.InitExpr , varRecipe.InitFromTemporary ,
1050+ cgf.getContext (), recipeInsertLocation, varExpr,
1051+ varRecipe.AllocaDecl , varRecipe.InitExpr ,
1052+ varRecipe.InitFromTemporary ,
10441053 OpenACCReductionOperator::Invalid,
10451054 Decl::castToDeclContext (cgf.curFuncDecl ), opInfo.origType ,
10461055 opInfo.bounds .size (), opInfo.boundTypes , opInfo.baseType ,
@@ -1087,8 +1096,8 @@ class OpenACCClauseCIREmitter final
10871096 auto recipe =
10881097 OpenACCRecipeBuilder<mlir::acc::ReductionRecipeOp>(cgf, builder)
10891098 .getOrCreateRecipe (
1090- cgf.getContext (), varExpr, varRecipe. AllocaDecl ,
1091- varRecipe.InitExpr ,
1099+ cgf.getContext (), recipeInsertLocation, varExpr ,
1100+ varRecipe.AllocaDecl , varRecipe. InitExpr ,
10921101 /* temporary=*/ nullptr , clause.getReductionOp (),
10931102 Decl::castToDeclContext (cgf.curFuncDecl ), opInfo.origType ,
10941103 opInfo.bounds .size (), opInfo.boundTypes , opInfo.baseType ,
@@ -1108,10 +1117,13 @@ class OpenACCClauseCIREmitter final
11081117};
11091118
11101119template <typename OpTy>
1111- auto makeClauseEmitter (OpTy &op, CIRGen::CIRGenFunction &cgf,
1120+ auto makeClauseEmitter (OpTy &op,
1121+ mlir::OpBuilder::InsertPoint &recipeInsertLocation,
1122+ CIRGen::CIRGenFunction &cgf,
11121123 CIRGen::CIRGenBuilderTy &builder,
11131124 OpenACCDirectiveKind dirKind, SourceLocation dirLoc) {
1114- return OpenACCClauseCIREmitter<OpTy>(op, cgf, builder, dirKind, dirLoc);
1125+ return OpenACCClauseCIREmitter<OpTy>(op, recipeInsertLocation, cgf, builder,
1126+ dirKind, dirLoc);
11151127}
11161128} // namespace
11171129
@@ -1124,7 +1136,8 @@ void CIRGenFunction::emitOpenACCClauses(
11241136 // Sets insertion point before the 'op', since every new expression needs to
11251137 // be before the operation.
11261138 builder.setInsertionPoint (op);
1127- makeClauseEmitter (op, *this , builder, dirKind, dirLoc).emitClauses (clauses);
1139+ makeClauseEmitter (op, lastRecipeLocation, *this , builder, dirKind, dirLoc)
1140+ .emitClauses (clauses);
11281141}
11291142
11301143#define EXPL_SPEC (N ) \
@@ -1156,7 +1169,8 @@ void CIRGenFunction::emitOpenACCClauses(
11561169 // We cannot set the insertion point here and do so in the emitter, but make
11571170 // sure we reset it with the 'guard' anyway.
11581171 mlir::OpBuilder::InsertionGuard guardCase (builder);
1159- makeClauseEmitter (inf, *this , builder, dirKind, dirLoc).emitClauses (clauses);
1172+ makeClauseEmitter (inf, lastRecipeLocation, *this , builder, dirKind, dirLoc)
1173+ .emitClauses (clauses);
11601174}
11611175
11621176#define EXPL_SPEC (N ) \
0 commit comments