13#ifndef FORTRAN_SEMANTICS_OPENMP_UTILS_H
14#define FORTRAN_SEMANTICS_OPENMP_UTILS_H
16#include "flang/Common/indirection.h"
17#include "flang/Evaluate/type.h"
18#include "flang/Parser/char-block.h"
19#include "flang/Parser/parse-tree.h"
20#include "flang/Parser/tools.h"
21#include "flang/Semantics/tools.h"
23#include "llvm/ADT/ArrayRef.h"
30namespace Fortran::parser::omp {
38namespace Fortran::semantics {
45using Fortran::parser::omp::BlockRange;
46using Fortran::parser::omp::ExecutionPartIterator;
47using Fortran::parser::omp::LoopNestIterator;
48using Fortran::parser::omp::LoopRange;
50template <
typename T,
typename U = std::remove_const_t<T>> U AsRvalue(T &t) {
54template <
typename T> T &&AsRvalue(T &&t) {
return std::move(t); }
56const Scope &GetScopingUnit(
const Scope &scope);
57const Scope &GetProgramUnit(
const Scope &scope);
66 operator bool()
const {
return stmt !=
nullptr; }
72std::string ThisVersion(
unsigned version);
73std::string TryVersion(
unsigned version);
80std::optional<parser::CharBlock> GetObjectSource(
85bool IsCommonBlock(
const Symbol &sym);
86bool IsExtendedListItem(
const Symbol &sym);
87bool IsVariableListItem(
const Symbol &sym);
88bool IsTypeParamInquiry(
const Symbol &sym);
89bool IsStructureComponent(
const Symbol &sym);
90bool IsVarOrFunctionRef(
const MaybeExpr &expr);
94bool IsMapEnteringType(parser::OmpMapType::Value type);
95bool IsMapExitingType(parser::OmpMapType::Value type);
97MaybeExpr GetEvaluateExpr(
const parser::Expr &parserExpr);
98template <
typename T> MaybeExpr GetEvaluateExpr(
const T &inp) {
99 return GetEvaluateExpr(parser::UnwrapRef<parser::Expr>(inp));
102std::optional<evaluate::DynamicType> GetDynamicType(
105std::optional<bool> GetLogicalValue(
const SomeExpr &expr);
107std::optional<bool> IsContiguous(
110std::vector<SomeExpr> GetAllDesignators(
const SomeExpr &expr);
111const SomeExpr *HasStorageOverlap(
118bool IsLoopTransforming(llvm::omp::Directive dir);
121std::optional<int64_t> GetNumGeneratedNestsFrom(
123 std::optional<int64_t> nestedCount);
Definition expression.h:878
Definition char-block.h:28
Definition semantics.h:67
Definition parse-tree.h:496
Definition parse-tree.h:1884
Definition parse-tree.h:1794
Definition parse-tree.h:1833
Definition parse-tree.h:554
Definition parse-tree.h:1682
Definition parse-tree.h:3507
Definition parse-tree.h:3532
Definition parse-tree.h:5406
Definition parse-tree.h:3638
Definition openmp-utils.h:289
Definition openmp-utils.h:396
Definition openmp-utils.h:415
Definition openmp-utils.h:62