A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://clang.llvm.org/doxygen/StmtProfile_8cpp_source.html below:

clang: lib/AST/StmtProfile.cpp Source File

24#include "llvm/ADT/FoldingSet.h" 25using namespace clang

;

30

llvm::FoldingSetNodeID &

ID

;

32 bool

ProfileLambdaExpr;

35

StmtProfiler(llvm::FoldingSetNodeID &ID,

bool

Canonical,

36 bool

ProfileLambdaExpr)

37

:

ID

(

ID

), Canonical(Canonical), ProfileLambdaExpr(ProfileLambdaExpr) {}

39 virtual

~StmtProfiler() {}

41 void

VisitStmt(

const Stmt

*S);

43 void

VisitStmtNoChildren(

const Stmt

*S) {

44

HandleStmtClass(S->getStmtClass());

49#define STMT(Node, Base) void Visit##Node(const Node *S); 50#include "clang/AST/StmtNodes.inc" 54 virtual void

VisitDecl(

const Decl

*

D

) = 0;

61 virtual void

VisitName(

DeclarationName

Name,

bool

TreatAsDecl =

false

) = 0;

83 class

StmtProfilerWithPointers :

public

StmtProfiler {

87

StmtProfilerWithPointers(llvm::FoldingSetNodeID &ID,

89 bool

ProfileLambdaExpr)

90

: StmtProfiler(

ID

, Canonical, ProfileLambdaExpr), Context(Context) {}

97 void

VisitDecl(

const Decl

*

D

)

override

{

100 if

(Canonical &&

D

) {

102

dyn_cast<NonTypeTemplateParmDecl>(

D

)) {

103 ID

.AddInteger(NTTP->getDepth());

104 ID

.AddInteger(NTTP->getIndex());

105 ID

.AddBoolean(NTTP->isParameterPack());

118 if

(

const ParmVarDecl

*Parm = dyn_cast<ParmVarDecl>(

D

)) {

129

VisitType(Parm->getType());

130 ID

.AddInteger(Parm->getFunctionScopeDepth());

131 ID

.AddInteger(Parm->getFunctionScopeIndex());

136

dyn_cast<TemplateTypeParmDecl>(

D

)) {

137 ID

.AddInteger(TTP->getDepth());

138 ID

.AddInteger(TTP->getIndex());

139 ID

.AddBoolean(TTP->isParameterPack());

144

dyn_cast<TemplateTemplateParmDecl>(

D

)) {

145 ID

.AddInteger(TTP->getDepth());

146 ID

.AddInteger(TTP->getIndex());

147 ID

.AddBoolean(TTP->isParameterPack());

156 if

(Canonical && !

T

.isNull())

159 ID

.AddPointer(

T

.getAsOpaquePtr());

163 ID

.AddPointer(Name.getAsOpaquePtr());

184 class

StmtProfilerWithoutPointers :

public

StmtProfiler {

187

StmtProfilerWithoutPointers(llvm::FoldingSetNodeID &ID,

ODRHash

&Hash)

193 if

(SC == Stmt::UnresolvedLookupExprClass) {

196 ID

.AddInteger(Stmt::DeclRefExprClass);

210 ID

.AddBoolean(

true

);

220 void

VisitDecl(

const Decl

*

D

)

override

{

238void

StmtProfiler::VisitStmt(

const Stmt

*S) {

239

assert(S &&

"Requires non-null Stmt pointer"

);

241

VisitStmtNoChildren(S);

243 for

(

const Stmt

*SubStmt : S->children()) {

251void

StmtProfiler::VisitDeclStmt(

const DeclStmt

*S) {

253 for

(

const auto

*

D

: S->decls())

257void

StmtProfiler::VisitNullStmt(

const NullStmt

*S) {

261void

StmtProfiler::VisitCompoundStmt(

const CompoundStmt

*S) {

265void

StmtProfiler::VisitCaseStmt(

const CaseStmt

*S) {

269void

StmtProfiler::VisitDefaultStmt(

const DefaultStmt

*S) {

273void

StmtProfiler::VisitLabelStmt(

const LabelStmt

*S) {

275

VisitDecl(S->getDecl());

283void

StmtProfiler::VisitIfStmt(

const IfStmt

*S) {

285

VisitDecl(S->getConditionVariable());

288void

StmtProfiler::VisitSwitchStmt(

const SwitchStmt

*S) {

290

VisitDecl(S->getConditionVariable());

293void

StmtProfiler::VisitWhileStmt(

const WhileStmt

*S) {

295

VisitDecl(S->getConditionVariable());

298void

StmtProfiler::VisitDoStmt(

const DoStmt

*S) {

302void

StmtProfiler::VisitForStmt(

const ForStmt

*S) {

306void

StmtProfiler::VisitGotoStmt(

const GotoStmt

*S) {

308

VisitDecl(S->getLabel());

315void

StmtProfiler::VisitContinueStmt(

const ContinueStmt

*S) {

319void

StmtProfiler::VisitBreakStmt(

const BreakStmt

*S) {

323void

StmtProfiler::VisitReturnStmt(

const ReturnStmt

*S) {

327void

StmtProfiler::VisitGCCAsmStmt(

const GCCAsmStmt

*S) {

329 ID

.AddBoolean(S->isVolatile());

330 ID

.AddBoolean(S->isSimple());

331

VisitStringLiteral(S->getAsmString());

332 ID

.AddInteger(S->getNumOutputs());

333 for

(

unsigned

I = 0, N = S->getNumOutputs(); I != N; ++I) {

334 ID

.AddString(S->getOutputName(I));

335

VisitStringLiteral(S->getOutputConstraintLiteral(I));

337 ID

.AddInteger(S->getNumInputs());

338 for

(

unsigned

I = 0, N = S->getNumInputs(); I != N; ++I) {

339 ID

.AddString(S->getInputName(I));

340

VisitStringLiteral(S->getInputConstraintLiteral(I));

342 ID

.AddInteger(S->getNumClobbers());

343 for

(

unsigned

I = 0, N = S->getNumClobbers(); I != N; ++I)

344

VisitStringLiteral(S->getClobberStringLiteral(I));

345 ID

.AddInteger(S->getNumLabels());

346 for

(

auto

*L : S->labels())

347

VisitDecl(L->getLabel());

350void

StmtProfiler::VisitMSAsmStmt(

const MSAsmStmt

*S) {

355void

StmtProfiler::VisitCXXCatchStmt(

const CXXCatchStmt

*S) {

357

VisitType(S->getCaughtType());

360void

StmtProfiler::VisitCXXTryStmt(

const CXXTryStmt

*S) {

370 ID

.AddBoolean(S->isIfExists());

371

VisitNestedNameSpecifier(S->getQualifierLoc().getNestedNameSpecifier());

372

VisitName(S->getNameInfo().getName());

375void

StmtProfiler::VisitSEHTryStmt(

const SEHTryStmt

*S) {

383void

StmtProfiler::VisitSEHExceptStmt(

const SEHExceptStmt

*S) {

387void

StmtProfiler::VisitSEHLeaveStmt(

const SEHLeaveStmt

*S) {

391void

StmtProfiler::VisitCapturedStmt(

const CapturedStmt

*S) {

405 ID

.AddBoolean(S->hasEllipsis());

406 if

(S->getCatchParamDecl())

407

VisitType(S->getCatchParamDecl()->getType());

414void

StmtProfiler::VisitObjCAtTryStmt(

const ObjCAtTryStmt

*S) {

434

StmtProfiler *Profiler;

436 template

<

typename

T>

437 void

VisitOMPClauseList(

T

*

Node

);

440

OMPClauseProfiler(StmtProfiler *

P

) : Profiler(

P

) { }

441#define GEN_CLANG_CLAUSE_CLASS 442#define CLAUSE_CLASS(Enum, Str, Class) void Visit##Class(const Class *C); 443#include "llvm/Frontend/OpenMP/OMP.inc" 448void

OMPClauseProfiler::VistOMPClauseWithPreInit(

450 if

(

auto

*S =

C

->getPreInitStmt())

451

Profiler->VisitStmt(S);

454void

OMPClauseProfiler::VistOMPClauseWithPostUpdate(

456

VistOMPClauseWithPreInit(

C

);

457 if

(

auto

*

E

=

C

->getPostUpdateExpr())

458

Profiler->VisitStmt(

E

);

461void

OMPClauseProfiler::VisitOMPIfClause(

const OMPIfClause

*

C

) {

462

VistOMPClauseWithPreInit(

C

);

463 if

(

C

->getCondition())

464

Profiler->VisitStmt(

C

->getCondition());

467void

OMPClauseProfiler::VisitOMPFinalClause(

const OMPFinalClause

*

C

) {

468

VistOMPClauseWithPreInit(

C

);

469 if

(

C

->getCondition())

470

Profiler->VisitStmt(

C

->getCondition());

474

VistOMPClauseWithPreInit(

C

);

475 if

(

C

->getNumThreads())

476

Profiler->VisitStmt(

C

->getNumThreads());

479void

OMPClauseProfiler::VisitOMPAlignClause(

const OMPAlignClause

*

C

) {

480 if

(

C

->getAlignment())

481

Profiler->VisitStmt(

C

->getAlignment());

485 if

(

C

->getSafelen())

486

Profiler->VisitStmt(

C

->getSafelen());

490 if

(

C

->getSimdlen())

491

Profiler->VisitStmt(

C

->getSimdlen());

494void

OMPClauseProfiler::VisitOMPSizesClause(

const OMPSizesClause

*

C

) {

495 for

(

auto

*

E

:

C

->getSizesRefs())

497

Profiler->VisitExpr(

E

);

500void

OMPClauseProfiler::VisitOMPPermutationClause(

502 for

(

Expr

*

E

:

C

->getArgsRefs())

504

Profiler->VisitExpr(

E

);

507void

OMPClauseProfiler::VisitOMPFullClause(

const OMPFullClause

*

C

) {}

510 if

(

const Expr

*Factor =

C

->getFactor())

511

Profiler->VisitExpr(Factor);

515 if

(

C

->getAllocator())

516

Profiler->VisitStmt(

C

->getAllocator());

520 if

(

C

->getNumForLoops())

521

Profiler->VisitStmt(

C

->getNumForLoops());

525 if

(

Expr

*Evt =

C

->getEventHandler())

526

Profiler->VisitStmt(Evt);

530

VistOMPClauseWithPreInit(

C

);

531 if

(

C

->getCondition())

532

Profiler->VisitStmt(

C

->getCondition());

536

VistOMPClauseWithPreInit(

C

);

537 if

(

C

->getCondition())

538

Profiler->VisitStmt(

C

->getCondition());

545void

OMPClauseProfiler::VisitOMPUnifiedAddressClause(

548void

OMPClauseProfiler::VisitOMPUnifiedSharedMemoryClause(

551void

OMPClauseProfiler::VisitOMPReverseOffloadClause(

554void

OMPClauseProfiler::VisitOMPDynamicAllocatorsClause(

557void

OMPClauseProfiler::VisitOMPAtomicDefaultMemOrderClause(

560void

OMPClauseProfiler::VisitOMPAtClause(

const OMPAtClause

*

C

) {}

565 if

(

C

->getMessageString())

566

Profiler->VisitStmt(

C

->getMessageString());

570

VistOMPClauseWithPreInit(

C

);

571 if

(

auto

*S =

C

->getChunkSize())

572

Profiler->VisitStmt(S);

576 if

(

auto

*

Num

=

C

->getNumForLoops())

577

Profiler->VisitStmt(

Num

);

580void

OMPClauseProfiler::VisitOMPNowaitClause(

const OMPNowaitClause

*) {}

582void

OMPClauseProfiler::VisitOMPUntiedClause(

const OMPUntiedClause

*) {}

586void

OMPClauseProfiler::VisitOMPReadClause(

const OMPReadClause

*) {}

588void

OMPClauseProfiler::VisitOMPWriteClause(

const OMPWriteClause

*) {}

590void

OMPClauseProfiler::VisitOMPUpdateClause(

const OMPUpdateClause

*) {}

596void

OMPClauseProfiler::VisitOMPFailClause(

const OMPFailClause

*) {}

598void

OMPClauseProfiler::VisitOMPAbsentClause(

const OMPAbsentClause

*) {}

600void

OMPClauseProfiler::VisitOMPHoldsClause(

const OMPHoldsClause

*) {}

606void

OMPClauseProfiler::VisitOMPNoOpenMPRoutinesClause(

609void

OMPClauseProfiler::VisitOMPNoParallelismClause(

612void

OMPClauseProfiler::VisitOMPSeqCstClause(

const OMPSeqCstClause

*) {}

614void

OMPClauseProfiler::VisitOMPAcqRelClause(

const OMPAcqRelClause

*) {}

622void

OMPClauseProfiler::VisitOMPWeakClause(

const OMPWeakClause

*) {}

626void

OMPClauseProfiler::VisitOMPSIMDClause(

const OMPSIMDClause

*) {}

630void

OMPClauseProfiler::VisitOMPInitClause(

const OMPInitClause

*

C

) {

631

VisitOMPClauseList(

C

);

634void

OMPClauseProfiler::VisitOMPUseClause(

const OMPUseClause

*

C

) {

635 if

(

C

->getInteropVar())

636

Profiler->VisitStmt(

C

->getInteropVar());

640 if

(

C

->getInteropVar())

641

Profiler->VisitStmt(

C

->getInteropVar());

645

VistOMPClauseWithPreInit(

C

);

646 if

(

C

->getThreadID())

647

Profiler->VisitStmt(

C

->getThreadID());

650template

<

typename

T>

651void

OMPClauseProfiler::VisitOMPClauseList(

T

*

Node

) {

652 for

(

auto

*

E

:

Node

->varlist()) {

654

Profiler->VisitStmt(

E

);

659

VisitOMPClauseList(

C

);

660 for

(

auto

*

E

:

C

->private_copies()) {

662

Profiler->VisitStmt(

E

);

667

VisitOMPClauseList(

C

);

668

VistOMPClauseWithPreInit(

C

);

669 for

(

auto

*

E

:

C

->private_copies()) {

671

Profiler->VisitStmt(

E

);

673 for

(

auto

*

E

:

C

->inits()) {

675

Profiler->VisitStmt(

E

);

680

VisitOMPClauseList(

C

);

681

VistOMPClauseWithPostUpdate(

C

);

682 for

(

auto

*

E

:

C

->source_exprs()) {

684

Profiler->VisitStmt(

E

);

686 for

(

auto

*

E

:

C

->destination_exprs()) {

688

Profiler->VisitStmt(

E

);

690 for

(

auto

*

E

:

C

->assignment_ops()) {

692

Profiler->VisitStmt(

E

);

696

VisitOMPClauseList(

C

);

698void

OMPClauseProfiler::VisitOMPReductionClause(

700

Profiler->VisitNestedNameSpecifier(

701 C

->getQualifierLoc().getNestedNameSpecifier());

702

Profiler->VisitName(

C

->getNameInfo().getName());

703

VisitOMPClauseList(

C

);

704

VistOMPClauseWithPostUpdate(

C

);

705 for

(

auto

*

E

:

C

->privates()) {

707

Profiler->VisitStmt(

E

);

709 for

(

auto

*

E

:

C

->lhs_exprs()) {

711

Profiler->VisitStmt(

E

);

713 for

(

auto

*

E

:

C

->rhs_exprs()) {

715

Profiler->VisitStmt(

E

);

717 for

(

auto

*

E

:

C

->reduction_ops()) {

719

Profiler->VisitStmt(

E

);

721 if

(

C

->getModifier() == clang::OMPC_REDUCTION_inscan) {

722 for

(

auto

*

E

:

C

->copy_ops()) {

724

Profiler->VisitStmt(

E

);

726 for

(

auto

*

E

:

C

->copy_array_temps()) {

728

Profiler->VisitStmt(

E

);

730 for

(

auto

*

E

:

C

->copy_array_elems()) {

732

Profiler->VisitStmt(

E

);

736void

OMPClauseProfiler::VisitOMPTaskReductionClause(

738

Profiler->VisitNestedNameSpecifier(

739 C

->getQualifierLoc().getNestedNameSpecifier());

740

Profiler->VisitName(

C

->getNameInfo().getName());

741

VisitOMPClauseList(

C

);

742

VistOMPClauseWithPostUpdate(

C

);

743 for

(

auto

*

E

:

C

->privates()) {

745

Profiler->VisitStmt(

E

);

747 for

(

auto

*

E

:

C

->lhs_exprs()) {

749

Profiler->VisitStmt(

E

);

751 for

(

auto

*

E

:

C

->rhs_exprs()) {

753

Profiler->VisitStmt(

E

);

755 for

(

auto

*

E

:

C

->reduction_ops()) {

757

Profiler->VisitStmt(

E

);

760void

OMPClauseProfiler::VisitOMPInReductionClause(

762

Profiler->VisitNestedNameSpecifier(

763 C

->getQualifierLoc().getNestedNameSpecifier());

764

Profiler->VisitName(

C

->getNameInfo().getName());

765

VisitOMPClauseList(

C

);

766

VistOMPClauseWithPostUpdate(

C

);

767 for

(

auto

*

E

:

C

->privates()) {

769

Profiler->VisitStmt(

E

);

771 for

(

auto

*

E

:

C

->lhs_exprs()) {

773

Profiler->VisitStmt(

E

);

775 for

(

auto

*

E

:

C

->rhs_exprs()) {

777

Profiler->VisitStmt(

E

);

779 for

(

auto

*

E

:

C

->reduction_ops()) {

781

Profiler->VisitStmt(

E

);

783 for

(

auto

*

E

:

C

->taskgroup_descriptors()) {

785

Profiler->VisitStmt(

E

);

789

VisitOMPClauseList(

C

);

790

VistOMPClauseWithPostUpdate(

C

);

791 for

(

auto

*

E

:

C

->privates()) {

793

Profiler->VisitStmt(

E

);

795 for

(

auto

*

E

:

C

->inits()) {

797

Profiler->VisitStmt(

E

);

799 for

(

auto

*

E

:

C

->updates()) {

801

Profiler->VisitStmt(

E

);

803 for

(

auto

*

E

:

C

->finals()) {

805

Profiler->VisitStmt(

E

);

808

Profiler->VisitStmt(

C

->getStep());

809 if

(

C

->getCalcStep())

810

Profiler->VisitStmt(

C

->getCalcStep());

813

VisitOMPClauseList(

C

);

814 if

(

C

->getAlignment())

815

Profiler->VisitStmt(

C

->getAlignment());

818

VisitOMPClauseList(

C

);

819 for

(

auto

*

E

:

C

->source_exprs()) {

821

Profiler->VisitStmt(

E

);

823 for

(

auto

*

E

:

C

->destination_exprs()) {

825

Profiler->VisitStmt(

E

);

827 for

(

auto

*

E

:

C

->assignment_ops()) {

829

Profiler->VisitStmt(

E

);

834

VisitOMPClauseList(

C

);

835 for

(

auto

*

E

:

C

->source_exprs()) {

837

Profiler->VisitStmt(

E

);

839 for

(

auto

*

E

:

C

->destination_exprs()) {

841

Profiler->VisitStmt(

E

);

843 for

(

auto

*

E

:

C

->assignment_ops()) {

845

Profiler->VisitStmt(

E

);

848void

OMPClauseProfiler::VisitOMPFlushClause(

const OMPFlushClause

*

C

) {

849

VisitOMPClauseList(

C

);

852 if

(

const Expr

*Depobj =

C

->getDepobj())

853

Profiler->VisitStmt(Depobj);

856

VisitOMPClauseList(

C

);

859 if

(

C

->getDevice())

860

Profiler->VisitStmt(

C

->getDevice());

862void

OMPClauseProfiler::VisitOMPMapClause(

const OMPMapClause

*

C

) {

863

VisitOMPClauseList(

C

);

866 if

(

Expr

*Allocator =

C

->getAllocator())

867

Profiler->VisitStmt(Allocator);

868

VisitOMPClauseList(

C

);

871

VisitOMPClauseList(

C

);

872

VistOMPClauseWithPreInit(

C

);

874void

OMPClauseProfiler::VisitOMPThreadLimitClause(

876

VisitOMPClauseList(

C

);

877

VistOMPClauseWithPreInit(

C

);

880

VistOMPClauseWithPreInit(

C

);

881 if

(

C

->getPriority())

882

Profiler->VisitStmt(

C

->getPriority());

885

VistOMPClauseWithPreInit(

C

);

886 if

(

C

->getGrainsize())

887

Profiler->VisitStmt(

C

->getGrainsize());

890

VistOMPClauseWithPreInit(

C

);

891 if

(

C

->getNumTasks())

892

Profiler->VisitStmt(

C

->getNumTasks());

894void

OMPClauseProfiler::VisitOMPHintClause(

const OMPHintClause

*

C

) {

896

Profiler->VisitStmt(

C

->getHint());

898void

OMPClauseProfiler::VisitOMPToClause(

const OMPToClause

*

C

) {

899

VisitOMPClauseList(

C

);

901void

OMPClauseProfiler::VisitOMPFromClause(

const OMPFromClause

*

C

) {

902

VisitOMPClauseList(

C

);

904void

OMPClauseProfiler::VisitOMPUseDevicePtrClause(

906

VisitOMPClauseList(

C

);

908void

OMPClauseProfiler::VisitOMPUseDeviceAddrClause(

910

VisitOMPClauseList(

C

);

912void

OMPClauseProfiler::VisitOMPIsDevicePtrClause(

914

VisitOMPClauseList(

C

);

916void

OMPClauseProfiler::VisitOMPHasDeviceAddrClause(

918

VisitOMPClauseList(

C

);

920void

OMPClauseProfiler::VisitOMPNontemporalClause(

922

VisitOMPClauseList(

C

);

923 for

(

auto

*

E

:

C

->private_refs())

924

Profiler->VisitStmt(

E

);

927

VisitOMPClauseList(

C

);

930

VisitOMPClauseList(

C

);

932void

OMPClauseProfiler::VisitOMPUsesAllocatorsClause(

934 for

(

unsigned

I = 0,

E

=

C

->getNumberOfAllocators(); I <

E

; ++I) {

936

Profiler->VisitStmt(

D

.Allocator);

937 if

(

D

.AllocatorTraits)

938

Profiler->VisitStmt(

D

.AllocatorTraits);

942 if

(

const Expr

*Modifier =

C

->getModifier())

943

Profiler->VisitStmt(Modifier);

944 for

(

const Expr

*

E

:

C

->varlist())

945

Profiler->VisitStmt(

E

);

947void

OMPClauseProfiler::VisitOMPOrderClause(

const OMPOrderClause

*

C

) {}

948void

OMPClauseProfiler::VisitOMPBindClause(

const OMPBindClause

*

C

) {}

949void

OMPClauseProfiler::VisitOMPXDynCGroupMemClause(

951

VistOMPClauseWithPreInit(

C

);

952 if

(

Expr

*Size =

C

->getSize())

953

Profiler->VisitStmt(Size);

956

VisitOMPClauseList(

C

);

960void

OMPClauseProfiler::VisitOMPXBareClause(

const OMPXBareClause

*

C

) {}

966

OMPClauseProfiler

P

(

this

);

979

VisitOMPExecutableDirective(S);

983

VisitOMPLoopBasedDirective(S);

987

VisitOMPExecutableDirective(S);

991

VisitOMPExecutableDirective(S);

995

VisitOMPLoopDirective(S);

998void

StmtProfiler::VisitOMPLoopTransformationDirective(

1000

VisitOMPLoopBasedDirective(S);

1004

VisitOMPLoopTransformationDirective(S);

1008

VisitOMPLoopTransformationDirective(S);

1012

VisitOMPLoopTransformationDirective(S);

1015void

StmtProfiler::VisitOMPInterchangeDirective(

1017

VisitOMPLoopTransformationDirective(S);

1021

VisitOMPLoopDirective(S);

1025

VisitOMPLoopDirective(S);

1029

VisitOMPExecutableDirective(S);

1033

VisitOMPExecutableDirective(S);

1037

VisitOMPExecutableDirective(S);

1041

VisitOMPExecutableDirective(S);

1045

VisitOMPExecutableDirective(S);

1049

VisitOMPExecutableDirective(S);

1050

VisitName(S->getDirectiveName().getName());

1055

VisitOMPLoopDirective(S);

1058void

StmtProfiler::VisitOMPParallelForSimdDirective(

1060

VisitOMPLoopDirective(S);

1063void

StmtProfiler::VisitOMPParallelMasterDirective(

1065

VisitOMPExecutableDirective(S);

1068void

StmtProfiler::VisitOMPParallelMaskedDirective(

1070

VisitOMPExecutableDirective(S);

1073void

StmtProfiler::VisitOMPParallelSectionsDirective(

1075

VisitOMPExecutableDirective(S);

1079

VisitOMPExecutableDirective(S);

1083

VisitOMPExecutableDirective(S);

1087

VisitOMPExecutableDirective(S);

1091

VisitOMPExecutableDirective(S);

1095

VisitOMPExecutableDirective(S);

1099

VisitOMPExecutableDirective(S);

1102

VisitOMPExecutableDirective(S);

1103 if

(

const Expr

*

E

= S->getReductionRef())

1108

VisitOMPExecutableDirective(S);

1112

VisitOMPExecutableDirective(S);

1116

VisitOMPExecutableDirective(S);

1120

VisitOMPExecutableDirective(S);

1124

VisitOMPExecutableDirective(S);

1128

VisitOMPExecutableDirective(S);

1132

VisitOMPExecutableDirective(S);

1135void

StmtProfiler::VisitOMPTargetEnterDataDirective(

1137

VisitOMPExecutableDirective(S);

1140void

StmtProfiler::VisitOMPTargetExitDataDirective(

1142

VisitOMPExecutableDirective(S);

1145void

StmtProfiler::VisitOMPTargetParallelDirective(

1147

VisitOMPExecutableDirective(S);

1150void

StmtProfiler::VisitOMPTargetParallelForDirective(

1152

VisitOMPExecutableDirective(S);

1156

VisitOMPExecutableDirective(S);

1159void

StmtProfiler::VisitOMPCancellationPointDirective(

1161

VisitOMPExecutableDirective(S);

1165

VisitOMPExecutableDirective(S);

1169

VisitOMPLoopDirective(S);

1172void

StmtProfiler::VisitOMPTaskLoopSimdDirective(

1174

VisitOMPLoopDirective(S);

1177void

StmtProfiler::VisitOMPMasterTaskLoopDirective(

1179

VisitOMPLoopDirective(S);

1182void

StmtProfiler::VisitOMPMaskedTaskLoopDirective(

1184

VisitOMPLoopDirective(S);

1187void

StmtProfiler::VisitOMPMasterTaskLoopSimdDirective(

1189

VisitOMPLoopDirective(S);

1192void

StmtProfiler::VisitOMPMaskedTaskLoopSimdDirective(

1194

VisitOMPLoopDirective(S);

1197void

StmtProfiler::VisitOMPParallelMasterTaskLoopDirective(

1199

VisitOMPLoopDirective(S);

1202void

StmtProfiler::VisitOMPParallelMaskedTaskLoopDirective(

1204

VisitOMPLoopDirective(S);

1207void

StmtProfiler::VisitOMPParallelMasterTaskLoopSimdDirective(

1209

VisitOMPLoopDirective(S);

1212void

StmtProfiler::VisitOMPParallelMaskedTaskLoopSimdDirective(

1214

VisitOMPLoopDirective(S);

1217void

StmtProfiler::VisitOMPDistributeDirective(

1219

VisitOMPLoopDirective(S);

1222void

OMPClauseProfiler::VisitOMPDistScheduleClause(

1224

VistOMPClauseWithPreInit(

C

);

1225 if

(

auto

*S =

C

->getChunkSize())

1226

Profiler->VisitStmt(S);

1231void

StmtProfiler::VisitOMPTargetUpdateDirective(

1233

VisitOMPExecutableDirective(S);

1236void

StmtProfiler::VisitOMPDistributeParallelForDirective(

1238

VisitOMPLoopDirective(S);

1241void

StmtProfiler::VisitOMPDistributeParallelForSimdDirective(

1243

VisitOMPLoopDirective(S);

1246void

StmtProfiler::VisitOMPDistributeSimdDirective(

1248

VisitOMPLoopDirective(S);

1251void

StmtProfiler::VisitOMPTargetParallelForSimdDirective(

1253

VisitOMPLoopDirective(S);

1256void

StmtProfiler::VisitOMPTargetSimdDirective(

1258

VisitOMPLoopDirective(S);

1261void

StmtProfiler::VisitOMPTeamsDistributeDirective(

1263

VisitOMPLoopDirective(S);

1266void

StmtProfiler::VisitOMPTeamsDistributeSimdDirective(

1268

VisitOMPLoopDirective(S);

1271void

StmtProfiler::VisitOMPTeamsDistributeParallelForSimdDirective(

1273

VisitOMPLoopDirective(S);

1276void

StmtProfiler::VisitOMPTeamsDistributeParallelForDirective(

1278

VisitOMPLoopDirective(S);

1281void

StmtProfiler::VisitOMPTargetTeamsDirective(

1283

VisitOMPExecutableDirective(S);

1286void

StmtProfiler::VisitOMPTargetTeamsDistributeDirective(

1288

VisitOMPLoopDirective(S);

1291void

StmtProfiler::VisitOMPTargetTeamsDistributeParallelForDirective(

1293

VisitOMPLoopDirective(S);

1296void

StmtProfiler::VisitOMPTargetTeamsDistributeParallelForSimdDirective(

1298

VisitOMPLoopDirective(S);

1301void

StmtProfiler::VisitOMPTargetTeamsDistributeSimdDirective(

1303

VisitOMPLoopDirective(S);

1307

VisitOMPExecutableDirective(S);

1311

VisitOMPExecutableDirective(S);

1315

VisitOMPExecutableDirective(S);

1318void

StmtProfiler::VisitOMPGenericLoopDirective(

1320

VisitOMPLoopDirective(S);

1323void

StmtProfiler::VisitOMPTeamsGenericLoopDirective(

1325

VisitOMPLoopDirective(S);

1328void

StmtProfiler::VisitOMPTargetTeamsGenericLoopDirective(

1330

VisitOMPLoopDirective(S);

1333void

StmtProfiler::VisitOMPParallelGenericLoopDirective(

1335

VisitOMPLoopDirective(S);

1338void

StmtProfiler::VisitOMPTargetParallelGenericLoopDirective(

1340

VisitOMPLoopDirective(S);

1343void

StmtProfiler::VisitExpr(

const Expr

*S) {

1347void

StmtProfiler::VisitConstantExpr(

const ConstantExpr

*S) {

1351void

StmtProfiler::VisitDeclRefExpr(

const DeclRefExpr

*S) {

1354

VisitNestedNameSpecifier(S->getQualifier());

1355

VisitDecl(S->getDecl());

1357 ID

.AddBoolean(S->hasExplicitTemplateArgs());

1358 if

(S->hasExplicitTemplateArgs())

1359

VisitTemplateArguments(S->getTemplateArgs(), S->getNumTemplateArgs());

1363void

StmtProfiler::VisitSYCLUniqueStableNameExpr(

1366

VisitType(S->getTypeSourceInfo()->getType());

1369void

StmtProfiler::VisitPredefinedExpr(

const PredefinedExpr

*S) {

1371 ID

.AddInteger(llvm::to_underlying(S->getIdentKind()));

1374void

StmtProfiler::VisitOpenACCAsteriskSizeExpr(

1379void

StmtProfiler::VisitIntegerLiteral(

const IntegerLiteral

*S) {

1381

S->getValue().Profile(ID);

1385 T

=

T

.getCanonicalType();

1388

BitIntT->Profile(ID);

1395

S->getValue().Profile(ID);

1401 ID

.AddInteger(llvm::to_underlying(S->getKind()));

1402 ID

.AddInteger(S->getValue());

1407

S->getValue().Profile(ID);

1408 ID

.AddBoolean(S->isExact());

1416void

StmtProfiler::VisitStringLiteral(

const StringLiteral

*S) {

1418 ID

.AddString(S->getBytes());

1419 ID

.AddInteger(llvm::to_underlying(S->getKind()));

1422void

StmtProfiler::VisitParenExpr(

const ParenExpr

*S) {

1426void

StmtProfiler::VisitParenListExpr(

const ParenListExpr

*S) {

1430void

StmtProfiler::VisitUnaryOperator(

const UnaryOperator

*S) {

1432 ID

.AddInteger(S->getOpcode());

1435void

StmtProfiler::VisitOffsetOfExpr(

const OffsetOfExpr

*S) {

1436

VisitType(S->getTypeSourceInfo()->getType());

1437 unsigned

n = S->getNumComponents();

1438 for

(

unsigned

i = 0; i < n; ++i) {

1466 ID

.AddInteger(S->getKind());

1467 if

(S->isArgumentType())

1468

VisitType(S->getArgumentType());

1489 for

(

unsigned

I = 0,

E

= S->numOfIterators(); I <

E

; ++I)

1490

VisitDecl(S->getIteratorDecl(I));

1493void

StmtProfiler::VisitCallExpr(

const CallExpr

*S) {

1497void

StmtProfiler::VisitMemberExpr(

const MemberExpr

*S) {

1499

VisitDecl(S->getMemberDecl());

1501

VisitNestedNameSpecifier(S->getQualifier());

1502 ID

.AddBoolean(S->isArrow());

1507 ID

.AddBoolean(S->isFileScope());

1510void

StmtProfiler::VisitCastExpr(

const CastExpr

*S) {

1516 ID

.AddInteger(S->getValueKind());

1521

VisitType(S->getTypeAsWritten());

1524void

StmtProfiler::VisitCStyleCastExpr(

const CStyleCastExpr

*S) {

1525

VisitExplicitCastExpr(S);

1528void

StmtProfiler::VisitBinaryOperator(

const BinaryOperator

*S) {

1530 ID

.AddInteger(S->getOpcode());

1535

VisitBinaryOperator(S);

1542void

StmtProfiler::VisitBinaryConditionalOperator(

1547void

StmtProfiler::VisitAddrLabelExpr(

const AddrLabelExpr

*S) {

1549

VisitDecl(S->getLabel());

1552void

StmtProfiler::VisitStmtExpr(

const StmtExpr

*S) {

1564void

StmtProfiler::VisitChooseExpr(

const ChooseExpr

*S) {

1568void

StmtProfiler::VisitGNUNullExpr(

const GNUNullExpr

*S) {

1572void

StmtProfiler::VisitVAArgExpr(

const VAArgExpr

*S) {

1576void

StmtProfiler::VisitInitListExpr(

const InitListExpr

*S) {

1577 if

(S->getSyntacticForm()) {

1578

VisitInitListExpr(S->getSyntacticForm());

1587 ID

.AddBoolean(S->usesGNUSyntax());

1589 if

(

D

.isFieldDesignator()) {

1591

VisitName(

D

.getFieldName());

1595 if

(

D

.isArrayDesignator()) {

1598

assert(

D

.isArrayRangeDesignator());

1601 ID

.AddInteger(

D

.getArrayIndex());

1607void

StmtProfiler::VisitDesignatedInitUpdateExpr(

1609

llvm_unreachable(

"Unexpected DesignatedInitUpdateExpr in syntactic form of " 1621void

StmtProfiler::VisitNoInitExpr(

const NoInitExpr

*S) {

1622

llvm_unreachable(

"Unexpected NoInitExpr in syntactic form of initializer"

);

1631

VisitName(&S->getAccessor());

1634void

StmtProfiler::VisitBlockExpr(

const BlockExpr

*S) {

1636

VisitDecl(S->getBlockDecl());

1642

S->associations()) {

1645 ID

.AddPointer(

nullptr

);

1648

VisitExpr(Assoc.getAssociationExpr());

1655

i = S->semantics_begin(), e = S->semantics_end(); i != e; ++i)

1658

Visit(OVE->getSourceExpr());

1661void

StmtProfiler::VisitAtomicExpr(

const AtomicExpr

*S) {

1663 ID

.AddInteger(S->getOp());

1666void

StmtProfiler::VisitConceptSpecializationExpr(

1669

VisitDecl(S->getNamedConcept());

1671

VisitTemplateArgument(Arg);

1674void

StmtProfiler::VisitRequiresExpr(

const RequiresExpr

*S) {

1676 ID

.AddInteger(S->getLocalParameters().size());

1677 for

(

ParmVarDecl

*LocalParam : S->getLocalParameters())

1678

VisitDecl(LocalParam);

1679 ID

.AddInteger(S->getRequirements().size());

1681 if

(

auto

*TypeReq = dyn_cast<concepts::TypeRequirement>(Req)) {

1683 ID

.AddBoolean(TypeReq->isSubstitutionFailure());

1684 if

(!TypeReq->isSubstitutionFailure())

1685

VisitType(TypeReq->getType()->getType());

1686

}

else if

(

auto

*ExprReq = dyn_cast<concepts::ExprRequirement>(Req)) {

1688 ID

.AddBoolean(ExprReq->isExprSubstitutionFailure());

1689 if

(!ExprReq->isExprSubstitutionFailure())

1690

Visit(ExprReq->getExpr());

1695 ID

.AddBoolean(ExprReq->getNoexceptLoc().isValid());

1697

ExprReq->getReturnTypeRequirement();

1709 auto

*NestedReq = cast<concepts::NestedRequirement>(Req);

1710 ID

.AddBoolean(NestedReq->hasInvalidConstraint());

1711 if

(!NestedReq->hasInvalidConstraint())

1712

Visit(NestedReq->getConstraintExpr());

1720 unsigned

&NumArgs) {

1721 switch

(S->getOperator()) {

1726 case

OO_Array_Delete:

1728 case

OO_Conditional:

1730

llvm_unreachable(

"Invalid operator call kind"

);

1735 return

Stmt::UnaryOperatorClass;

1739 return

Stmt::BinaryOperatorClass;

1744 return

Stmt::UnaryOperatorClass;

1748 return

Stmt::BinaryOperatorClass;

1753 return

Stmt::UnaryOperatorClass;

1757 return

Stmt::BinaryOperatorClass;

1761 return

Stmt::BinaryOperatorClass;

1765 return

Stmt::BinaryOperatorClass;

1769 return

Stmt::BinaryOperatorClass;

1773

UnaryOp = UO_AddrOf;

1774 return

Stmt::UnaryOperatorClass;

1778 return

Stmt::BinaryOperatorClass;

1782 return

Stmt::BinaryOperatorClass;

1786 return

Stmt::UnaryOperatorClass;

1790 return

Stmt::UnaryOperatorClass;

1793

BinaryOp = BO_Assign;

1794 return

Stmt::BinaryOperatorClass;

1798 return

Stmt::BinaryOperatorClass;

1802 return

Stmt::BinaryOperatorClass;

1805

BinaryOp = BO_AddAssign;

1806 return

Stmt::CompoundAssignOperatorClass;

1809

BinaryOp = BO_SubAssign;

1810 return

Stmt::CompoundAssignOperatorClass;

1813

BinaryOp = BO_MulAssign;

1814 return

Stmt::CompoundAssignOperatorClass;

1817

BinaryOp = BO_DivAssign;

1818 return

Stmt::CompoundAssignOperatorClass;

1820 case

OO_PercentEqual:

1821

BinaryOp = BO_RemAssign;

1822 return

Stmt::CompoundAssignOperatorClass;

1825

BinaryOp = BO_XorAssign;

1826 return

Stmt::CompoundAssignOperatorClass;

1829

BinaryOp = BO_AndAssign;

1830 return

Stmt::CompoundAssignOperatorClass;

1833

BinaryOp = BO_OrAssign;

1834 return

Stmt::CompoundAssignOperatorClass;

1838 return

Stmt::BinaryOperatorClass;

1840 case

OO_GreaterGreater:

1842 return

Stmt::BinaryOperatorClass;

1844 case

OO_LessLessEqual:

1845

BinaryOp = BO_ShlAssign;

1846 return

Stmt::CompoundAssignOperatorClass;

1848 case

OO_GreaterGreaterEqual:

1849

BinaryOp = BO_ShrAssign;

1850 return

Stmt::CompoundAssignOperatorClass;

1854 return

Stmt::BinaryOperatorClass;

1856 case

OO_ExclaimEqual:

1858 return

Stmt::BinaryOperatorClass;

1862 return

Stmt::BinaryOperatorClass;

1864 case

OO_GreaterEqual:

1866 return

Stmt::BinaryOperatorClass;

1870 return

Stmt::BinaryOperatorClass;

1874 return

Stmt::BinaryOperatorClass;

1878 return

Stmt::BinaryOperatorClass;

1881

UnaryOp = NumArgs == 1 ? UO_PreInc : UO_PostInc;

1883 return

Stmt::UnaryOperatorClass;

1886

UnaryOp = NumArgs == 1 ? UO_PreDec : UO_PostDec;

1888 return

Stmt::UnaryOperatorClass;

1891

BinaryOp = BO_Comma;

1892 return

Stmt::BinaryOperatorClass;

1895

BinaryOp = BO_PtrMemI;

1896 return

Stmt::BinaryOperatorClass;

1899 return

Stmt::ArraySubscriptExprClass;

1902 return

Stmt::CallExprClass;

1905

UnaryOp = UO_Coawait;

1906 return

Stmt::UnaryOperatorClass;

1909

llvm_unreachable(

"Invalid overloaded operator expression"

);

1912#if defined(_MSC_VER) && !defined(__clang__) 1917#pragma optimize(""

, off)

1922 if

(S->isTypeDependent()) {

1928 if

(S->getOperator() == OO_Arrow)

1929 return

Visit(S->getArg(0));

1933 unsigned

NumArgs = S->getNumArgs();

1937 for

(

unsigned

I = 0; I != NumArgs; ++I)

1938

Visit(S->getArg(I));

1939 if

(SC == Stmt::UnaryOperatorClass)

1940 ID

.AddInteger(UnaryOp);

1941 else if

(SC == Stmt::BinaryOperatorClass ||

1942

SC == Stmt::CompoundAssignOperatorClass)

1943 ID

.AddInteger(BinaryOp);

1945

assert(SC == Stmt::ArraySubscriptExprClass || SC == Stmt::CallExprClass);

1951 ID

.AddInteger(S->getOperator());

1954void

StmtProfiler::VisitCXXRewrittenBinaryOperator(

1958

assert(!S->isTypeDependent() &&

1959 "resolved rewritten operator should never be type-dependent"

);

1960 ID

.AddBoolean(S->isReversed());

1961

VisitExpr(S->getSemanticForm());

1964#if defined(_MSC_VER) && !defined(__clang__) 1966#pragma optimize(""

, on)

1978void

StmtProfiler::VisitAsTypeExpr(

const AsTypeExpr

*S) {

1983

VisitExplicitCastExpr(S);

1987

VisitCXXNamedCastExpr(S);

1991

VisitCXXNamedCastExpr(S);

1996

VisitCXXNamedCastExpr(S);

2000

VisitCXXNamedCastExpr(S);

2005

VisitType(S->getTypeInfoAsWritten()->getType());

2009

VisitCXXNamedCastExpr(S);

2018 ID

.AddBoolean(S->getValue());

2025void

StmtProfiler::VisitCXXStdInitializerListExpr(

2030void

StmtProfiler::VisitCXXTypeidExpr(

const CXXTypeidExpr

*S) {

2032 if

(S->isTypeOperand())

2033

VisitType(S->getTypeOperandSourceInfo()->getType());

2036void

StmtProfiler::VisitCXXUuidofExpr(

const CXXUuidofExpr

*S) {

2038 if

(S->isTypeOperand())

2039

VisitType(S->getTypeOperandSourceInfo()->getType());

2044

VisitDecl(S->getPropertyDecl());

2047void

StmtProfiler::VisitMSPropertySubscriptExpr(

2052void

StmtProfiler::VisitCXXThisExpr(

const CXXThisExpr

*S) {

2054 ID

.AddBoolean(S->isImplicit());

2055 ID

.AddBoolean(S->isCapturedByCopyInLambdaWithExplicitObjectParameter());

2058void

StmtProfiler::VisitCXXThrowExpr(

const CXXThrowExpr

*S) {

2064

VisitDecl(S->getParam());

2069

VisitDecl(S->getField());

2080

VisitDecl(S->getConstructor());

2081 ID

.AddBoolean(S->isElidable());

2084void

StmtProfiler::VisitCXXInheritedCtorInitExpr(

2087

VisitDecl(S->getConstructor());

2091

VisitExplicitCastExpr(S);

2096

VisitCXXConstructExpr(S);

2100

StmtProfiler::VisitLambdaExpr(

const LambdaExpr

*S) {

2101 if

(!ProfileLambdaExpr) {

2105

VisitStmtNoChildren(S);

2109

VisitDecl(S->getLambdaClass());

2116 ID

.AddInteger(

Capture

.getCaptureKind());

2117 if

(

Capture

.capturesVariable())

2118

VisitDecl(

Capture

.getCapturedVar());

2127 for

(

auto

*SubDecl : Lambda->

decls

()) {

2129 if

(

auto

*FTD = dyn_cast<FunctionTemplateDecl>(SubDecl))

2130 Call

= FTD->getTemplatedDecl();

2131 else if

(

auto

*FD = dyn_cast<FunctionDecl>(SubDecl))

2147void

StmtProfiler::VisitCXXDeleteExpr(

const CXXDeleteExpr

*S) {

2149 ID

.AddBoolean(S->isGlobalDelete());

2150 ID

.AddBoolean(S->isArrayForm());

2151

VisitDecl(S->getOperatorDelete());

2154void

StmtProfiler::VisitCXXNewExpr(

const CXXNewExpr

*S) {

2156

VisitType(S->getAllocatedType());

2157

VisitDecl(S->getOperatorNew());

2158

VisitDecl(S->getOperatorDelete());

2159 ID

.AddBoolean(S->isArray());

2160 ID

.AddInteger(S->getNumPlacementArgs());

2161 ID

.AddBoolean(S->isGlobalNew());

2162 ID

.AddBoolean(S->isParenTypeId());

2163 ID

.AddInteger(llvm::to_underlying(S->getInitializationStyle()));

2169 ID

.AddBoolean(S->isArrow());

2170

VisitNestedNameSpecifier(S->getQualifier());

2171 ID

.AddBoolean(S->getScopeTypeInfo() !=

nullptr

);

2172 if

(S->getScopeTypeInfo())

2173

VisitType(S->getScopeTypeInfo()->getType());

2174 ID

.AddBoolean(S->getDestroyedTypeInfo() !=

nullptr

);

2175 if

(S->getDestroyedTypeInfo())

2176

VisitType(S->getDestroyedType());

2178

VisitIdentifierInfo(S->getDestroyedTypeIdentifier());

2181void

StmtProfiler::VisitOverloadExpr(

const OverloadExpr

*S) {

2183

VisitNestedNameSpecifier(S->getQualifier());

2184

VisitName(S->getName(),

true

);

2185 ID

.AddBoolean(S->hasExplicitTemplateArgs());

2186 if

(S->hasExplicitTemplateArgs())

2187

VisitTemplateArguments(S->getTemplateArgs(), S->getNumTemplateArgs());

2192

VisitOverloadExpr(S);

2195void

StmtProfiler::VisitTypeTraitExpr(

const TypeTraitExpr

*S) {

2197 ID

.AddInteger(S->getTrait());

2198 ID

.AddInteger(S->getNumArgs());

2199 for

(

unsigned

I = 0, N = S->getNumArgs(); I != N; ++I)

2200

VisitType(S->getArg(I)->getType());

2205 ID

.AddInteger(S->getTrait());

2206

VisitType(S->getQueriedType());

2211 ID

.AddInteger(S->getTrait());

2212

VisitExpr(S->getQueriedExpression());

2215void

StmtProfiler::VisitDependentScopeDeclRefExpr(

2218

VisitName(S->getDeclName());

2219

VisitNestedNameSpecifier(S->getQualifier());

2220 ID

.AddBoolean(S->hasExplicitTemplateArgs());

2221 if

(S->hasExplicitTemplateArgs())

2222

VisitTemplateArguments(S->getTemplateArgs(), S->getNumTemplateArgs());

2229void

StmtProfiler::VisitCXXUnresolvedConstructExpr(

2232

VisitType(S->getTypeAsWritten());

2233 ID

.AddInteger(S->isListInitialization());

2236void

StmtProfiler::VisitCXXDependentScopeMemberExpr(

2238 ID

.AddBoolean(S->isImplicitAccess());

2239 if

(!S->isImplicitAccess()) {

2241 ID

.AddBoolean(S->isArrow());

2243

VisitNestedNameSpecifier(S->getQualifier());

2244

VisitName(S->getMember());

2245 ID

.AddBoolean(S->hasExplicitTemplateArgs());

2246 if

(S->hasExplicitTemplateArgs())

2247

VisitTemplateArguments(S->getTemplateArgs(), S->getNumTemplateArgs());

2251 ID

.AddBoolean(S->isImplicitAccess());

2252 if

(!S->isImplicitAccess()) {

2254 ID

.AddBoolean(S->isArrow());

2256

VisitNestedNameSpecifier(S->getQualifier());

2257

VisitName(S->getMemberName());

2258 ID

.AddBoolean(S->hasExplicitTemplateArgs());

2259 if

(S->hasExplicitTemplateArgs())

2260

VisitTemplateArguments(S->getTemplateArgs(), S->getNumTemplateArgs());

2271void

StmtProfiler::VisitSizeOfPackExpr(

const SizeOfPackExpr

*S) {

2273 if

(S->isPartiallySubstituted()) {

2274 auto

Args = S->getPartialArguments();

2275 ID

.AddInteger(Args.size());

2276 for

(

const auto

&TA : Args)

2277

VisitTemplateArgument(TA);

2279

VisitDecl(S->getPack());

2283void

StmtProfiler::VisitResolvedUnexpandedPackExpr(

2290

VisitExpr(

E

->getPackIdExpression());

2291

VisitExpr(

E

->getIndexExpr());

2294void

StmtProfiler::VisitSubstNonTypeTemplateParmPackExpr(

2297

VisitDecl(S->getParameterPack());

2298

VisitTemplateArgument(S->getArgumentPack());

2301void

StmtProfiler::VisitSubstNonTypeTemplateParmExpr(

2304

Visit(

E

->getReplacement());

2309

VisitDecl(S->getParameterPack());

2310 ID

.AddInteger(S->getNumExpansions());

2315void

StmtProfiler::VisitMaterializeTemporaryExpr(

2320void

StmtProfiler::VisitCXXFoldExpr(

const CXXFoldExpr

*S) {

2322 ID

.AddInteger(S->getOperator());

2333void

StmtProfiler::VisitCoreturnStmt(

const CoreturnStmt

*S) {

2337void

StmtProfiler::VisitCoawaitExpr(

const CoawaitExpr

*S) {

2345void

StmtProfiler::VisitCoyieldExpr(

const CoyieldExpr

*S) {

2353void

StmtProfiler::VisitTypoExpr(

const TypoExpr

*

E

) {

2357void

StmtProfiler::VisitSourceLocExpr(

const SourceLocExpr

*

E

) {

2361void

StmtProfiler::VisitEmbedExpr(

const EmbedExpr

*

E

) { VisitExpr(

E

); }

2363void

StmtProfiler::VisitRecoveryExpr(

const RecoveryExpr

*

E

) { VisitExpr(

E

); }

2369void

StmtProfiler::VisitObjCBoxedExpr(

const ObjCBoxedExpr

*

E

) {

2381void

StmtProfiler::VisitObjCEncodeExpr(

const ObjCEncodeExpr

*S) {

2383

VisitType(S->getEncodedType());

2388

VisitName(S->getSelector());

2393

VisitDecl(S->getProtocol());

2398

VisitDecl(S->getDecl());

2399 ID

.AddBoolean(S->isArrow());

2400 ID

.AddBoolean(S->isFreeIvar());

2405 if

(S->isImplicitProperty()) {

2406

VisitDecl(S->getImplicitPropertyGetter());

2407

VisitDecl(S->getImplicitPropertySetter());

2409

VisitDecl(S->getExplicitProperty());

2411 if

(S->isSuperReceiver()) {

2412 ID

.AddBoolean(S->isSuperReceiver());

2413

VisitType(S->getSuperReceiverType());

2419

VisitDecl(S->getAtIndexMethodDecl());

2420

VisitDecl(S->setAtIndexMethodDecl());

2425

VisitName(S->getSelector());

2426

VisitDecl(S->getMethodDecl());

2429void

StmtProfiler::VisitObjCIsaExpr(

const ObjCIsaExpr

*S) {

2431 ID

.AddBoolean(S->isArrow());

2436 ID

.AddBoolean(S->getValue());

2439void

StmtProfiler::VisitObjCIndirectCopyRestoreExpr(

2442 ID

.AddBoolean(S->shouldCopy());

2446

VisitExplicitCastExpr(S);

2447 ID

.AddBoolean(S->getBridgeKind());

2450void

StmtProfiler::VisitObjCAvailabilityCheckExpr(

2457 ID

.AddInteger(NumArgs);

2458 for

(

unsigned

I = 0; I != NumArgs; ++I)

2505

VisitTemplateArgument(

P

);

2511class

OpenACCClauseProfiler

2513

StmtProfiler &Profiler;

2516

OpenACCClauseProfiler(StmtProfiler &

P

) : Profiler(

P

) {}

2528

Profiler.VisitStmt(

E

);

2531#define VISIT_CLAUSE(CLAUSE_NAME) \ 2532 void Visit##CLAUSE_NAME##Clause(const OpenACC##CLAUSE_NAME##Clause &Clause); 2534#include "clang/Basic/OpenACCClauses.def" 2538void

OpenACCClauseProfiler::VisitDefaultClause(

2541void

OpenACCClauseProfiler::VisitIfClause(

const OpenACCIfClause

&Clause) {

2543 "if clause requires a valid condition expr"

);

2548

VisitClauseWithVarList(Clause);

2550void

OpenACCClauseProfiler::VisitCopyInClause(

2552

VisitClauseWithVarList(Clause);

2555void

OpenACCClauseProfiler::VisitCopyOutClause(

2557

VisitClauseWithVarList(Clause);

2560void

OpenACCClauseProfiler::VisitCreateClause(

2562

VisitClauseWithVarList(Clause);

2566

VisitClauseWithVarList(Clause);

2569void

OpenACCClauseProfiler::VisitDeviceClause(

2571

VisitClauseWithVarList(Clause);

2580

Profiler.VisitStmt(

E

);

2584void

OpenACCClauseProfiler::VisitFinalizeClause(

2587void

OpenACCClauseProfiler::VisitIfPresentClause(

2590void

OpenACCClauseProfiler::VisitNumGangsClause(

2593

Profiler.VisitStmt(

E

);

2598

Profiler.VisitStmt(

E

);

2601void

OpenACCClauseProfiler::VisitNumWorkersClause(

2603

assert(Clause.

hasIntExpr

() &&

"num_workers clause requires a valid int expr"

);

2607void

OpenACCClauseProfiler::VisitCollapseClause(

2609

assert(Clause.

getLoopCount

() &&

"collapse clause requires a valid int expr"

);

2613void

OpenACCClauseProfiler::VisitPrivateClause(

2615

VisitClauseWithVarList(Clause);

2618void

OpenACCClauseProfiler::VisitFirstPrivateClause(

2620

VisitClauseWithVarList(Clause);

2623void

OpenACCClauseProfiler::VisitAttachClause(

2625

VisitClauseWithVarList(Clause);

2628void

OpenACCClauseProfiler::VisitDetachClause(

2630

VisitClauseWithVarList(Clause);

2633void

OpenACCClauseProfiler::VisitDeleteClause(

2635

VisitClauseWithVarList(Clause);

2638void

OpenACCClauseProfiler::VisitDevicePtrClause(

2640

VisitClauseWithVarList(Clause);

2643void

OpenACCClauseProfiler::VisitNoCreateClause(

2645

VisitClauseWithVarList(Clause);

2648void

OpenACCClauseProfiler::VisitPresentClause(

2650

VisitClauseWithVarList(Clause);

2653void

OpenACCClauseProfiler::VisitUseDeviceClause(

2655

VisitClauseWithVarList(Clause);

2658void

OpenACCClauseProfiler::VisitVectorLengthClause(

2661 "vector_length clause requires a valid int expr"

);

2670void

OpenACCClauseProfiler::VisitDeviceNumClause(

2675void

OpenACCClauseProfiler::VisitDefaultAsyncClause(

2680void

OpenACCClauseProfiler::VisitWorkerClause(

2686void

OpenACCClauseProfiler::VisitVectorClause(

2696

Profiler.VisitStmt(

E

);

2699void

OpenACCClauseProfiler::VisitDeviceTypeClause(

2704void

OpenACCClauseProfiler::VisitIndependentClause(

2707void

OpenACCClauseProfiler::VisitSeqClause(

const OpenACCSeqClause

&Clause) {}

2710 for

(

unsigned

I = 0; I < Clause.

getNumExprs

(); ++I) {

2711

Profiler.VisitStmt(Clause.

getExpr

(I).second);

2715void

OpenACCClauseProfiler::VisitReductionClause(

2717

VisitClauseWithVarList(Clause);

2721void

StmtProfiler::VisitOpenACCComputeConstruct(

2726

OpenACCClauseProfiler

P

{*

this

};

2727 P

.VisitOpenACCClauseList(S->clauses());

2734

OpenACCClauseProfiler

P

{*

this

};

2735 P

.VisitOpenACCClauseList(S->clauses());

2738void

StmtProfiler::VisitOpenACCCombinedConstruct(

2743

OpenACCClauseProfiler

P

{*

this

};

2744 P

.VisitOpenACCClauseList(S->clauses());

2750

OpenACCClauseProfiler

P

{*

this

};

2751 P

.VisitOpenACCClauseList(S->clauses());

2754void

StmtProfiler::VisitOpenACCEnterDataConstruct(

2758

OpenACCClauseProfiler

P

{*

this

};

2759 P

.VisitOpenACCClauseList(S->clauses());

2762void

StmtProfiler::VisitOpenACCExitDataConstruct(

2766

OpenACCClauseProfiler

P

{*

this

};

2767 P

.VisitOpenACCClauseList(S->clauses());

2770void

StmtProfiler::VisitOpenACCHostDataConstruct(

2774

OpenACCClauseProfiler

P

{*

this

};

2775 P

.VisitOpenACCClauseList(S->clauses());

2782

OpenACCClauseProfiler

P

{*

this

};

2783 P

.VisitOpenACCClauseList(S->clauses());

2788

OpenACCClauseProfiler

P

{*

this

};

2789 P

.VisitOpenACCClauseList(S->clauses());

2792void

StmtProfiler::VisitOpenACCShutdownConstruct(

2795

OpenACCClauseProfiler

P

{*

this

};

2796 P

.VisitOpenACCClauseList(S->clauses());

2801

OpenACCClauseProfiler

P

{*

this

};

2802 P

.VisitOpenACCClauseList(S->clauses());

2805void

StmtProfiler::VisitOpenACCUpdateConstruct(

2808

OpenACCClauseProfiler

P

{*

this

};

2809 P

.VisitOpenACCClauseList(S->clauses());

2812void

StmtProfiler::VisitHLSLOutArgExpr(

const HLSLOutArgExpr

*S) {

2817 bool

Canonical,

bool

ProfileLambdaExpr)

const

{

2818

StmtProfilerWithPointers Profiler(ID, Context, Canonical, ProfileLambdaExpr);

2819

Profiler.Visit(

this

);

2824

StmtProfilerWithoutPointers Profiler(ID, Hash);

2825

Profiler.Visit(

this

);

Defines the clang::ASTContext interface.

Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....

Defines the C++ template declaration subclasses.

Defines the clang::Expr interface and subclasses for C++ expressions.

This file contains the declaration of the ODRHash class, which calculates a hash based on AST nodes,...

This file defines OpenMP AST classes for clauses.

static Stmt::StmtClass DecodeOperatorCall(const CXXOperatorCallExpr *S, UnaryOperatorKind &UnaryOp, BinaryOperatorKind &BinaryOp, unsigned &NumArgs)

static const TemplateArgument & getArgument(const TemplateArgument &A)

void Profile(llvm::FoldingSetNodeID &ID) const

profile this value.

Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...

CanQualType getCanonicalType(QualType T) const

Return the canonical (structural) type corresponding to the specified potentially non-canonical type ...

TemplateName getCanonicalTemplateName(TemplateName Name, bool IgnoreDeduced=false) const

Retrieves the "canonical" template name that refers to a given template.

QualType getUnconstrainedType(QualType T) const

Remove any type constraints from a template parameter type, for equivalence comparison of template pa...

NestedNameSpecifier * getCanonicalNestedNameSpecifier(NestedNameSpecifier *NNS) const

Retrieves the "canonical" nested name specifier for a given nested name specifier.

AddrLabelExpr - The GNU address of label extension, representing &&label.

Represents the index of the current element of an array being initialized by an ArrayInitLoopExpr.

Represents a loop initializing the elements of an array.

This class represents BOTH the OpenMP Array Section and OpenACC 'subarray', with a boolean differenti...

ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.

An Embarcadero array type trait, as used in the implementation of __array_rank and __array_extent.

AsTypeExpr - Clang builtin function __builtin_astype [OpenCL 6.2.4.2] This AST node provides support ...

AtomicExpr - Variadic atomic builtins: __atomic_exchange, __atomic_fetch_*, __atomic_load,...

Represents an attribute applied to a statement.

BinaryConditionalOperator - The GNU extension to the conditional operator which allows the middle ope...

A builtin binary operation expression such as "x + y" or "x <= y".

A fixed int type of a specified bitwidth.

BlockExpr - Adaptor class for mixing a BlockDecl with expressions.

BreakStmt - This represents a break.

Represents a C++2a __builtin_bit_cast(T, v) expression.

This class is used for builtin types like 'int'.

CStyleCastExpr - An explicit cast in C (C99 6.5.4) or a C-style cast in C++ (C++ [expr....

Represents a call to a CUDA kernel function.

A C++ addrspace_cast expression (currently only enabled for OpenCL).

Represents binding an expression to a temporary.

A boolean literal, per ([C++ lex.bool] Boolean literals).

CXXCatchStmt - This represents a C++ catch block.

A C++ const_cast expression (C++ [expr.const.cast]).

Represents a call to a C++ constructor.

A default argument (C++ [dcl.fct.default]).

A use of a default initializer in a constructor or in aggregate initialization.

Represents a delete expression for memory deallocation and destructor calls, e.g.

Represents a C++ member access expression where the actual member referenced could not be resolved be...

Represents a C++ destructor within a class.

A C++ dynamic_cast expression (C++ [expr.dynamic.cast]).

Represents a folding of a pack over an operator.

CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for statement, represented as 'for (ra...

Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr....

Represents a call to an inherited base class constructor from an inheriting constructor.

Represents a call to a member function that may be written either with member call syntax (e....

Abstract class common to all of the C++ "named"/"keyword" casts.

Represents a new-expression for memory allocation and constructor calls, e.g: "new CXXNewExpr(foo)".

Represents a C++11 noexcept expression (C++ [expr.unary.noexcept]).

The null pointer literal (C++11 [lex.nullptr])

A call to an overloaded operator written using operator syntax.

Represents a list-initialization with parenthesis.

Represents a C++ pseudo-destructor (C++ [expr.pseudo]).

Represents a C++ struct/union/class.

capture_const_range captures() const

A C++ reinterpret_cast expression (C++ [expr.reinterpret.cast]).

A rewritten comparison expression that was originally written using operator syntax.

An expression "T()" which creates an rvalue of a non-class type T.

A C++ static_cast expression (C++ [expr.static.cast]).

Implicit construction of a std::initializer_list<T> object from an array temporary within list-initia...

Represents a C++ functional cast expression that builds a temporary object.

Represents the this expression in C++.

A C++ throw-expression (C++ [except.throw]).

CXXTryStmt - A C++ try block, including all handlers.

A C++ typeid expression (C++ [expr.typeid]), which gets the type_info that corresponds to the supplie...

Describes an explicit type conversion that uses functional notion but could not be resolved because o...

A Microsoft C++ __uuidof expression, which gets the _GUID that corresponds to the supplied type or ex...

CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).

This captures a statement into a function.

CaseStmt - Represent a case statement.

CastExpr - Base class for type casts, including both implicit casts (ImplicitCastExpr) and explicit c...

ChooseExpr - GNU builtin-in function __builtin_choose_expr.

Represents a 'co_await' expression.

CompoundAssignOperator - For compound assignments (e.g.

CompoundLiteralExpr - [C99 6.5.2.5].

CompoundStmt - This represents a group of statements like { stmt stmt }.

Represents the specialization of a concept - evaluates to a prvalue of type bool.

ConditionalOperator - The ?: ternary operator.

ConstStmtVisitor - This class implements a simple visitor for Stmt subclasses.

ConstantExpr - An expression that occurs in a constant context and optionally the result of evaluatin...

ContinueStmt - This represents a continue.

ConvertVectorExpr - Clang builtin function __builtin_convertvector This AST node provides support for...

Represents a 'co_return' statement in the C++ Coroutines TS.

Represents the body of a coroutine.

Represents a 'co_yield' expression.

decl_range decls() const

decls_begin/decls_end - Iterate over the declarations stored in this context.

A reference to a declared variable, function, enum, etc.

DeclStmt - Adaptor class for mixing declarations with statements and expressions.

Decl - This represents one declaration (or definition), e.g.

virtual Decl * getCanonicalDecl()

Retrieves the "canonical" declaration of the given declaration.

The name of a declaration.

Represents a 'co_await' expression while the type of the promise is dependent.

A qualified reference to a name whose declaration cannot yet be resolved.

Represents a single C99 designator.

Represents a C99 designated initializer expression.

DoStmt - This represents a 'do/while' stmt.

Represents a reference to #emded data.

ExplicitCastExpr - An explicit cast written in the source code.

Represents an expression – generally a full-expression – that introduces cleanups to be run at the en...

This represents one expression.

An expression trait intrinsic.

ExtVectorElementExpr - This represents access to specific elements of a vector, and may occur on the ...

ForStmt - This represents a 'for (init;cond;inc)' stmt.

Represents a function declaration or definition.

Represents a reference to a function parameter pack or init-capture pack that has been substituted bu...

VarDecl *const * iterator

Iterators over the parameters which the parameter pack expanded into.

This represents a GCC inline-assembly statement extension.

GNUNullExpr - Implements the GNU __null extension, which is a name for a null pointer constant that h...

Represents a C11 generic selection.

AssociationTy< true > ConstAssociation

GotoStmt - This represents a direct goto.

This class represents temporary values used to represent inout and out arguments in HLSL.

One of these records is kept for each identifier that is lexed.

IfStmt - This represents an if/then/else.

ImaginaryLiteral - We support imaginary integer and floating point literals, like "1....

ImplicitCastExpr - Allows us to explicitly represent implicit type conversions, which have no direct ...

Represents an implicitly-generated value initialization of an object of a given type.

IndirectGotoStmt - This represents an indirect goto.

Describes an C or C++ initializer list.

LabelStmt - Represents a label, which has a substatement.

A C++ lambda expression, which produces a function object (of unspecified type) that can be invoked l...

This represents a Microsoft inline-assembly statement extension.

Representation of a Microsoft __if_exists or __if_not_exists statement with a dependent name.

A member reference to an MSPropertyDecl.

MS property subscript expression.

Represents a prvalue temporary that is written into memory so that a reference can bind to it.

MatrixSubscriptExpr - Matrix subscript expression for the MatrixType extension.

MemberExpr - [C99 6.5.2.3] Structure and Union Members.

Represents a C++ nested name specifier, such as "\::std::vector<int>::".

Represents a place-holder for an object not to be initialized by anything.

NonTypeTemplateParmDecl - Declares a non-type template parameter, e.g., "Size" in.

NullStmt - This is the null statement ";": C99 6.8.3p3.

void AddDecl(const Decl *D)

void AddIdentifierInfo(const IdentifierInfo *II)

void AddDeclarationName(DeclarationName Name, bool TreatAsDecl=false)

void AddNestedNameSpecifier(const NestedNameSpecifier *NNS)

void AddFunctionDecl(const FunctionDecl *Function, bool SkipBody=false)

void AddTemplateName(TemplateName Name)

void AddQualType(QualType T)

This represents the 'absent' clause in the '#pragma omp assume' directive.

This represents 'acq_rel' clause in the '#pragma omp atomic|flush' directives.

This represents 'acquire' clause in the '#pragma omp atomic|flush' directives.

This represents clause 'affinity' in the '#pragma omp task'-based directives.

This represents the 'align' clause in the '#pragma omp allocate' directive.

This represents clause 'aligned' in the '#pragma omp ...' directives.

This represents clause 'allocate' in the '#pragma omp ...' directives.

This represents 'allocator' clause in the '#pragma omp ...' directive.

An explicit cast in C or a C-style cast in C++, which uses the syntax ([s1][s2]......

This represents 'at' clause in the '#pragma omp error' directive.

This represents 'atomic_default_mem_order' clause in the '#pragma omp requires' directive.

This represents '#pragma omp atomic' directive.

This represents '#pragma omp barrier' directive.

This represents 'bind' clause in the '#pragma omp ...' directives.

This represents '#pragma omp cancel' directive.

This represents '#pragma omp cancellation point' directive.

Representation of an OpenMP canonical loop.

This represents 'capture' clause in the '#pragma omp atomic' directive.

Class that handles post-update expression for some clauses, like 'lastprivate', 'reduction' etc.

Class that handles pre-initialization statement for some clauses, like 'schedule',...

This represents 'collapse' clause in the '#pragma omp ...' directive.

This represents 'compare' clause in the '#pragma omp atomic' directive.

This represents the 'contains' clause in the '#pragma omp assume' directive.

This represents clause 'copyin' in the '#pragma omp ...' directives.

This represents clause 'copyprivate' in the '#pragma omp ...' directives.

This represents '#pragma omp critical' directive.

This represents 'default' clause in the '#pragma omp ...' directive.

This represents 'defaultmap' clause in the '#pragma omp ...' directive.

This represents implicit clause 'depend' for the '#pragma omp task' directive.

This represents implicit clause 'depobj' for the '#pragma omp depobj' directive.

This represents '#pragma omp depobj' directive.

This represents 'destroy' clause in the '#pragma omp depobj' directive or the '#pragma omp interop' d...

This represents 'detach' clause in the '#pragma omp task' directive.

This represents 'device' clause in the '#pragma omp ...' directive.

This represents '#pragma omp dispatch' directive.

This represents 'dist_schedule' clause in the '#pragma omp ...' directive.

This represents '#pragma omp distribute' directive.

This represents '#pragma omp distribute parallel for' composite directive.

This represents '#pragma omp distribute parallel for simd' composite directive.

This represents '#pragma omp distribute simd' composite directive.

This represents the 'doacross' clause for the '#pragma omp ordered' directive.

This represents 'dynamic_allocators' clause in the '#pragma omp requires' directive.

This represents '#pragma omp error' directive.

This represents clause 'exclusive' in the '#pragma omp scan' directive.

This is a basic class for representing single OpenMP executable directive.

This represents 'fail' clause in the '#pragma omp atomic' directive.

This represents 'filter' clause in the '#pragma omp ...' directive.

This represents 'final' clause in the '#pragma omp ...' directive.

This represents clause 'firstprivate' in the '#pragma omp ...' directives.

This represents implicit clause 'flush' for the '#pragma omp flush' directive.

This represents '#pragma omp flush' directive.

This represents '#pragma omp for' directive.

This represents '#pragma omp for simd' directive.

This represents clause 'from' in the '#pragma omp ...' directives.

Representation of the 'full' clause of the '#pragma omp unroll' directive.

This represents '#pragma omp loop' directive.

This represents 'grainsize' clause in the '#pragma omp ...' directive.

This represents clause 'has_device_ptr' in the '#pragma omp ...' directives.

This represents 'hint' clause in the '#pragma omp ...' directive.

This represents the 'holds' clause in the '#pragma omp assume' directive.

This represents 'if' clause in the '#pragma omp ...' directive.

This represents clause 'in_reduction' in the '#pragma omp task' directives.

This represents clause 'inclusive' in the '#pragma omp scan' directive.

This represents the 'init' clause in '#pragma omp ...' directives.

Represents the '#pragma omp interchange' loop transformation directive.

This represents '#pragma omp interop' directive.

This represents clause 'is_device_ptr' in the '#pragma omp ...' directives.

OpenMP 5.0 [2.1.6 Iterators] Iterators are identifiers that expand to multiple values in the clause o...

This represents clause 'lastprivate' in the '#pragma omp ...' directives.

This represents clause 'linear' in the '#pragma omp ...' directives.

The base class for all loop-based directives, including loop transformation directives.

This is a common base class for loop directives ('omp simd', 'omp for', 'omp for simd' etc....

The base class for all loop transformation directives.

This represents clause 'map' in the '#pragma omp ...' directives.

This represents '#pragma omp masked' directive.

This represents '#pragma omp masked taskloop' directive.

This represents '#pragma omp masked taskloop simd' directive.

This represents '#pragma omp master' directive.

This represents '#pragma omp master taskloop' directive.

This represents '#pragma omp master taskloop simd' directive.

This represents 'mergeable' clause in the '#pragma omp ...' directive.

This represents 'message' clause in the '#pragma omp error' directive.

This represents the 'no_openmp' clause in the '#pragma omp assume' directive.

This represents the 'no_openmp_routines' clause in the '#pragma omp assume' directive.

This represents the 'no_parallelism' clause in the '#pragma omp assume' directive.

This represents 'nocontext' clause in the '#pragma omp ...' directive.

This represents 'nogroup' clause in the '#pragma omp ...' directive.

This represents clause 'nontemporal' in the '#pragma omp ...' directives.

This represents 'novariants' clause in the '#pragma omp ...' directive.

This represents 'nowait' clause in the '#pragma omp ...' directive.

This represents 'num_tasks' clause in the '#pragma omp ...' directive.

This represents 'num_teams' clause in the '#pragma omp ...' directive.

This represents 'num_threads' clause in the '#pragma omp ...' directive.

This represents 'order' clause in the '#pragma omp ...' directive.

This represents 'ordered' clause in the '#pragma omp ...' directive.

This represents '#pragma omp ordered' directive.

This represents '#pragma omp parallel' directive.

This represents '#pragma omp parallel for' directive.

This represents '#pragma omp parallel for simd' directive.

This represents '#pragma omp parallel loop' directive.

This represents '#pragma omp parallel masked' directive.

This represents '#pragma omp parallel masked taskloop' directive.

This represents '#pragma omp parallel masked taskloop simd' directive.

This represents '#pragma omp parallel master' directive.

This represents '#pragma omp parallel master taskloop' directive.

This represents '#pragma omp parallel master taskloop simd' directive.

This represents '#pragma omp parallel sections' directive.

Representation of the 'partial' clause of the '#pragma omp unroll' directive.

This class represents the 'permutation' clause in the '#pragma omp interchange' directive.

This represents 'priority' clause in the '#pragma omp ...' directive.

This represents clause 'private' in the '#pragma omp ...' directives.

This represents 'proc_bind' clause in the '#pragma omp ...' directive.

This represents 'read' clause in the '#pragma omp atomic' directive.

This represents clause 'reduction' in the '#pragma omp ...' directives.

This represents 'relaxed' clause in the '#pragma omp atomic' directives.

This represents 'release' clause in the '#pragma omp atomic|flush' directives.

Represents the '#pragma omp reverse' loop transformation directive.

This represents 'reverse_offload' clause in the '#pragma omp requires' directive.

This represents 'simd' clause in the '#pragma omp ...' directive.

This represents 'safelen' clause in the '#pragma omp ...' directive.

This represents '#pragma omp scan' directive.

This represents 'schedule' clause in the '#pragma omp ...' directive.

This represents '#pragma omp scope' directive.

This represents '#pragma omp section' directive.

This represents '#pragma omp sections' directive.

This represents 'seq_cst' clause in the '#pragma omp atomic|flush' directives.

This represents 'severity' clause in the '#pragma omp error' directive.

This represents '#pragma omp simd' directive.

This represents 'simdlen' clause in the '#pragma omp ...' directive.

This represents '#pragma omp single' directive.

This represents the 'sizes' clause in the '#pragma omp tile' directive.

This represents '#pragma omp target data' directive.

This represents '#pragma omp target' directive.

This represents '#pragma omp target enter data' directive.

This represents '#pragma omp target exit data' directive.

This represents '#pragma omp target parallel' directive.

This represents '#pragma omp target parallel for' directive.

This represents '#pragma omp target parallel for simd' directive.

This represents '#pragma omp target parallel loop' directive.

This represents '#pragma omp target simd' directive.

This represents '#pragma omp target teams' directive.

This represents '#pragma omp target teams distribute' combined directive.

This represents '#pragma omp target teams distribute parallel for' combined directive.

This represents '#pragma omp target teams distribute parallel for simd' combined directive.

This represents '#pragma omp target teams distribute simd' combined directive.

This represents '#pragma omp target teams loop' directive.

This represents '#pragma omp target update' directive.

This represents '#pragma omp task' directive.

This represents '#pragma omp taskloop' directive.

This represents '#pragma omp taskloop simd' directive.

This represents clause 'task_reduction' in the '#pragma omp taskgroup' directives.

This represents '#pragma omp taskgroup' directive.

This represents '#pragma omp taskwait' directive.

This represents '#pragma omp taskyield' directive.

This represents '#pragma omp teams' directive.

This represents '#pragma omp teams distribute' directive.

This represents '#pragma omp teams distribute parallel for' composite directive.

This represents '#pragma omp teams distribute parallel for simd' composite directive.

This represents '#pragma omp teams distribute simd' combined directive.

This represents '#pragma omp teams loop' directive.

This represents 'thread_limit' clause in the '#pragma omp ...' directive.

This represents 'threads' clause in the '#pragma omp ...' directive.

This represents the '#pragma omp tile' loop transformation directive.

This represents clause 'to' in the '#pragma omp ...' directives.

This represents 'unified_address' clause in the '#pragma omp requires' directive.

This represents the '#pragma omp unroll' loop transformation directive.

This represents 'untied' clause in the '#pragma omp ...' directive.

This represents 'update' clause in the '#pragma omp atomic' directive.

This represents the 'use' clause in '#pragma omp ...' directives.

This represents clause 'use_device_addr' in the '#pragma omp ...' directives.

This represents clause 'use_device_ptr' in the '#pragma omp ...' directives.

This represents clause 'uses_allocators' in the '#pragma omp target'-based directives.

This represents 'weak' clause in the '#pragma omp atomic' directives.

This represents 'write' clause in the '#pragma omp atomic' directive.

This represents 'ompx_attribute' clause in a directive that might generate an outlined function.

This represents 'ompx_bare' clause in the '#pragma omp target teams ...' directive.

This represents 'ompx_dyn_cgroup_mem' clause in the '#pragma omp target ...' directive.

ObjCArrayLiteral - used for objective-c array containers; as in: @["Hello", NSApp,...

Represents Objective-C's @catch statement.

Represents Objective-C's @finally statement.

Represents Objective-C's @synchronized statement.

Represents Objective-C's @throw statement.

Represents Objective-C's @try ... @catch ... @finally statement.

Represents Objective-C's @autoreleasepool Statement.

A runtime availability query.

ObjCBoolLiteralExpr - Objective-C Boolean Literal.

ObjCBoxedExpr - used for generalized expression boxing.

An Objective-C "bridged" cast expression, which casts between Objective-C pointers and C pointers,...

ObjCDictionaryLiteral - AST node to represent objective-c dictionary literals; as in:"name" : NSUserN...

ObjCEncodeExpr, used for @encode in Objective-C.

Represents Objective-C's collection statement.

ObjCIndirectCopyRestoreExpr - Represents the passing of a function argument by indirect copy-restore ...

ObjCIsaExpr - Represent X->isa and X.isa when X is an ObjC 'id' type.

ObjCIvarRefExpr - A reference to an ObjC instance variable.

An expression that sends a message to the given Objective-C object or class.

ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.

ObjCProtocolExpr used for protocol expression in Objective-C.

ObjCSelectorExpr used for @selector in Objective-C.

ObjCStringLiteral, used for Objective-C string literals i.e.

ObjCSubscriptRefExpr - used for array and dictionary subscripting.

OffsetOfExpr - [C99 7.17] - This represents an expression of the form offsetof(record-type,...

Helper class for OffsetOfExpr.

FieldDecl * getField() const

For a field offsetof node, returns the field.

IdentifierInfo * getFieldName() const

For a field or identifier offsetof node, returns the name of the field.

@ Array

An index into an array.

@ Identifier

A field in a dependent type, known only by its name.

@ Base

An implicit indirection through a C++ base class, when the field found is in a base class.

Kind getKind() const

Determine what kind of offsetof node this is.

OpaqueValueExpr - An expression referring to an opaque object of a fixed type and value class.

This expression type represents an asterisk in an OpenACC Size-Expr, used in the 'tile' and 'gang' cl...

void Visit(const OpenACCClause *C)

bool hasConditionExpr() const

const Expr * getConditionExpr() const

const Expr * getIntExpr() const

Represents a clause with one or more 'var' objects, represented as an expr, as its arguments.

ArrayRef< Expr * > getVarList()

This is the base type for all OpenACC Clauses.

Represents a 'collapse' clause on a 'loop' construct.

const Expr * getLoopCount() const

This class represents a compute construct, representing a 'Kind' of ‘parallel’, 'serial',...

A 'default' clause, has the optional 'none' or 'present' argument.

A 'device_type' or 'dtype' clause, takes a list of either an 'asterisk' or an identifier.

unsigned getNumExprs() const

std::pair< OpenACCGangKind, const Expr * > getExpr(unsigned I) const

An 'if' clause, which has a required condition expression.

This class represents a 'loop' construct.

llvm::ArrayRef< Expr * > getIntExprs()

A 'self' clause, which has an optional condition expression, or, in the event of an 'update' directiv...

const Expr * getConditionExpr() const

bool isConditionExprClause() const

ArrayRef< Expr * > getVarList()

bool hasConditionExpr() const

llvm::ArrayRef< Expr * > getSizeExprs()

Expr * getDevNumExpr() const

llvm::ArrayRef< Expr * > getQueueIdExprs()

bool hasDevNumExpr() const

A reference to an overloaded function set, either an UnresolvedLookupExpr or an UnresolvedMemberExpr.

Represents a C++11 pack expansion that produces a sequence of expressions.

ParenExpr - This represents a parenthesized expression, e.g.

Represents a parameter to a function.

[C99 6.4.2.2] - A predefined identifier such as func.

PseudoObjectExpr - An expression which accesses a pseudo-object l-value.

const Expr *const * const_semantics_iterator

A (possibly-)qualified type.

Frontend produces RecoveryExprs on semantic errors that prevent creating other well-formed expression...

C++2a [expr.prim.req]: A requires-expression provides a concise way to express requirements on templa...

ReturnStmt - This represents a return, optionally of an expression: return; return 4;.

Represents a __leave statement.

SYCLKernelCallStmt represents the transformation that is applied to the body of a function declared w...

ShuffleVectorExpr - clang-specific builtin-in function __builtin_shufflevector.

Represents an expression that computes the length of a parameter pack.

Represents a function call to one of __builtin_LINE(), __builtin_COLUMN(), __builtin_FUNCTION(),...

StmtExpr - This is the GNU Statement Expression extension: ({int X=4; X;}).

Stmt - This represents one statement.

void ProcessODRHash(llvm::FoldingSetNodeID &ID, ODRHash &Hash) const

Calculate a unique representation for a statement that is stable across compiler invocations.

void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context, bool Canonical, bool ProfileLambdaExpr=false) const

Produce a unique representation of the given statement.

StringLiteral - This represents a string literal expression, e.g.

Represents a reference to a non-type template parameter that has been substituted with a template arg...

Represents a reference to a non-type template parameter pack that has been substituted with a non-tem...

SwitchStmt - This represents a 'switch' stmt.

Location wrapper for a TemplateArgument.

Represents a template argument.

QualType getStructuralValueType() const

Get the type of a StructuralValue.

QualType getParamTypeForDecl() const

Expr * getAsExpr() const

Retrieve the template argument as an expression.

QualType getAsType() const

Retrieve the type for a type template argument.

llvm::APSInt getAsIntegral() const

Retrieve the template argument as an integral value.

QualType getNullPtrType() const

Retrieve the type for null non-type template argument.

QualType getIntegralType() const

Retrieve the type of the integral value.

ValueDecl * getAsDecl() const

Retrieve the declaration for a declaration non-type template argument.

ArrayRef< TemplateArgument > pack_elements() const

Iterator range referencing all of the elements of a template argument pack.

@ Declaration

The template argument is a declaration that was provided for a pointer, reference,...

@ Template

The template argument is a template name that was provided for a template template parameter.

@ StructuralValue

The template argument is a non-type template argument that can't be represented by the special-case D...

@ Pack

The template argument is actually a parameter pack.

@ TemplateExpansion

The template argument is a pack expansion of a template name that was provided for a template templat...

@ NullPtr

The template argument is a null pointer or null pointer to member that was provided for a non-type te...

@ Type

The template argument is a type.

@ Null

Represents an empty template argument, e.g., one that has not been deduced.

@ Integral

The template argument is an integral value stored in an llvm::APSInt that was provided for an integra...

@ Expression

The template argument is an expression, and we've not resolved it to one of the other forms yet,...

ArgKind getKind() const

Return the kind of stored template argument.

TemplateName getAsTemplateOrTemplatePattern() const

Retrieve the template argument as a template name; if the argument is a pack expansion,...

const APValue & getAsStructuralValue() const

Get the value of a StructuralValue.

Represents a C++ template name within the type system.

TemplateTemplateParmDecl - Declares a template template parameter, e.g., "T" in.

Declaration of a template type parameter.

Expr * getImmediatelyDeclaredConstraint() const

Get the immediately-declared constraint expression introduced by this type-constraint,...

A type trait used in the implementation of various C++11 and Library TR1 trait templates.

const T * castAs() const

Member-template castAs<specific type>.

TypeClass getTypeClass() const

const T * getAs() const

Member-template getAs<specific type>'.

TypoExpr - Internal placeholder for expressions where typo correction still needs to be performed and...

UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand.

UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...

A reference to a name which we were able to look up during parsing but could not resolve to a specifi...

Represents a C++ member access expression for which lookup produced a set of overloaded functions.

A call to a literal operator (C++11 [over.literal]) written as a user-defined literal (C++11 [lit....

Represents a call to the builtin function __builtin_va_arg.

WhileStmt - This represents a 'while' stmt.

bool isTypeConstraint() const

const TypeConstraint * getTypeConstraint() const

bool isSubstitutionFailure() const

A static requirement that can be used in a requires-expression to check properties of types and expre...

The JSON file list parser is used to communicate input to InstallAPI.

@ OO_None

Not an overloaded operator.

@ NUM_OVERLOADED_OPERATORS

const FunctionProtoType * T

Data for list of allocators.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4