diff --git a/clang/include/clang/AST/OpenMPClause.h b/clang/include/clang/AST/OpenMPClause.h index 3fd1b6d300803..3ecc1d40fafc6 100644 --- a/clang/include/clang/AST/OpenMPClause.h +++ b/clang/include/clang/AST/OpenMPClause.h @@ -32,6 +32,7 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/iterator.h" #include "llvm/ADT/iterator_range.h" +#include "llvm/Frontend/OpenMP/OMPAssume.h" #include "llvm/Frontend/OpenMP/OMPConstants.h" #include "llvm/Frontend/OpenMP/OMPContext.h" #include "llvm/Support/Casting.h" diff --git a/clang/lib/Parse/ParseOpenMP.cpp b/clang/lib/Parse/ParseOpenMP.cpp index 300b022d83b99..7c783ef0b02b2 100644 --- a/clang/lib/Parse/ParseOpenMP.cpp +++ b/clang/lib/Parse/ParseOpenMP.cpp @@ -23,6 +23,7 @@ #include "llvm/ADT/PointerIntPair.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/ADT/UniqueVector.h" +#include "llvm/Frontend/OpenMP/OMPAssume.h" #include "llvm/Frontend/OpenMP/OMPContext.h" using namespace clang; diff --git a/clang/lib/Sema/SemaOpenMP.cpp b/clang/lib/Sema/SemaOpenMP.cpp index ba0481874577e..61e6d4995b9bc 100644 --- a/clang/lib/Sema/SemaOpenMP.cpp +++ b/clang/lib/Sema/SemaOpenMP.cpp @@ -36,6 +36,7 @@ #include "llvm/ADT/PointerEmbeddedInt.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringExtras.h" +#include "llvm/Frontend/OpenMP/OMPAssume.h" #include "llvm/Frontend/OpenMP/OMPConstants.h" #include diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPAssume.h b/llvm/include/llvm/Frontend/OpenMP/OMPAssume.h new file mode 100644 index 0000000000000..c7462ffe6bc0f --- /dev/null +++ b/llvm/include/llvm/Frontend/OpenMP/OMPAssume.h @@ -0,0 +1,55 @@ +//===- 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 diff --git a/llvm/include/llvm/Frontend/OpenMP/OMPConstants.h b/llvm/include/llvm/Frontend/OpenMP/OMPConstants.h index c82f8e69b7438..0479e305fcb50 100644 --- a/llvm/include/llvm/Frontend/OpenMP/OMPConstants.h +++ b/llvm/include/llvm/Frontend/OpenMP/OMPConstants.h @@ -25,7 +25,6 @@ class Module; class ArrayType; class StructType; class PointerType; -class StringRef; class FunctionType; namespace omp { @@ -80,33 +79,6 @@ enum class IdentFlag { #define OMP_IDENT_FLAG(Enum, ...) constexpr auto Enum = omp::IdentFlag::Enum; #include "llvm/Frontend/OpenMP/OMPKinds.def" -/// 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 + "'"; -} - /// \note This needs to be kept in sync with kmp.h enum sched_type. /// Todo: Update kmp.h to include this file, and remove the enums in kmp.h /// To complete this, more enum values will need to be moved here.