[Openmp-commits] [clang] [llvm] [openmp] [OpenMP] Taskgraph Clang 'record and replay' frontend support (PR #159774)

via Openmp-commits openmp-commits at lists.llvm.org
Fri Sep 19 06:11:10 PDT 2025


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 -- openmp/runtime/test/tasking/omp_taskgraph.cpp openmp/runtime/test/tasking/omp_taskgraph_deps.cpp openmp/runtime/test/tasking/omp_taskgraph_multiTDGs.cpp openmp/runtime/test/tasking/omp_taskgraph_print_dot.cpp openmp/runtime/test/tasking/omp_taskgraph_taskloop.cpp clang/include/clang-c/Index.h clang/include/clang/AST/RecursiveASTVisitor.h clang/include/clang/AST/StmtOpenMP.h clang/include/clang/Sema/SemaOpenMP.h clang/include/clang/Serialization/ASTBitCodes.h clang/lib/AST/StmtOpenMP.cpp clang/lib/AST/StmtPrinter.cpp clang/lib/AST/StmtProfile.cpp clang/lib/Basic/OpenMPKinds.cpp clang/lib/CodeGen/CGOpenMPRuntime.cpp clang/lib/CodeGen/CGOpenMPRuntime.h clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp clang/lib/CodeGen/CGStmt.cpp clang/lib/CodeGen/CGStmtOpenMP.cpp clang/lib/CodeGen/CodeGenFunction.h clang/lib/Sema/SemaExceptionSpec.cpp clang/lib/Sema/SemaOpenMP.cpp clang/lib/Sema/TreeTransform.h clang/lib/Serialization/ASTReaderStmt.cpp clang/lib/Serialization/ASTWriterStmt.cpp clang/lib/StaticAnalyzer/Core/ExprEngine.cpp clang/tools/libclang/CIndex.cpp clang/tools/libclang/CXCursor.cpp openmp/runtime/src/kmp.h openmp/runtime/src/kmp_global.cpp openmp/runtime/src/kmp_settings.cpp openmp/runtime/src/kmp_taskdeps.cpp openmp/runtime/src/kmp_taskdeps.h openmp/runtime/src/kmp_tasking.cpp openmp/runtime/test/tasking/omp_record_replay.cpp openmp/runtime/test/tasking/omp_record_replay_deps.cpp openmp/runtime/test/tasking/omp_record_replay_deps_multi_succ.cpp openmp/runtime/test/tasking/omp_record_replay_multiTDGs.cpp openmp/runtime/test/tasking/omp_record_replay_print_dot.cpp openmp/runtime/test/tasking/omp_record_replay_taskloop.cpp
``````````

: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/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp
index 2191c5cfa..1e94aa9c2 100644
--- a/clang/lib/Sema/SemaOpenMP.cpp
+++ b/clang/lib/Sema/SemaOpenMP.cpp
@@ -4549,8 +4549,8 @@ static void processCapturedRegions(Sema &SemaRef, OpenMPDirectiveKind DKind,
       MarkAsInlined(SemaRef.getCurCapturedRegion());
       break;
     case OMPD_taskgraph:
-      SemaRef.ActOnCapturedRegionStart(Loc, CurScope, CR_OpenMP,
-                                       getTaskgraphRegionParams(SemaRef), Level);
+      SemaRef.ActOnCapturedRegionStart(
+          Loc, CurScope, CR_OpenMP, getTaskgraphRegionParams(SemaRef), Level);
       break;
     case OMPD_target:
       SemaRef.ActOnCapturedRegionStart(Loc, CurScope, CR_OpenMP,
@@ -11350,8 +11350,7 @@ SemaOpenMP::ActOnOpenMPTaskwaitDirective(ArrayRef<OMPClause *> Clauses,
 
 StmtResult
 SemaOpenMP::ActOnOpenMPTaskgraphDirective(ArrayRef<OMPClause *> Clauses,
-                                          Stmt *AStmt,
-                                          SourceLocation StartLoc,
+                                          Stmt *AStmt, SourceLocation StartLoc,
                                           SourceLocation EndLoc) {
   if (!AStmt)
     return StmtError();
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index baccbccb5..c47f24b2f 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/lib/Sema/TreeTransform.h
@@ -9808,8 +9808,8 @@ template <typename Derived>
 StmtResult TreeTransform<Derived>::TransformOMPTaskgraphDirective(
     OMPTaskgraphDirective *D) {
   DeclarationNameInfo DirName;
-  getDerived().getSema().OpenMP().StartOpenMPDSABlock(OMPD_taskgraph, DirName, nullptr,
-                                                      D->getBeginLoc());
+  getDerived().getSema().OpenMP().StartOpenMPDSABlock(
+      OMPD_taskgraph, DirName, nullptr, D->getBeginLoc());
   StmtResult Res = getDerived().TransformOMPExecutableDirective(D);
   getDerived().getSema().OpenMP().EndOpenMPDSABlock(Res.get());
   return Res;
diff --git a/openmp/runtime/src/kmp_tasking.cpp b/openmp/runtime/src/kmp_tasking.cpp
index 409aad69a..fd39a4b27 100644
--- a/openmp/runtime/src/kmp_tasking.cpp
+++ b/openmp/runtime/src/kmp_tasking.cpp
@@ -2394,11 +2394,9 @@ void *__kmpc_taskred_init(int gtid, int num, void *data) {
 #if OMP_TASKGRAPH_EXPERIMENTAL
   kmp_tdg_info_t *tdg = __kmp_find_tdg(__kmp_curr_tdg_id);
   if (tdg && __kmp_tdg_is_recording(tdg->tdg_status)) {
-    tdg->rec_taskred_data =
-        __kmp_allocate(sizeof(kmp_task_red_input_t) * num);
+    tdg->rec_taskred_data = __kmp_allocate(sizeof(kmp_task_red_input_t) * num);
     tdg->rec_num_taskred = num;
-    KMP_MEMCPY(tdg->rec_taskred_data, data,
-               sizeof(kmp_task_red_input_t) * num);
+    KMP_MEMCPY(tdg->rec_taskred_data, data, sizeof(kmp_task_red_input_t) * num);
   }
 #endif
   return __kmp_task_reduction_init(gtid, num, (kmp_taskred_input_t *)data);
@@ -4431,7 +4429,8 @@ void __kmp_fulfill_event(kmp_event_t *event) {
 // returns:  a pointer to the allocated kmp_task_t structure (task).
 kmp_task_t *__kmp_task_dup_alloc(kmp_info_t *thread, kmp_task_t *task_src
 #if OMP_TASKGRAPH_EXPERIMENTAL
-                                 , int taskloop_recur
+                                 ,
+                                 int taskloop_recur
 #endif
 ) {
   kmp_task_t *task;
@@ -5263,8 +5262,7 @@ static kmp_tdg_info_t *__kmp_find_tdg(kmp_int32 tdg_id) {
         sizeof(kmp_tdg_info_t *) * __kmp_max_tdgs);
 
   for (kmp_int32 i = 0; i < __kmp_num_tdg; ++i) {
-    if ((__kmp_global_tdgs[i]) &&
-        (__kmp_global_tdgs[i]->tdg_id == tdg_id) &&
+    if ((__kmp_global_tdgs[i]) && (__kmp_global_tdgs[i]->tdg_id == tdg_id) &&
         (__kmp_global_tdgs[i]->tdg_status != KMP_TDG_NONE)) {
       res = __kmp_global_tdgs[i];
       __kmp_curr_tdg_id = tdg_id;
@@ -5279,7 +5277,8 @@ static kmp_tdg_info_t *__kmp_find_tdg(kmp_int32 tdg_id) {
 // gtid:   Global Thread ID
 void __kmp_print_tdg_dot(kmp_tdg_info_t *tdg, kmp_int32 gtid) {
   kmp_int32 tdg_id = tdg->tdg_id;
-  KA_TRACE(10, ("__kmp_print_tdg_dot(enter): T#%d tdg_id=%d \n", __kmp_get_gtid(), tdg_id));
+  KA_TRACE(10, ("__kmp_print_tdg_dot(enter): T#%d tdg_id=%d \n",
+                __kmp_get_gtid(), tdg_id));
 
   char file_name[20];
   sprintf(file_name, "tdg_%d.dot", tdg_id);
@@ -5305,7 +5304,8 @@ void __kmp_print_tdg_dot(kmp_tdg_info_t *tdg, kmp_int32 gtid) {
     }
   }
   fprintf(tdg_file, "}");
-  KA_TRACE(10, ("__kmp_print_tdg_dot(exit): T#%d tdg_id=%d \n", __kmp_get_gtid(), tdg_id));
+  KA_TRACE(10, ("__kmp_print_tdg_dot(exit): T#%d tdg_id=%d \n",
+                __kmp_get_gtid(), tdg_id));
 }
 
 // __kmp_exec_tdg: launch the execution of a previous
@@ -5370,7 +5370,7 @@ static inline void __kmp_start_record(kmp_int32 gtid,
                                       kmp_int32 tdg_id) {
   kmp_tdg_info_t *tdg =
       (kmp_tdg_info_t *)__kmp_allocate(sizeof(kmp_tdg_info_t));
-  __kmp_global_tdgs[__kmp_num_tdg-1] = tdg;
+  __kmp_global_tdgs[__kmp_num_tdg - 1] = tdg;
   // Initializing the TDG structure
   tdg->tdg_id = tdg_id;
   tdg->map_size = INIT_MAPSIZE;
diff --git a/openmp/runtime/test/tasking/omp_record_replay_print_dot.cpp b/openmp/runtime/test/tasking/omp_record_replay_print_dot.cpp
index 521c225d2..fcf9868db 100644
--- a/openmp/runtime/test/tasking/omp_record_replay_print_dot.cpp
+++ b/openmp/runtime/test/tasking/omp_record_replay_print_dot.cpp
@@ -28,9 +28,9 @@ int main() {
   int num_exec = 0;
   int x, y;
 
-  setenv("KMP_TDG_DOT","TRUE",1);
+  setenv("KMP_TDG_DOT", "TRUE", 1);
 
-  #pragma omp parallel
+#pragma omp parallel
   #pragma omp single
   {
     int gtid = __kmpc_global_thread_num(nullptr);
diff --git a/openmp/runtime/test/tasking/omp_taskgraph.cpp b/openmp/runtime/test/tasking/omp_taskgraph.cpp
index de3c8ca5b..363a7da8c 100644
--- a/openmp/runtime/test/tasking/omp_taskgraph.cpp
+++ b/openmp/runtime/test/tasking/omp_taskgraph.cpp
@@ -6,30 +6,28 @@
 
 // Compiler-generated code (emulation)
 typedef struct ident {
-    void* dummy;
+  void *dummy;
 } ident_t;
 
-void func(int *num_exec) {
-  (*num_exec)++;
-}
+void func(int *num_exec) { (*num_exec)++; }
 
 int main() {
   int num_exec = 0;
   int num_tasks = 0;
-  int x=0;
-  #pragma omp parallel
-  #pragma omp single
+  int x = 0;
+#pragma omp parallel
+#pragma omp single
   for (int iter = 0; iter < NT; ++iter) {
-    #pragma omp taskgraph
+#pragma omp taskgraph
     {
       num_tasks++;
-      #pragma omp task
+#pragma omp task
       func(&num_exec);
     }
   }
 
-  assert(num_tasks==1);
-  assert(num_exec==NT);
+  assert(num_tasks == 1);
+  assert(num_exec == NT);
 
   std::cout << "Passed" << std::endl;
   return 0;
diff --git a/openmp/runtime/test/tasking/omp_taskgraph_deps.cpp b/openmp/runtime/test/tasking/omp_taskgraph_deps.cpp
index 847fe401d..3341b019a 100644
--- a/openmp/runtime/test/tasking/omp_taskgraph_deps.cpp
+++ b/openmp/runtime/test/tasking/omp_taskgraph_deps.cpp
@@ -9,16 +9,16 @@
 int val;
 // Compiler-generated code (emulation)
 typedef struct ident {
-    void* dummy;
+  void *dummy;
 } ident_t;
 
 void sub() {
-  #pragma omp atomic
+#pragma omp atomic
   val -= DECREMENT;
 }
 
 void add() {
-  #pragma omp atomic
+#pragma omp atomic
   val += DECREMENT;
 }
 
@@ -31,20 +31,20 @@ void mult() {
 int main() {
   val = 0;
   int *x, *y;
-  #pragma omp parallel
-  #pragma omp single
+#pragma omp parallel
+#pragma omp single
   for (int iter = 0; iter < NT; ++iter) {
-    #pragma omp taskgraph
+#pragma omp taskgraph
     {
-      #pragma omp task depend(out:y)
+#pragma omp task depend(out : y)
       add();
-      #pragma omp task depend(out:x)
+#pragma omp task depend(out : x)
       sub();
-      #pragma omp task depend(in:x,y)
+#pragma omp task depend(in : x, y)
       mult();
     }
   }
-  assert(val==0);
+  assert(val == 0);
 
   std::cout << "Passed" << std::endl;
   return 0;
diff --git a/openmp/runtime/test/tasking/omp_taskgraph_multiTDGs.cpp b/openmp/runtime/test/tasking/omp_taskgraph_multiTDGs.cpp
index 6bf4aa8fc..98a4ee27d 100644
--- a/openmp/runtime/test/tasking/omp_taskgraph_multiTDGs.cpp
+++ b/openmp/runtime/test/tasking/omp_taskgraph_multiTDGs.cpp
@@ -8,18 +8,18 @@
 
 // Compiler-generated code (emulation)
 typedef struct ident {
-    void* dummy;
+  void *dummy;
 } ident_t;
 
 int val;
 
 void sub() {
-  #pragma omp atomic
+#pragma omp atomic
   val -= DECREMENT;
 }
 
 void add() {
-  #pragma omp atomic
+#pragma omp atomic
   val += DECREMENT;
 }
 
@@ -32,33 +32,33 @@ void mult() {
 int main() {
   int num_tasks = 0;
   int *x, *y;
-  #pragma omp parallel
-  #pragma omp single
+#pragma omp parallel
+#pragma omp single
   for (int iter = 0; iter < NT; ++iter) {
-    #pragma omp taskgraph
+#pragma omp taskgraph
     {
       num_tasks++;
-      #pragma omp task depend(out:y)
+#pragma omp task depend(out : y)
       add();
-      #pragma omp task depend(out:x)
+#pragma omp task depend(out : x)
       sub();
-      #pragma omp task depend(in:x,y)
+#pragma omp task depend(in : x, y)
       mult();
     }
-    #pragma omp taskgraph
+#pragma omp taskgraph
     {
       num_tasks++;
-      #pragma omp task depend(out:y)
+#pragma omp task depend(out : y)
       add();
-      #pragma omp task depend(out:x)
+#pragma omp task depend(out : x)
       sub();
-      #pragma omp task depend(in:x,y)
+#pragma omp task depend(in : x, y)
       mult();
     }
   }
 
-  assert(num_tasks==2);
-  assert(val==0);
+  assert(num_tasks == 2);
+  assert(val == 0);
 
   std::cout << "Passed" << std::endl;
   return 0;
diff --git a/openmp/runtime/test/tasking/omp_taskgraph_print_dot.cpp b/openmp/runtime/test/tasking/omp_taskgraph_print_dot.cpp
index 53f1e5be9..11bbcc944 100644
--- a/openmp/runtime/test/tasking/omp_taskgraph_print_dot.cpp
+++ b/openmp/runtime/test/tasking/omp_taskgraph_print_dot.cpp
@@ -8,11 +8,11 @@
 
 // Compiler-generated code (emulation)
 typedef struct ident {
-    void* dummy;
+  void *dummy;
 } ident_t;
 
 void func(int *num_exec) {
-  #pragma omp atomic
+#pragma omp atomic
   (*num_exec)++;
 }
 
@@ -20,20 +20,20 @@ int main() {
   int num_exec = 0;
   int x, y;
 
-  setenv("KMP_TDG_DOT","TRUE",1);
+  setenv("KMP_TDG_DOT", "TRUE", 1);
 
-  #pragma omp parallel
-  #pragma omp single
+#pragma omp parallel
+#pragma omp single
   {
-    #pragma omp taskgraph
+#pragma omp taskgraph
     {
-      #pragma omp task depend(out : x)
+#pragma omp task depend(out : x)
       func(&num_exec);
-      #pragma omp task depend(in : x) depend(out : y)
+#pragma omp task depend(in : x) depend(out : y)
       func(&num_exec);
-      #pragma omp task depend(in : y)
+#pragma omp task depend(in : y)
       func(&num_exec);
-      #pragma omp task depend(in : y)
+#pragma omp task depend(in : y)
       func(&num_exec);
     }
   }
diff --git a/openmp/runtime/test/tasking/omp_taskgraph_taskloop.cpp b/openmp/runtime/test/tasking/omp_taskgraph_taskloop.cpp
index ff33dba89..bbea64a2e 100644
--- a/openmp/runtime/test/tasking/omp_taskgraph_taskloop.cpp
+++ b/openmp/runtime/test/tasking/omp_taskgraph_taskloop.cpp
@@ -4,10 +4,10 @@
 #include <cassert>
 
 #define NT 20
-#define N 128*128
+#define N 128 * 128
 
 typedef struct ident {
-    void* dummy;
+  void *dummy;
 } ident_t;
 
 int main() {
@@ -18,20 +18,20 @@ int main() {
     array[i] = 1;
 
   long sum = 0;
-  #pragma omp parallel
-  #pragma omp single
+#pragma omp parallel
+#pragma omp single
   for (int iter = 0; iter < NT; ++iter) {
-    #pragma omp taskgraph
+#pragma omp taskgraph
     {
       num_tasks++;
-      #pragma omp taskloop reduction(+:sum) num_tasks(4096)
+#pragma omp taskloop reduction(+ : sum) num_tasks(4096)
       for (int i = 0; i < N; ++i) {
         sum += array[i];
       }
     }
   }
-  assert(sum==N*NT);
-  assert(num_tasks==1);
+  assert(sum == N * NT);
+  assert(num_tasks == 1);
 
   std::cout << "Passed" << std::endl;
   return 0;

``````````

</details>


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


More information about the Openmp-commits mailing list