llvm/mlir/include/mlir/Dialect/OpenMP/OpenMPClauseOperands.h

//===-- OpenMPClauseOperands.h ----------------------------------*- 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
//
//===----------------------------------------------------------------------===//
//
// This file declares the structures defining MLIR operands associated with each
// OpenMP clause, and structures grouping the appropriate operands for each
// construct.
//
//===----------------------------------------------------------------------===//

#ifndef MLIR_DIALECT_OPENMP_OPENMPCLAUSEOPERANDS_H_
#define MLIR_DIALECT_OPENMP_OPENMPCLAUSEOPERANDS_H_

#include "mlir/IR/BuiltinAttributes.h"
#include "llvm/ADT/SmallVector.h"

#include "mlir/Dialect/OpenMP/OpenMPOpsEnums.h.inc"

#define GET_ATTRDEF_CLASSES
#include "mlir/Dialect/OpenMP/OpenMPOpsAttributes.h.inc"

namespace mlir {
namespace omp {

//===----------------------------------------------------------------------===//
// Mixin structures defining MLIR operands associated with each OpenMP clause.
//===----------------------------------------------------------------------===//

struct AlignedClauseOps {};

struct AllocateClauseOps {};

struct CancelDirectiveNameClauseOps {};

struct CopyprivateClauseOps {};

struct CriticalNameClauseOps {};

struct DependClauseOps {};

struct DeviceClauseOps {};

struct DeviceTypeClauseOps {};

struct DistScheduleClauseOps {};

struct DoacrossClauseOps {};

struct FilterClauseOps {};

struct FinalClauseOps {};

struct GrainsizeClauseOps {};

struct HasDeviceAddrClauseOps {};

struct HintClauseOps {};

struct IfClauseOps {};

struct InReductionClauseOps {};

struct IsDevicePtrClauseOps {};

struct LinearClauseOps {};

struct LoopRelatedOps {};

struct MapClauseOps {};

struct MergeableClauseOps {};

struct NogroupClauseOps {};

struct NontemporalClauseOps {};

struct NowaitClauseOps {};

struct NumTasksClauseOps {};

struct NumTeamsClauseOps {};

struct NumThreadsClauseOps {};

struct OrderClauseOps {};

struct OrderedClauseOps {};

struct ParallelizationLevelClauseOps {};

struct PriorityClauseOps {};

struct PrivateClauseOps {};

struct ProcBindClauseOps {};

struct ReductionClauseOps {};

struct SafelenClauseOps {};

struct ScheduleClauseOps {};

struct SimdlenClauseOps {};

struct TaskReductionClauseOps {};

struct ThreadLimitClauseOps {};

struct UntiedClauseOps {};

struct UseDeviceAddrClauseOps {};

struct UseDevicePtrClauseOps {};

//===----------------------------------------------------------------------===//
// Structures defining clause operands associated with each OpenMP leaf
// construct.
//
// These mirror the arguments expected by the corresponding OpenMP MLIR ops.
//===----------------------------------------------------------------------===//

namespace detail {
template <typename... Mixins>
struct Clauses : public Mixins... {};
} // namespace detail

CancelOperands;

CancellationPointOperands;

CriticalDeclareOperands;

// TODO `indirect` clause.
DeclareTargetOperands;

DistributeOperands;

LoopNestOperands;

MaskedOperands;

OrderedOperands;

OrderedRegionOperands;

ParallelOperands;

SectionsOperands;

SimdOperands;

SingleOperands;

// TODO `defaultmap`, `uses_allocators` clauses.
TargetOperands;

TargetDataOperands;

TargetEnterExitUpdateDataOperands;

// TODO `affinity`, `detach` clauses.
TaskOperands;

TaskgroupOperands;

TaskloopOperands;

TaskwaitOperands;

TeamsOperands;

WsloopOperands;

} // namespace omp
} // namespace mlir

#endif // MLIR_DIALECT_OPENMP_OPENMPCLAUSEOPERANDS_H_