Skip to content

Commit 0b423d3

Browse files
committed
Partial mapping of private var block args.
1 parent 7ff7b4b commit 0b423d3

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

flang/lib/Lower/OpenMP.cpp

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,7 @@ void DataSharingProcessor::collectDefaultSymbols() {
493493

494494
void 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

flang/test/Lower/OpenMP/FIR/delayed_privatization.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
subroutine private_clause_allocatable()
22
integer :: xxx
3-
integer :: yyy
43

5-
!$OMP PARALLEL FIRSTPRIVATE(xxx, yyy)
4+
!$OMP PARALLEL FIRSTPRIVATE(xxx)
5+
xxx = xxx + 2
66
!$OMP END PARALLEL
77

88
end subroutine

mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1604,8 +1604,7 @@ void PrivateClauseOp::build(OpBuilder &odsBuilder, OperationState &odsState,
16041604
build(odsBuilder, odsState, privatizerName, initializerType);
16051605

16061606
mlir::Block &block = odsState.regions.front()->emplaceBlock();
1607-
block.addArguments({privateVarType},
1608-
SmallVector<Location>(1, odsState.location));
1607+
block.addArgument(privateVarType, odsState.location);
16091608
}
16101609

16111610
static ParseResult parsePrivateVarList(

0 commit comments

Comments
 (0)