clang 22.0.0git
DeclOpenMP.h
Go to the documentation of this file.
1/===- DeclOpenMP.h - Classes for representing OpenMP directives -*- C++ -*-==/
2/
3/ Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4/ See https://llvm.org/LICENSE.txt for license information.
5/ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6/
7/===----------------------------------------------------------------------===/
8/
9/ \file
10/ This file defines OpenMP nodes for declarative directives.
11/
12/===----------------------------------------------------------------------===/
13
14#ifndef LLVM_CLANG_AST_DECLOPENMP_H
15#define LLVM_CLANG_AST_DECLOPENMP_H
16
18#include "clang/AST/Decl.h"
19#include "clang/AST/Expr.h"
22#include "clang/AST/Type.h"
23#include "llvm/ADT/ArrayRef.h"
24#include "llvm/Support/TrailingObjects.h"
25
26namespace clang {
27
28/ This is a basic class for representing single OpenMP declarative directive.
29/
30template <typename U> class OMPDeclarativeDirective : public U {
31 friend class ASTDeclReader;
32 friend class ASTDeclWriter;
33
34 / Get the clauses storage.
35 MutableArrayRef<OMPClause *> getClauses() {
36 if (!Data)
37 return {};
38 return Data->getClauses();
39 }
40
41protected:
42 / Data, associated with the directive.
43 OMPChildren *Data = nullptr;
44
45 / Build instance of directive.
46 template <typename... Params>
47 OMPDeclarativeDirective(Params &&... P) : U(std::forward<Params>(P)...) {}
48
49 template <typename T, typename... Params>
51 ArrayRef<OMPClause *> Clauses, unsigned NumChildren,
52 Params &&... P) {
53 auto *Inst = new (C, DC, size(Clauses.size(), NumChildren))
54 T(DC, std::forward<Params>(P)...);
55 Inst->Data = OMPChildren::Create(Inst + 1, Clauses,
56 /*AssociatedStmt=*/nullptr, NumChildren);
57 Inst->Data->setClauses(Clauses);
58 return Inst;
59 }
60
61 template <typename T, typename... Params>
63 unsigned NumClauses, unsigned NumChildren,
64 Params &&... P) {
65 auto *Inst = new (C, ID, size(NumClauses, NumChildren))
66 T(nullptr, std::forward<Params>(P)...);
67 Inst->Data = OMPChildren::CreateEmpty(
68 Inst + 1, NumClauses, /*HasAssociatedStmt=*/false, NumChildren);
69 return Inst;
70 }
71
72 static size_t size(unsigned NumClauses, unsigned NumChildren) {
73 return OMPChildren::size(NumClauses, /*HasAssociatedStmt=*/false,
74 NumChildren);
75 }
76
77public:
78 / Get number of clauses.
79 unsigned getNumClauses() const {
80 if (!Data)
81 return 0;
82 return Data->getNumClauses();
83 }
84
85 / Returns specified clause.
86 /
87 / \param I Number of clause.
88 /
89 OMPClause *getClause(unsigned I) const { return clauses()[I]; }
90
92 if (!Data)
93 return {};
94 return Data->getClauses();
95 }
96};
97
98/ This represents '#pragma omp threadprivate ...' directive.
99/ For example, in the following, both 'a' and 'A::b' are threadprivate:
100/
101/ \code
102/ int a;
103/ #pragma omp threadprivate(a)
104/ struct A {
105/ static int b;
106/ #pragma omp threadprivate(b)
107/ };
108/ \endcode
109/
110class OMPThreadPrivateDecl final : public OMPDeclarativeDirective<Decl> {
111 friend class OMPDeclarativeDirective<Decl>;
112
113 LLVM_DECLARE_VIRTUAL_ANCHOR_FUNCTION();
114
115 OMPThreadPrivateDecl(DeclContext *DC = nullptr,
117 : OMPDeclarativeDirective<Decl>(OMPThreadPrivate, DC, L) {}
118
119 ArrayRef<const Expr *> getVars() const {
120 auto **Storage = reinterpret_cast<Expr **>(Data->getChildren().data());
121 return {Storage, Data->getNumChildren()};
122 }
123
124 MutableArrayRef<Expr *> getVars() {
125 auto **Storage = reinterpret_cast<Expr **>(Data->getChildren().data());
126 return {Storage, Data->getNumChildren()};
127 }
128
129 void setVars(ArrayRef<Expr *> VL);
130
131public:
132 static OMPThreadPrivateDecl *Create(ASTContext &C, DeclContext *DC,
135 static OMPThreadPrivateDecl *CreateDeserialized(ASTContext &C,
136 GlobalDeclID ID, unsigned N);
137
140 typedef llvm::iterator_range<varlist_iterator> varlist_range;
141 typedef llvm::iterator_range<varlist_const_iterator> varlist_const_range;
142
143 unsigned varlist_size() const { return Data->getNumChildren(); }
144 bool varlist_empty() const { return Data->getChildren().empty(); }
145
152 varlist_iterator varlist_begin() { return getVars().begin(); }
153 varlist_iterator varlist_end() { return getVars().end(); }
154 varlist_const_iterator varlist_begin() const { return getVars().begin(); }
155 varlist_const_iterator varlist_end() const { return getVars().end(); }
156
157 static bool classof(const Decl *D) { return classofKind(D->getKind()); }
158 static bool classofKind(Kind K) { return K == OMPThreadPrivate; }
159};
160
161/ This represents '#pragma omp groupprivate ...' directive.
162/ For example, in the following, both 'a' and 'A::b' are groupprivate:
163/
164/ \code
165/ int a;
166/ #pragma omp groupprivate(a)
167/ struct A {
168/ static int b;
169/ #pragma omp groupprivate(b)
170/ };
171/ \endcode
172/
173class OMPGroupPrivateDecl final : public OMPDeclarativeDirective<Decl> {
174 friend class OMPDeclarativeDirective<Decl>;
175
176 LLVM_DECLARE_VIRTUAL_ANCHOR_FUNCTION();
177
178 OMPGroupPrivateDecl(DeclContext *DC = nullptr,
180 : OMPDeclarativeDirective<Decl>(OMPGroupPrivate, DC, L) {}
181
182 ArrayRef<const Expr *> getVars() const {
183 auto **Storage = reinterpret_cast<Expr **>(Data->getChildren().data());
184 return {Storage, Data->getNumChildren()};
185 }
186
187 MutableArrayRef<Expr *> getVars() {
188 auto **Storage = reinterpret_cast<Expr **>(Data->getChildren().data());
189 return {Storage, Data->getNumChildren()};
190 }
191
192 void setVars(ArrayRef<Expr *> VL);
193
194public:
195 static OMPGroupPrivateDecl *Create(ASTContext &C, DeclContext *DC,
197 static OMPGroupPrivateDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID,
198 unsigned N);
199
202 typedef llvm::iterator_range<varlist_iterator> varlist_range;
203 typedef llvm::iterator_range<varlist_const_iterator> varlist_const_range;
204
205 unsigned varlist_size() const { return Data->getNumChildren(); }
206 bool varlist_empty() const { return Data->getChildren().empty(); }
207
214 varlist_iterator varlist_begin() { return getVars().begin(); }
215 varlist_iterator varlist_end() { return getVars().end(); }
216 varlist_const_iterator varlist_begin() const { return getVars().begin(); }
217 varlist_const_iterator varlist_end() const { return getVars().end(); }
218
219 static bool classof(const Decl *D) { return classofKind(D->getKind()); }
220 static bool classofKind(Kind K) { return K == OMPGroupPrivate; }
221};
222
224 Call, / Initialized by function call.
225 Direct, / omp_priv(<expr>)
226 Copy / omp_priv = <expr>
227};
228
229/ This represents '#pragma omp declare reduction ...' directive.
230/ For example, in the following, declared reduction 'foo' for types 'int' and
231/ 'float':
232/
233/ \code
234/ #pragma omp declare reduction (foo : int,float : omp_out += omp_in)
235/ initializer (omp_priv = 0)
236/ \endcode
237/
238/ Here 'omp_out += omp_in' is a combiner and 'omp_priv = 0' is an initializer.
239class OMPDeclareReductionDecl final : public ValueDecl, public DeclContext {
240 / This class stores some data in DeclContext::OMPDeclareReductionDeclBits
241 / to save some space. Use the provided accessors to access it.
242
243 friend class ASTDeclReader;
244 / Combiner for declare reduction construct.
245 Expr *Combiner = nullptr;
246 / Initializer for declare reduction construct.
247 Expr *Initializer = nullptr;
248 / In parameter of the combiner.
249 Expr *In = nullptr;
250 / Out parameter of the combiner.
251 Expr *Out = nullptr;
252 / Priv parameter of the initializer.
253 Expr *Priv = nullptr;
254 / Orig parameter of the initializer.
255 Expr *Orig = nullptr;
256
257 / Reference to the previous declare reduction construct in the same
258 / scope with the same name. Required for proper templates instantiation if
259 / the declare reduction construct is declared inside compound statement.
260 LazyDeclPtr PrevDeclInScope;
261
262 void anchor() override;
263
264 OMPDeclareReductionDecl(Kind DK, DeclContext *DC, SourceLocation L,
265 DeclarationName Name, QualType Ty,
266 OMPDeclareReductionDecl *PrevDeclInScope);
267
268 void setPrevDeclInScope(OMPDeclareReductionDecl *Prev) {
269 PrevDeclInScope = Prev;
270 }
271
272public:
273 / Create declare reduction node.
276 QualType T, OMPDeclareReductionDecl *PrevDeclInScope);
277 / Create deserialized declare reduction node.
279 GlobalDeclID ID);
280
281 / Get combiner expression of the declare reduction construct.
282 Expr *getCombiner() { return Combiner; }
283 const Expr *getCombiner() const { return Combiner; }
284 / Get In variable of the combiner.
285 Expr *getCombinerIn() { return In; }
286 const Expr *getCombinerIn() const { return In; }
287 / Get Out variable of the combiner.
288 Expr *getCombinerOut() { return Out; }
289 const Expr *getCombinerOut() const { return Out; }
290 / Set combiner expression for the declare reduction construct.
291 void setCombiner(Expr *E) { Combiner = E; }
292 / Set combiner In and Out vars.
293 void setCombinerData(Expr *InE, Expr *OutE) {
294 In = InE;
295 Out = OutE;
296 }
297
298 / Get initializer expression (if specified) of the declare reduction
299 / construct.
300 Expr *getInitializer() { return Initializer; }
301 const Expr *getInitializer() const { return Initializer; }
302 / Get initializer kind.
307 / Get Orig variable of the initializer.
308 Expr *getInitOrig() { return Orig; }
309 const Expr *getInitOrig() const { return Orig; }
310 / Get Priv variable of the initializer.
311 Expr *getInitPriv() { return Priv; }
312 const Expr *getInitPriv() const { return Priv; }
313 / Set initializer expression for the declare reduction construct.
315 Initializer = E;
316 OMPDeclareReductionDeclBits.InitializerKind = llvm::to_underlying(IK);
317 }
318 / Set initializer Orig and Priv vars.
319 void setInitializerData(Expr *OrigE, Expr *PrivE) {
320 Orig = OrigE;
321 Priv = PrivE;
322 }
323
324 / Get reference to previous declare reduction construct in the same
325 / scope with the same name.
328
329 static bool classof(const Decl *D) { return classofKind(D->getKind()); }
330 static bool classofKind(Kind K) { return K == OMPDeclareReduction; }
331 static DeclContext *castToDeclContext(const OMPDeclareReductionDecl *D) {
332 return static_cast<DeclContext *>(const_cast<OMPDeclareReductionDecl *>(D));
333 }
334 static OMPDeclareReductionDecl *castFromDeclContext(const DeclContext *DC) {
335 return static_cast<OMPDeclareReductionDecl *>(
336 const_cast<DeclContext *>(DC));
337 }
338};
339
340/ This represents '#pragma omp declare mapper ...' directive. Map clauses are
341/ allowed to use with this directive. The following example declares a user
342/ defined mapper for the type 'struct vec'. This example instructs the fields
343/ 'len' and 'data' should be mapped when mapping instances of 'struct vec'.
344/
345/ \code
346/ #pragma omp declare mapper(mid: struct vec v) map(v.len, v.data[0:N])
347/ \endcode
348class OMPDeclareMapperDecl final : public OMPDeclarativeDirective<ValueDecl>,
349 public DeclContext {
351 friend class ASTDeclReader;
352 friend class ASTDeclWriter;
353
354 / Mapper variable, which is 'v' in the example above
355 Expr *MapperVarRef = nullptr;
356
357 / Name of the mapper variable
358 DeclarationName VarName;
359
360 LazyDeclPtr PrevDeclInScope;
361
362 void anchor() override;
363
364 OMPDeclareMapperDecl(DeclContext *DC, SourceLocation L, DeclarationName Name,
365 QualType Ty, DeclarationName VarName,
366 OMPDeclareMapperDecl *PrevDeclInScope)
367 : OMPDeclarativeDirective<ValueDecl>(OMPDeclareMapper, DC, L, Name, Ty),
368 DeclContext(OMPDeclareMapper), VarName(VarName),
369 PrevDeclInScope(PrevDeclInScope) {}
370
371 void setPrevDeclInScope(OMPDeclareMapperDecl *Prev) {
372 PrevDeclInScope = Prev;
373 }
374
375public:
376 / Creates declare mapper node.
377 static OMPDeclareMapperDecl *Create(ASTContext &C, DeclContext *DC,
378 SourceLocation L, DeclarationName Name,
379 QualType T, DeclarationName VarName,
380 ArrayRef<OMPClause *> Clauses,
381 OMPDeclareMapperDecl *PrevDeclInScope);
382 / Creates deserialized declare mapper node.
383 static OMPDeclareMapperDecl *CreateDeserialized(ASTContext &C,
384 GlobalDeclID ID, unsigned N);
385
388 using clauselist_range = llvm::iterator_range<clauselist_iterator>;
390 llvm::iterator_range<clauselist_const_iterator>;
391
392 unsigned clauselist_size() const { return Data->getNumClauses(); }
393 bool clauselist_empty() const { return Data->getClauses().empty(); }
394
401 clauselist_iterator clauselist_begin() { return Data->getClauses().begin(); }
402 clauselist_iterator clauselist_end() { return Data->getClauses().end(); }
404 return Data->getClauses().begin();
405 }
407 return Data->getClauses().end();
408 }
409
410 / Get the variable declared in the mapper
411 Expr *getMapperVarRef() { return cast_or_null<Expr>(Data->getChildren()[0]); }
412 const Expr *getMapperVarRef() const {
413 return cast_or_null<Expr>(Data->getChildren()[0]);
414 }
415 / Set the variable declared in the mapper
416 void setMapperVarRef(Expr *MapperVarRefE) {
417 Data->getChildren()[0] = MapperVarRefE;
418 }
419
420 / Get the name of the variable declared in the mapper
421 DeclarationName getVarName() { return VarName; }
422
423 / Get reference to previous declare mapper construct in the same
424 / scope with the same name.
427
428 static bool classof(const Decl *D) { return classofKind(D->getKind()); }
429 static bool classofKind(Kind K) { return K == OMPDeclareMapper; }
430 static DeclContext *castToDeclContext(const OMPDeclareMapperDecl *D) {
431 return static_cast<DeclContext *>(const_cast<OMPDeclareMapperDecl *>(D));
432 }
433 static OMPDeclareMapperDecl *castFromDeclContext(const DeclContext *DC) {
434 return static_cast<OMPDeclareMapperDecl *>(const_cast<DeclContext *>(DC));
435 }
436};
437
438/ Pseudo declaration for capturing expressions. Also is used for capturing of
439/ non-static data members in non-static member functions.
440/
441/ Clang supports capturing of variables only, but OpenMP 4.5 allows to
442/ privatize non-static members of current class in non-static member
443/ functions. This pseudo-declaration allows properly handle this kind of
444/ capture by wrapping captured expression into a variable-like declaration.
445class OMPCapturedExprDecl final : public VarDecl {
446 friend class ASTDeclReader;
447 void anchor() override;
448
449 OMPCapturedExprDecl(ASTContext &C, DeclContext *DC, IdentifierInfo *Id,
451 SourceLocation StartLoc)
452 : VarDecl(OMPCapturedExpr, C, DC, StartLoc, StartLoc, Id, Type, TInfo,
453 SC_None) {
454 setImplicit();
455 }
456
457public:
460 SourceLocation StartLoc);
461
463 GlobalDeclID ID);
464
465 SourceRange getSourceRange() const override LLVM_READONLY;
466
467 / Implement isa/cast/dyncast/etc.
468 static bool classof(const Decl *D) { return classofKind(D->getKind()); }
469 static bool classofKind(Kind K) { return K == OMPCapturedExpr; }
470};
471
472/ This represents '#pragma omp requires...' directive.
473/ For example
474/
475/ \code
476/ #pragma omp requires unified_address
477/ \endcode
478/
479class OMPRequiresDecl final : public OMPDeclarativeDirective<Decl> {
480 friend class OMPDeclarativeDirective<Decl>;
481 friend class ASTDeclReader;
482
483 LLVM_DECLARE_VIRTUAL_ANCHOR_FUNCTION();
484
485 OMPRequiresDecl(DeclContext *DC, SourceLocation L)
486 : OMPDeclarativeDirective<Decl>(OMPRequires, DC, L) {}
487
488public:
489 / Create requires node.
492 / Create deserialized requires node.
494 unsigned N);
495
498 using clauselist_range = llvm::iterator_range<clauselist_iterator>;
499 using clauselist_const_range = llvm::iterator_range<clauselist_const_iterator>;
500
501 unsigned clauselist_size() const { return Data->getNumClauses(); }
502 bool clauselist_empty() const { return Data->getClauses().empty(); }
503
510 clauselist_iterator clauselist_begin() { return Data->getClauses().begin(); }
511 clauselist_iterator clauselist_end() { return Data->getClauses().end(); }
513 return Data->getClauses().begin();
514 }
516 return Data->getClauses().end();
517 }
518
519 static bool classof(const Decl *D) { return classofKind(D->getKind()); }
520 static bool classofKind(Kind K) { return K == OMPRequires; }
521};
522
523/ This represents '#pragma omp allocate ...' directive.
524/ For example, in the following, the default allocator is used for both 'a'
525/ and 'A::b':
526/
527/ \code
528/ int a;
529/ #pragma omp allocate(a)
530/ struct A {
531/ static int b;
532/ #pragma omp allocate(b)
533/ };
534/ \endcode
535/
536class OMPAllocateDecl final : public OMPDeclarativeDirective<Decl> {
537 friend class OMPDeclarativeDirective<Decl>;
538 friend class ASTDeclReader;
539
540 LLVM_DECLARE_VIRTUAL_ANCHOR_FUNCTION();
541
542 OMPAllocateDecl(DeclContext *DC, SourceLocation L)
543 : OMPDeclarativeDirective<Decl>(OMPAllocate, DC, L) {}
544
545 ArrayRef<const Expr *> getVars() const {
546 auto **Storage = reinterpret_cast<Expr **>(Data->getChildren().data());
547 return {Storage, Data->getNumChildren()};
548 }
549
550 MutableArrayRef<Expr *> getVars() {
551 auto **Storage = reinterpret_cast<Expr **>(Data->getChildren().data());
552 return {Storage, Data->getNumChildren()};
553 }
554
555 void setVars(ArrayRef<Expr *> VL);
556
557public:
558 static OMPAllocateDecl *Create(ASTContext &C, DeclContext *DC,
559 SourceLocation L, ArrayRef<Expr *> VL,
560 ArrayRef<OMPClause *> CL);
561 static OMPAllocateDecl *CreateDeserialized(ASTContext &C, GlobalDeclID ID,
562 unsigned NVars, unsigned NClauses);
563
566 typedef llvm::iterator_range<varlist_iterator> varlist_range;
567 typedef llvm::iterator_range<varlist_const_iterator> varlist_const_range;
570 using clauselist_range = llvm::iterator_range<clauselist_iterator>;
571 using clauselist_const_range = llvm::iterator_range<clauselist_const_iterator>;
572
573 unsigned varlist_size() const { return Data->getNumChildren(); }
574 bool varlist_empty() const { return Data->getChildren().empty(); }
575 unsigned clauselist_size() const { return Data->getNumClauses(); }
576 bool clauselist_empty() const { return Data->getClauses().empty(); }
577
584 varlist_iterator varlist_begin() { return getVars().begin(); }
585 varlist_iterator varlist_end() { return getVars().end(); }
586 varlist_const_iterator varlist_begin() const { return getVars().begin(); }
587 varlist_const_iterator varlist_end() const { return getVars().end(); }
588
595 clauselist_iterator clauselist_begin() { return Data->getClauses().begin(); }
596 clauselist_iterator clauselist_end() { return Data->getClauses().end(); }
598 return Data->getClauses().begin();
599 }
601 return Data->getClauses().end();
602 }
603
604 static bool classof(const Decl *D) { return classofKind(D->getKind()); }
605 static bool classofKind(Kind K) { return K == OMPAllocate; }
606};
607
608} / end namespace clang
609
610#endif
Defines the clang::ASTContext interface.
This file defines OpenMP AST classes for clauses.
C Language Family Type Representation.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Definition ASTContext.h:220
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Definition ASTContext.h:220
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
Definition DeclBase.h:1449
DeclContext(Decl::Kind K)
OMPDeclareReductionDeclBitfields OMPDeclareReductionDeclBits
Definition DeclBase.h:2043
Decl - This represents one declaration (or definition), e.g.
Definition DeclBase.h:86
Kind
Lists the kind of concrete classes of Decl.
Definition DeclBase.h:89
void setImplicit(bool I=true)
Definition DeclBase.h:594
friend class DeclContext
Definition DeclBase.h:252
Kind getKind() const
Definition DeclBase.h:442
The name of a declaration.
This represents one expression.
Definition Expr.h:112
One of these records is kept for each identifier that is lexed.
llvm::iterator_range< clauselist_iterator > clauselist_range
Definition DeclOpenMP.h:570
clauselist_iterator clauselist_end()
Definition DeclOpenMP.h:596
static OMPAllocateDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned NVars, unsigned NClauses)
MutableArrayRef< OMPClause * >::iterator clauselist_iterator
Definition DeclOpenMP.h:568
clauselist_iterator clauselist_begin()
Definition DeclOpenMP.h:595
static bool classofKind(Kind K)
Definition DeclOpenMP.h:605
bool varlist_empty() const
Definition DeclOpenMP.h:574
clauselist_const_iterator clauselist_begin() const
Definition DeclOpenMP.h:597
friend class ASTDeclReader
Definition DeclOpenMP.h:538
ArrayRef< const OMPClause * >::iterator clauselist_const_iterator
Definition DeclOpenMP.h:569
bool clauselist_empty() const
Definition DeclOpenMP.h:576
varlist_const_iterator varlist_end() const
Definition DeclOpenMP.h:587
varlist_iterator varlist_begin()
Definition DeclOpenMP.h:584
llvm::iterator_range< clauselist_const_iterator > clauselist_const_range
Definition DeclOpenMP.h:571
MutableArrayRef< Expr * >::iterator varlist_iterator
Definition DeclOpenMP.h:564
llvm::iterator_range< varlist_iterator > varlist_range
Definition DeclOpenMP.h:566
static bool classof(const Decl *D)
Definition DeclOpenMP.h:604
varlist_const_iterator varlist_begin() const
Definition DeclOpenMP.h:586
varlist_const_range varlist() const
Definition DeclOpenMP.h:581
unsigned varlist_size() const
Definition DeclOpenMP.h:573
clauselist_const_iterator clauselist_end() const
Definition DeclOpenMP.h:600
clauselist_const_range clauselists() const
Definition DeclOpenMP.h:592
clauselist_range clauselists()
Definition DeclOpenMP.h:589
unsigned clauselist_size() const
Definition DeclOpenMP.h:575
ArrayRef< constExpr * >::iterator varlist_const_iterator
Definition DeclOpenMP.h:565
llvm::iterator_range< varlist_const_iterator > varlist_const_range
Definition DeclOpenMP.h:567
varlist_iterator varlist_end()
Definition DeclOpenMP.h:585
varlist_range varlist()
Definition DeclOpenMP.h:578
Pseudo declaration for capturing expressions.
Definition DeclOpenMP.h:445
static bool classof(const Decl *D)
Definition DeclOpenMP.h:468
static bool classofKind(Kind K)
Definition DeclOpenMP.h:469
static OMPCapturedExprDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)
SourceRange getSourceRange() const override LLVM_READONLY
Source range that this declaration covers.
Contains data for OpenMP directives: clauses, children expressions/statements (helpers for codegen) a...
This is a basic class for representing single OpenMP clause.
static T * createEmptyDirective(const ASTContext &C, GlobalDeclID ID, unsigned NumClauses, unsigned NumChildren, Params &&... P)
Definition DeclOpenMP.h:62
OMPDeclarativeDirective(Params &&... P)
Build instance of directive.
Definition DeclOpenMP.h:47
unsigned getNumClauses() const
Get number of clauses.
Definition DeclOpenMP.h:79
OMPClause * getClause(unsigned I) const
Returns specified clause.
Definition DeclOpenMP.h:89
OMPChildren * Data
Data, associated with the directive.
Definition DeclOpenMP.h:43
static size_t size(unsigned NumClauses, unsigned NumChildren)
Definition DeclOpenMP.h:72
static T * createDirective(const ASTContext &C, DeclContext *DC, ArrayRef< OMPClause * > Clauses, unsigned NumChildren, Params &&... P)
Definition DeclOpenMP.h:50
ArrayRef< OMPClause * > clauses() const
Definition DeclOpenMP.h:91
This represents 'pragma omp declare mapper ...' directive.
Definition DeclOpenMP.h:349
static OMPDeclareMapperDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned N)
Creates deserialized declare mapper node.
ArrayRef< const OMPClause * >::iterator clauselist_const_iterator
Definition DeclOpenMP.h:387
const Expr * getMapperVarRef() const
Definition DeclOpenMP.h:412
clauselist_const_iterator clauselist_begin() const
Definition DeclOpenMP.h:403
void setMapperVarRef(Expr *MapperVarRefE)
Set the variable declared in the mapper.
Definition DeclOpenMP.h:416
clauselist_const_iterator clauselist_end() const
Definition DeclOpenMP.h:406
OMPDeclareMapperDecl * getPrevDeclInScope()
Get reference to previous declare mapper construct in the same scope with the same name.
unsigned clauselist_size() const
Definition DeclOpenMP.h:392
clauselist_iterator clauselist_begin()
Definition DeclOpenMP.h:401
clauselist_range clauselists()
Definition DeclOpenMP.h:395
DeclarationName getVarName()
Get the name of the variable declared in the mapper.
Definition DeclOpenMP.h:421
static DeclContext * castToDeclContext(const OMPDeclareMapperDecl *D)
Definition DeclOpenMP.h:430
clauselist_const_range clauselists() const
Definition DeclOpenMP.h:398
llvm::iterator_range< clauselist_const_iterator > clauselist_const_range
Definition DeclOpenMP.h:389
MutableArrayRef< OMPClause * >::iterator clauselist_iterator
Definition DeclOpenMP.h:386
static OMPDeclareMapperDecl * castFromDeclContext(const DeclContext *DC)
Definition DeclOpenMP.h:433
static bool classofKind(Kind K)
Definition DeclOpenMP.h:429
Expr * getMapperVarRef()
Get the variable declared in the mapper.
Definition DeclOpenMP.h:411
llvm::iterator_range< clauselist_iterator > clauselist_range
Definition DeclOpenMP.h:388
static bool classof(const Decl *D)
Definition DeclOpenMP.h:428
clauselist_iterator clauselist_end()
Definition DeclOpenMP.h:402
This represents 'pragma omp declare reduction ...' directive.
Definition DeclOpenMP.h:239
Expr * getInitializer()
Get initializer expression (if specified) of the declare reduction construct.
Definition DeclOpenMP.h:300
void setInitializerData(Expr *OrigE, Expr *PrivE)
Set initializer Orig and Priv vars.
Definition DeclOpenMP.h:319
void setInitializer(Expr *E, OMPDeclareReductionInitKind IK)
Set initializer expression for the declare reduction construct.
Definition DeclOpenMP.h:314
Expr * getInitPriv()
Get Priv variable of the initializer.
Definition DeclOpenMP.h:311
const Expr * getCombinerIn() const
Definition DeclOpenMP.h:286
Expr * getCombinerOut()
Get Out variable of the combiner.
Definition DeclOpenMP.h:288
const Expr * getCombiner() const
Definition DeclOpenMP.h:283
void setCombiner(Expr *E)
Set combiner expression for the declare reduction construct.
Definition DeclOpenMP.h:291
Expr * getCombinerIn()
Get In variable of the combiner.
Definition DeclOpenMP.h:285
const Expr * getInitOrig() const
Definition DeclOpenMP.h:309
Expr * getCombiner()
Get combiner expression of the declare reduction construct.
Definition DeclOpenMP.h:282
static bool classofKind(Kind K)
Definition DeclOpenMP.h:330
void setCombinerData(Expr *InE, Expr *OutE)
Set combiner In and Out vars.
Definition DeclOpenMP.h:293
static DeclContext * castToDeclContext(const OMPDeclareReductionDecl *D)
Definition DeclOpenMP.h:331
const Expr * getInitializer() const
Definition DeclOpenMP.h:301
OMPDeclareReductionDecl * getPrevDeclInScope()
Get reference to previous declare reduction construct in the same scope with the same name.
Expr * getInitOrig()
Get Orig variable of the initializer.
Definition DeclOpenMP.h:308
static OMPDeclareReductionDecl * castFromDeclContext(const DeclContext *DC)
Definition DeclOpenMP.h:334
OMPDeclareReductionInitKind getInitializerKind() const
Get initializer kind.
Definition DeclOpenMP.h:303
static bool classof(const Decl *D)
Definition DeclOpenMP.h:329
const Expr * getInitPriv() const
Definition DeclOpenMP.h:312
const Expr * getCombinerOut() const
Definition DeclOpenMP.h:289
static OMPDeclareReductionDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID)
Create deserialized declare reduction node.
static bool classofKind(Kind K)
Definition DeclOpenMP.h:220
static OMPGroupPrivateDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned N)
MutableArrayRef< Expr * >::iterator varlist_iterator
Definition DeclOpenMP.h:200
static bool classof(const Decl *D)
Definition DeclOpenMP.h:219
varlist_const_iterator varlist_begin() const
Definition DeclOpenMP.h:216
varlist_iterator varlist_begin()
Definition DeclOpenMP.h:214
varlist_const_iterator varlist_end() const
Definition DeclOpenMP.h:217
llvm::iterator_range< varlist_const_iterator > varlist_const_range
Definition DeclOpenMP.h:203
llvm::iterator_range< varlist_iterator > varlist_range
Definition DeclOpenMP.h:202
ArrayRef< constExpr * >::iterator varlist_const_iterator
Definition DeclOpenMP.h:201
unsigned varlist_size() const
Definition DeclOpenMP.h:205
varlist_const_range varlist() const
Definition DeclOpenMP.h:211
varlist_range varlist()
Definition DeclOpenMP.h:208
friend class OMPDeclarativeDirective< Decl >
Definition DeclOpenMP.h:174
varlist_iterator varlist_end()
Definition DeclOpenMP.h:215
This represents 'pragma omp requires...' directive.
Definition DeclOpenMP.h:479
static OMPRequiresDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned N)
Create deserialized requires node.
clauselist_iterator clauselist_begin()
Definition DeclOpenMP.h:510
ArrayRef< const OMPClause * >::iterator clauselist_const_iterator
Definition DeclOpenMP.h:497
MutableArrayRef< OMPClause * >::iterator clauselist_iterator
Definition DeclOpenMP.h:496
clauselist_range clauselists()
Definition DeclOpenMP.h:504
friend class ASTDeclReader
Definition DeclOpenMP.h:481
clauselist_const_range clauselists() const
Definition DeclOpenMP.h:507
bool clauselist_empty() const
Definition DeclOpenMP.h:502
clauselist_const_iterator clauselist_begin() const
Definition DeclOpenMP.h:512
llvm::iterator_range< clauselist_iterator > clauselist_range
Definition DeclOpenMP.h:498
llvm::iterator_range< clauselist_const_iterator > clauselist_const_range
Definition DeclOpenMP.h:499
static bool classof(const Decl *D)
Definition DeclOpenMP.h:519
unsigned clauselist_size() const
Definition DeclOpenMP.h:501
clauselist_iterator clauselist_end()
Definition DeclOpenMP.h:511
static bool classofKind(Kind K)
Definition DeclOpenMP.h:520
clauselist_const_iterator clauselist_end() const
Definition DeclOpenMP.h:515
static OMPThreadPrivateDecl * CreateDeserialized(ASTContext &C, GlobalDeclID ID, unsigned N)
MutableArrayRef< Expr * >::iterator varlist_iterator
Definition DeclOpenMP.h:138
varlist_const_iterator varlist_begin() const
Definition DeclOpenMP.h:154
unsigned varlist_size() const
Definition DeclOpenMP.h:143
llvm::iterator_range< varlist_iterator > varlist_range
Definition DeclOpenMP.h:140
ArrayRef< constExpr * >::iterator varlist_const_iterator
Definition DeclOpenMP.h:139
varlist_const_range varlist() const
Definition DeclOpenMP.h:149
varlist_const_iterator varlist_end() const
Definition DeclOpenMP.h:155
varlist_iterator varlist_end()
Definition DeclOpenMP.h:153
static bool classof(const Decl *D)
Definition DeclOpenMP.h:157
static bool classofKind(Kind K)
Definition DeclOpenMP.h:158
friend class OMPDeclarativeDirective< Decl >
Definition DeclOpenMP.h:111
varlist_iterator varlist_begin()
Definition DeclOpenMP.h:152
llvm::iterator_range< varlist_const_iterator > varlist_const_range
Definition DeclOpenMP.h:141
A (possibly-)qualified type.
Definition TypeBase.h:937
Encodes a location in the source.
A trivial tuple used to represent a source range.
A container of type source information.
Definition TypeBase.h:8249
The base class of the type hierarchy.
Definition TypeBase.h:1833
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
Definition Decl.h:712
ValueDecl(Kind DK, DeclContext *DC, SourceLocation L, DeclarationName N, QualType T)
Definition Decl.h:718
VarDecl(Kind DK, ASTContext &C, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, const IdentifierInfo *Id, QualType T, TypeSourceInfo *TInfo, StorageClass SC)
Definition Decl.cpp:2141
Code completion in a.
Definition SPIR.cpp:35
The JSON file list parser is used to communicate input to InstallAPI.
@ Create
'create' clause, allowed on Compute and Combined constructs, plus 'data', 'enter data',...
LazyOffsetPtr< Decl, GlobalDeclID, &ExternalASTSource::GetExternalDecl > LazyDeclPtr
A lazy pointer to a declaration.
OMPDeclareReductionInitKind
Definition DeclOpenMP.h:223
@ SC_None
Definition Specifiers.h:250
const FunctionProtoType * T

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant