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