[flang-commits] [flang] [llvm] [OpenMP] Add definitions for REDUCTION_KIND and SHIFT clauses (PR #222745)

Krzysztof Parzyszek via flang-commits flang-commits at lists.llvm.org
Fri Sep 11 05:28:14 PDT 2026


https://github.com/kparzysz updated https://github.com/llvm/llvm-project/pull/222745

>From 8c57adf70b6170cd3861de1e2e119b2f563d4795 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Thu, 10 Sep 2026 13:43:02 -0500
Subject: [PATCH 1/2] [OpenMP] Add definitions for REDUCTION_KIND and SHIFT
 clauses

This is a barebones change to introduce the enum identifiers for these
clauses.
---
 flang/include/flang/Lower/OpenMP/Clauses.h  |  2 ++
 flang/lib/Lower/OpenMP/Clauses.cpp          |  2 ++
 llvm/include/llvm/Frontend/OpenMP/ClauseT.h | 17 +++++++++++++++--
 llvm/include/llvm/Frontend/OpenMP/OMP.td    |  4 ++++
 4 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/flang/include/flang/Lower/OpenMP/Clauses.h b/flang/include/flang/Lower/OpenMP/Clauses.h
index f2ce74301a238..9d4b1aa20bbe9 100644
--- a/flang/include/flang/Lower/OpenMP/Clauses.h
+++ b/flang/include/flang/Lower/OpenMP/Clauses.h
@@ -295,6 +295,7 @@ using Private = tomp::clause::PrivateT<TypeTy, IdTy, ExprTy>;
 using ProcBind = tomp::clause::ProcBindT<TypeTy, IdTy, ExprTy>;
 using Read = tomp::clause::ReadT<TypeTy, IdTy, ExprTy>;
 using Reduction = tomp::clause::ReductionT<TypeTy, IdTy, ExprTy>;
+using ReductionKind = tomp::clause::ReductionKindT<TypeTy, IdTy, ExprTy>;
 using Relaxed = tomp::clause::RelaxedT<TypeTy, IdTy, ExprTy>;
 using Release = tomp::clause::ReleaseT<TypeTy, IdTy, ExprTy>;
 using Replayable = tomp::clause::ReplayableT<TypeTy, IdTy, ExprTy>;
@@ -307,6 +308,7 @@ using SeqCst = tomp::clause::SeqCstT<TypeTy, IdTy, ExprTy>;
 using Severity = tomp::clause::SeverityT<TypeTy, IdTy, ExprTy>;
 using Shared = tomp::clause::SharedT<TypeTy, IdTy, ExprTy>;
 using Simd = tomp::clause::SimdT<TypeTy, IdTy, ExprTy>;
+using Shift = tomp::clause::ShiftT<TypeTy, IdTy, ExprTy>;
 using Simdlen = tomp::clause::SimdlenT<TypeTy, IdTy, ExprTy>;
 using Sizes = tomp::clause::SizesT<TypeTy, IdTy, ExprTy>;
 using TaskReduction = tomp::clause::TaskReductionT<TypeTy, IdTy, ExprTy>;
diff --git a/flang/lib/Lower/OpenMP/Clauses.cpp b/flang/lib/Lower/OpenMP/Clauses.cpp
index 0451f71f062bc..ee16ae55af30f 100644
--- a/flang/lib/Lower/OpenMP/Clauses.cpp
+++ b/flang/lib/Lower/OpenMP/Clauses.cpp
@@ -319,7 +319,9 @@ MAKE_INCOMPLETE_CLASS(Interop, Interop);
 MAKE_INCOMPLETE_CLASS(Local, Local);
 MAKE_INCOMPLETE_CLASS(Memscope, Memscope);
 MAKE_INCOMPLETE_CLASS(Replayable, Replayable);
+MAKE_INCOMPLETE_CLASS(ReductionKind, ReductionKind);
 MAKE_INCOMPLETE_CLASS(Safesync, Safesync);
+MAKE_INCOMPLETE_CLASS(Shift, Shift);
 MAKE_INCOMPLETE_CLASS(Transparent, Transparent);
 
 List<IteratorSpecifier>
diff --git a/llvm/include/llvm/Frontend/OpenMP/ClauseT.h b/llvm/include/llvm/Frontend/OpenMP/ClauseT.h
index 0c5b0d5566258..246d730724c81 100644
--- a/llvm/include/llvm/Frontend/OpenMP/ClauseT.h
+++ b/llvm/include/llvm/Frontend/OpenMP/ClauseT.h
@@ -1125,6 +1125,12 @@ struct ReductionT {
   std::tuple<OPT(ReductionModifier), ReductionIdentifiers, List> t;
 };
 
+// TR15:285
+template <typename T, typename I, typename E> //
+struct ReductionKindT {
+  using IncompleteTrait = std::true_type;
+};
+
 // V5.2: [15.8.1] `memory-order` clauses
 template <typename T, typename I, typename E> //
 struct RelaxedT {
@@ -1206,6 +1212,12 @@ struct SharedT {
   List v;
 };
 
+// TR15:408-409
+template <typename T, typename I, typename E> //
+struct ShiftT {
+  using IncompleteTrait = std::true_type;
+};
+
 // V5.2: [15.10.3] `parallelization-level` clauses
 template <typename T, typename I, typename E> //
 struct SimdT {
@@ -1414,8 +1426,9 @@ using IncompleteClausesT =
                  GraphResetT<T, I, E>, InductionT<T, I, E>, InductorT<T, I, E>,
                  InitCompleteT<T, I, E>, InteropT<T, I, E>, LocalT<T, I, E>,
                  MatchT<T, I, E>, MemscopeT<T, I, E>, OtherwiseT<T, I, E>,
-                 ReplayableT<T, I, E>, SafesyncT<T, I, E>,
-                 TransparentT<T, I, E>, WhenT<T, I, E>>;
+                 ReductionKindT<T, I, E>, ReplayableT<T, I, E>,
+                 SafesyncT<T, I, E>, ShiftT<T, I, E>, TransparentT<T, I, E>,
+                 WhenT<T, I, E>>;
 
 template <typename T, typename I, typename E>
 using TupleClausesT =
diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td
index d907bddcfbe82..3c8cd0f091eaf 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -498,6 +498,8 @@ def OMPC_Reduction : Clause<[Spelling<"reduction">]> {
   let clangClass = "OMPReductionClause";
   let flangClass = "OmpReductionClause";
 }
+def OMPD_ReductionKind : Clause<[Spelling<"reduction_kind">]> {
+}
 def OMPC_Relaxed : Clause<[Spelling<"relaxed">]> {
   let clangClass = "OMPRelaxedClause";
 }
@@ -557,6 +559,8 @@ def OMPC_Shared : Clause<[Spelling<"shared">]> {
   let clangClass = "OMPSharedClause";
   let flangClass = "OmpObjectList";
 }
+def OMPD_Shift : Clause<[Spelling<"shift">]> {
+}
 def OMPC_Simd : Clause<[Spelling<"simd">]> {
   let clangClass = "OMPSIMDClause";
 }

>From 04fa9e6256ad31dc7154a1f441fe688857c606c4 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Thu, 10 Sep 2026 13:47:20 -0500
Subject: [PATCH 2/2] typo

---
 llvm/include/llvm/Frontend/OpenMP/OMP.td | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/llvm/include/llvm/Frontend/OpenMP/OMP.td b/llvm/include/llvm/Frontend/OpenMP/OMP.td
index 3c8cd0f091eaf..8eed9ea2b7b3e 100644
--- a/llvm/include/llvm/Frontend/OpenMP/OMP.td
+++ b/llvm/include/llvm/Frontend/OpenMP/OMP.td
@@ -498,7 +498,7 @@ def OMPC_Reduction : Clause<[Spelling<"reduction">]> {
   let clangClass = "OMPReductionClause";
   let flangClass = "OmpReductionClause";
 }
-def OMPD_ReductionKind : Clause<[Spelling<"reduction_kind">]> {
+def OMPC_ReductionKind : Clause<[Spelling<"reduction_kind">]> {
 }
 def OMPC_Relaxed : Clause<[Spelling<"relaxed">]> {
   let clangClass = "OMPRelaxedClause";
@@ -559,7 +559,7 @@ def OMPC_Shared : Clause<[Spelling<"shared">]> {
   let clangClass = "OMPSharedClause";
   let flangClass = "OmpObjectList";
 }
-def OMPD_Shift : Clause<[Spelling<"shift">]> {
+def OMPC_Shift : Clause<[Spelling<"shift">]> {
 }
 def OMPC_Simd : Clause<[Spelling<"simd">]> {
   let clangClass = "OMPSIMDClause";



More information about the flang-commits mailing list