9#ifndef LLVM_CLANG_LIB_CIR_CODEGEN_CIRGENOPENMPCLAUSE_H
10#define LLVM_CLANG_LIB_CIR_CODEGEN_CIRGENOPENMPCLAUSE_H
14#include "mlir/Dialect/OpenMP/OpenMPClauseOperands.h"
17#include "llvm/Frontend/OpenMP/OMPConstants.h"
41 : cgf(cgf), cgm(cgm), builder(builder), loc(loc), clauses(clauses) {}
43 bool emitProcBind(mlir::omp::ProcBindClauseOps &result)
const;
47 bool emitMap(mlir::omp::MapClauseOps &result,
54 template <
typename... SupportedClauses,
typename... NYIClauses>
56 llvm::omp::Directive directive)
const;
60 template <
typename T,
typename... Ts>
61 static constexpr bool isAnyOf = (std::is_same_v<T, Ts> || ...);
64template <
typename... SupportedClauses,
typename... NYIClauses>
66 llvm::omp::Directive directive)
const {
68 (!isAnyOf<NYIClauses, SupportedClauses...> && ...),
69 "the supported and not-yet-implemented clause lists must be disjoint");
74 (llvm::Twine(
"OpenMP ") +
75 llvm::omp::getOpenMPDirectiveName(directive).upper() +
" '" +
76 llvm::omp::getOpenMPClauseName(c->getClauseKind()) +
"' clause")
78 cgm.errorNYI(c->getBeginLoc(), msg);
81 llvm_unreachable(
"unexpected OpenMP clause");
This file defines OpenMP AST classes for clauses.
This file defines OpenMP AST classes for executable directives and clauses.
This class organizes the cross-function state that is used while generating CIR code.
bool emitMap(mlir::omp::MapClauseOps &result, llvm::SmallVectorImpl< const VarDecl * > *mapSyms=nullptr) const
Emit map clauses.
void emitNYI(OpenMPNYIClauseList< NYIClauses... > nyi, llvm::omp::Directive directive) const
Verify the clauses of a directive to make sure all legal cases are either implemented or give a NYI e...
bool emitProcBind(mlir::omp::ProcBindClauseOps &result) const
OpenMPClauseEmitter(CIRGenFunction &cgf, CIRGenModule &cgm, CIRGenBuilderTy &builder, mlir::Location loc, llvm::ArrayRef< const OMPClause * > clauses)
This is a basic class for representing single OpenMP clause.
bool isa(CodeGen::Address addr)
A type-only list of OpenMP clause AST node types.