//===- OpenMP/OMPAssume.h --- OpenMP assumption helper functions - C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// \file /// /// This file provides helper functions and classes to deal with OpenMP /// assumptions, e.g., as used by `[begin/end] assumes` and `assume`. /// //===----------------------------------------------------------------------===// #ifndef LLVM_FRONTEND_OPENMP_OMPASSUME_H #define LLVM_FRONTEND_OPENMP_OMPASSUME_H #include "llvm/ADT/StringRef.h" namespace llvm { namespace omp { /// Helper to describe assume clauses. struct AssumptionClauseMappingInfo { /// The identifier describing the (beginning of the) clause. llvm::StringLiteral Identifier; /// Flag to determine if the identifier is a full name or the start of a name. bool StartsWith; /// Flag to determine if a directive lists follows. bool HasDirectiveList; /// Flag to determine if an expression follows. bool HasExpression; }; /// All known assume clauses. static constexpr AssumptionClauseMappingInfo AssumptionClauseMappings[] = { #define OMP_ASSUME_CLAUSE(Identifier, StartsWith, HasDirectiveList, \ HasExpression) \ {Identifier, StartsWith, HasDirectiveList, HasExpression}, #include "llvm/Frontend/OpenMP/OMPKinds.def" }; inline std::string getAllAssumeClauseOptions() { std::string S; for (const AssumptionClauseMappingInfo &ACMI : AssumptionClauseMappings) S += (S.empty() ? "'" : "', '") + ACMI.Identifier.str(); return S + "'"; } } // namespace omp } // namespace llvm #endif // LLVM_FRONTEND_OPENMP_OMPASSUME_H