From 6733a505a1afb8eb4db2f6d85426d79ff0dc5eee Mon Sep 17 00:00:00 2001 From: Sergio Afonso Date: Mon, 20 May 2024 12:13:36 +0100 Subject: [PATCH] [MLIR][OpenMP] NFC: Split OpenMP dialect definitions (#91741) This patch splits definitions for the OpenMP dialect into multiple files to simplify the addition of new features, reduce merge conflicts, make it easier to understand, etc. The split is based on the structure of the more mature LLVMIR dialect. More specifically: - The OpenMP dialect definition is located in OpenMPDialect.td. - Base classes for OpenMP operations and types, as well as generic OpenMP types are moved to OpenMPOpBase.td. - OpenMP enumeration attributes, their case attributes and shared base classes for these are placed in OpenMPEnums.td. - Other OpenMP attributes are separated into OpenMPAttrDefs.td. - OpenMPOps.td only contains operation definitions. Even though this change should be useful on its own, it is intended as a precursor to a follow-up PR in which operation arguments and attributes are split into clause-specific classes which are then shared by all operations to which they apply to. Without this prior change, that approach would make the OpenMPOps.td file harder to navigate. --- .../mlir/Dialect/OpenMP/OpenMPAttrDefs.td | 79 ++++++ .../mlir/Dialect/OpenMP/OpenMPDialect.td | 22 ++ .../mlir/Dialect/OpenMP/OpenMPEnums.td | 211 +++++++++++++++ .../mlir/Dialect/OpenMP/OpenMPOpBase.td | 48 ++++ mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td | 245 +----------------- .../Dialect/OpenMP/OpenMPOpsInterfaces.td | 6 +- 6 files changed, 371 insertions(+), 240 deletions(-) create mode 100644 mlir/include/mlir/Dialect/OpenMP/OpenMPAttrDefs.td create mode 100644 mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.td create mode 100644 mlir/include/mlir/Dialect/OpenMP/OpenMPEnums.td create mode 100644 mlir/include/mlir/Dialect/OpenMP/OpenMPOpBase.td diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPAttrDefs.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPAttrDefs.td new file mode 100644 index 00000000000000..704d0b2220e8a3 --- /dev/null +++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPAttrDefs.td @@ -0,0 +1,79 @@ +//=== OpenMPAttrDefs.td - OpenMP Attributes definition -----*- tablegen -*-===// +// +// 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 OPENMP_ATTR_DEFS +#define OPENMP_ATTR_DEFS + +include "mlir/Dialect/OpenMP/OpenMPDialect.td" +include "mlir/Dialect/OpenMP/OpenMPEnums.td" +include "mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td" +include "mlir/Dialect/OpenMP/OpenMPTypeInterfaces.td" +include "mlir/IR/AttrTypeBase.td" +include "mlir/IR/CommonAttrConstraints.td" + +class OpenMP_Attr traits = [], + string baseCppClass = "::mlir::Attribute"> + : AttrDef { + let mnemonic = attrMnemonic; +} + +//===----------------------------------------------------------------------===// +// DeclareTargetAttr +//===----------------------------------------------------------------------===// + +def DeclareTargetAttr : OpenMP_Attr<"DeclareTarget", "declaretarget"> { + let parameters = (ins + OptionalParameter<"DeclareTargetDeviceTypeAttr">:$device_type, + OptionalParameter<"DeclareTargetCaptureClauseAttr">:$capture_clause + ); + + let assemblyFormat = "`<` struct(params) `>`"; +} + +//===----------------------------------------------------------------------===// +// FlagsAttr +//===----------------------------------------------------------------------===// + +// Runtime library flags attribute that holds information for lowering to LLVM. +def FlagsAttr : OpenMP_Attr<"Flags", "flags"> { + let parameters = (ins + DefaultValuedParameter<"uint32_t", "0">:$debug_kind, + DefaultValuedParameter<"bool", "false">:$assume_teams_oversubscription, + DefaultValuedParameter<"bool", "false">:$assume_threads_oversubscription, + DefaultValuedParameter<"bool", "false">:$assume_no_thread_state, + DefaultValuedParameter<"bool", "false">:$assume_no_nested_parallelism, + DefaultValuedParameter<"bool", "false">:$no_gpu_lib, + DefaultValuedParameter<"uint32_t", "50">:$openmp_device_version + ); + + let assemblyFormat = "`<` struct(params) `>`"; +} + +//===----------------------------------------------------------------------===// +// TaskDependArrayAttr +//===----------------------------------------------------------------------===// + +def TaskDependArrayAttr + : TypedArrayAttrBase { + let constBuilderCall = ?; +} + +//===----------------------------------------------------------------------===// +// VersionAttr +//===----------------------------------------------------------------------===// + +def VersionAttr : OpenMP_Attr<"Version", "version"> { + let parameters = (ins + "uint32_t":$version + ); + + let assemblyFormat = "`<` struct(params) `>`"; +} + +#endif // OPENMP_ATTR_DEFS diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.td new file mode 100644 index 00000000000000..459cc78435809c --- /dev/null +++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPDialect.td @@ -0,0 +1,22 @@ +//===- OpenMPDialect.td - OpenMP dialect definition --------*- tablegen -*-===// +// +// 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 OPENMP_DIALECT +#define OPENMP_DIALECT + +include "mlir/IR/DialectBase.td" + +def OpenMP_Dialect : Dialect { + let name = "omp"; + let cppNamespace = "::mlir::omp"; + let dependentDialects = ["::mlir::LLVM::LLVMDialect, ::mlir::func::FuncDialect"]; + let useDefaultAttributePrinterParser = 1; + let useDefaultTypePrinterParser = 1; +} + +#endif // OPENMP_DIALECT diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPEnums.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPEnums.td new file mode 100644 index 00000000000000..bf3d33819e9a9c --- /dev/null +++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPEnums.td @@ -0,0 +1,211 @@ +//===-- OpenMPEnums.td - OpenMP dialect enum file ----------*- tablegen -*-===// +// +// 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 OPENMP_ENUMS +#define OPENMP_ENUMS + +include "mlir/Dialect/OpenMP/OpenMPDialect.td" +include "mlir/IR/EnumAttr.td" + +include "mlir/Dialect/OpenMP/OmpCommon.td" + +//===----------------------------------------------------------------------===// +// Base classes for OpenMP enum attributes. +//===----------------------------------------------------------------------===// + +class OpenMP_I32EnumAttr cases> + : I32EnumAttr { + let genSpecializedAttr = 0; + let cppNamespace = "::mlir::omp"; +} + +class OpenMP_BitEnumAttr cases> + : I32BitEnumAttr { + let genSpecializedAttr = 0; + let cppNamespace = "::mlir::omp"; +} + +class OpenMP_EnumAttr + : EnumAttr; + + +//===----------------------------------------------------------------------===// +// capture_clause enum. +//===----------------------------------------------------------------------===// + +def CaptureClauseTo : I32EnumAttrCase<"to", 0>; +def CaptureClauseLink : I32EnumAttrCase<"link", 1>; +def CaptureClauseEnter : I32EnumAttrCase<"enter", 2>; + +def DeclareTargetCaptureClause : OpenMP_I32EnumAttr< + "DeclareTargetCaptureClause", + "capture clause", [ + CaptureClauseTo, + CaptureClauseLink, + CaptureClauseEnter + ]>; + +def DeclareTargetCaptureClauseAttr : OpenMP_EnumAttr { + let assemblyFormat = "`(` $value `)`"; +} + +//===----------------------------------------------------------------------===// +// clause_depend enum. +//===----------------------------------------------------------------------===// + +def ClauseDependSource : I32EnumAttrCase<"dependsource", 0>; +def ClauseDependSink : I32EnumAttrCase<"dependsink", 1>; + +def ClauseDepend : OpenMP_I32EnumAttr< + "ClauseDepend", + "depend clause", [ + ClauseDependSource, + ClauseDependSink + ]>; + +def ClauseDependAttr : OpenMP_EnumAttr { + let assemblyFormat = "`(` $value `)`"; +} + +//===----------------------------------------------------------------------===// +// clause_requires enum. +//===----------------------------------------------------------------------===// + +// atomic_default_mem_order clause values not defined here because they can be +// represented by the OMPC_MemoryOrder enumeration instead. +def ClauseRequiresNone : I32BitEnumAttrCaseNone<"none">; +def ClauseRequiresReverseOffload : I32BitEnumAttrCaseBit<"reverse_offload", 0>; +def ClauseRequiresUnifiedAddress : I32BitEnumAttrCaseBit<"unified_address", 1>; +def ClauseRequiresUnifiedSharedMemory + : I32BitEnumAttrCaseBit<"unified_shared_memory", 2>; +def ClauseRequiresDynamicAllocators + : I32BitEnumAttrCaseBit<"dynamic_allocators", 3>; + +def ClauseRequires : OpenMP_BitEnumAttr< + "ClauseRequires", + "requires clauses", [ + ClauseRequiresNone, + ClauseRequiresReverseOffload, + ClauseRequiresUnifiedAddress, + ClauseRequiresUnifiedSharedMemory, + ClauseRequiresDynamicAllocators + ]>; + +def ClauseRequiresAttr : OpenMP_EnumAttr; + +//===----------------------------------------------------------------------===// +// clause_task_depend enum. +//===----------------------------------------------------------------------===// + +def ClauseTaskDependIn : I32EnumAttrCase<"taskdependin", 0>; +def ClauseTaskDependOut : I32EnumAttrCase<"taskdependout", 1>; +def ClauseTaskDependInOut : I32EnumAttrCase<"taskdependinout", 2>; + +def ClauseTaskDepend : OpenMP_I32EnumAttr< + "ClauseTaskDepend", + "depend clause in a target or task construct", [ + ClauseTaskDependIn, + ClauseTaskDependOut, + ClauseTaskDependInOut + ]>; + +def ClauseTaskDependAttr : OpenMP_EnumAttr { + let assemblyFormat = "`(` $value `)`"; +} + +//===----------------------------------------------------------------------===// +// data_sharing_type enum. +//===----------------------------------------------------------------------===// + +def DataSharingTypePrivate : I32EnumAttrCase<"Private", 0, "private">; +def DataSharingTypeFirstPrivate + : I32EnumAttrCase<"FirstPrivate", 1, "firstprivate">; + +def DataSharingClauseType : OpenMP_I32EnumAttr< + "DataSharingClauseType", + "Type of a data-sharing clause", [ + DataSharingTypePrivate, + DataSharingTypeFirstPrivate + ]>; + +def DataSharingClauseTypeAttr : OpenMP_EnumAttr { + let assemblyFormat = "`{` `type` `=` $value `}`"; +} + +//===----------------------------------------------------------------------===// +// device_type enum. +//===----------------------------------------------------------------------===// + +def DeviceTypeAny : I32EnumAttrCase<"any", 0>; +def DeviceTypeHost : I32EnumAttrCase<"host", 1>; +def DeviceTypeNoHost : I32EnumAttrCase<"nohost", 2>; + +def DeclareTargetDeviceType : OpenMP_I32EnumAttr< + "DeclareTargetDeviceType", + "device_type clause", [ + DeviceTypeAny, + DeviceTypeHost, + DeviceTypeNoHost + ]>; + +def DeclareTargetDeviceTypeAttr : OpenMP_EnumAttr { + let assemblyFormat = "`(` $value `)`"; +} + +//===----------------------------------------------------------------------===// +// sched_mod enum. +//===----------------------------------------------------------------------===// + +def OpenMP_ScheduleModNone : I32EnumAttrCase<"none", 0>; +def OpenMP_ScheduleModMonotonic : I32EnumAttrCase<"monotonic", 1>; +def OpenMP_ScheduleModNonmonotonic : I32EnumAttrCase<"nonmonotonic", 2>; +// FIXME: remove this value for the modifier because this is handled using a +// separate attribute +def OpenMP_ScheduleModSimd : I32EnumAttrCase<"simd", 3>; + +def ScheduleModifier : OpenMP_I32EnumAttr< + "ScheduleModifier", + "OpenMP Schedule Modifier", [ + OpenMP_ScheduleModNone, + OpenMP_ScheduleModMonotonic, + OpenMP_ScheduleModNonmonotonic, + OpenMP_ScheduleModSimd + ]>; + +def ScheduleModifierAttr : OpenMP_EnumAttr; + +//===----------------------------------------------------------------------===// +// variable_capture_kind enum. +//===----------------------------------------------------------------------===// + +def CaptureThis : I32EnumAttrCase<"This", 0>; +def CaptureByRef : I32EnumAttrCase<"ByRef", 1>; +def CaptureByCopy : I32EnumAttrCase<"ByCopy", 2>; +def CaptureVLAType : I32EnumAttrCase<"VLAType", 3>; + +def VariableCaptureKind : OpenMP_I32EnumAttr< + "VariableCaptureKind", + "variable capture kind", [ + CaptureThis, + CaptureByRef, + CaptureByCopy, + CaptureVLAType + ]>; + +def VariableCaptureKindAttr : OpenMP_EnumAttr { + let assemblyFormat = "`(` $value `)`"; +} + +#endif // OPENMP_ENUMS diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPOpBase.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPOpBase.td new file mode 100644 index 00000000000000..b98d87aa74a6f6 --- /dev/null +++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPOpBase.td @@ -0,0 +1,48 @@ +//===- OpenMPOpBase.td - OpenMP dialect shared definitions -*- tablegen -*-===// +// +// 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 contains shared definitions for the OpenMP dialect. +// +//===----------------------------------------------------------------------===// + +#ifndef OPENMP_OP_BASE +#define OPENMP_OP_BASE + +include "mlir/Dialect/OpenMP/OpenMPAttrDefs.td" +include "mlir/Dialect/OpenMP/OpenMPDialect.td" +include "mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td" +include "mlir/Dialect/OpenMP/OpenMPTypeInterfaces.td" +include "mlir/IR/OpBase.td" + +//===----------------------------------------------------------------------===// +// OpenMP dialect type constraints. +//===----------------------------------------------------------------------===// + +class OpenMP_Type : + TypeDef { + let mnemonic = typeMnemonic; +} + +// Type which can be constraint accepting standard integers and indices. +def IntLikeType : AnyTypeOf<[AnyInteger, Index]>; + +def OpenMP_PointerLikeType : TypeAlias; + +def OpenMP_MapBoundsType : OpenMP_Type<"MapBounds", "map_bounds_ty"> { + let summary = "Type for representing omp map clause bounds information"; +} + +//===----------------------------------------------------------------------===// +// Base classes for OpenMP dialect operations. +//===----------------------------------------------------------------------===// + +class OpenMP_Op traits = []> : + Op; + +#endif // OPENMP_OP_BASE diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td index 29c287cad06e9b..122abbe7cc975a 100644 --- a/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td +++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPOps.td @@ -14,145 +14,20 @@ #ifndef OPENMP_OPS #define OPENMP_OPS +include "mlir/Dialect/LLVMIR/LLVMOpBase.td" +include "mlir/Dialect/OpenACCMPCommon/Interfaces/AtomicInterfaces.td" +include "mlir/Dialect/OpenMP/OpenMPAttrDefs.td" +include "mlir/Dialect/OpenMP/OpenMPOpBase.td" +include "mlir/Interfaces/ControlFlowInterfaces.td" +include "mlir/Interfaces/SideEffectInterfaces.td" include "mlir/IR/EnumAttr.td" include "mlir/IR/OpBase.td" -include "mlir/Interfaces/SideEffectInterfaces.td" -include "mlir/Interfaces/ControlFlowInterfaces.td" include "mlir/IR/SymbolInterfaces.td" -include "mlir/Dialect/LLVMIR/LLVMOpBase.td" -include "mlir/Dialect/OpenACCMPCommon/Interfaces/AtomicInterfaces.td" -include "mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td" -include "mlir/Dialect/OpenMP/OpenMPTypeInterfaces.td" - -def OpenMP_Dialect : Dialect { - let name = "omp"; - let cppNamespace = "::mlir::omp"; - let dependentDialects = ["::mlir::LLVM::LLVMDialect, ::mlir::func::FuncDialect"]; - let useDefaultAttributePrinterParser = 1; - let useDefaultTypePrinterParser = 1; -} - -// OmpCommon requires definition of OpenACC_Dialect. -include "mlir/Dialect/OpenMP/OmpCommon.td" - -//===----------------------------------------------------------------------===// -// OpenMP Attributes -//===----------------------------------------------------------------------===// - -class OpenMP_Attr traits = [], - string baseCppClass = "::mlir::Attribute"> - : AttrDef { - let mnemonic = attrMnemonic; -} - -def VersionAttr : OpenMP_Attr<"Version", "version"> { - let parameters = (ins - "uint32_t":$version - ); - - let assemblyFormat = "`<` struct(params) `>`"; -} - -//===----------------------------------------------------------------------===// -// Runtime library flag's attribute that holds information for lowering to LLVM -//===----------------------------------------------------------------------===// - -def FlagsAttr : OpenMP_Attr<"Flags", "flags"> { - let parameters = (ins - DefaultValuedParameter<"uint32_t", "0">:$debug_kind, - DefaultValuedParameter<"bool", "false">:$assume_teams_oversubscription, - DefaultValuedParameter<"bool", "false">:$assume_threads_oversubscription, - DefaultValuedParameter<"bool", "false">:$assume_no_thread_state, - DefaultValuedParameter<"bool", "false">:$assume_no_nested_parallelism, - DefaultValuedParameter<"bool", "false">:$no_gpu_lib, - DefaultValuedParameter<"uint32_t", "50">:$openmp_device_version - ); - - let assemblyFormat = "`<` struct(params) `>`"; -} - - -class OpenMP_Op traits = []> : - Op; - -// Type which can be constraint accepting standard integers and indices. -def IntLikeType : AnyTypeOf<[AnyInteger, Index]>; - -def OpenMP_PointerLikeType : TypeAlias; - -class OpenMP_Type : TypeDef { - let mnemonic = typeMnemonic; -} - -//===----------------------------------------------------------------------===// -// 2.12.7 Declare Target Directive -//===----------------------------------------------------------------------===// - -def DeviceTypeAny : I32EnumAttrCase<"any", 0>; -def DeviceTypeHost : I32EnumAttrCase<"host", 1>; -def DeviceTypeNoHost : I32EnumAttrCase<"nohost", 2>; - -def DeclareTargetDeviceType : I32EnumAttr< - "DeclareTargetDeviceType", - "device_type clause", - [DeviceTypeAny, DeviceTypeHost, DeviceTypeNoHost]> { - let genSpecializedAttr = 0; - let cppNamespace = "::mlir::omp"; -} - -def DeclareTargetDeviceTypeAttr : EnumAttr { - let assemblyFormat = "`(` $value `)`"; -} - -def CaptureClauseTo : I32EnumAttrCase<"to", 0>; -def CaptureClauseLink : I32EnumAttrCase<"link", 1>; -def CaptureClauseEnter : I32EnumAttrCase<"enter", 2>; - -def DeclareTargetCaptureClause : I32EnumAttr< - "DeclareTargetCaptureClause", - "capture clause", - [CaptureClauseTo, CaptureClauseLink, CaptureClauseEnter]> { - let genSpecializedAttr = 0; - let cppNamespace = "::mlir::omp"; -} - -def DeclareTargetCaptureClauseAttr : EnumAttr { - let assemblyFormat = "`(` $value `)`"; -} - -def DeclareTargetAttr : OpenMP_Attr<"DeclareTarget", "declaretarget"> { - let parameters = (ins - OptionalParameter<"DeclareTargetDeviceTypeAttr">:$device_type, - OptionalParameter<"DeclareTargetCaptureClauseAttr">:$capture_clause - ); - - let assemblyFormat = "`<` struct(params) `>`"; -} //===----------------------------------------------------------------------===// // 2.19.4 Data-Sharing Attribute Clauses //===----------------------------------------------------------------------===// -def DataSharingTypePrivate : I32EnumAttrCase<"Private", 0, "private">; -def DataSharingTypeFirstPrivate : I32EnumAttrCase<"FirstPrivate", 1, "firstprivate">; - -def DataSharingClauseType : I32EnumAttr< - "DataSharingClauseType", - "Type of a data-sharing clause", - [DataSharingTypePrivate, DataSharingTypeFirstPrivate]> { - let genSpecializedAttr = 0; - let cppNamespace = "::mlir::omp"; -} - -def DataSharingClauseTypeAttr : EnumAttr< - OpenMP_Dialect, DataSharingClauseType, "data_sharing_type"> { - let assemblyFormat = "`{` `type` `=` $value `}`"; -} - def PrivateClauseOp : OpenMP_Op<"private", [IsolatedFromAbove]> { let summary = "Provides declaration of [first]private logic."; let description = [{ @@ -403,23 +278,6 @@ def TeamsOp : OpenMP_Op<"teams", [ let hasVerifier = 1; } -def OMP_ScheduleModNone : I32EnumAttrCase<"none", 0>; -def OMP_ScheduleModMonotonic : I32EnumAttrCase<"monotonic", 1>; -def OMP_ScheduleModNonmonotonic : I32EnumAttrCase<"nonmonotonic", 2>; -// FIXME: remove this value for the modifier because this is handled using a -// separate attribute -def OMP_ScheduleModSIMD : I32EnumAttrCase<"simd", 3>; - -def ScheduleModifier - : I32EnumAttr<"ScheduleModifier", "OpenMP Schedule Modifier", - [OMP_ScheduleModNone, OMP_ScheduleModMonotonic, - OMP_ScheduleModNonmonotonic, OMP_ScheduleModSIMD]> { - let genSpecializedAttr = 0; - let cppNamespace = "::mlir::omp"; -} -def ScheduleModifierAttr : EnumAttr; - //===----------------------------------------------------------------------===// // 2.8.1 Sections Construct //===----------------------------------------------------------------------===// @@ -904,26 +762,6 @@ def DistributeOp : OpenMP_Op<"distribute", [AttrSizedOperandSegments, // 2.10.1 task Construct //===----------------------------------------------------------------------===// -def ClauseTaskDependIn : I32EnumAttrCase<"taskdependin", 0>; -def ClauseTaskDependOut : I32EnumAttrCase<"taskdependout", 1>; -def ClauseTaskDependInOut : I32EnumAttrCase<"taskdependinout", 2>; - -def ClauseTaskDepend : I32EnumAttr< - "ClauseTaskDepend", - "depend clause in a target or task construct", - [ClauseTaskDependIn, ClauseTaskDependOut, ClauseTaskDependInOut]> { - let genSpecializedAttr = 0; - let cppNamespace = "::mlir::omp"; -} -def ClauseTaskDependAttr : - EnumAttr { - let assemblyFormat = "`(` $value `)`"; -} -def TaskDependArrayAttr : - TypedArrayAttrBase { - let constBuilderCall = ?; - } - def TaskOp : OpenMP_Op<"task", [AttrSizedOperandSegments, OutlineableOpenMPOpInterface, AutomaticAllocationScope, ReductionClauseInterface]> { @@ -1283,28 +1121,6 @@ def FlushOp : OpenMP_Op<"flush"> { // Map related constructs //===----------------------------------------------------------------------===// -def CaptureThis : I32EnumAttrCase<"This", 0>; -def CaptureByRef : I32EnumAttrCase<"ByRef", 1>; -def CaptureByCopy : I32EnumAttrCase<"ByCopy", 2>; -def CaptureVLAType : I32EnumAttrCase<"VLAType", 3>; - -def VariableCaptureKind : I32EnumAttr< - "VariableCaptureKind", - "variable capture kind", - [CaptureThis, CaptureByRef, CaptureByCopy, CaptureVLAType]> { - let genSpecializedAttr = 0; - let cppNamespace = "::mlir::omp"; -} - -def VariableCaptureKindAttr : EnumAttr { - let assemblyFormat = "`(` $value `)`"; -} - -def MapBoundsType : OpenMP_Type<"MapBounds", "map_bounds_ty"> { - let summary = "Type for representing omp map clause bounds information"; -} - def MapBoundsOp : OpenMP_Op<"map.bounds", [AttrSizedOperandSegments, NoMemoryEffect]> { let summary = "Represents normalized bounds information for map clauses."; @@ -1386,7 +1202,7 @@ def MapBoundsOp : OpenMP_Op<"map.bounds", Optional:$stride, DefaultValuedAttr:$stride_in_bytes, Optional:$start_idx); - let results = (outs MapBoundsType:$result); + let results = (outs OpenMP_MapBoundsType:$result); let assemblyFormat = [{ oilist( @@ -1419,7 +1235,7 @@ def MapInfoOp : OpenMP_Op<"map.info", [AttrSizedOperandSegments]> { Optional:$var_ptr_ptr, Variadic:$members, OptionalAttr:$members_index, - Variadic:$bounds, /* rank-0 to rank-{n-1} */ + Variadic:$bounds, /* rank-0 to rank-{n-1} */ OptionalAttr:$map_type, OptionalAttr:$map_capture_type, OptionalAttr:$name, @@ -1894,20 +1710,6 @@ def BarrierOp : OpenMP_Op<"barrier"> { // [5.1] 2.19.9 ordered Construct //===----------------------------------------------------------------------===// -def ClauseDependSource : I32EnumAttrCase<"dependsource", 0>; -def ClauseDependSink : I32EnumAttrCase<"dependsink", 1>; - -def ClauseDepend : I32EnumAttr< - "ClauseDepend", - "depend clause", - [ClauseDependSource, ClauseDependSink]> { - let genSpecializedAttr = 0; - let cppNamespace = "::mlir::omp"; -} -def ClauseDependAttr : EnumAttr { - let assemblyFormat = "`(` $value `)`"; -} - def OrderedOp : OpenMP_Op<"ordered"> { let summary = "ordered construct without region"; let description = [{ @@ -2377,35 +2179,4 @@ def ReductionOp : OpenMP_Op<"reduction"> { let hasVerifier = 1; } -//===----------------------------------------------------------------------===// -// 8.2 requires directive -//===----------------------------------------------------------------------===// - -// atomic_default_mem_order clause values not defined here because they can be -// represented by the OMPC_MemoryOrder enumeration instead. -def ClauseRequiresNone : I32BitEnumAttrCaseNone<"none">; -def ClauseRequiresReverseOffload : I32BitEnumAttrCaseBit<"reverse_offload", 0>; -def ClauseRequiresUnifiedAddress : I32BitEnumAttrCaseBit<"unified_address", 1>; -def ClauseRequiresUnifiedSharedMemory - : I32BitEnumAttrCaseBit<"unified_shared_memory", 2>; -def ClauseRequiresDynamicAllocators - : I32BitEnumAttrCaseBit<"dynamic_allocators", 3>; - -def ClauseRequires : I32BitEnumAttr< - "ClauseRequires", - "requires clauses", - [ - ClauseRequiresNone, - ClauseRequiresReverseOffload, - ClauseRequiresUnifiedAddress, - ClauseRequiresUnifiedSharedMemory, - ClauseRequiresDynamicAllocators - ]> { - let genSpecializedAttr = 0; - let cppNamespace = "::mlir::omp"; -} -def ClauseRequiresAttr : - EnumAttr { -} - #endif // OPENMP_OPS diff --git a/mlir/include/mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td b/mlir/include/mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td index d9569d9d294d84..31a306072d0ec3 100644 --- a/mlir/include/mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td +++ b/mlir/include/mlir/Dialect/OpenMP/OpenMPOpsInterfaces.td @@ -10,8 +10,8 @@ // //===----------------------------------------------------------------------===// -#ifndef OpenMP_OPS_INTERFACES -#define OpenMP_OPS_INTERFACES +#ifndef OPENMP_OPS_INTERFACES +#define OPENMP_OPS_INTERFACES include "mlir/IR/OpBase.td" @@ -349,4 +349,4 @@ def OffloadModuleInterface : OpInterface<"OffloadModuleInterface"> { ]; } -#endif // OpenMP_OPS_INTERFACES +#endif // OPENMP_OPS_INTERFACES