Line data Source code
1 : //===--- SIProgramInfo.h ----------------------------------------*- C++ -*-===//
2 : //
3 : // The LLVM Compiler Infrastructure
4 : //
5 : // This file is distributed under the University of Illinois Open Source
6 : // License. See LICENSE.TXT for details.
7 : //
8 : //===----------------------------------------------------------------------===//
9 : //
10 : /// \file
11 : /// Defines struct to track resource usage for kernels and entry functions.
12 : ///
13 : //
14 : //===----------------------------------------------------------------------===//
15 :
16 : #ifndef LLVM_LIB_TARGET_AMDGPU_SIPROGRAMINFO_H
17 : #define LLVM_LIB_TARGET_AMDGPU_SIPROGRAMINFO_H
18 :
19 : namespace llvm {
20 :
21 : /// Track resource usage for kernels / entry functions.
22 : struct SIProgramInfo {
23 : // Fields set in PGM_RSRC1 pm4 packet.
24 : uint32_t VGPRBlocks = 0;
25 : uint32_t SGPRBlocks = 0;
26 : uint32_t Priority = 0;
27 : uint32_t FloatMode = 0;
28 : uint32_t Priv = 0;
29 : uint32_t DX10Clamp = 0;
30 : uint32_t DebugMode = 0;
31 : uint32_t IEEEMode = 0;
32 : uint64_t ScratchSize = 0;
33 :
34 : uint64_t ComputePGMRSrc1 = 0;
35 :
36 : // Fields set in PGM_RSRC2 pm4 packet.
37 : uint32_t LDSBlocks = 0;
38 : uint32_t ScratchBlocks = 0;
39 :
40 : uint64_t ComputePGMRSrc2 = 0;
41 :
42 : uint32_t NumVGPR = 0;
43 : uint32_t NumSGPR = 0;
44 : uint32_t LDSSize = 0;
45 : bool FlatUsed = false;
46 :
47 : // Number of SGPRs that meets number of waves per execution unit request.
48 : uint32_t NumSGPRsForWavesPerEU = 0;
49 :
50 : // Number of VGPRs that meets number of waves per execution unit request.
51 : uint32_t NumVGPRsForWavesPerEU = 0;
52 :
53 : // Fixed SGPR number used to hold wave scratch offset for entire kernel
54 : // execution, or std::numeric_limits<uint16_t>::max() if the register is not
55 : // used or not known.
56 : uint16_t DebuggerWavefrontPrivateSegmentOffsetSGPR =
57 : std::numeric_limits<uint16_t>::max();
58 :
59 : // Fixed SGPR number of the first 4 SGPRs used to hold scratch V# for entire
60 : // kernel execution, or std::numeric_limits<uint16_t>::max() if the register
61 : // is not used or not known.
62 : uint16_t DebuggerPrivateSegmentBufferSGPR =
63 : std::numeric_limits<uint16_t>::max();
64 :
65 : // Whether there is recursion, dynamic allocas, indirect calls or some other
66 : // reason there may be statically unknown stack usage.
67 : bool DynamicCallStack = false;
68 :
69 : // Bonus information for debugging.
70 : bool VCCUsed = false;
71 :
72 1950 : SIProgramInfo() = default;
73 : };
74 :
75 : } // namespace llvm
76 :
77 : #endif // LLVM_LIB_TARGET_AMDGPU_SIPROGRAMINFO_H
|