//===-- ROCDLAttrs.td - ROCDL IR dialect attributes -------*- 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 ROCDLIR_ATTRS #define ROCDLIR_ATTRS include "mlir/Dialect/LLVMIR/ROCDLDialect.td" include "mlir/Dialect/LLVMIR/ROCDLEnums.td" include "mlir/Dialect/LLVMIR/LLVMInterfaces.td" include "mlir/IR/EnumAttr.td" //===----------------------------------------------------------------------===// // ROCDL attribute definitions //===----------------------------------------------------------------------===// class ROCDL_Attr traits = []> : AttrDef { let mnemonic = attrMnemonic; } class ROCDL_IntrinsicIntegerEnumAttr : EnumAttr; def ROCDL_BufferOOBModeAttr : ROCDL_IntrinsicIntegerEnumAttr { let summary = "ROCDL buffer out-of-bounds mode"; let description = [{ Specifies the AMDGPU buffer out-of-bounds mode encoded in `amdgpu.buffer.oob.mode` or `amdgpu.tbuffer.oob.mode` LLVM module flags. }]; let assemblyFormat = "`<` $value `>`"; } class ROCDL_BufferOOBModeModuleFlagAttrBase : ROCDL_Attr]> { let summary = "ROCDL buffer/tbuffer out-of-bounds mode LLVM module flag"; let description = [{ Specifies an AMDGPU buffer or tbuffer out-of-bounds mode LLVM module flag. The attribute supplies the required `max` merge behavior and AMDGPU module flag key. Prefer these typed attributes over hand-written generic `#llvm.mlir.module_flag` triples for AMDGPU OOB mode keys when MLIR-side behavior and enum validation are required. }]; let parameters = (ins EnumParameter:$value); let assemblyFormat = "`<` $value `>`"; } def ROCDL_BufferOOBModeModuleFlagAttr : ROCDL_BufferOOBModeModuleFlagAttrBase<"BufferOOBModeModuleFlag", "buffer_oob_mode_flag">; def ROCDL_TBufferOOBModeModuleFlagAttr : ROCDL_BufferOOBModeModuleFlagAttrBase<"TBufferOOBModeModuleFlag", "tbuffer_oob_mode_flag">; def ROCDL_MFMAPermBAttr : ROCDL_IntrinsicIntegerEnumAttr; def ROCDL_MFMANegModifierAttr : ROCDL_IntrinsicIntegerEnumAttr; def ROCDL_MatrixFormatAttr : ROCDL_IntrinsicIntegerEnumAttr; def ROCDL_WMMAMatrixScaleAttr : ROCDL_IntrinsicIntegerEnumAttr; def ROCDL_WMMAMatrixScaleFormatAttr : ROCDL_IntrinsicIntegerEnumAttr; def ROCDL_WMMACModifierAttr : ROCDL_IntrinsicIntegerEnumAttr; def ROCDL_SchedGroupMaskAttr : ROCDL_IntrinsicIntegerEnumAttr; def ROCDL_PreGfx12CachePolicyAttr : ROCDL_IntrinsicIntegerEnumAttr; def ROCDL_Gfx942CachePolicyAttr : ROCDL_IntrinsicIntegerEnumAttr; def ROCDL_Gfx12CachePolicyAttr : ROCDL_IntrinsicIntegerEnumAttr; def ROCDL_Gfx12AtomicCachePolicyAttr : ROCDL_IntrinsicIntegerEnumAttr; class ROCDL_CachePolicyAttrOf policyAttrs, string summary> : AnyAttrOf { let storageType = "::mlir::Attribute"; let returnType = "::mlir::Attribute"; let convertFromStorage = "$_self"; let constBuilderCall = "$0"; } class ROCDL_DefaultCachePolicyAttr : DefaultValuedAttr; def ROCDL_PreGfx12CachePolicyCompatAttr : ROCDL_CachePolicyAttrOf<[ ROCDL_PreGfx12CachePolicyAttr, ROCDL_Gfx942CachePolicyAttr], "pre-gfx12 or gfx942 AMDGPU cache policy attribute">; def ROCDL_Gfx12NonAtomicCachePolicyCompatAttr : ROCDL_CachePolicyAttrOf<[ ROCDL_Gfx12CachePolicyAttr], "gfx12 non-atomic AMDGPU cache policy attribute">; def ROCDL_NonAtomicBufferCachePolicyCompatAttr : ROCDL_CachePolicyAttrOf<[ ROCDL_PreGfx12CachePolicyAttr, ROCDL_Gfx942CachePolicyAttr, ROCDL_Gfx12CachePolicyAttr], "non-atomic AMDGPU buffer cache policy attribute">; def ROCDL_AtomicBufferCachePolicyCompatAttr : ROCDL_CachePolicyAttrOf<[ ROCDL_PreGfx12CachePolicyAttr, ROCDL_Gfx942CachePolicyAttr, ROCDL_Gfx12AtomicCachePolicyAttr], "atomic AMDGPU buffer cache policy attribute">; #endif // ROCDLIR_ATTRS