brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.1 KiB · ef08a1c Raw
221 lines · cpp
1//===--- DeclOpenMP.cpp - Declaration OpenMP AST Node Implementation ------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8/// \file9/// This file implements OMPThreadPrivateDecl, OMPCapturedExprDecl10/// classes.11///12//===----------------------------------------------------------------------===//13 14#include "clang/AST/ASTContext.h"15#include "clang/AST/Decl.h"16#include "clang/AST/DeclBase.h"17#include "clang/AST/DeclOpenMP.h"18#include "clang/AST/Expr.h"19 20using namespace clang;21 22//===----------------------------------------------------------------------===//23// OMPThreadPrivateDecl Implementation.24//===----------------------------------------------------------------------===//25 26void OMPThreadPrivateDecl::anchor() {}27 28OMPThreadPrivateDecl *OMPThreadPrivateDecl::Create(ASTContext &C,29                                                   DeclContext *DC,30                                                   SourceLocation L,31                                                   ArrayRef<Expr *> VL) {32  auto *D = OMPDeclarativeDirective::createDirective<OMPThreadPrivateDecl>(33      C, DC, {}, VL.size(), L);34  D->setVars(VL);35  return D;36}37 38OMPThreadPrivateDecl *OMPThreadPrivateDecl::CreateDeserialized(ASTContext &C,39                                                               GlobalDeclID ID,40                                                               unsigned N) {41  return OMPDeclarativeDirective::createEmptyDirective<OMPThreadPrivateDecl>(42      C, ID, 0, N);43}44 45void OMPThreadPrivateDecl::setVars(ArrayRef<Expr *> VL) {46  assert(VL.size() == Data->getNumChildren() &&47         "Number of variables is not the same as the preallocated buffer");48  llvm::copy(VL, getVars().begin());49}50 51//===----------------------------------------------------------------------===//52// OMPGroupPrivateDecl Implementation.53//===----------------------------------------------------------------------===//54 55void OMPGroupPrivateDecl::anchor() {}56 57OMPGroupPrivateDecl *OMPGroupPrivateDecl::Create(ASTContext &C, DeclContext *DC,58                                                 SourceLocation L,59                                                 ArrayRef<Expr *> VL) {60  auto *D = OMPDeclarativeDirective::createDirective<OMPGroupPrivateDecl>(61      C, DC, {}, VL.size(), L);62  D->setVars(VL);63  return D;64}65 66OMPGroupPrivateDecl *OMPGroupPrivateDecl::CreateDeserialized(ASTContext &C,67                                                             GlobalDeclID ID,68                                                             unsigned N) {69  return OMPDeclarativeDirective::createEmptyDirective<OMPGroupPrivateDecl>(70      C, ID, 0, N);71}72 73void OMPGroupPrivateDecl::setVars(ArrayRef<Expr *> VL) {74  assert(VL.size() == Data->getNumChildren() &&75         "Number of variables is not the same as the preallocated buffer");76  llvm::copy(VL, getVars().begin());77}78 79//===----------------------------------------------------------------------===//80// OMPAllocateDecl Implementation.81//===----------------------------------------------------------------------===//82 83void OMPAllocateDecl::anchor() { }84 85OMPAllocateDecl *OMPAllocateDecl::Create(ASTContext &C, DeclContext *DC,86                                         SourceLocation L, ArrayRef<Expr *> VL,87                                         ArrayRef<OMPClause *> CL) {88  auto *D = OMPDeclarativeDirective::createDirective<OMPAllocateDecl>(89      C, DC, CL, VL.size(), L);90  D->setVars(VL);91  return D;92}93 94OMPAllocateDecl *OMPAllocateDecl::CreateDeserialized(ASTContext &C,95                                                     GlobalDeclID ID,96                                                     unsigned NVars,97                                                     unsigned NClauses) {98  return OMPDeclarativeDirective::createEmptyDirective<OMPAllocateDecl>(99      C, ID, NClauses, NVars, SourceLocation());100}101 102void OMPAllocateDecl::setVars(ArrayRef<Expr *> VL) {103  assert(VL.size() == Data->getNumChildren() &&104         "Number of variables is not the same as the preallocated buffer");105  llvm::copy(VL, getVars().begin());106}107 108//===----------------------------------------------------------------------===//109// OMPRequiresDecl Implementation.110//===----------------------------------------------------------------------===//111 112void OMPRequiresDecl::anchor() {}113 114OMPRequiresDecl *OMPRequiresDecl::Create(ASTContext &C, DeclContext *DC,115                                         SourceLocation L,116                                         ArrayRef<OMPClause *> CL) {117  return OMPDeclarativeDirective::createDirective<OMPRequiresDecl>(C, DC, CL, 0,118                                                                   L);119}120 121OMPRequiresDecl *OMPRequiresDecl::CreateDeserialized(ASTContext &C,122                                                     GlobalDeclID ID,123                                                     unsigned N) {124  return OMPDeclarativeDirective::createEmptyDirective<OMPRequiresDecl>(125      C, ID, N, 0, SourceLocation());126}127 128//===----------------------------------------------------------------------===//129// OMPDeclareReductionDecl Implementation.130//===----------------------------------------------------------------------===//131 132OMPDeclareReductionDecl::OMPDeclareReductionDecl(133    Kind DK, DeclContext *DC, SourceLocation L, DeclarationName Name,134    QualType Ty, OMPDeclareReductionDecl *PrevDeclInScope)135    : ValueDecl(DK, DC, L, Name, Ty), DeclContext(DK), Combiner(nullptr),136      PrevDeclInScope(PrevDeclInScope) {137  setInitializer(nullptr, OMPDeclareReductionInitKind::Call);138}139 140void OMPDeclareReductionDecl::anchor() {}141 142OMPDeclareReductionDecl *OMPDeclareReductionDecl::Create(143    ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name,144    QualType T, OMPDeclareReductionDecl *PrevDeclInScope) {145  return new (C, DC) OMPDeclareReductionDecl(OMPDeclareReduction, DC, L, Name,146                                             T, PrevDeclInScope);147}148 149OMPDeclareReductionDecl *150OMPDeclareReductionDecl::CreateDeserialized(ASTContext &C, GlobalDeclID ID) {151  return new (C, ID) OMPDeclareReductionDecl(152      OMPDeclareReduction, /*DC=*/nullptr, SourceLocation(), DeclarationName(),153      QualType(), /*PrevDeclInScope=*/nullptr);154}155 156OMPDeclareReductionDecl *OMPDeclareReductionDecl::getPrevDeclInScope() {157  return cast_or_null<OMPDeclareReductionDecl>(158      PrevDeclInScope.get(getASTContext().getExternalSource()));159}160const OMPDeclareReductionDecl *161OMPDeclareReductionDecl::getPrevDeclInScope() const {162  return cast_or_null<OMPDeclareReductionDecl>(163      PrevDeclInScope.get(getASTContext().getExternalSource()));164}165 166//===----------------------------------------------------------------------===//167// OMPDeclareMapperDecl Implementation.168//===----------------------------------------------------------------------===//169 170void OMPDeclareMapperDecl::anchor() {}171 172OMPDeclareMapperDecl *OMPDeclareMapperDecl::Create(173    ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name,174    QualType T, DeclarationName VarName, ArrayRef<OMPClause *> Clauses,175    OMPDeclareMapperDecl *PrevDeclInScope) {176  return OMPDeclarativeDirective::createDirective<OMPDeclareMapperDecl>(177      C, DC, Clauses, 1, L, Name, T, VarName, PrevDeclInScope);178}179 180OMPDeclareMapperDecl *OMPDeclareMapperDecl::CreateDeserialized(ASTContext &C,181                                                               GlobalDeclID ID,182                                                               unsigned N) {183  return OMPDeclarativeDirective::createEmptyDirective<OMPDeclareMapperDecl>(184      C, ID, N, 1, SourceLocation(), DeclarationName(), QualType(),185      DeclarationName(), /*PrevDeclInScope=*/nullptr);186}187 188OMPDeclareMapperDecl *OMPDeclareMapperDecl::getPrevDeclInScope() {189  return cast_or_null<OMPDeclareMapperDecl>(190      PrevDeclInScope.get(getASTContext().getExternalSource()));191}192 193const OMPDeclareMapperDecl *OMPDeclareMapperDecl::getPrevDeclInScope() const {194  return cast_or_null<OMPDeclareMapperDecl>(195      PrevDeclInScope.get(getASTContext().getExternalSource()));196}197 198//===----------------------------------------------------------------------===//199// OMPCapturedExprDecl Implementation.200//===----------------------------------------------------------------------===//201 202void OMPCapturedExprDecl::anchor() {}203 204OMPCapturedExprDecl *OMPCapturedExprDecl::Create(ASTContext &C, DeclContext *DC,205                                                 IdentifierInfo *Id, QualType T,206                                                 SourceLocation StartLoc) {207  return new (C, DC) OMPCapturedExprDecl(208      C, DC, Id, T, C.getTrivialTypeSourceInfo(T), StartLoc);209}210 211OMPCapturedExprDecl *OMPCapturedExprDecl::CreateDeserialized(ASTContext &C,212                                                             GlobalDeclID ID) {213  return new (C, ID) OMPCapturedExprDecl(C, nullptr, nullptr, QualType(),214                                         /*TInfo=*/nullptr, SourceLocation());215}216 217SourceRange OMPCapturedExprDecl::getSourceRange() const {218  assert(hasInit());219  return SourceRange(getInit()->getBeginLoc(), getInit()->getEndLoc());220}221