clang: lib/AST/StmtOpenACC.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
16using namespace clang;
17
20 void *Mem = C.Allocate(
21 OpenACCComputeConstruct::totalSizeToAlloc<const OpenACCClause *>(
22 NumClauses));
24 return Inst;
25}
26
31 void *Mem = C.Allocate(
32 OpenACCComputeConstruct::totalSizeToAlloc<const OpenACCClause *>(
33 Clauses.size()));
35 Clauses, StructuredBlock);
36 return Inst;
37}
38
39OpenACCLoopConstruct::OpenACCLoopConstruct(unsigned NumClauses)
43 nullptr) {
44 std::uninitialized_value_construct(
45 getTrailingObjects<const OpenACCClause *>(),
46 getTrailingObjects<const OpenACCClause *>() + NumClauses);
48 MutableArrayRef(getTrailingObjects<const OpenACCClause *>(), NumClauses));
49}
50
51OpenACCLoopConstruct::OpenACCLoopConstruct(
58 ParentComputeConstructKind(ParentKind) {
59
60
61 assert((Loop == nullptr || isa<ForStmt, CXXForRangeStmt>(Loop)) &&
62 "Associated Loop not a for loop?");
63
64 std::uninitialized_copy(Clauses.begin(), Clauses.end(),
65 getTrailingObjects<const OpenACCClause *>());
66
68 Clauses.size()));
69}
70
72 unsigned NumClauses) {
73 void *Mem =
74 C.Allocate(OpenACCLoopConstruct::totalSizeToAlloc<const OpenACCClause *>(
75 NumClauses));
77 return Inst;
78}
79
84 void *Mem =
85 C.Allocate(OpenACCLoopConstruct::totalSizeToAlloc<const OpenACCClause *>(
86 Clauses.size()));
87 auto *Inst = new (Mem)
89 return Inst;
90}
91
94 unsigned NumClauses) {
95 void *Mem = C.Allocate(
96 OpenACCCombinedConstruct::totalSizeToAlloc<const OpenACCClause *>(
97 NumClauses));
99 return Inst;
100}
101
106 void *Mem = C.Allocate(
107 OpenACCCombinedConstruct::totalSizeToAlloc<const OpenACCClause *>(
108 Clauses.size()));
109 auto *Inst = new (Mem)
111 return Inst;
112}
113
115 unsigned NumClauses) {
116 void *Mem =
117 C.Allocate(OpenACCDataConstruct::totalSizeToAlloc<const OpenACCClause *>(
118 NumClauses));
120 return Inst;
121}
122
127 Stmt *StructuredBlock) {
128 void *Mem =
129 C.Allocate(OpenACCDataConstruct::totalSizeToAlloc<const OpenACCClause *>(
130 Clauses.size()));
131 auto *Inst = new (Mem)
133 return Inst;
134}
135
138 unsigned NumClauses) {
139 void *Mem = C.Allocate(
140 OpenACCEnterDataConstruct::totalSizeToAlloc<const OpenACCClause *>(
141 NumClauses));
143 return Inst;
144}
145
149 void *Mem = C.Allocate(
150 OpenACCEnterDataConstruct::totalSizeToAlloc<const OpenACCClause *>(
151 Clauses.size()));
152 auto *Inst =
154 return Inst;
155}
156
159 unsigned NumClauses) {
160 void *Mem = C.Allocate(
161 OpenACCExitDataConstruct::totalSizeToAlloc<const OpenACCClause *>(
162 NumClauses));
164 return Inst;
165}
166
170 void *Mem = C.Allocate(
171 OpenACCExitDataConstruct::totalSizeToAlloc<const OpenACCClause *>(
172 Clauses.size()));
173 auto *Inst =
175 return Inst;
176}
177
180 unsigned NumClauses) {
181 void *Mem = C.Allocate(
182 OpenACCHostDataConstruct::totalSizeToAlloc<const OpenACCClause *>(
183 NumClauses));
185 return Inst;
186}
187
191 Stmt *StructuredBlock) {
192 void *Mem = C.Allocate(
193 OpenACCHostDataConstruct::totalSizeToAlloc<const OpenACCClause *>(
194 Clauses.size()));
196 Clauses, StructuredBlock);
197 return Inst;
198}
199
201 unsigned NumExprs,
202 unsigned NumClauses) {
203 void *Mem = C.Allocate(
204 OpenACCWaitConstruct::totalSizeToAlloc<Expr *, OpenACCClause *>(
205 NumExprs, NumClauses));
206
208 return Inst;
209}
210
216
217 assert(llvm::all_of(QueueIdExprs, [](Expr *E) { return E != nullptr; }));
218
219 void *Mem = C.Allocate(
220 OpenACCWaitConstruct::totalSizeToAlloc<Expr *, OpenACCClause *>(
221 QueueIdExprs.size() + 1, Clauses.size()));
222
223 auto *Inst = new (Mem)
225 QueuesLoc, QueueIdExprs, RParenLoc, End, Clauses);
226 return Inst;
227}
229 unsigned NumClauses) {
230 void *Mem =
231 C.Allocate(OpenACCInitConstruct::totalSizeToAlloc<const OpenACCClause *>(
232 NumClauses));
234 return Inst;
235}
236
241 void *Mem =
242 C.Allocate(OpenACCInitConstruct::totalSizeToAlloc<const OpenACCClause *>(
243 Clauses.size()));
244 auto *Inst =
246 return Inst;
247}
250 unsigned NumClauses) {
251 void *Mem = C.Allocate(
252 OpenACCShutdownConstruct::totalSizeToAlloc<const OpenACCClause *>(
253 NumClauses));
255 return Inst;
256}
257
261 void *Mem = C.Allocate(
262 OpenACCShutdownConstruct::totalSizeToAlloc<const OpenACCClause *>(
263 Clauses.size()));
264 auto *Inst =
266 return Inst;
267}
268
270 unsigned NumClauses) {
271 void *Mem = C.Allocate(
272 OpenACCSetConstruct::totalSizeToAlloc<const OpenACCClause *>(NumClauses));
274 return Inst;
275}
276
281 void *Mem =
282 C.Allocate(OpenACCSetConstruct::totalSizeToAlloc<const OpenACCClause *>(
283 Clauses.size()));
284 auto *Inst = new (Mem) OpenACCSetConstruct(Start, DirectiveLoc, End, Clauses);
285 return Inst;
286}
287
290 void *Mem = C.Allocate(
291 OpenACCUpdateConstruct::totalSizeToAlloc<const OpenACCClause *>(
292 NumClauses));
294 return Inst;
295}
296
301 void *Mem = C.Allocate(
302 OpenACCUpdateConstruct::totalSizeToAlloc<const OpenACCClause *>(
303 Clauses.size()));
304 auto *Inst =
306 return Inst;
307}
Defines the clang::ASTContext interface.
This file defines OpenACC AST classes for statement-level contructs.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
This represents one expression.
This is a base class for any OpenACC statement-level constructs that have an associated statement.
static OpenACCCombinedConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCCombinedConstruct * Create(const ASTContext &C, OpenACCDirectiveKind K, SourceLocation Start, SourceLocation DirectiveLoc, SourceLocation End, ArrayRef< const OpenACCClause * > Clauses, Stmt *StructuredBlock)
This class represents a compute construct, representing a 'Kind' of ‘parallel’, 'serial',...
static OpenACCComputeConstruct * Create(const ASTContext &C, OpenACCDirectiveKind K, SourceLocation BeginLoc, SourceLocation DirectiveLoc, SourceLocation EndLoc, ArrayRef< const OpenACCClause * > Clauses, Stmt *StructuredBlock)
static OpenACCComputeConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
void setClauseList(MutableArrayRef< const OpenACCClause * > NewClauses)
static OpenACCDataConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCDataConstruct * Create(const ASTContext &C, SourceLocation Start, SourceLocation DirectiveLoc, SourceLocation End, ArrayRef< const OpenACCClause * > Clauses, Stmt *StructuredBlock)
static OpenACCEnterDataConstruct * Create(const ASTContext &C, SourceLocation Start, SourceLocation DirectiveLoc, SourceLocation End, ArrayRef< const OpenACCClause * > Clauses)
static OpenACCEnterDataConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCExitDataConstruct * Create(const ASTContext &C, SourceLocation Start, SourceLocation DirectiveLoc, SourceLocation End, ArrayRef< const OpenACCClause * > Clauses)
static OpenACCExitDataConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCHostDataConstruct * Create(const ASTContext &C, SourceLocation Start, SourceLocation DirectiveLoc, SourceLocation End, ArrayRef< const OpenACCClause * > Clauses, Stmt *StructuredBlock)
static OpenACCHostDataConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCInitConstruct * Create(const ASTContext &C, SourceLocation Start, SourceLocation DirectiveLoc, SourceLocation End, ArrayRef< const OpenACCClause * > Clauses)
static OpenACCInitConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
This class represents a 'loop' construct.
static OpenACCLoopConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCLoopConstruct * Create(const ASTContext &C, OpenACCDirectiveKind ParentKind, SourceLocation BeginLoc, SourceLocation DirLoc, SourceLocation EndLoc, ArrayRef< const OpenACCClause * > Clauses, Stmt *Loop)
static OpenACCSetConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCSetConstruct * Create(const ASTContext &C, SourceLocation Start, SourceLocation DirectiveLoc, SourceLocation End, ArrayRef< const OpenACCClause * > Clauses)
static OpenACCShutdownConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCShutdownConstruct * Create(const ASTContext &C, SourceLocation Start, SourceLocation DirectiveLoc, SourceLocation End, ArrayRef< const OpenACCClause * > Clauses)
static OpenACCUpdateConstruct * CreateEmpty(const ASTContext &C, unsigned NumClauses)
static OpenACCUpdateConstruct * Create(const ASTContext &C, SourceLocation Start, SourceLocation DirectiveLoc, SourceLocation End, ArrayRef< const OpenACCClause * > Clauses)
static OpenACCWaitConstruct * CreateEmpty(const ASTContext &C, unsigned NumExprs, unsigned NumClauses)
static OpenACCWaitConstruct * Create(const ASTContext &C, SourceLocation Start, SourceLocation DirectiveLoc, SourceLocation LParenLoc, Expr *DevNumExpr, SourceLocation QueuesLoc, ArrayRef< Expr * > QueueIdExprs, SourceLocation RParenLoc, SourceLocation End, ArrayRef< const OpenACCClause * > Clauses)
Encodes a location in the source.
Stmt - This represents one statement.
The JSON file list parser is used to communicate input to InstallAPI.