[PATCH] D112292: [Clang][OpenMP] Allow loop iteration var with threadprivate directive
Jennifer Yu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 22 08:05:25 PDT 2021
jyu2 added inline comments.
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:8653
? (DSAStack->hasMutipleLoops() ? OMPC_lastprivate : OMPC_linear)
- : OMPC_private;
- if (((isOpenMPSimdDirective(DKind) && DVar.CKind != OMPC_unknown &&
- DVar.CKind != PredeterminedCKind && DVar.RefExpr &&
- (LangOpts.OpenMP <= 45 || (DVar.CKind != OMPC_lastprivate &&
- DVar.CKind != OMPC_private))) ||
- ((isOpenMPWorksharingDirective(DKind) || DKind == OMPD_taskloop ||
- DKind == OMPD_master_taskloop ||
- DKind == OMPD_parallel_master_taskloop ||
- isOpenMPDistributeDirective(DKind)) &&
- !isOpenMPSimdDirective(DKind) && DVar.CKind != OMPC_unknown &&
- DVar.CKind != OMPC_private && DVar.CKind != OMPC_lastprivate)) &&
- (DVar.CKind != OMPC_private || DVar.RefExpr)) {
+ : DVar.CKind == OMPC_lastprivate ? OMPC_lastprivate
+ : OMPC_private;
----------------
ABataev wrote:
> jyu2 wrote:
> > ABataev wrote:
> > > Why need this change?
> > The rule:
> > The loop iteration variable in any associated loop of a loop construct is lastprivate.
> >
> > So if there is lastprivate clause, should be predetermined as lastprivate.
> The patch is for threadprivates, better to do it in a separate patch(or patches).
That is already there but in different in the if statement on line 8657 in old code:
DVar.CKind != OMPC_lastprivate)) &
I just want to merge that into PredetermindCKind.
================
Comment at: clang/lib/Sema/SemaOpenMP.cpp:8662-8667
+ if (LangOpts.OpenMP > 45 && isOpenMPSimdDirective(DKind)) {
+ if (DVar.CKind == OMPC_lastprivate)
+ PredeterminedCKind = OMPC_lastprivate;
+ else if (DVar.CKind == OMPC_private)
+ PredeterminedCKind = OMPC_private;
+ }
----------------
ABataev wrote:
> jyu2 wrote:
> > ABataev wrote:
> > > Again, why do we need this?
> > In the comment: for OpenMP 5.0 and up:
> >
> > If a simd construct has just one associated loop, the variable may be listed in a private, lastprivate or linear.
> >
> > The linear part is set on line 8652, there just need to set private and lastprivate.
> >
> >
> Same here, better to split this change
It is also in old code on line 8650: I just want to merge them into PredetermindCKind.
(LangOpts.OpenMP <= 45 || (DVar.CKind != OMPC_lastprivate &&
DVar.CKind != OMPC_private)))
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D112292/new/
https://reviews.llvm.org/D112292
More information about the cfe-commits
mailing list