@@ -1360,9 +1360,8 @@ static llvm::Expected<llvm::Value *> initPrivateVar(
1360
1360
llvm::Value *llvmPrivateVar, llvm::BasicBlock *privInitBlock,
1361
1361
llvm::DenseMap<Value, Value> *mappedPrivateVars = nullptr ) {
1362
1362
Region &initRegion = privDecl.getInitRegion ();
1363
- if (initRegion.empty ()) {
1363
+ if (initRegion.empty ())
1364
1364
return llvmPrivateVar;
1365
- }
1366
1365
1367
1366
// map initialization region block arguments
1368
1367
llvm::Value *nonPrivateVar = findAssociatedValue (
@@ -1412,8 +1411,8 @@ initPrivateVars(llvm::IRBuilderBase &builder,
1412
1411
builder, moduleTranslation, privDecl, mlirPrivVar, blockArg,
1413
1412
llvmPrivateVar, privInitBlock, mappedPrivateVars);
1414
1413
1415
- if (auto err = privVarOrErr. takeError () )
1416
- return err ;
1414
+ if (! privVarOrErr)
1415
+ return privVarOrErr. takeError () ;
1417
1416
1418
1417
llvmPrivateVar = privVarOrErr.get ();
1419
1418
moduleTranslation.mapValue (blockArg, llvmPrivateVar);
@@ -2017,13 +2016,15 @@ convertOmpTaskOp(omp::TaskOp taskOp, llvm::IRBuilderBase &builder,
2017
2016
builder.restoreIP (codegenIP);
2018
2017
2019
2018
llvm::BasicBlock *privInitBlock = nullptr ;
2020
- for (auto [blockArg, privDecl, mlirPrivVar] :
2021
- llvm::zip_equal (privateBlockArgs, privateDecls, mlirPrivateVars)) {
2019
+ llvmPrivateVars.resize (privateBlockArgs.size ());
2020
+ for (auto [i, zip] : llvm::enumerate (llvm::zip_equal (
2021
+ privateBlockArgs, privateDecls, mlirPrivateVars))) {
2022
+ auto [blockArg, privDecl, mlirPrivVar] = zip;
2023
+ // This is handled before the task executes
2022
2024
if (privDecl.readsFromMold ())
2023
- // This is handled before the task executes
2024
2025
continue ;
2025
2026
2026
- auto codegenInsertionPt = builder. saveIP ( );
2027
+ llvm::IRBuilderBase::InsertPointGuard guard (builder );
2027
2028
llvm::Type *llvmAllocType =
2028
2029
moduleTranslation.convertType (privDecl.getType ());
2029
2030
builder.SetInsertPoint (allocaIP.getBlock ()->getTerminator ());
@@ -2036,18 +2037,25 @@ convertOmpTaskOp(omp::TaskOp taskOp, llvm::IRBuilderBase &builder,
2036
2037
if (auto err = privateVarOrError.takeError ())
2037
2038
return err;
2038
2039
moduleTranslation.mapValue (blockArg, privateVarOrError.get ());
2039
- builder.restoreIP (codegenInsertionPt);
2040
+ llvmPrivateVars[i] = privateVarOrError.get ();
2041
+ }
2042
+
2043
+ taskStructMgr.createGEPsToPrivateVars ();
2044
+ for (auto [i, llvmPrivVar] :
2045
+ llvm::enumerate (taskStructMgr.getLLVMPrivateVarGEPs ())) {
2046
+ if (!llvmPrivVar) {
2047
+ assert (llvmPrivateVars[i] && " This is added in the loop above" );
2048
+ continue ;
2049
+ }
2050
+ llvmPrivateVars[i] = llvmPrivVar;
2040
2051
}
2041
2052
2042
2053
// Find and map the addresses of each variable within the task context
2043
2054
// structure
2044
- taskStructMgr.createGEPsToPrivateVars ();
2045
- llvm::copy (taskStructMgr.getLLVMPrivateVarGEPs (),
2046
- std::back_inserter (llvmPrivateVars));
2047
- for (auto [blockArg, llvmPrivateVar] :
2048
- llvm::zip_equal (privateBlockArgs, llvmPrivateVars)) {
2049
- if (!llvmPrivateVar)
2050
- // This was handled above
2055
+ for (auto [blockArg, llvmPrivateVar, privateDecl] :
2056
+ llvm::zip_equal (privateBlockArgs, llvmPrivateVars, privateDecls)) {
2057
+ // This was handled above.
2058
+ if (!privateDecl.readsFromMold ())
2051
2059
continue ;
2052
2060
// Fix broken pass-by-value case for Fortran character boxes
2053
2061
if (!mlir::isa<LLVM::LLVMPointerType>(blockArg.getType ())) {
0 commit comments