[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