1 //===- OpenMP/OMPAssume.h --- OpenMP assumption helper functions - C++ -*-===// 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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 /// \file 9 /// 10 /// This file provides helper functions and classes to deal with OpenMP 11 /// assumptions, e.g., as used by `[begin/end] assumes` and `assume`. 12 /// 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_FRONTEND_OPENMP_OMPASSUME_H 16 #define LLVM_FRONTEND_OPENMP_OMPASSUME_H 17 18 #include "llvm/ADT/StringRef.h" 19 20 namespace llvm { 21 22 namespace omp { 23 24 /// Helper to describe assume clauses. 25 struct AssumptionClauseMappingInfo { 26 /// The identifier describing the (beginning of the) clause. 27 llvm::StringLiteral Identifier; 28 /// Flag to determine if the identifier is a full name or the start of a name. 29 bool StartsWith; 30 /// Flag to determine if a directive lists follows. 31 bool HasDirectiveList; 32 /// Flag to determine if an expression follows. 33 bool HasExpression; 34 }; 35 36 /// All known assume clauses. 37 static constexpr AssumptionClauseMappingInfo AssumptionClauseMappings[] = { 38 #define OMP_ASSUME_CLAUSE(Identifier, StartsWith, HasDirectiveList, \ 39 HasExpression) \ 40 {Identifier, StartsWith, HasDirectiveList, HasExpression}, 41 #include "llvm/Frontend/OpenMP/OMPKinds.def" 42 }; 43 44 inline std::string getAllAssumeClauseOptions() { 45 std::string S; 46 for (const AssumptionClauseMappingInfo &ACMI : AssumptionClauseMappings) 47 S += (S.empty() ? "'" : "', '") + ACMI.Identifier.str(); 48 return S + "'"; 49 } 50 51 } // namespace omp 52 53 } // namespace llvm 54 55 #endif // LLVM_FRONTEND_OPENMP_OMPASSUME_H 56