[llvm-branch-commits] [OpenMP] Support 'taskgraph' semantics via new libomp API entry points (PR #194051)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Apr 24 13:56:00 PDT 2026


github-actions[bot] wrote:

<!--LLVM CODE FORMAT COMMENT: {clang-format}-->


:warning: C/C++ code formatter, clang-format found issues in your code. :warning:

<details>
<summary>
You can test this locally with the following command:
</summary>

``````````bash
git-clang-format --diff origin/main HEAD --extensions h,cpp -- clang/lib/CodeGen/CGOpenMPRuntime.cpp clang/lib/CodeGen/CGOpenMPRuntime.h clang/lib/CodeGen/CGStmtOpenMP.cpp clang/lib/CodeGen/CodeGenFunction.h --diff_from_common_commit
``````````

:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:

</details>

<details>
<summary>
View the diff from clang-format here.
</summary>

``````````diff
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
index 5361e830d..d7447fa8b 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -2251,8 +2251,7 @@ void CGOpenMPRuntime::emitTaskgraphCall(CodeGenFunction &CGF,
     return;
 
   // The nogroup clause doesn't support an argument yet.  FIXME.
-  const OMPNogroupClause *NoGroupClause =
-    D.getSingleClause<OMPNogroupClause>();
+  const OMPNogroupClause *NoGroupClause = D.getSingleClause<OMPNogroupClause>();
   llvm::Value *NoGroup;
   if (NoGroupClause) {
     NoGroup = CGF.Builder.getInt32(1);
@@ -2267,7 +2266,7 @@ void CGOpenMPRuntime::emitTaskgraphCall(CodeGenFunction &CGF,
     const Expr *Cond = GraphResetClause->getCondition();
     llvm::Value *CondVal = CGF.EvaluateExprAsBool(Cond);
     GraphReset =
-      CGF.Builder.CreateIntCast(CondVal, CGF.IntTy, /*isSigned=*/true);
+        CGF.Builder.CreateIntCast(CondVal, CGF.IntTy, /*isSigned=*/true);
   } else {
     GraphReset = CGF.Builder.getInt32(0);
   }
@@ -2278,7 +2277,7 @@ void CGOpenMPRuntime::emitTaskgraphCall(CodeGenFunction &CGF,
     const auto *E = GraphIdClause->getId();
     auto *GraphIdVal = CGF.EmitScalarExpr(E);
     GraphId =
-      CGF.Builder.CreateIntCast(GraphIdVal, CGM.Int32Ty, /*isSigned=*/false);
+        CGF.Builder.CreateIntCast(GraphIdVal, CGM.Int32Ty, /*isSigned=*/false);
   }
 
   CodeGenFunction OutlinedCGF(CGM, /*suppressNewContext=*/true);
@@ -2299,12 +2298,10 @@ void CGOpenMPRuntime::emitTaskgraphCall(CodeGenFunction &CGF,
 
   // Create an internal-linkage global variable to hold the taskgraph handle.
   std::string GraphHandleName = getName({"omp", "taskgraph", "handle"});
-  auto *GraphHandle =
-    new llvm::GlobalVariable(CGM.getModule(), CGM.VoidPtrTy,
-                             /*IsConstant=*/false,
-                             llvm::GlobalValue::InternalLinkage,
-                             llvm::Constant::getNullValue(CGM.VoidPtrTy),
-                             GraphHandleName);
+  auto *GraphHandle = new llvm::GlobalVariable(
+      CGM.getModule(), CGM.VoidPtrTy,
+      /*IsConstant=*/false, llvm::GlobalValue::InternalLinkage,
+      llvm::Constant::getNullValue(CGM.VoidPtrTy), GraphHandleName);
 
   std::array<llvm::Value *, 8> Args{
       emitUpdateLocation(CGF, Loc),
@@ -2319,19 +2316,19 @@ void CGOpenMPRuntime::emitTaskgraphCall(CodeGenFunction &CGF,
 
   auto &&ThenGen = [&CGF, this, &Args](CodeGenFunction &, PrePostActionTy &) {
     CGF.EmitRuntimeCall(OMPBuilder.getOrCreateRuntimeFunction(
-          CGM.getModule(), OMPRTL___kmpc_taskgraph),
-        Args);
+                            CGM.getModule(), OMPRTL___kmpc_taskgraph),
+                        Args);
   };
-  auto &&ElseGen = [&CGF, this, &FnT, &CapStruct, &Loc, &OutlinedCGF]
-    (CodeGenFunction &, PrePostActionTy &) {
-      llvm::Value *CapturedArgsPtr = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
-          CapStruct.getPointer(OutlinedCGF), CGM.VoidPtrTy);
+  auto &&ElseGen = [&CGF, this, &FnT, &CapStruct, &Loc,
+                    &OutlinedCGF](CodeGenFunction &, PrePostActionTy &) {
+    llvm::Value *CapturedArgsPtr =
+        CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
+            CapStruct.getPointer(OutlinedCGF), CGM.VoidPtrTy);
 
     auto &&CodeGen = [&](CodeGenFunction &CGF, PrePostActionTy &Action) {
       Action.Enter(CGF);
-      CGF.CGM.getOpenMPRuntime().emitOutlinedFunctionCall(CGF, Loc,
-          FnT,
-          CapturedArgsPtr);
+      CGF.CGM.getOpenMPRuntime().emitOutlinedFunctionCall(CGF, Loc, FnT,
+                                                          CapturedArgsPtr);
     };
     RegionCodeGenTy RCG(CodeGen);
     RCG(CGF);
@@ -3878,13 +3875,11 @@ static void getKmpAffinityType(ASTContext &C, QualType &KmpTaskAffinityInfoTy) {
   }
 }
 
-CGOpenMPRuntime::TaskResultTy
-CGOpenMPRuntime::emitTaskInit(CodeGenFunction &CGF, SourceLocation Loc,
-                              const OMPExecutableDirective &D,
-                              llvm::Function *TaskFunction, QualType SharedsTy,
-                              Address Shareds, const OMPTaskDataTy &Data,
-                              bool ForTaskgraph,
-                              std::array<llvm::Value *, 3> &TaskAllocArgs) {
+CGOpenMPRuntime::TaskResultTy CGOpenMPRuntime::emitTaskInit(
+    CodeGenFunction &CGF, SourceLocation Loc, const OMPExecutableDirective &D,
+    llvm::Function *TaskFunction, QualType SharedsTy, Address Shareds,
+    const OMPTaskDataTy &Data, bool ForTaskgraph,
+    std::array<llvm::Value *, 3> &TaskAllocArgs) {
   ASTContext &C = CGM.getContext();
   llvm::SmallVector<PrivateDataTy, 4> Privates;
   // Aggregate privates and sort them by the alignment.
@@ -4793,16 +4788,15 @@ void CGOpenMPRuntime::emitTaskCall(CodeGenFunction &CGF, SourceLocation Loc,
   if (!CGF.HaveInsertPoint())
     return;
 
-  auto &&TaskgraphTaskCodeGen =
-      [this, &Loc, &D, TaskFunction, &SharedsTy, &Shareds, &Data]
-        (CodeGenFunction &CGF, PrePostActionTy &) {
+  auto &&TaskgraphTaskCodeGen = [this, &Loc, &D, TaskFunction, &SharedsTy,
+                                 &Shareds, &Data](CodeGenFunction &CGF,
+                                                  PrePostActionTy &) {
     llvm::Value *ThreadId = getThreadID(CGF, Loc);
     llvm::Value *UpLoc = emitUpdateLocation(CGF, Loc);
     std::array<llvm::Value *, 9> TGTaskArgs;
     std::array<llvm::Value *, 3> TaskAllocArgs;
-    TaskResultTy Result =
-        emitTaskInit(CGF, Loc, D, TaskFunction, SharedsTy, Shareds, Data, true,
-                      TaskAllocArgs);
+    TaskResultTy Result = emitTaskInit(CGF, Loc, D, TaskFunction, SharedsTy,
+                                       Shareds, Data, true, TaskAllocArgs);
     Address DependenciesArray = Address::invalid();
     llvm::Value *NumOfElements;
     std::tie(NumOfElements, DependenciesArray) =
@@ -4829,16 +4823,17 @@ void CGOpenMPRuntime::emitTaskCall(CodeGenFunction &CGF, SourceLocation Loc,
       TGTaskArgs[8] = DependenciesArray.emitRawPointer(CGF);
     }
     CGF.EmitRuntimeCall(OMPBuilder.getOrCreateRuntimeFunction(
-          CGM.getModule(), OMPRTL___kmpc_taskgraph_task),
-        TGTaskArgs);
+                            CGM.getModule(), OMPRTL___kmpc_taskgraph_task),
+                        TGTaskArgs);
   };
 
-  auto &&NonTaskgraphTaskCodeGen =
-      [this, &Loc, &D, TaskFunction, &SharedsTy, &Shareds, IfCond, &Data]
-        (CodeGenFunction &CGF, PrePostActionTy &) {
-    std::array<llvm::Value*, 3> DummyArray;
-    TaskResultTy Result =
-        emitTaskInit(CGF, Loc, D, TaskFunction, SharedsTy, Shareds, Data, false, DummyArray);
+  auto &&NonTaskgraphTaskCodeGen = [this, &Loc, &D, TaskFunction, &SharedsTy,
+                                    &Shareds, IfCond,
+                                    &Data](CodeGenFunction &CGF,
+                                           PrePostActionTy &) {
+    std::array<llvm::Value *, 3> DummyArray;
+    TaskResultTy Result = emitTaskInit(CGF, Loc, D, TaskFunction, SharedsTy,
+                                       Shareds, Data, false, DummyArray);
     llvm::Value *NewTask = Result.NewTask;
     llvm::Function *TaskEntry = Result.TaskEntry;
     llvm::Value *NewTaskNewTaskTTy = Result.NewTaskNewTaskTTy;
@@ -4850,15 +4845,15 @@ void CGOpenMPRuntime::emitTaskCall(CodeGenFunction &CGF, SourceLocation Loc,
     std::tie(NumOfElements, DependenciesArray) =
         emitDependClause(CGF, Data.Dependences, Loc);
 
-    // NOTE: routine and part_id fields are initialized by __kmpc_omp_task_alloc()
-    // libcall.
-    // Build kmp_int32 __kmpc_omp_task_with_deps(ident_t *, kmp_int32 gtid,
-    // kmp_task_t *new_task, kmp_int32 ndeps, kmp_depend_info_t *dep_list,
-    // kmp_int32 ndeps_noalias, kmp_depend_info_t *noalias_dep_list) if dependence
-    // list is not empty
+    // NOTE: routine and part_id fields are initialized by
+    // __kmpc_omp_task_alloc() libcall. Build kmp_int32
+    // __kmpc_omp_task_with_deps(ident_t *, kmp_int32 gtid, kmp_task_t
+    // *new_task, kmp_int32 ndeps, kmp_depend_info_t *dep_list, kmp_int32
+    // ndeps_noalias, kmp_depend_info_t *noalias_dep_list) if dependence list is
+    // not empty
     llvm::Value *ThreadID = getThreadID(CGF, Loc);
     llvm::Value *UpLoc = emitUpdateLocation(CGF, Loc);
-    llvm::Value *TaskArgs[] = { UpLoc, ThreadID, NewTask };
+    llvm::Value *TaskArgs[] = {UpLoc, ThreadID, NewTask};
     llvm::Value *DepTaskArgs[7];
     if (!Data.Dependences.empty()) {
       DepTaskArgs[0] = UpLoc;
@@ -4870,7 +4865,8 @@ void CGOpenMPRuntime::emitTaskCall(CodeGenFunction &CGF, SourceLocation Loc,
       DepTaskArgs[6] = llvm::ConstantPointerNull::get(CGF.VoidPtrTy);
     }
     auto &&ThenCodeGen = [this, &Data, TDBase, KmpTaskTQTyRD, &TaskArgs,
-                          &DepTaskArgs](CodeGenFunction &CGF, PrePostActionTy &) {
+                          &DepTaskArgs](CodeGenFunction &CGF,
+                                        PrePostActionTy &) {
       if (!Data.Tied) {
         auto PartIdFI = std::next(KmpTaskTQTyRD->field_begin(), KmpTaskTPartId);
         LValue PartIdLVal = CGF.EmitLValueForField(TDBase, *PartIdFI);
@@ -4968,9 +4964,8 @@ void CGOpenMPRuntime::emitTaskLoopCall(CodeGenFunction &CGF, SourceLocation Loc,
     return;
 
   std::array<llvm::Value *, 3> TaskAllocArgs;
-  TaskResultTy TaskInitResult =
-      emitTaskInit(CGF, Loc, D, TaskFunction, SharedsTy, Shareds, Data, true,
-                    TaskAllocArgs);
+  TaskResultTy TaskInitResult = emitTaskInit(
+      CGF, Loc, D, TaskFunction, SharedsTy, Shareds, Data, true, TaskAllocArgs);
 
   llvm::Value *IfVal;
   if (IfCond) {
@@ -4982,9 +4977,10 @@ void CGOpenMPRuntime::emitTaskLoopCall(CodeGenFunction &CGF, SourceLocation Loc,
 
   enum { NoSchedule = 0, Grainsize = 1, NumTasks = 2 };
 
-  auto &&TaskgraphTaskloopCodeGen =
-      [this, &Loc, &D, &TaskInitResult, &Shareds, IfVal, &Data, &TaskAllocArgs]
-        (CodeGenFunction &CGF, PrePostActionTy &) {
+  auto &&TaskgraphTaskloopCodeGen = [this, &Loc, &D, &TaskInitResult, &Shareds,
+                                     IfVal, &Data,
+                                     &TaskAllocArgs](CodeGenFunction &CGF,
+                                                     PrePostActionTy &) {
     llvm::Value *ThreadId = getThreadID(CGF, Loc);
     llvm::Value *UpLoc = emitUpdateLocation(CGF, Loc);
     std::array<llvm::Value *, 16> TGTaskLoopArgs;
@@ -4996,16 +4992,18 @@ void CGOpenMPRuntime::emitTaskLoopCall(CodeGenFunction &CGF, SourceLocation Loc,
                    KmpTaskTLowerBound));
     const auto *LBVar =
         cast<VarDecl>(cast<DeclRefExpr>(D.getLowerBoundVariable())->getDecl());
-    CGF.EmitAnyExprToMem(LBVar->getInit(), LBLVal.getAddress(), LBLVal.getQuals(),
-                        /*IsInitializer=*/true);
+    CGF.EmitAnyExprToMem(LBVar->getInit(), LBLVal.getAddress(),
+                         LBLVal.getQuals(),
+                         /*IsInitializer=*/true);
     LValue UBLVal = CGF.EmitLValueForField(
         TaskInitResult.TDBase,
         *std::next(TaskInitResult.KmpTaskTQTyRD->field_begin(),
-                 KmpTaskTUpperBound));
+                   KmpTaskTUpperBound));
     const auto *UBVar =
         cast<VarDecl>(cast<DeclRefExpr>(D.getUpperBoundVariable())->getDecl());
-    CGF.EmitAnyExprToMem(UBVar->getInit(), UBLVal.getAddress(), UBLVal.getQuals(),
-                        /*IsInitializer=*/true);
+    CGF.EmitAnyExprToMem(UBVar->getInit(), UBLVal.getAddress(),
+                         UBLVal.getQuals(),
+                         /*IsInitializer=*/true);
     LValue StLVal = CGF.EmitLValueForField(
         TaskInitResult.TDBase,
         *std::next(TaskInitResult.KmpTaskTQTyRD->field_begin(),
@@ -5017,12 +5015,13 @@ void CGOpenMPRuntime::emitTaskLoopCall(CodeGenFunction &CGF, SourceLocation Loc,
     // Store reductions address.
     LValue RedLVal = CGF.EmitLValueForField(
         TaskInitResult.TDBase,
-        *std::next(TaskInitResult.KmpTaskTQTyRD->field_begin(), KmpTaskTReductions));
+        *std::next(TaskInitResult.KmpTaskTQTyRD->field_begin(),
+                   KmpTaskTReductions));
     if (Data.Reductions) {
       CGF.EmitStoreOfScalar(Data.Reductions, RedLVal);
     } else {
       CGF.EmitNullInitialization(RedLVal.getAddress(),
-                                CGF.getContext().VoidPtrTy);
+                                 CGF.getContext().VoidPtrTy);
     }
 
     TGTaskLoopArgs[0] = UpLoc;
@@ -5036,31 +5035,36 @@ void CGOpenMPRuntime::emitTaskLoopCall(CodeGenFunction &CGF, SourceLocation Loc,
     TGTaskLoopArgs[8] = LBLVal.getPointer(CGF);
     TGTaskLoopArgs[9] = UBLVal.getPointer(CGF);
     TGTaskLoopArgs[10] = CGF.EmitLoadOfScalar(StLVal, Loc);
-    TGTaskLoopArgs[11] = llvm::ConstantInt::getSigned(CGF.IntTy, Data.Nogroup ? 1 : 0);
-    TGTaskLoopArgs[12] = llvm::ConstantInt::getSigned(CGF.IntTy, Data.Schedule.getPointer()
-                           ? Data.Schedule.getInt() ? NumTasks : Grainsize
-                           : NoSchedule);
-    TGTaskLoopArgs[13] = Data.Schedule.getPointer()
-                           ? CGF.Builder.CreateIntCast(Data.Schedule.getPointer(), CGF.Int64Ty, /*isSigned=*/false)
-                           : llvm::ConstantInt::get(CGF.Int64Ty, /*V=*/0);
-    TGTaskLoopArgs[14] = llvm::ConstantInt::getSigned(CGF.IntTy, Data.HasModifier ? 1 : 0);
+    TGTaskLoopArgs[11] =
+        llvm::ConstantInt::getSigned(CGF.IntTy, Data.Nogroup ? 1 : 0);
+    TGTaskLoopArgs[12] = llvm::ConstantInt::getSigned(
+        CGF.IntTy, Data.Schedule.getPointer()
+                       ? Data.Schedule.getInt() ? NumTasks : Grainsize
+                       : NoSchedule);
+    TGTaskLoopArgs[13] =
+        Data.Schedule.getPointer()
+            ? CGF.Builder.CreateIntCast(Data.Schedule.getPointer(), CGF.Int64Ty,
+                                        /*isSigned=*/false)
+            : llvm::ConstantInt::get(CGF.Int64Ty, /*V=*/0);
+    TGTaskLoopArgs[14] =
+        llvm::ConstantInt::getSigned(CGF.IntTy, Data.HasModifier ? 1 : 0);
     TGTaskLoopArgs[15] = TaskInitResult.TaskDupFn
-                           ? CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
-                              TaskInitResult.TaskDupFn, CGF.VoidPtrTy)
-                           : llvm::ConstantPointerNull::get(CGF.VoidPtrTy);
+                             ? CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
+                                   TaskInitResult.TaskDupFn, CGF.VoidPtrTy)
+                             : llvm::ConstantPointerNull::get(CGF.VoidPtrTy);
     CGF.EmitRuntimeCall(OMPBuilder.getOrCreateRuntimeFunction(
-        CGM.getModule(), OMPRTL___kmpc_taskgraph_taskloop),
-        TGTaskLoopArgs);
+                            CGM.getModule(), OMPRTL___kmpc_taskgraph_taskloop),
+                        TGTaskLoopArgs);
   };
 
-  auto &&NonTaskgraphTaskloopCodeGen =
-      [this, &Loc, &D, &TaskInitResult, IfVal, &Data]
-        (CodeGenFunction &CGF, PrePostActionTy &) {
-    // NOTE: routine and part_id fields are initialized by __kmpc_omp_task_alloc()
-    // libcall.
-    // Call to void __kmpc_taskloop(ident_t *loc, int gtid, kmp_task_t *task, int
-    // if_val, kmp_uint64 *lb, kmp_uint64 *ub, kmp_int64 st, int nogroup, int
-    // sched, kmp_uint64 grainsize, void *task_dup);
+  auto &&NonTaskgraphTaskloopCodeGen = [this, &Loc, &D, &TaskInitResult, IfVal,
+                                        &Data](CodeGenFunction &CGF,
+                                               PrePostActionTy &) {
+    // NOTE: routine and part_id fields are initialized by
+    // __kmpc_omp_task_alloc() libcall. Call to void __kmpc_taskloop(ident_t
+    // *loc, int gtid, kmp_task_t *task, int if_val, kmp_uint64 *lb, kmp_uint64
+    // *ub, kmp_int64 st, int nogroup, int sched, kmp_uint64 grainsize, void
+    // *task_dup);
     llvm::Value *ThreadID = getThreadID(CGF, Loc);
     llvm::Value *UpLoc = emitUpdateLocation(CGF, Loc);
 
@@ -5070,24 +5074,27 @@ void CGOpenMPRuntime::emitTaskLoopCall(CodeGenFunction &CGF, SourceLocation Loc,
                    KmpTaskTLowerBound));
     const auto *LBVar =
         cast<VarDecl>(cast<DeclRefExpr>(D.getLowerBoundVariable())->getDecl());
-    CGF.EmitAnyExprToMem(LBVar->getInit(), LBLVal.getAddress(), LBLVal.getQuals(),
-                        /*IsInitializer=*/true);
+    CGF.EmitAnyExprToMem(LBVar->getInit(), LBLVal.getAddress(),
+                         LBLVal.getQuals(),
+                         /*IsInitializer=*/true);
     LValue UBLVal = CGF.EmitLValueForField(
         TaskInitResult.TDBase,
         *std::next(TaskInitResult.KmpTaskTQTyRD->field_begin(),
                    KmpTaskTUpperBound));
     const auto *UBVar =
         cast<VarDecl>(cast<DeclRefExpr>(D.getUpperBoundVariable())->getDecl());
-    CGF.EmitAnyExprToMem(UBVar->getInit(), UBLVal.getAddress(), UBLVal.getQuals(),
-                        /*IsInitializer=*/true);
+    CGF.EmitAnyExprToMem(UBVar->getInit(), UBLVal.getAddress(),
+                         UBLVal.getQuals(),
+                         /*IsInitializer=*/true);
     LValue StLVal = CGF.EmitLValueForField(
         TaskInitResult.TDBase,
         *std::next(TaskInitResult.KmpTaskTQTyRD->field_begin(),
                    KmpTaskTStride));
     const auto *StVar =
         cast<VarDecl>(cast<DeclRefExpr>(D.getStrideVariable())->getDecl());
-    CGF.EmitAnyExprToMem(StVar->getInit(), StLVal.getAddress(), StLVal.getQuals(),
-                        /*IsInitializer=*/true);
+    CGF.EmitAnyExprToMem(StVar->getInit(), StLVal.getAddress(),
+                         StLVal.getQuals(),
+                         /*IsInitializer=*/true);
     // Store reductions address.
     LValue RedLVal = CGF.EmitLValueForField(
         TaskInitResult.TDBase,
@@ -5097,7 +5104,7 @@ void CGOpenMPRuntime::emitTaskLoopCall(CodeGenFunction &CGF, SourceLocation Loc,
       CGF.EmitStoreOfScalar(Data.Reductions, RedLVal);
     } else {
       CGF.EmitNullInitialization(RedLVal.getAddress(),
-                                CGF.getContext().VoidPtrTy);
+                                 CGF.getContext().VoidPtrTy);
     }
     llvm::SmallVector<llvm::Value *, 12> TaskArgs{
         UpLoc,
@@ -5111,8 +5118,8 @@ void CGOpenMPRuntime::emitTaskLoopCall(CodeGenFunction &CGF, SourceLocation Loc,
             CGF.IntTy, 1), // Always 1 because taskgroup emitted by the compiler
         llvm::ConstantInt::getSigned(
             CGF.IntTy, Data.Schedule.getPointer()
-                          ? Data.Schedule.getInt() ? NumTasks : Grainsize
-                          : NoSchedule),
+                           ? Data.Schedule.getInt() ? NumTasks : Grainsize
+                           : NoSchedule),
         Data.Schedule.getPointer()
             ? CGF.Builder.CreateIntCast(Data.Schedule.getPointer(), CGF.Int64Ty,
                                         /*isSigned=*/false)
@@ -5121,13 +5128,13 @@ void CGOpenMPRuntime::emitTaskLoopCall(CodeGenFunction &CGF, SourceLocation Loc,
       TaskArgs.push_back(llvm::ConstantInt::get(CGF.Int32Ty, 1));
 
     TaskArgs.push_back(TaskInitResult.TaskDupFn
-                          ? CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
-                                TaskInitResult.TaskDupFn, CGF.VoidPtrTy)
-                          : llvm::ConstantPointerNull::get(CGF.VoidPtrTy));
+                           ? CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
+                                 TaskInitResult.TaskDupFn, CGF.VoidPtrTy)
+                           : llvm::ConstantPointerNull::get(CGF.VoidPtrTy));
     CGF.EmitRuntimeCall(OMPBuilder.getOrCreateRuntimeFunction(
                             CGM.getModule(), Data.HasModifier
-                                                ? OMPRTL___kmpc_taskloop_5
-                                                : OMPRTL___kmpc_taskloop),
+                                                 ? OMPRTL___kmpc_taskloop_5
+                                                 : OMPRTL___kmpc_taskloop),
                         TaskArgs);
   };
 
@@ -6275,8 +6282,8 @@ llvm::Value *CGOpenMPRuntime::emitTaskReductionInit(
         Args);
   else
     return CGF.EmitRuntimeCall(OMPBuilder.getOrCreateRuntimeFunction(
-                                  CGM.getModule(), OMPRTL___kmpc_taskred_init),
-                              Args);
+                                   CGM.getModule(), OMPRTL___kmpc_taskred_init),
+                               Args);
 }
 
 void CGOpenMPRuntime::emitTaskReductionFini(CodeGenFunction &CGF,
@@ -6352,57 +6359,59 @@ void CGOpenMPRuntime::emitTaskwaitCall(CodeGenFunction &CGF, SourceLocation Loc,
         emitDependClause(CGF, Data.Dependences, Loc);
 
     auto &&TaskgraphTaskwaitCodeGen =
-        [this, UpLoc, ThreadID, NumOfElements, &DependenciesArray, &Data]
-          (CodeGenFunction &CGF, PrePostActionTy &) {
-      llvm::Value *TGTaskWaitArgs[5];
-      TGTaskWaitArgs[0] = UpLoc;
-      TGTaskWaitArgs[1] = ThreadID;
-      TGTaskWaitArgs[2] = NumOfElements;
-      if (Data.Dependences.empty()) {
-        // This should be a proper error
-        fprintf(stderr, "*** Taskwait inside taskgraph with no depend clause is not task-generating\n");
-        exit(1);
-      }
-      TGTaskWaitArgs[3] = DependenciesArray.emitRawPointer(CGF);
-      TGTaskWaitArgs[4] =
-          llvm::ConstantInt::get(CGF.Int32Ty, Data.HasNowaitClause);
-      CGF.EmitRuntimeCall(OMPBuilder.getOrCreateRuntimeFunction(
-          CGM.getModule(), OMPRTL___kmpc_taskgraph_taskwait),
-          TGTaskWaitArgs);
-    };
+        [this, UpLoc, ThreadID, NumOfElements, &DependenciesArray,
+         &Data](CodeGenFunction &CGF, PrePostActionTy &) {
+          llvm::Value *TGTaskWaitArgs[5];
+          TGTaskWaitArgs[0] = UpLoc;
+          TGTaskWaitArgs[1] = ThreadID;
+          TGTaskWaitArgs[2] = NumOfElements;
+          if (Data.Dependences.empty()) {
+            // This should be a proper error
+            fprintf(stderr, "*** Taskwait inside taskgraph with no depend "
+                            "clause is not task-generating\n");
+            exit(1);
+          }
+          TGTaskWaitArgs[3] = DependenciesArray.emitRawPointer(CGF);
+          TGTaskWaitArgs[4] =
+              llvm::ConstantInt::get(CGF.Int32Ty, Data.HasNowaitClause);
+          CGF.EmitRuntimeCall(
+              OMPBuilder.getOrCreateRuntimeFunction(
+                  CGM.getModule(), OMPRTL___kmpc_taskgraph_taskwait),
+              TGTaskWaitArgs);
+        };
     auto &&NonTaskgraphTaskwaitCodeGen =
-        [this, UpLoc, ThreadID, NumOfElements, &DependenciesArray, &M, &Data]
-          (CodeGenFunction &CGF, PrePostActionTy &) {
-      if (!Data.Dependences.empty()) {
-        llvm::Value *DepWaitTaskArgs[7];
-        DepWaitTaskArgs[0] = UpLoc;
-        DepWaitTaskArgs[1] = ThreadID;
-        DepWaitTaskArgs[2] = NumOfElements;
-        DepWaitTaskArgs[3] = DependenciesArray.emitRawPointer(CGF);
-        DepWaitTaskArgs[4] = CGF.Builder.getInt32(0);
-        DepWaitTaskArgs[5] = llvm::ConstantPointerNull::get(CGF.VoidPtrTy);
-        DepWaitTaskArgs[6] =
-            llvm::ConstantInt::get(CGF.Int32Ty, Data.HasNowaitClause);
-
-        CodeGenFunction::RunCleanupsScope LocalScope(CGF);
-
-        // Build void __kmpc_omp_taskwait_deps_51(ident_t *, kmp_int32 gtid,
-        // kmp_int32 ndeps, kmp_depend_info_t *dep_list, kmp_int32
-        // ndeps_noalias, kmp_depend_info_t *noalias_dep_list,
-        // kmp_int32 has_no_wait); if dependence info is specified.
-        CGF.EmitRuntimeCall(OMPBuilder.getOrCreateRuntimeFunction(
-                                M, OMPRTL___kmpc_omp_taskwait_deps_51),
-                            DepWaitTaskArgs);
-      } else {
-        // Build call kmp_int32 __kmpc_omp_taskwait(ident_t *loc, kmp_int32
-        // global_tid);
-        llvm::Value *Args[] = {UpLoc, ThreadID};
-        // Ignore return result until untied tasks are supported.
-        CGF.EmitRuntimeCall(
-            OMPBuilder.getOrCreateRuntimeFunction(M, OMPRTL___kmpc_omp_taskwait),
-            Args);
-      }
-    };
+        [this, UpLoc, ThreadID, NumOfElements, &DependenciesArray, &M,
+         &Data](CodeGenFunction &CGF, PrePostActionTy &) {
+          if (!Data.Dependences.empty()) {
+            llvm::Value *DepWaitTaskArgs[7];
+            DepWaitTaskArgs[0] = UpLoc;
+            DepWaitTaskArgs[1] = ThreadID;
+            DepWaitTaskArgs[2] = NumOfElements;
+            DepWaitTaskArgs[3] = DependenciesArray.emitRawPointer(CGF);
+            DepWaitTaskArgs[4] = CGF.Builder.getInt32(0);
+            DepWaitTaskArgs[5] = llvm::ConstantPointerNull::get(CGF.VoidPtrTy);
+            DepWaitTaskArgs[6] =
+                llvm::ConstantInt::get(CGF.Int32Ty, Data.HasNowaitClause);
+
+            CodeGenFunction::RunCleanupsScope LocalScope(CGF);
+
+            // Build void __kmpc_omp_taskwait_deps_51(ident_t *, kmp_int32 gtid,
+            // kmp_int32 ndeps, kmp_depend_info_t *dep_list, kmp_int32
+            // ndeps_noalias, kmp_depend_info_t *noalias_dep_list,
+            // kmp_int32 has_no_wait); if dependence info is specified.
+            CGF.EmitRuntimeCall(OMPBuilder.getOrCreateRuntimeFunction(
+                                    M, OMPRTL___kmpc_omp_taskwait_deps_51),
+                                DepWaitTaskArgs);
+          } else {
+            // Build call kmp_int32 __kmpc_omp_taskwait(ident_t *loc, kmp_int32
+            // global_tid);
+            llvm::Value *Args[] = {UpLoc, ThreadID};
+            // Ignore return result until untied tasks are supported.
+            CGF.EmitRuntimeCall(OMPBuilder.getOrCreateRuntimeFunction(
+                                    M, OMPRTL___kmpc_omp_taskwait),
+                                Args);
+          }
+        };
 
     if (CGF.getOMPWithinTaskgraph()) {
       // Lexically within taskgraph, always replayable.
diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.h b/clang/lib/CodeGen/CGOpenMPRuntime.h
index 9a4de2641..edeba77cf 100644
--- a/clang/lib/CodeGen/CGOpenMPRuntime.h
+++ b/clang/lib/CodeGen/CGOpenMPRuntime.h
@@ -584,7 +584,7 @@ protected:
                             llvm::Function *TaskFunction, QualType SharedsTy,
                             Address Shareds, const OMPTaskDataTy &Data,
                             bool ForTaskgraph,
-                            std::array<llvm::Value*, 3> &TaskAllocArgs);
+                            std::array<llvm::Value *, 3> &TaskAllocArgs);
 
   /// Emit update for lastprivate conditional data.
   void emitLastprivateConditionalUpdate(CodeGenFunction &CGF, LValue IVLVal,
diff --git a/clang/lib/CodeGen/CGStmtOpenMP.cpp b/clang/lib/CodeGen/CGStmtOpenMP.cpp
index 65eb81776..8d94b9ed0 100644
--- a/clang/lib/CodeGen/CGStmtOpenMP.cpp
+++ b/clang/lib/CodeGen/CGStmtOpenMP.cpp
@@ -8344,13 +8344,11 @@ void CodeGenFunction::EmitOMPTaskLoopBasedDirective(const OMPLoopDirective &S) {
                                (*LIP)->getType(), S.getBeginLoc()));
     });
   };
-  auto &&TaskGen =
-      [&S, SharedsTy, CapturedStruct, IfCond]
-        (CodeGenFunction &CGF, llvm::Function *OutlinedFn,
-         const OMPTaskDataTy &Data) {
-    auto &&CodeGen =
-        [&S, OutlinedFn, SharedsTy, CapturedStruct, IfCond, &Data]
-          (CodeGenFunction &CGF, PrePostActionTy &) {
+  auto &&TaskGen = [&S, SharedsTy, CapturedStruct,
+                    IfCond](CodeGenFunction &CGF, llvm::Function *OutlinedFn,
+                            const OMPTaskDataTy &Data) {
+    auto &&CodeGen = [&S, OutlinedFn, SharedsTy, CapturedStruct, IfCond,
+                      &Data](CodeGenFunction &CGF, PrePostActionTy &) {
       OMPLoopScope PreInitScope(CGF, S);
       CGF.CGM.getOpenMPRuntime().emitTaskLoopCall(CGF, S.getBeginLoc(), S,
                                                   OutlinedFn, SharedsTy,
diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h
index ca5219d45..a312de9e8 100644
--- a/clang/lib/CodeGen/CodeGenFunction.h
+++ b/clang/lib/CodeGen/CodeGenFunction.h
@@ -819,13 +819,12 @@ public:
 
   class OMPWithinTaskgraphRAII {
     CodeGenFunction &CGF;
+
   public:
     OMPWithinTaskgraphRAII(CodeGenFunction &CGF_) : CGF(CGF_) {
       CGF.setOMPWithinTaskgraph(true);
     }
-    ~OMPWithinTaskgraphRAII() {
-      CGF.setOMPWithinTaskgraph(false);
-    }
+    ~OMPWithinTaskgraphRAII() { CGF.setOMPWithinTaskgraph(false); }
   };
 
   template <class T>

``````````

</details>


https://github.com/llvm/llvm-project/pull/194051


More information about the llvm-branch-commits mailing list