[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