@@ -493,6 +493,7 @@ void DataSharingProcessor::collectDefaultSymbols() {
493493
494494void DataSharingProcessor::privatize (
495495 llvm::SetVector<mlir::omp::PrivateClauseOp> *privateInitializers) {
496+ auto *op = firOpBuilder.getInsertionBlock ()->getParentOp ();
496497
497498 for (const Fortran::semantics::Symbol *sym : privatizedSymbols) {
498499
@@ -516,9 +517,10 @@ void DataSharingProcessor::privatize(
516517 Fortran::lower::SymbolBox hsb = converter.lookupOneLevelUpSymbol (*sym);
517518 assert (hsb && " Host symbol box not found" );
518519
520+ auto symType = hsb.getAddr ().getType ();
521+ auto symLoc = hsb.getAddr ().getLoc ();
519522 auto privatizerOp = firOpBuilder.create <mlir::omp::PrivateClauseOp>(
520- hsb.getAddr ().getLoc (), hsb.getAddr ().getType (),
521- sym->name ().ToString ());
523+ symLoc, symType, sym->name ().ToString ());
522524 firOpBuilder.setInsertionPointToEnd (&privatizerOp.getBody ().front ());
523525
524526 converter.getLocalSymbols ()->pushScope ();
@@ -536,13 +538,18 @@ void DataSharingProcessor::privatize(
536538 converter.getLocalSymbols ()->popScope ();
537539 converter.getLocalSymbols ()->popScope ();
538540 firOpBuilder.restoreInsertionPoint (ip);
539- }
540541
541- // TODO: This will eventually be an else to the `if` above it. For now, I
542- // emit both the outlined privatizer AND directly emitted cloning and
543- // copying ops while I am testing.
544- cloneSymbol (sym);
545- copyFirstPrivateSymbol (sym);
542+ privateInitializers->insert (privatizerOp);
543+ auto blockArg = op->getRegion (0 ).front ().addArgument (symType, symLoc);
544+ converter.bindSymbol (*sym, blockArg);
545+ } else {
546+
547+ // TODO: This will eventually be an else to the `if` above it. For now,
548+ // I emit both the outlined privatizer AND directly emitted cloning and
549+ // copying ops while I am testing.
550+ cloneSymbol (sym);
551+ copyFirstPrivateSymbol (sym);
552+ }
546553 }
547554 }
548555}
@@ -2376,8 +2383,10 @@ static void createBodyOfOp(
23762383 firOpBuilder.setInsertionPointToEnd (&op.getRegion ().back ());
23772384 auto *temp = Fortran::lower::genOpenMPTerminator (firOpBuilder,
23782385 op.getOperation (), loc);
2386+
23792387 firOpBuilder.setInsertionPointAfter (marker);
23802388 genNestedEvaluations (converter, eval);
2389+
23812390 temp->erase ();
23822391 }
23832392
0 commit comments