[flang-commits] [flang] 483af6c - [OpenMP] Add definitions for REDUCTION_KIND and SHIFT clauses (#222745)
via flang-commits
flang-commits at lists.llvm.org
Sun Sep 13 07:16:33 PDT 2026
Author: Krzysztof Parzyszek
Date: 2026-09-13T09:16:29-05:00
New Revision: 483af6c1be7ca13eda7cc5314bb93185d21b272a
URL: https://github.com/llvm/llvm-project/commit/483af6c1be7ca13eda7cc5314bb93185d21b272a
DIFF: https://github.com/llvm/llvm-project/commit/483af6c1be7ca13eda7cc5314bb93185d21b272a.diff
LOG: [OpenMP] Add definitions for REDUCTION_KIND and SHIFT clauses (#222745)
This is a barebones change to introduce the enum identifiers for these
clauses.
Added:
Modified:
flang/include/flang/Lower/OpenMP/Clauses.h
flang/lib/Lower/OpenMP/Clauses.cpp
llvm/include/llvm/Frontend/OpenMP/ClauseT.h
llvm/include/llvm/Frontend/OpenMP/OMP.td
Removed:
################################################################################
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 8f18a26754bbc..285a17d48757a 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 OMPC_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 OMPC_Shift : Clause<[Spelling<"shift">]> {
+}
def OMPC_Simd : Clause<[Spelling<"simd">]> {
let clangClass = "OMPSIMDClause";
}
More information about the flang-commits
mailing list