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
getAllAssumeClauseOptions()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