[llvm] [Frontend][OpenMP] Privatizing clauses in construct decomposition (PR #92176)
Krzysztof Parzyszek via llvm-commits
llvm-commits at lists.llvm.org
Tue May 14 15:34:31 PDT 2024
https://github.com/kparzysz updated https://github.com/llvm/llvm-project/pull/92176
>From eb89b138442c1f3db9b6cf62adb46f5f4f881a29 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Tue, 14 May 2024 15:52:39 -0500
Subject: [PATCH 1/2] [Frontend][OpenMP] Privatizing clauses in construct
decomposition
Add remaining clauses with the "privatizing" property to construct
decomposition, specifically to the part handling the `allocate`
clause.
---
llvm/include/llvm/Frontend/OpenMP/ConstructDecompositionT.h | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/llvm/include/llvm/Frontend/OpenMP/ConstructDecompositionT.h b/llvm/include/llvm/Frontend/OpenMP/ConstructDecompositionT.h
index 5f12c62b832fc..02c88a58e0993 100644
--- a/llvm/include/llvm/Frontend/OpenMP/ConstructDecompositionT.h
+++ b/llvm/include/llvm/Frontend/OpenMP/ConstructDecompositionT.h
@@ -793,9 +793,14 @@ bool ConstructDecompositionT<C, H>::applyClause(
// [5.2:340:33]
auto canMakePrivateCopy = [](llvm::omp::Clause id) {
switch (id) {
+ // Clauses with "privatization" property:
case llvm::omp::Clause::OMPC_firstprivate:
+ case llvm::omp::Clause::OMPC_in_reduction:
case llvm::omp::Clause::OMPC_lastprivate:
+ case llvm::omp::Clause::OMPC_linear:
case llvm::omp::Clause::OMPC_private:
+ case llvm::omp::Clause::OMPC_reduction:
+ case llvm::omp::Clause::OMPC_task_reduction:
return true;
default:
return false;
>From 31dae1ff4eed56c94012b1903fdfdb1fe78d7ca0 Mon Sep 17 00:00:00 2001
From: Krzysztof Parzyszek <Krzysztof.Parzyszek at amd.com>
Date: Tue, 14 May 2024 17:33:35 -0500
Subject: [PATCH 2/2] Remove "shared" attribute from symbols in privatizing
clauses
---
.../Frontend/OpenMP/ConstructCompositionT.h | 20 ++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/llvm/include/llvm/Frontend/OpenMP/ConstructCompositionT.h b/llvm/include/llvm/Frontend/OpenMP/ConstructCompositionT.h
index 9dcb115a0c514..f6ee963bd8855 100644
--- a/llvm/include/llvm/Frontend/OpenMP/ConstructCompositionT.h
+++ b/llvm/include/llvm/Frontend/OpenMP/ConstructCompositionT.h
@@ -343,13 +343,31 @@ template <typename C> void ConstructCompositionT<C>::mergeDSA() {
}
}
- // Check reductions as well, clear "shared" if set.
+ // Check other privatizing clauses as well, clear "shared" if set.
+ for (auto &clause : clauseSets[llvm::omp::Clause::OMPC_in_reduction]) {
+ using InReductionTy = tomp::clause::InReductionT<TypeTy, IdTy, ExprTy>;
+ using ListTy = typename InReductionTy::List;
+ for (auto &object : std::get<ListTy>(std::get<InReductionTy>(clause.u).t))
+ getDsa(object).second &= ~DSA::Shared;
+ }
+ for (auto &clause : clauseSets[llvm::omp::Clause::OMPC_linear]) {
+ using LinearTy = tomp::clause::LinearT<TypeTy, IdTy, ExprTy>;
+ using ListTy = typename LinearTy::List;
+ for (auto &object : std::get<ListTy>(std::get<LinearTy>(clause.u).t))
+ getDsa(object).second &= ~DSA::Shared;
+ }
for (auto &clause : clauseSets[llvm::omp::Clause::OMPC_reduction]) {
using ReductionTy = tomp::clause::ReductionT<TypeTy, IdTy, ExprTy>;
using ListTy = typename ReductionTy::List;
for (auto &object : std::get<ListTy>(std::get<ReductionTy>(clause.u).t))
getDsa(object).second &= ~DSA::Shared;
}
+ for (auto &clause : clauseSets[llvm::omp::Clause::OMPC_task_reduction]) {
+ using TaskReductionTy = tomp::clause::TaskReductionT<TypeTy, IdTy, ExprTy>;
+ using ListTy = typename TaskReductionTy::List;
+ for (auto &object : std::get<ListTy>(std::get<TaskReductionTy>(clause.u).t))
+ getDsa(object).second &= ~DSA::Shared;
+ }
tomp::ListT<ObjectTy> privateObj, sharedObj, firstpObj, lastpObj, lastpcObj;
for (auto &[object, dsa] : objectDsa) {
More information about the llvm-commits
mailing list