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 
18 namespace 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.
25 namespace AMDGPUAS {
26 enum : 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