[clang] [llvm] Openmp 6.0 allow default clause on the target directive (PR #154942)
CHANDRA GHALE via llvm-commits
llvm-commits at lists.llvm.org
Fri Aug 22 06:18:41 PDT 2025
https://github.com/chandraghale created https://github.com/llvm/llvm-project/pull/154942
Sections 7.5.1 default Clause in OpenMP 6.0. Allow default clause on the target directive.
>From 50ca90461c548e4deeef0100418642b56dbe2415 Mon Sep 17 00:00:00 2001
From: Chandra Ghale <ghale at pe31.hpc.amslabs.hpecorp.net>
Date: Fri, 22 Aug 2025 08:11:31 -0500
Subject: [PATCH 1/2] openmp 6.0 allow default clause on the target directive
---
clang/test/OpenMP/target_default_messages.cpp | 51 +++++++++++++++++++
llvm/include/llvm/Frontend/OpenMP/OMP.td | 3 ++
2 files changed, 54 insertions(+)
create mode 100644 clang/test/OpenMP/target_default_messages.cpp
diff --git a/clang/test/OpenMP/target_default_messages.cpp b/clang/test/OpenMP/target_default_messages.cpp
new file mode 100644
index 0000000000000..c90c4f9a9cadc
--- /dev/null
+++ b/clang/test/OpenMP/target_default_messages.cpp
@@ -0,0 +1,51 @@
+
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=60 -DOMP60 %s -Wuninitialized
+
+// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=60 -DOMP60 %s -Wuninitialized
+
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=52 -DOMP52 %s -Wuninitialized
+
+void foo();
+
+namespace {
+static int y = 0;
+}
+static int x = 0;
+
+int main(int argc, char **argv) {
+#ifdef OMP60
+ #pragma omp target default // expected-error {{expected '(' after 'default'}}
+ for (int i=0; i<200; i++) foo();
+#pragma omp target default( // expected-error {{expected 'none', 'shared', 'private' or 'firstprivate' in OpenMP clause 'default'}} expected-error {{expected ')'}} expected-note {{to match this '('}}
+ for (int i=0; i<200; i++) foo();
+#pragma omp target default() // expected-error {{expected 'none', 'shared', 'private' or 'firstprivate' in OpenMP clause 'default'}}
+ for (int i=0; i<200; i++) foo();
+ #pragma omp target default (none // expected-error {{expected ')'}} expected-note {{to match this '('}}
+ for (int i=0; i<200; i++) foo();
+#pragma omp target default(x) // expected-error {{expected 'none', 'shared', 'private' or 'firstprivate' in OpenMP clause 'default'}}
+ for (int i=0; i<200; i++) foo();
+#endif
+
+#ifdef OMP52
+#pragma omp target default(firstprivate) // expected-error {{unexpected OpenMP clause 'default' in directive '#pragma omp target'}}
+ for (int i = 0; i < 200; i++) {
+ ++x;
+ ++y;
+ }
+#pragma omp target default(private) // expected-error {{unexpected OpenMP clause 'default' in directive '#pragma omp target'}}
+ for (int i = 0; i < 200; i++) {
+ ++x;
+ ++y;
+ }
+
+int j = 0, i = 0, nn = 10;
+#pragma omp target teams distribute simd default(shared) // expected-error {{unexpected OpenMP clause 'default' in directive '#pragma omp target teams distribute simd'}}
+ for (j = 0; j < nn; j++ ) {
+ for (i = 0; i < nn; i++ ) {
+ ;
+ }
+ }
+#endif
+
+ return 0;
+}
diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td
index 027692275b63b..d3aaa646903ad 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -1080,6 +1080,7 @@ def OMP_Target : Directive<[Spelling<"target">]> {
VersionedClause<OMPC_OMPX_Attribute>,
VersionedClause<OMPC_Private>,
VersionedClause<OMPC_UsesAllocators, 50>,
+ VersionedClause<OMPC_Default, 60>,
];
let allowedOnceClauses = [
VersionedClause<OMPC_DefaultMap>,
@@ -1097,6 +1098,7 @@ def OMP_TargetData : Directive<[Spelling<"target data">]> {
let allowedOnceClauses = [
VersionedClause<OMPC_Device>,
VersionedClause<OMPC_If>,
+ VersionedClause<OMPC_Default, 60>,
];
let requiredClauses = [
VersionedClause<OMPC_Map>,
@@ -2411,6 +2413,7 @@ def OMP_TargetTeamsDistributeSimd
VersionedClause<OMPC_Reduction>,
VersionedClause<OMPC_Shared>,
VersionedClause<OMPC_UsesAllocators, 50>,
+ VersionedClause<OMPC_Default, 60>,
];
let allowedOnceClauses = [
VersionedClause<OMPC_Collapse>,
>From 273816333470100c825ed9d095ebd5fec81419c2 Mon Sep 17 00:00:00 2001
From: Chandra Ghale <ghale at pe31.hpc.amslabs.hpecorp.net>
Date: Fri, 22 Aug 2025 08:12:24 -0500
Subject: [PATCH 2/2] openmp 6.0 allow default clause on the target directive
---
clang/test/OpenMP/target_default_ast.cpp | 81 ++++++++++++++++++++++++
1 file changed, 81 insertions(+)
create mode 100644 clang/test/OpenMP/target_default_ast.cpp
diff --git a/clang/test/OpenMP/target_default_ast.cpp b/clang/test/OpenMP/target_default_ast.cpp
new file mode 100644
index 0000000000000..854bea21d7f81
--- /dev/null
+++ b/clang/test/OpenMP/target_default_ast.cpp
@@ -0,0 +1,81 @@
+// expected-no-diagnostics
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -fopenmp-version=60 \
+//RUN: -x c++ -std=c++14 -fexceptions -fcxx-exceptions \
+//RUN: -Wno-source-uses-openmp -Wno-openmp-clauses \
+//RUN: -ast-print %s | FileCheck %s --check-prefix=PRINT
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -fopenmp-version=60 \
+//RUN: -x c++ -std=c++14 -fexceptions -fcxx-exceptions \
+//RUN: -Wno-source-uses-openmp -Wno-openmp-clauses \
+//RUN: -ast-dump %s | FileCheck %s --check-prefix=DUMP
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -fopenmp-version=60 \
+//RUN: -x c++ -std=c++14 -fexceptions -fcxx-exceptions \
+//RUN: -Wno-source-uses-openmp -Wno-openmp-clauses \
+//RUN: -emit-pch -o %t %s
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -fopenmp-version=60 \
+//RUN: -x c++ -std=c++14 -fexceptions -fcxx-exceptions \
+//RUN: -Wno-source-uses-openmp -Wno-openmp-clauses \
+//RUN: -include-pch %t -ast-print %s | FileCheck %s --check-prefix=PRINT
+
+//RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -fopenmp -fopenmp-version=60 \
+//RUN: -x c++ -std=c++14 -fexceptions -fcxx-exceptions \
+//RUN: -Wno-source-uses-openmp -Wno-openmp-clauses \
+//RUN: -include-pch %t -ast-dump-all %s | FileCheck %s --check-prefix=DUMP
+
+#ifndef HEADER
+#define HEADER
+
+void foo() {
+ int a;
+#pragma omp target default(firstprivate)
+ a++;
+ // PRINT: #pragma omp target default(firstprivate)
+ // PRINT-NEXT: a++;
+ // DUMP: -OMPTargetDirective
+ // DUMP-NEXT: -OMPDefaultClause
+ // DUMP-NEXT: -OMPFirstprivateClause {{.*}} <implicit>
+ // DUMP-NEXT: -DeclRefExpr {{.*}} 'a'
+
+}
+void fun(){
+int a = 0;
+ int x = 10;
+ #pragma omp target data default(firstprivate) map(a)
+ {
+ // DUMP: -OMPTargetDataDirective
+ // DUMP-NEXT: -OMPDefaultClause
+ // DUMP-NEXT: -OMPMapClause
+ // DUMP-NEXT: -DeclRefExpr {{.*}} 'a'
+ // DUMP-NEXT: -OMPFirstprivateClause {{.*}} <implicit>
+ // DUMP-NEXT: -DeclRefExpr {{.*}} 'x'
+
+
+ x += 10;
+ a += 1;
+ }
+}
+void bar(){
+int i = 0;
+int j = 0;
+int nn = 10;
+#pragma omp target default(firstprivate)
+#pragma omp teams
+#pragma teams distribute parallel for simd
+ for (j = 0; j < nn; j++ ) {
+ for (i = 0; i < nn; i++ ) {
+ ;
+ }
+ }
+
+ // PRINT: #pragma omp target default(firstprivate)
+ // DUMP: -OMPTargetDirective
+ // DUMP-NEXT: -OMPDefaultClause
+ // DUMP-NEXT: -OMPFirstprivateClause {{.*}} <implicit>
+ // DUMP-NEXT: -DeclRefExpr {{.*}} 'j'
+ // DUMP-NEXT: -DeclRefExpr {{.*}} 'nn'
+ // DUMP-NEXT: -DeclRefExpr {{.*}} 'i'
+}
+#endif
More information about the llvm-commits
mailing list