forked from OSchip/llvm-project
158 lines
5.9 KiB
C++
158 lines
5.9 KiB
C++
//===-- AMDGPURuntimeMetadata.h - AMDGPU Runtime Metadata -------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
/// \file
|
|
///
|
|
/// Enums and structure types used by runtime metadata.
|
|
///
|
|
/// Runtime requests certain information (metadata) about kernels to be able
|
|
/// to execute the kernels and answer the queries about the kernels.
|
|
/// The metadata is represented as a byte stream in an ELF section of a
|
|
/// binary (code object). The byte stream consists of key-value pairs.
|
|
/// Each key is an 8 bit unsigned integer. Each value can be an integer,
|
|
/// a string, or a stream of key-value pairs. There are 3 levels of key-value
|
|
/// pair streams. At the beginning of the ELF section is the top level
|
|
/// key-value pair stream. A kernel-level key-value pair stream starts after
|
|
/// encountering KeyKernelBegin and ends immediately before encountering
|
|
/// KeyKernelEnd. A kernel-argument-level key-value pair stream starts
|
|
/// after encountering KeyArgBegin and ends immediately before encountering
|
|
/// KeyArgEnd. A kernel-level key-value pair stream can only appear in a top
|
|
/// level key-value pair stream. A kernel-argument-level key-value pair stream
|
|
/// can only appear in a kernel-level key-value pair stream.
|
|
///
|
|
/// The format should be kept backward compatible. New enum values and bit
|
|
/// fields should be appended at the end. It is suggested to bump up the
|
|
/// revision number whenever the format changes and document the change
|
|
/// in the revision in this header.
|
|
///
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPURUNTIMEMETADATA_H
|
|
#define LLVM_LIB_TARGET_AMDGPU_AMDGPURUNTIMEMETADATA_H
|
|
|
|
#include <stdint.h>
|
|
|
|
namespace AMDGPU {
|
|
|
|
namespace RuntimeMD {
|
|
|
|
// Version and revision of runtime metadata
|
|
const unsigned char MDVersion = 1;
|
|
const unsigned char MDRevision = 0;
|
|
|
|
// ELF section name containing runtime metadata
|
|
const char SectionName[] = ".AMDGPU.runtime_metadata";
|
|
|
|
// Enumeration values of keys in runtime metadata.
|
|
enum Key {
|
|
KeyNull = 0, // Place holder. Ignored when encountered
|
|
KeyMDVersion = 1, // Runtime metadata version
|
|
KeyLanguage = 2, // Language
|
|
KeyLanguageVersion = 3, // Language version
|
|
KeyKernelBegin = 4, // Beginning of kernel-level stream
|
|
KeyKernelEnd = 5, // End of kernel-level stream
|
|
KeyKernelName = 6, // Kernel name
|
|
KeyArgBegin = 7, // Beginning of kernel-arg-level stream
|
|
KeyArgEnd = 8, // End of kernel-arg-level stream
|
|
KeyArgSize = 9, // Kernel arg size
|
|
KeyArgAlign = 10, // Kernel arg alignment
|
|
KeyArgTypeName = 11, // Kernel type name
|
|
KeyArgName = 12, // Kernel name
|
|
KeyArgKind = 13, // Kernel argument kind
|
|
KeyArgValueType = 14, // Kernel argument value type
|
|
KeyArgAddrQual = 15, // Kernel argument address qualifier
|
|
KeyArgAccQual = 16, // Kernel argument access qualifier
|
|
KeyArgIsConst = 17, // Kernel argument is const qualified
|
|
KeyArgIsRestrict = 18, // Kernel argument is restrict qualified
|
|
KeyArgIsVolatile = 19, // Kernel argument is volatile qualified
|
|
KeyArgIsPipe = 20, // Kernel argument is pipe qualified
|
|
KeyReqdWorkGroupSize = 21, // Required work group size
|
|
KeyWorkGroupSizeHint = 22, // Work group size hint
|
|
KeyVecTypeHint = 23, // Vector type hint
|
|
KeyKernelIndex = 24, // Kernel index for device enqueue
|
|
KeyMinWavesPerSIMD = 25, // Minimum number of waves per SIMD
|
|
KeyMaxWavesPerSIMD = 26, // Maximum number of waves per SIMD
|
|
KeyFlatWorkGroupSizeLimits = 27, // Flat work group size limits
|
|
KeyMaxWorkGroupSize = 28, // Maximum work group size
|
|
KeyNoPartialWorkGroups = 29, // No partial work groups
|
|
KeyPrintfInfo = 30, // Prinf function call information
|
|
KeyArgActualAcc = 31, // The actual kernel argument access qualifier
|
|
KeyArgPointeeAlign = 32, // Alignment of pointee type
|
|
};
|
|
|
|
enum Language : uint8_t {
|
|
OpenCL_C = 0,
|
|
HCC = 1,
|
|
OpenMP = 2,
|
|
OpenCL_CPP = 3,
|
|
};
|
|
|
|
enum LanguageVersion : uint16_t {
|
|
V100 = 100,
|
|
V110 = 110,
|
|
V120 = 120,
|
|
V200 = 200,
|
|
V210 = 210,
|
|
};
|
|
|
|
namespace KernelArg {
|
|
enum Kind : uint8_t {
|
|
ByValue = 0,
|
|
GlobalBuffer = 1,
|
|
DynamicSharedPointer = 2,
|
|
Sampler = 3,
|
|
Image = 4,
|
|
Pipe = 5,
|
|
Queue = 6,
|
|
HiddenGlobalOffsetX = 7,
|
|
HiddenGlobalOffsetY = 8,
|
|
HiddenGlobalOffsetZ = 9,
|
|
HiddenNone = 10,
|
|
HiddenPrintfBuffer = 11,
|
|
HiddenDefaultQueue = 12,
|
|
HiddenCompletionAction = 13,
|
|
};
|
|
|
|
enum ValueType : uint16_t {
|
|
Struct = 0,
|
|
I8 = 1,
|
|
U8 = 2,
|
|
I16 = 3,
|
|
U16 = 4,
|
|
F16 = 5,
|
|
I32 = 6,
|
|
U32 = 7,
|
|
F32 = 8,
|
|
I64 = 9,
|
|
U64 = 10,
|
|
F64 = 11,
|
|
};
|
|
|
|
enum AccessQualifer : uint8_t {
|
|
None = 0,
|
|
ReadOnly = 1,
|
|
WriteOnly = 2,
|
|
ReadWrite = 3,
|
|
};
|
|
|
|
enum AddressSpaceQualifer : uint8_t {
|
|
Private = 0,
|
|
Global = 1,
|
|
Constant = 2,
|
|
Local = 3,
|
|
Generic = 4,
|
|
Region = 5,
|
|
};
|
|
} // namespace KernelArg
|
|
} // namespace RuntimeMD
|
|
} // namespace AMDGPU
|
|
|
|
#endif // LLVM_LIB_TARGET_AMDGPU_AMDGPURUNTIMEMETADATA_H
|