1//===---------------- AMDGPUAddrSpace.h -------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9/// \file
10/// AMDGPU address space definition
11///
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_SUPPORT_AMDGPUADDRSPACE_H
16#define LLVM_SUPPORT_AMDGPUADDRSPACE_H
17
18namespace llvm {
19/// OpenCL uses address spaces to differentiate between
20/// various memory regions on the hardware. On the CPU
21/// all of the address spaces point to the same memory,
22/// however on the GPU, each address space points to
23/// a separate piece of memory that is unique from other
24/// memory locations.
25namespace AMDGPUAS {
26enum : unsigned {
27 // The maximum value for flat, generic, local, private, constant and region.
28 MAX_AMDGPU_ADDRESS = 9,
29
30 FLAT_ADDRESS = 0, ///< Address space for flat memory.
31 GLOBAL_ADDRESS = 1, ///< Address space for global memory (RAT0, VTX0).
32 REGION_ADDRESS = 2, ///< Address space for region memory. (GDS)
33
34 CONSTANT_ADDRESS = 4, ///< Address space for constant memory (VTX2).
35 LOCAL_ADDRESS = 3, ///< Address space for local memory.
36 PRIVATE_ADDRESS = 5, ///< Address space for private memory.
37
38 CONSTANT_ADDRESS_32BIT = 6, ///< Address space for 32-bit constant memory.
39
40 BUFFER_FAT_POINTER = 7, ///< Address space for 160-bit buffer fat pointers.
41 ///< Not used in backend.
42
43 BUFFER_RESOURCE = 8, ///< Address space for 128-bit buffer resources.
44
45 BUFFER_STRIDED_POINTER = 9, ///< Address space for 192-bit fat buffer
46 ///< pointers with an additional index.
47
48 /// Internal address spaces. Can be freely renumbered.
49 STREAMOUT_REGISTER = 128, ///< Address space for GS NGG Streamout registers.
50 /// end Internal address spaces.
51
52 /// Address space for direct addressable parameter memory (CONST0).
53 PARAM_D_ADDRESS = 6,
54 /// Address space for indirect addressable parameter memory (VTX1).
55 PARAM_I_ADDRESS = 7,
56
57 // Do not re-order the CONSTANT_BUFFER_* enums. Several places depend on
58 // this order to be able to dynamically index a constant buffer, for
59 // example:
60 //
61 // ConstantBufferAS = CONSTANT_BUFFER_0 + CBIdx
62
63 CONSTANT_BUFFER_0 = 8,
64 CONSTANT_BUFFER_1 = 9,
65 CONSTANT_BUFFER_2 = 10,
66 CONSTANT_BUFFER_3 = 11,
67 CONSTANT_BUFFER_4 = 12,
68 CONSTANT_BUFFER_5 = 13,
69 CONSTANT_BUFFER_6 = 14,
70 CONSTANT_BUFFER_7 = 15,
71 CONSTANT_BUFFER_8 = 16,
72 CONSTANT_BUFFER_9 = 17,
73 CONSTANT_BUFFER_10 = 18,
74 CONSTANT_BUFFER_11 = 19,
75 CONSTANT_BUFFER_12 = 20,
76 CONSTANT_BUFFER_13 = 21,
77 CONSTANT_BUFFER_14 = 22,
78 CONSTANT_BUFFER_15 = 23,
79
80 // Some places use this if the address space can't be determined.
81 UNKNOWN_ADDRESS_SPACE = ~0u,
82};
83} // end namespace AMDGPUAS
84} // end namespace llvm
85
86#endif // LLVM_SUPPORT_AMDGPUADDRSPACE_H
87

source code of llvm/include/llvm/Support/AMDGPUAddrSpace.h