Skip to content

Commit d5bf7d3

Browse files
authored
[MLIR][OpenMP] Updated fix for intermixed TargetDataOp and TargetOp (#56)
* [MLIR][OpenMP] Updated fix for intermixed TargetDataOp and TargetOp * Update mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp Remove extra newline
1 parent 49a25dc commit d5bf7d3

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2683,8 +2683,12 @@ convertOmpTargetData(Operation *op, llvm::IRBuilderBase &builder,
26832683
argIndex++;
26842684
}
26852685

2686-
bodyGenStatus = inlineConvertOmpRegions(region, "omp.data.region",
2687-
builder, moduleTranslation);
2686+
SmallVector<llvm::PHINode *> phis;
2687+
llvm::BasicBlock *continuationBlock =
2688+
convertOmpOpRegions(region, "omp.data.region", builder,
2689+
moduleTranslation, bodyGenStatus, &phis);
2690+
builder.SetInsertPoint(continuationBlock,
2691+
continuationBlock->getFirstInsertionPt());
26882692
}
26892693
break;
26902694
case BodyGenTy::DupNoPriv:
@@ -2693,8 +2697,12 @@ convertOmpTargetData(Operation *op, llvm::IRBuilderBase &builder,
26932697
// If device info is available then region has already been generated
26942698
if (info.DevicePtrInfoMap.empty()) {
26952699
builder.restoreIP(codeGenIP);
2696-
bodyGenStatus = inlineConvertOmpRegions(region, "omp.data.region",
2697-
builder, moduleTranslation);
2700+
SmallVector<llvm::PHINode *> phis;
2701+
llvm::BasicBlock *continuationBlock =
2702+
convertOmpOpRegions(region, "omp.data.region", builder,
2703+
moduleTranslation, bodyGenStatus, &phis);
2704+
builder.SetInsertPoint(continuationBlock,
2705+
continuationBlock->getFirstInsertionPt());
26982706
}
26992707
break;
27002708
}
@@ -3617,6 +3625,8 @@ convertTopLevelTargetOp(Operation *op, llvm::IRBuilderBase &builder,
36173625
LLVM::ModuleTranslation &moduleTranslation) {
36183626
if (isa<omp::TargetOp>(op))
36193627
return convertOmpTarget(*op, builder, moduleTranslation);
3628+
if (isa<omp::TargetDataOp>(op))
3629+
return convertOmpTargetData(op, builder, moduleTranslation);
36203630
bool interrupted =
36213631
op->walk<WalkOrder::PreOrder>([&](omp::TargetOp targetOp) {
36223632
if (failed(convertOmpTarget(*targetOp, builder, moduleTranslation)))

0 commit comments

Comments
 (0)