@@ -1001,24 +1001,23 @@ convertOmpWsLoop(Operation &opInst, llvm::IRBuilderBase &builder,
1001
1001
std::optional<omp::ScheduleModifier> scheduleModifier =
1002
1002
loop.getScheduleModifier ();
1003
1003
bool isSimd = loop.getSimdModifier ();
1004
- // TODO: Handle distribute loop without parallel clause
1005
- bool distributeParallelCodeGen = opInst.getParentOfType <omp::DistributeOp>();
1006
- if (distributeParallelCodeGen) {
1007
- ompBuilder->applyWorkshareLoop (
1008
- ompLoc.DL , loopInfo, allocaIP, !loop.getNowait (),
1009
- convertToScheduleKind (schedule), chunk, isSimd,
1010
- scheduleModifier == omp::ScheduleModifier::monotonic,
1011
- scheduleModifier == omp::ScheduleModifier::nonmonotonic, isOrdered,
1012
- llvm::omp::WorksharingLoopType::DistributeForStaticLoop);
1013
- }
1014
- else {
1015
- ompBuilder->applyWorkshareLoop (
1016
- ompLoc.DL , loopInfo, allocaIP, !loop.getNowait (),
1017
- convertToScheduleKind (schedule), chunk, isSimd,
1018
- scheduleModifier == omp::ScheduleModifier::monotonic,
1019
- scheduleModifier == omp::ScheduleModifier::nonmonotonic, isOrdered,
1020
- llvm::omp::WorksharingLoopType::ForStaticLoop);
1004
+
1005
+ bool distributeCodeGen = opInst.getParentOfType <omp::DistributeOp>();
1006
+ bool parallelCodeGen = opInst.getParentOfType <omp::ParallelOp>();
1007
+ llvm::omp::WorksharingLoopType workshareLoopType;
1008
+ if (distributeCodeGen && parallelCodeGen) {
1009
+ workshareLoopType = llvm::omp::WorksharingLoopType::DistributeForStaticLoop;
1010
+ } else if (distributeCodeGen) {
1011
+ workshareLoopType = llvm::omp::WorksharingLoopType::DistributeStaticLoop;
1012
+ } else {
1013
+ workshareLoopType = llvm::omp::WorksharingLoopType::ForStaticLoop;
1021
1014
}
1015
+ ompBuilder->applyWorkshareLoop (
1016
+ ompLoc.DL , loopInfo, allocaIP, !loop.getNowait (),
1017
+ convertToScheduleKind (schedule), chunk, isSimd,
1018
+ scheduleModifier == omp::ScheduleModifier::monotonic,
1019
+ scheduleModifier == omp::ScheduleModifier::nonmonotonic, isOrdered,
1020
+ workshareLoopType);
1022
1021
1023
1022
// Continue building IR after the loop. Note that the LoopInfo returned by
1024
1023
// `collapseLoops` points inside the outermost loop and is intended for
@@ -1044,7 +1043,7 @@ convertOmpWsLoop(Operation &opInst, llvm::IRBuilderBase &builder,
1044
1043
ompBuilder->createReductions (builder.saveIP (), allocaIP,
1045
1044
ompBuilder->RIManager .getReductionInfos (),
1046
1045
loop.getNowait (), /* IsTeamsReduction*/ false ,
1047
- /* HasDistribute*/ distributeParallelCodeGen );
1046
+ /* HasDistribute*/ distributeCodeGen );
1048
1047
if (!contInsertPoint.getBlock ())
1049
1048
return loop->emitOpError () << " failed to convert reductions" ;
1050
1049
auto nextInsertionPoint =
0 commit comments