mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-26 06:22:56 +02:00
e97f88d72f
OpenCL kernels have hidden kernel arguments for global offset and printf buffer. For consistency, these hidden argument should be included in the runtime metadata. Also updated kernel argument kind metadata. Differential Revision: https://reviews.llvm.org/D23424 llvm-svn: 280829
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
|