================ @@ -0,0 +1,89 @@ +//===--- CIRGenOpenMPClause.h - OpenMP clause emitter -----------*- 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 +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_LIB_CIR_CODEGEN_CIRGENOPENMPCLAUSE_H +#define LLVM_CLANG_LIB_CIR_CODEGEN_CIRGENOPENMPCLAUSE_H + +#include "CIRGenBuilder.h" +#include "CIRGenModule.h" +#include "mlir/Dialect/OpenMP/OpenMPClauseOperands.h" +#include "clang/AST/OpenMPClause.h" +#include "clang/AST/StmtOpenMP.h" +#include "llvm/Frontend/OpenMP/OMPConstants.h" + +#include <type_traits> + +namespace clang::CIRGen { + +class CIRGenFunction; + +/// A type-only list of OpenMP clause AST node types. +/// Note: The clause AST classes do not have a default constructor, so a +/// std::tuple is not practical. +template <typename... Clauses> struct OpenMPClauseList {}; + +/// Emits OpenMP clauses for a directive, writing results into the +/// auto-generated ClauseOps from the OMP dialect. +class OpenMPClauseEmitter { + CIRGenFunction &cgf; + CIRGenModule &cgm; + CIRGenBuilderTy &builder; + mlir::Location loc; + llvm::ArrayRef<const OMPClause *> clauses; + +public: + OpenMPClauseEmitter(CIRGenFunction &cgf, CIRGenModule &cgm, + CIRGenBuilderTy &builder, mlir::Location loc, + llvm::ArrayRef<const OMPClause *> clauses) + : cgf(cgf), cgm(cgm), builder(builder), loc(loc), clauses(clauses) {} + + bool emitProcBind(mlir::omp::ProcBindClauseOps &result) const; + + /// Emit map clauses. The optional \p mapSyms parameter collects the + /// VarDecls corresponding to each map operand. + bool emitMap(mlir::omp::MapClauseOps &result, + llvm::SmallVectorImpl<const VarDecl *> *mapSyms = nullptr) const; + + /// Verify the clauses of a directive to make sure all legal cases are either + /// implemented or give a NYI error. If the clause is neither, then + /// an unknown clause error will be emitted. ---------------- skatrak wrote:
```suggestion /// implemented or give a NYI error. The \p SupportedClauses and \p NYIClauses type lists must be disjoint and cover all clauses eligible for the directive being processed. ``` https://github.com/llvm/llvm-project/pull/195452 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
