1e7145dcbSDimitry Andric //===-- MPIFunctionClassifier.cpp - classifies MPI functions ----*- C++ -*-===// 2e7145dcbSDimitry Andric // 3e7145dcbSDimitry Andric // The LLVM Compiler Infrastructure 4e7145dcbSDimitry Andric // 5e7145dcbSDimitry Andric // This file is distributed under the University of Illinois Open Source 6e7145dcbSDimitry Andric // License. See LICENSE.TXT for details. 7e7145dcbSDimitry Andric // 8e7145dcbSDimitry Andric //===----------------------------------------------------------------------===// 9e7145dcbSDimitry Andric /// 10e7145dcbSDimitry Andric /// \file 11e7145dcbSDimitry Andric /// This file defines functionality to identify and classify MPI functions. 12e7145dcbSDimitry Andric /// 13e7145dcbSDimitry Andric //===----------------------------------------------------------------------===// 14e7145dcbSDimitry Andric 15*44290647SDimitry Andric #include "clang/StaticAnalyzer/Checkers/MPIFunctionClassifier.h" 16e7145dcbSDimitry Andric #include "llvm/ADT/STLExtras.h" 17e7145dcbSDimitry Andric 18e7145dcbSDimitry Andric namespace clang { 19e7145dcbSDimitry Andric namespace ento { 20e7145dcbSDimitry Andric namespace mpi { 21e7145dcbSDimitry Andric identifierInit(ASTContext & ASTCtx)22e7145dcbSDimitry Andricvoid MPIFunctionClassifier::identifierInit(ASTContext &ASTCtx) { 23e7145dcbSDimitry Andric // Initialize function identifiers. 24e7145dcbSDimitry Andric initPointToPointIdentifiers(ASTCtx); 25e7145dcbSDimitry Andric initCollectiveIdentifiers(ASTCtx); 26e7145dcbSDimitry Andric initAdditionalIdentifiers(ASTCtx); 27e7145dcbSDimitry Andric } 28e7145dcbSDimitry Andric initPointToPointIdentifiers(ASTContext & ASTCtx)29e7145dcbSDimitry Andricvoid MPIFunctionClassifier::initPointToPointIdentifiers(ASTContext &ASTCtx) { 30e7145dcbSDimitry Andric // Copy identifiers into the correct classification containers. 31e7145dcbSDimitry Andric IdentInfo_MPI_Send = &ASTCtx.Idents.get("MPI_Send"); 32e7145dcbSDimitry Andric MPIPointToPointTypes.push_back(IdentInfo_MPI_Send); 33e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Send); 34e7145dcbSDimitry Andric assert(IdentInfo_MPI_Send); 35e7145dcbSDimitry Andric 36e7145dcbSDimitry Andric IdentInfo_MPI_Isend = &ASTCtx.Idents.get("MPI_Isend"); 37e7145dcbSDimitry Andric MPIPointToPointTypes.push_back(IdentInfo_MPI_Isend); 38e7145dcbSDimitry Andric MPINonBlockingTypes.push_back(IdentInfo_MPI_Isend); 39e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Isend); 40e7145dcbSDimitry Andric assert(IdentInfo_MPI_Isend); 41e7145dcbSDimitry Andric 42e7145dcbSDimitry Andric IdentInfo_MPI_Ssend = &ASTCtx.Idents.get("MPI_Ssend"); 43e7145dcbSDimitry Andric MPIPointToPointTypes.push_back(IdentInfo_MPI_Ssend); 44e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Ssend); 45e7145dcbSDimitry Andric assert(IdentInfo_MPI_Ssend); 46e7145dcbSDimitry Andric 47e7145dcbSDimitry Andric IdentInfo_MPI_Issend = &ASTCtx.Idents.get("MPI_Issend"); 48e7145dcbSDimitry Andric MPIPointToPointTypes.push_back(IdentInfo_MPI_Issend); 49e7145dcbSDimitry Andric MPINonBlockingTypes.push_back(IdentInfo_MPI_Issend); 50e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Issend); 51e7145dcbSDimitry Andric assert(IdentInfo_MPI_Issend); 52e7145dcbSDimitry Andric 53e7145dcbSDimitry Andric IdentInfo_MPI_Bsend = &ASTCtx.Idents.get("MPI_Bsend"); 54e7145dcbSDimitry Andric MPIPointToPointTypes.push_back(IdentInfo_MPI_Bsend); 55e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Bsend); 56e7145dcbSDimitry Andric assert(IdentInfo_MPI_Bsend); 57e7145dcbSDimitry Andric 58e7145dcbSDimitry Andric IdentInfo_MPI_Ibsend = &ASTCtx.Idents.get("MPI_Ibsend"); 59e7145dcbSDimitry Andric MPIPointToPointTypes.push_back(IdentInfo_MPI_Ibsend); 60e7145dcbSDimitry Andric MPINonBlockingTypes.push_back(IdentInfo_MPI_Ibsend); 61e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Ibsend); 62e7145dcbSDimitry Andric assert(IdentInfo_MPI_Ibsend); 63e7145dcbSDimitry Andric 64e7145dcbSDimitry Andric IdentInfo_MPI_Rsend = &ASTCtx.Idents.get("MPI_Rsend"); 65e7145dcbSDimitry Andric MPIPointToPointTypes.push_back(IdentInfo_MPI_Rsend); 66e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Rsend); 67e7145dcbSDimitry Andric assert(IdentInfo_MPI_Rsend); 68e7145dcbSDimitry Andric 69e7145dcbSDimitry Andric IdentInfo_MPI_Irsend = &ASTCtx.Idents.get("MPI_Irsend"); 70e7145dcbSDimitry Andric MPIPointToPointTypes.push_back(IdentInfo_MPI_Irsend); 71e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Irsend); 72e7145dcbSDimitry Andric assert(IdentInfo_MPI_Irsend); 73e7145dcbSDimitry Andric 74e7145dcbSDimitry Andric IdentInfo_MPI_Recv = &ASTCtx.Idents.get("MPI_Recv"); 75e7145dcbSDimitry Andric MPIPointToPointTypes.push_back(IdentInfo_MPI_Recv); 76e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Recv); 77e7145dcbSDimitry Andric assert(IdentInfo_MPI_Recv); 78e7145dcbSDimitry Andric 79e7145dcbSDimitry Andric IdentInfo_MPI_Irecv = &ASTCtx.Idents.get("MPI_Irecv"); 80e7145dcbSDimitry Andric MPIPointToPointTypes.push_back(IdentInfo_MPI_Irecv); 81e7145dcbSDimitry Andric MPINonBlockingTypes.push_back(IdentInfo_MPI_Irecv); 82e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Irecv); 83e7145dcbSDimitry Andric assert(IdentInfo_MPI_Irecv); 84e7145dcbSDimitry Andric } 85e7145dcbSDimitry Andric initCollectiveIdentifiers(ASTContext & ASTCtx)86e7145dcbSDimitry Andricvoid MPIFunctionClassifier::initCollectiveIdentifiers(ASTContext &ASTCtx) { 87e7145dcbSDimitry Andric // Copy identifiers into the correct classification containers. 88e7145dcbSDimitry Andric IdentInfo_MPI_Scatter = &ASTCtx.Idents.get("MPI_Scatter"); 89e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Scatter); 90e7145dcbSDimitry Andric MPIPointToCollTypes.push_back(IdentInfo_MPI_Scatter); 91e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Scatter); 92e7145dcbSDimitry Andric assert(IdentInfo_MPI_Scatter); 93e7145dcbSDimitry Andric 94e7145dcbSDimitry Andric IdentInfo_MPI_Iscatter = &ASTCtx.Idents.get("MPI_Iscatter"); 95e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Iscatter); 96e7145dcbSDimitry Andric MPIPointToCollTypes.push_back(IdentInfo_MPI_Iscatter); 97e7145dcbSDimitry Andric MPINonBlockingTypes.push_back(IdentInfo_MPI_Iscatter); 98e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Iscatter); 99e7145dcbSDimitry Andric assert(IdentInfo_MPI_Iscatter); 100e7145dcbSDimitry Andric 101e7145dcbSDimitry Andric IdentInfo_MPI_Gather = &ASTCtx.Idents.get("MPI_Gather"); 102e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Gather); 103e7145dcbSDimitry Andric MPICollToPointTypes.push_back(IdentInfo_MPI_Gather); 104e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Gather); 105e7145dcbSDimitry Andric assert(IdentInfo_MPI_Gather); 106e7145dcbSDimitry Andric 107e7145dcbSDimitry Andric IdentInfo_MPI_Igather = &ASTCtx.Idents.get("MPI_Igather"); 108e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Igather); 109e7145dcbSDimitry Andric MPICollToPointTypes.push_back(IdentInfo_MPI_Igather); 110e7145dcbSDimitry Andric MPINonBlockingTypes.push_back(IdentInfo_MPI_Igather); 111e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Igather); 112e7145dcbSDimitry Andric assert(IdentInfo_MPI_Igather); 113e7145dcbSDimitry Andric 114e7145dcbSDimitry Andric IdentInfo_MPI_Allgather = &ASTCtx.Idents.get("MPI_Allgather"); 115e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Allgather); 116e7145dcbSDimitry Andric MPICollToCollTypes.push_back(IdentInfo_MPI_Allgather); 117e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Allgather); 118e7145dcbSDimitry Andric assert(IdentInfo_MPI_Allgather); 119e7145dcbSDimitry Andric 120e7145dcbSDimitry Andric IdentInfo_MPI_Iallgather = &ASTCtx.Idents.get("MPI_Iallgather"); 121e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Iallgather); 122e7145dcbSDimitry Andric MPICollToCollTypes.push_back(IdentInfo_MPI_Iallgather); 123e7145dcbSDimitry Andric MPINonBlockingTypes.push_back(IdentInfo_MPI_Iallgather); 124e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Iallgather); 125e7145dcbSDimitry Andric assert(IdentInfo_MPI_Iallgather); 126e7145dcbSDimitry Andric 127e7145dcbSDimitry Andric IdentInfo_MPI_Bcast = &ASTCtx.Idents.get("MPI_Bcast"); 128e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Bcast); 129e7145dcbSDimitry Andric MPIPointToCollTypes.push_back(IdentInfo_MPI_Bcast); 130e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Bcast); 131e7145dcbSDimitry Andric assert(IdentInfo_MPI_Bcast); 132e7145dcbSDimitry Andric 133e7145dcbSDimitry Andric IdentInfo_MPI_Ibcast = &ASTCtx.Idents.get("MPI_Ibcast"); 134e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Ibcast); 135e7145dcbSDimitry Andric MPIPointToCollTypes.push_back(IdentInfo_MPI_Ibcast); 136e7145dcbSDimitry Andric MPINonBlockingTypes.push_back(IdentInfo_MPI_Ibcast); 137e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Ibcast); 138e7145dcbSDimitry Andric assert(IdentInfo_MPI_Ibcast); 139e7145dcbSDimitry Andric 140e7145dcbSDimitry Andric IdentInfo_MPI_Reduce = &ASTCtx.Idents.get("MPI_Reduce"); 141e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Reduce); 142e7145dcbSDimitry Andric MPICollToPointTypes.push_back(IdentInfo_MPI_Reduce); 143e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Reduce); 144e7145dcbSDimitry Andric assert(IdentInfo_MPI_Reduce); 145e7145dcbSDimitry Andric 146e7145dcbSDimitry Andric IdentInfo_MPI_Ireduce = &ASTCtx.Idents.get("MPI_Ireduce"); 147e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Ireduce); 148e7145dcbSDimitry Andric MPICollToPointTypes.push_back(IdentInfo_MPI_Ireduce); 149e7145dcbSDimitry Andric MPINonBlockingTypes.push_back(IdentInfo_MPI_Ireduce); 150e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Ireduce); 151e7145dcbSDimitry Andric assert(IdentInfo_MPI_Ireduce); 152e7145dcbSDimitry Andric 153e7145dcbSDimitry Andric IdentInfo_MPI_Allreduce = &ASTCtx.Idents.get("MPI_Allreduce"); 154e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Allreduce); 155e7145dcbSDimitry Andric MPICollToCollTypes.push_back(IdentInfo_MPI_Allreduce); 156e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Allreduce); 157e7145dcbSDimitry Andric assert(IdentInfo_MPI_Allreduce); 158e7145dcbSDimitry Andric 159e7145dcbSDimitry Andric IdentInfo_MPI_Iallreduce = &ASTCtx.Idents.get("MPI_Iallreduce"); 160e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Iallreduce); 161e7145dcbSDimitry Andric MPICollToCollTypes.push_back(IdentInfo_MPI_Iallreduce); 162e7145dcbSDimitry Andric MPINonBlockingTypes.push_back(IdentInfo_MPI_Iallreduce); 163e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Iallreduce); 164e7145dcbSDimitry Andric assert(IdentInfo_MPI_Iallreduce); 165e7145dcbSDimitry Andric 166e7145dcbSDimitry Andric IdentInfo_MPI_Alltoall = &ASTCtx.Idents.get("MPI_Alltoall"); 167e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Alltoall); 168e7145dcbSDimitry Andric MPICollToCollTypes.push_back(IdentInfo_MPI_Alltoall); 169e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Alltoall); 170e7145dcbSDimitry Andric assert(IdentInfo_MPI_Alltoall); 171e7145dcbSDimitry Andric 172e7145dcbSDimitry Andric IdentInfo_MPI_Ialltoall = &ASTCtx.Idents.get("MPI_Ialltoall"); 173e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Ialltoall); 174e7145dcbSDimitry Andric MPICollToCollTypes.push_back(IdentInfo_MPI_Ialltoall); 175e7145dcbSDimitry Andric MPINonBlockingTypes.push_back(IdentInfo_MPI_Ialltoall); 176e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Ialltoall); 177e7145dcbSDimitry Andric assert(IdentInfo_MPI_Ialltoall); 178e7145dcbSDimitry Andric } 179e7145dcbSDimitry Andric initAdditionalIdentifiers(ASTContext & ASTCtx)180e7145dcbSDimitry Andricvoid MPIFunctionClassifier::initAdditionalIdentifiers(ASTContext &ASTCtx) { 181e7145dcbSDimitry Andric IdentInfo_MPI_Comm_rank = &ASTCtx.Idents.get("MPI_Comm_rank"); 182e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Comm_rank); 183e7145dcbSDimitry Andric assert(IdentInfo_MPI_Comm_rank); 184e7145dcbSDimitry Andric 185e7145dcbSDimitry Andric IdentInfo_MPI_Comm_size = &ASTCtx.Idents.get("MPI_Comm_size"); 186e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Comm_size); 187e7145dcbSDimitry Andric assert(IdentInfo_MPI_Comm_size); 188e7145dcbSDimitry Andric 189e7145dcbSDimitry Andric IdentInfo_MPI_Wait = &ASTCtx.Idents.get("MPI_Wait"); 190e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Wait); 191e7145dcbSDimitry Andric assert(IdentInfo_MPI_Wait); 192e7145dcbSDimitry Andric 193e7145dcbSDimitry Andric IdentInfo_MPI_Waitall = &ASTCtx.Idents.get("MPI_Waitall"); 194e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Waitall); 195e7145dcbSDimitry Andric assert(IdentInfo_MPI_Waitall); 196e7145dcbSDimitry Andric 197e7145dcbSDimitry Andric IdentInfo_MPI_Barrier = &ASTCtx.Idents.get("MPI_Barrier"); 198e7145dcbSDimitry Andric MPICollectiveTypes.push_back(IdentInfo_MPI_Barrier); 199e7145dcbSDimitry Andric MPIType.push_back(IdentInfo_MPI_Barrier); 200e7145dcbSDimitry Andric assert(IdentInfo_MPI_Barrier); 201e7145dcbSDimitry Andric } 202e7145dcbSDimitry Andric 203e7145dcbSDimitry Andric // general identifiers isMPIType(const IdentifierInfo * IdentInfo) const204e7145dcbSDimitry Andricbool MPIFunctionClassifier::isMPIType(const IdentifierInfo *IdentInfo) const { 205e7145dcbSDimitry Andric return llvm::is_contained(MPIType, IdentInfo); 206e7145dcbSDimitry Andric } 207e7145dcbSDimitry Andric isNonBlockingType(const IdentifierInfo * IdentInfo) const208e7145dcbSDimitry Andricbool MPIFunctionClassifier::isNonBlockingType( 209e7145dcbSDimitry Andric const IdentifierInfo *IdentInfo) const { 210e7145dcbSDimitry Andric return llvm::is_contained(MPINonBlockingTypes, IdentInfo); 211e7145dcbSDimitry Andric } 212e7145dcbSDimitry Andric 213e7145dcbSDimitry Andric // point-to-point identifiers isPointToPointType(const IdentifierInfo * IdentInfo) const214e7145dcbSDimitry Andricbool MPIFunctionClassifier::isPointToPointType( 215e7145dcbSDimitry Andric const IdentifierInfo *IdentInfo) const { 216e7145dcbSDimitry Andric return llvm::is_contained(MPIPointToPointTypes, IdentInfo); 217e7145dcbSDimitry Andric } 218e7145dcbSDimitry Andric 219e7145dcbSDimitry Andric // collective identifiers isCollectiveType(const IdentifierInfo * IdentInfo) const220e7145dcbSDimitry Andricbool MPIFunctionClassifier::isCollectiveType( 221e7145dcbSDimitry Andric const IdentifierInfo *IdentInfo) const { 222e7145dcbSDimitry Andric return llvm::is_contained(MPICollectiveTypes, IdentInfo); 223e7145dcbSDimitry Andric } 224e7145dcbSDimitry Andric isCollToColl(const IdentifierInfo * IdentInfo) const225e7145dcbSDimitry Andricbool MPIFunctionClassifier::isCollToColl( 226e7145dcbSDimitry Andric const IdentifierInfo *IdentInfo) const { 227e7145dcbSDimitry Andric return llvm::is_contained(MPICollToCollTypes, IdentInfo); 228e7145dcbSDimitry Andric } 229e7145dcbSDimitry Andric isScatterType(const IdentifierInfo * IdentInfo) const230e7145dcbSDimitry Andricbool MPIFunctionClassifier::isScatterType( 231e7145dcbSDimitry Andric const IdentifierInfo *IdentInfo) const { 232e7145dcbSDimitry Andric return IdentInfo == IdentInfo_MPI_Scatter || 233e7145dcbSDimitry Andric IdentInfo == IdentInfo_MPI_Iscatter; 234e7145dcbSDimitry Andric } 235e7145dcbSDimitry Andric isGatherType(const IdentifierInfo * IdentInfo) const236e7145dcbSDimitry Andricbool MPIFunctionClassifier::isGatherType( 237e7145dcbSDimitry Andric const IdentifierInfo *IdentInfo) const { 238e7145dcbSDimitry Andric return IdentInfo == IdentInfo_MPI_Gather || 239e7145dcbSDimitry Andric IdentInfo == IdentInfo_MPI_Igather || 240e7145dcbSDimitry Andric IdentInfo == IdentInfo_MPI_Allgather || 241e7145dcbSDimitry Andric IdentInfo == IdentInfo_MPI_Iallgather; 242e7145dcbSDimitry Andric } 243e7145dcbSDimitry Andric isAllgatherType(const IdentifierInfo * IdentInfo) const244e7145dcbSDimitry Andricbool MPIFunctionClassifier::isAllgatherType( 245e7145dcbSDimitry Andric const IdentifierInfo *IdentInfo) const { 246e7145dcbSDimitry Andric return IdentInfo == IdentInfo_MPI_Allgather || 247e7145dcbSDimitry Andric IdentInfo == IdentInfo_MPI_Iallgather; 248e7145dcbSDimitry Andric } 249e7145dcbSDimitry Andric isAlltoallType(const IdentifierInfo * IdentInfo) const250e7145dcbSDimitry Andricbool MPIFunctionClassifier::isAlltoallType( 251e7145dcbSDimitry Andric const IdentifierInfo *IdentInfo) const { 252e7145dcbSDimitry Andric return IdentInfo == IdentInfo_MPI_Alltoall || 253e7145dcbSDimitry Andric IdentInfo == IdentInfo_MPI_Ialltoall; 254e7145dcbSDimitry Andric } 255e7145dcbSDimitry Andric isBcastType(const IdentifierInfo * IdentInfo) const256e7145dcbSDimitry Andricbool MPIFunctionClassifier::isBcastType(const IdentifierInfo *IdentInfo) const { 257e7145dcbSDimitry Andric return IdentInfo == IdentInfo_MPI_Bcast || IdentInfo == IdentInfo_MPI_Ibcast; 258e7145dcbSDimitry Andric } 259e7145dcbSDimitry Andric isReduceType(const IdentifierInfo * IdentInfo) const260e7145dcbSDimitry Andricbool MPIFunctionClassifier::isReduceType( 261e7145dcbSDimitry Andric const IdentifierInfo *IdentInfo) const { 262e7145dcbSDimitry Andric return IdentInfo == IdentInfo_MPI_Reduce || 263e7145dcbSDimitry Andric IdentInfo == IdentInfo_MPI_Ireduce || 264e7145dcbSDimitry Andric IdentInfo == IdentInfo_MPI_Allreduce || 265e7145dcbSDimitry Andric IdentInfo == IdentInfo_MPI_Iallreduce; 266e7145dcbSDimitry Andric } 267e7145dcbSDimitry Andric 268e7145dcbSDimitry Andric // additional identifiers isMPI_Wait(const IdentifierInfo * IdentInfo) const269e7145dcbSDimitry Andricbool MPIFunctionClassifier::isMPI_Wait(const IdentifierInfo *IdentInfo) const { 270e7145dcbSDimitry Andric return IdentInfo == IdentInfo_MPI_Wait; 271e7145dcbSDimitry Andric } 272e7145dcbSDimitry Andric isMPI_Waitall(const IdentifierInfo * IdentInfo) const273e7145dcbSDimitry Andricbool MPIFunctionClassifier::isMPI_Waitall( 274e7145dcbSDimitry Andric const IdentifierInfo *IdentInfo) const { 275e7145dcbSDimitry Andric return IdentInfo == IdentInfo_MPI_Waitall; 276e7145dcbSDimitry Andric } 277e7145dcbSDimitry Andric isWaitType(const IdentifierInfo * IdentInfo) const278e7145dcbSDimitry Andricbool MPIFunctionClassifier::isWaitType(const IdentifierInfo *IdentInfo) const { 279e7145dcbSDimitry Andric return IdentInfo == IdentInfo_MPI_Wait || IdentInfo == IdentInfo_MPI_Waitall; 280e7145dcbSDimitry Andric } 281e7145dcbSDimitry Andric 282e7145dcbSDimitry Andric } // end of namespace: mpi 283e7145dcbSDimitry Andric } // end of namespace: ento 284e7145dcbSDimitry Andric } // end of namespace: clang 285