clang: include/clang/AST/DeclOpenMP.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef LLVM_CLANG_AST_DECLOPENMP_H
15#define LLVM_CLANG_AST_DECLOPENMP_H
16
23#include "llvm/ADT/ArrayRef.h"
24#include "llvm/Support/TrailingObjects.h"
25
27
28
29
33
34
37 return {};
38 return Data->getClauses();
39 }
40
41protected:
42
44
45
46 template <typename... Params>
48
49 template <typename T, typename... Params>
52 Params &&... P) {
53 auto *Inst = new (C, DC, size(Clauses.size(), NumChildren))
54 T(DC, std::forward(P)...);
55 Inst->Data = OMPChildren::Create(Inst + 1, Clauses,
56 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(P)...);
67 Inst->Data = OMPChildren::CreateEmpty(
68 Inst + 1, NumClauses, false, NumChildren);
69 return Inst;
70 }
71
72 static size_t size(unsigned NumClauses, unsigned NumChildren) {
73 return OMPChildren::size(NumClauses, false,
74 NumChildren);
75 }
76
77public:
78
81 return 0;
82 return Data->getNumClauses();
83 }
84
85
86
87
88
90
93 return {};
94 return Data->getClauses();
95 }
96};
97
98
99
100
101
102
103
104
105
106
107
108
109
112
113 LLVM_DECLARE_VIRTUAL_ANCHOR_FUNCTION();
114
115 OMPThreadPrivateDecl(DeclContext *DC = nullptr,
118
120 auto **Storage = reinterpret_cast<Expr **>(Data->getChildren().data());
121 return {Storage, Data->getNumChildren()};
122 }
123
125 auto **Storage = reinterpret_cast<Expr **>(Data->getChildren().data());
126 return {Storage, Data->getNumChildren()};
127 }
128
130
131public:
137
140 typedef llvm::iterator_range<varlist_iterator> varlist_range;
142
145
156
159};
160
161
162
163
164
165
166
167
168
169
170
171
172
175
176 LLVM_DECLARE_VIRTUAL_ANCHOR_FUNCTION();
177
178 OMPGroupPrivateDecl(DeclContext *DC = nullptr,
181
183 auto **Storage = reinterpret_cast<Expr **>(Data->getChildren().data());
184 return {Storage, Data->getNumChildren()};
185 }
186
188 auto **Storage = reinterpret_cast<Expr **>(Data->getChildren().data());
189 return {Storage, Data->getNumChildren()};
190 }
191
193
194public:
198 unsigned N);
199
202 typedef llvm::iterator_range<varlist_iterator> varlist_range;
204
207
218
221};
222
228
229
230
231
232
233
234
235
236
237
238
240
241
242
244
245 Expr *Combiner = nullptr;
246
247 Expr *Initializer = nullptr;
248
249 Expr *In = nullptr;
250
251 Expr *Out = nullptr;
252
253 Expr *Priv = nullptr;
254
255 Expr *Orig = nullptr;
256
257
258
259
261
262 void anchor() override;
263
266 OMPDeclareReductionDecl *PrevDeclInScope);
267
268 void setPrevDeclInScope(OMPDeclareReductionDecl *Prev) {
269 PrevDeclInScope = Prev;
270 }
271
272public:
273
277
280
281
284
287
290
292
294 In = InE;
295 Out = OutE;
296 }
297
298
299
302
307
310
313
315 Initializer = E;
317 }
318
320 Orig = OrigE;
321 Priv = PrivE;
322 }
323
324
325
328
332 return static_cast<DeclContext *>(const_cast<OMPDeclareReductionDecl *>(D));
333 }
335 return static_cast<OMPDeclareReductionDecl *>(
337 }
338};
339
340
341
342
343
344
345
346
347
353
354
355 Expr *MapperVarRef = nullptr;
356
357
359
361
362 void anchor() override;
363
366 OMPDeclareMapperDecl *PrevDeclInScope)
368 DeclContext(OMPDeclareMapper), VarName(VarName),
369 PrevDeclInScope(PrevDeclInScope) {}
370
372 PrevDeclInScope = Prev;
373 }
374
375public:
376
378 SourceLocation L, DeclarationName Name,
379 QualType T, DeclarationName VarName,
381 OMPDeclareMapperDecl *PrevDeclInScope);
382
384 GlobalDeclID ID, unsigned N);
385
390 llvm::iterator_range<clauselist_const_iterator>;
391
394
404 return Data->getClauses().begin();
405 }
407 return Data->getClauses().end();
408 }
409
410
413 return cast_or_null(Data->getChildren()[0]);
414 }
415
417 Data->getChildren()[0] = MapperVarRefE;
418 }
419
420
422
423
424
427
431 return static_cast<DeclContext *>(const_cast<OMPDeclareMapperDecl *>(D));
432 }
434 return static_cast<OMPDeclareMapperDecl *>(const_cast<DeclContext *>(DC));
435 }
436};
437
438
439
440
441
442
443
444
445class OMPCapturedExprDecl final : public VarDecl {
447 void anchor() override;
448
452 : VarDecl(OMPCapturedExpr, C, DC, StartLoc, StartLoc, Id, Type, TInfo,
455 }
456
457public:
461
464
466
467
469 static bool classofKind(Kind K) { return K == OMPCapturedExpr; }
470};
471
472
473
474
475
476
477
478
482
483 LLVM_DECLARE_VIRTUAL_ANCHOR_FUNCTION();
484
487
488public:
489
492
494 unsigned N);
495
500
503
513 return Data->getClauses().begin();
514 }
516 return Data->getClauses().end();
517 }
518
521};
522
523
524
525
526
527
528
529
530
531
532
533
534
535
539
540 LLVM_DECLARE_VIRTUAL_ANCHOR_FUNCTION();
541
544
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:
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;
572
577
588
598 return Data->getClauses().begin();
599 }
601 return Data->getClauses().end();
602 }
603
606};
607
608}
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 ...
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
DeclContext(Decl::Kind K)
OMPDeclareReductionDeclBitfields OMPDeclareReductionDeclBits
Decl - This represents one declaration (or definition), e.g.
Kind
Lists the kind of concrete classes of Decl.
void setImplicit(bool I=true)
The name of a declaration.
This represents one expression.
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
friend class ASTDeclReader
Definition DeclOpenMP.h:446
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
friend class ASTDeclReader
Definition DeclOpenMP.h:31
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
friend class ASTDeclWriter
Definition DeclOpenMP.h:32
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
friend class ASTDeclReader
Definition DeclOpenMP.h:351
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
friend class ASTDeclWriter
Definition DeclOpenMP.h:352
static bool classofKind(Kind K)
Definition DeclOpenMP.h:429
bool clauselist_empty() const
Definition DeclOpenMP.h:393
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
friend class ASTDeclReader
Definition DeclOpenMP.h:243
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
bool varlist_empty() const
Definition DeclOpenMP.h:206
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
varlist_range varlist()
Definition DeclOpenMP.h:146
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
bool varlist_empty() const
Definition DeclOpenMP.h:144
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.
Encodes a location in the source.
A trivial tuple used to represent a source range.
A container of type source information.
The base class of the type hierarchy.
Represent the declaration of a variable (in which case it is an lvalue) a function (in which case it ...
ValueDecl(Kind DK, DeclContext *DC, SourceLocation L, DeclarationName N, QualType T)
VarDecl(Kind DK, ASTContext &C, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, const IdentifierInfo *Id, QualType T, TypeSourceInfo *TInfo, StorageClass SC)
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
@ Call
Definition DeclOpenMP.h:224
@ Direct
Definition DeclOpenMP.h:225
const FunctionProtoType * T