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