[clang] [llvm] [OpenMP][Clang] Add no-loop SPMD kernel promotion (PR #205325)
Robert Imschweiler via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 30 04:34:33 PDT 2026
================
@@ -3707,6 +3716,28 @@ emitInnerParallelForWhenCombined(CodeGenFunction &CGF,
HasCancel = D->hasCancel();
}
CodeGenFunction::OMPCancelStackRAII CancelRegion(CGF, EKind, HasCancel);
+
+ CodeGenModule &CGM = CGF.CGM;
+ if (canEmitGPUNoLoopKernel(CGM, S)) {
+ const Stmt *Inner = S.getRawStmt();
+ llvm::CanonicalLoopInfo *CLI =
+ CGF.EmitOMPCollapsedCanonicalLoopNest(Inner, 1);
+ llvm::OpenMPIRBuilder::InsertPointTy AllocaIP(
+ CGF.AllocaInsertPt->getParent(), CGF.AllocaInsertPt->getIterator());
+
+ llvm::OpenMPIRBuilder &OMPBuilder =
+ CGM.getOpenMPRuntime().getOMPBuilder();
+ cantFail(OMPBuilder.applyWorkshareLoop(
+ CGF.Builder.getCurrentDebugLocation(), CLI, AllocaIP,
+ /*NeedsBarrier=*/!S.getSingleClause<OMPNowaitClause>(),
+ llvm::omp::OMP_SCHEDULE_Default, /*ChunkSize=*/nullptr,
+ /*HasSimdModifier=*/false, /*HasMonotonicModifier=*/false,
+ /*HasNonmonotonicModifier=*/false, /*HasOrderedClause=*/false,
+ llvm::omp::WorksharingLoopType::DistributeForStaticLoop,
+ /*NoLoop=*/true));
+ return;
----------------
ro-i wrote:
doesn't the early return skip stuff that's happening in EmitOMPWorksharingLoop below?
https://github.com/llvm/llvm-project/pull/205325
More information about the cfe-commits
mailing list