13#ifndef FORTRAN_LOWER_SUPPORT_UTILS_H
14#define FORTRAN_LOWER_SUPPORT_UTILS_H
16#include "flang/Common/indirection.h"
17#include "flang/Lower/IterationSpace.h"
18#include "flang/Parser/char-block.h"
19#include "flang/Semantics/tools.h"
20#include "mlir/Dialect/Arith/IR/Arith.h"
21#include "mlir/Dialect/Func/IR/FuncOps.h"
22#include "mlir/IR/BuiltinAttributes.h"
23#include "llvm/ADT/SmallSet.h"
24#include "llvm/ADT/StringRef.h"
36 return {cb.begin(), cb.size()};
41const A &removeIndirection(
const A &a) {
52 return Fortran::evaluate::AsGenericExpr(Fortran::common::Clone(x));
55template <Fortran::common::TypeCategory FROM>
60 return toEvExpr(x.left());
72 Fortran::common::TypeCategory::Integer, 8>> &x) {
73 return Fortran::common::visit(
74 [](
const auto &v) {
return ignoreEvConvert(v); }, x.u);
80A flatZip(
const A &container1,
const A &container2) {
81 assert(container1.size() == container2.size());
83 for (
auto [e1, e2] : llvm::zip(container1, container2)) {
84 result.emplace_back(e1);
85 result.emplace_back(e2);
92unsigned getHashValue(
const Fortran::lower::ExplicitIterSpace::ArrayBases &x);
96bool isEqual(
const Fortran::lower::ExplicitIterSpace::ArrayBases &x,
97 const Fortran::lower::ExplicitIterSpace::ArrayBases &y);
99template <
typename OpType,
typename OperandsStructType>
102 lower::SymMap &symTable,
103 llvm::SetVector<const semantics::Symbol *> &allPrivatizedSymbols,
104 llvm::SmallPtrSet<const semantics::Symbol *, 16> &mightHaveReadHostSym,
105 const semantics::Symbol *symToPrivatize, OperandsStructType *clauseOps,
106 std::optional<llvm::omp::Directive> dir = std::nullopt);
121 return Fortran::lower::getHashValue(v);
125 return Fortran::lower::isEqual(lhs, rhs);
Definition: indirection.h:31
Definition: char-block.h:28
Definition: FIRBuilder.h:55
Definition: ParserActions.h:24
Definition: bit-population-count.h:20
Definition: expression.h:211