|
9 | 9 | #ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUARGUMENTUSAGEINFO_H |
10 | 10 | #define LLVM_LIB_TARGET_AMDGPU_AMDGPUARGUMENTUSAGEINFO_H |
11 | 11 |
|
| 12 | +#include "llvm/ADT/DenseMap.h" |
12 | 13 | #include "llvm/CodeGen/Register.h" |
13 | 14 | #include "llvm/Pass.h" |
14 | 15 |
|
@@ -37,22 +38,19 @@ struct ArgDescriptor { |
37 | 38 | bool IsSet : 1; |
38 | 39 |
|
39 | 40 | public: |
40 | | - constexpr ArgDescriptor(unsigned Val = 0, unsigned Mask = ~0u, |
41 | | - bool IsStack = false, bool IsSet = false) |
42 | | - : Reg(Val), Mask(Mask), IsStack(IsStack), IsSet(IsSet) {} |
| 41 | + ArgDescriptor(unsigned Val = 0, unsigned Mask = ~0u, bool IsStack = false, |
| 42 | + bool IsSet = false) |
| 43 | + : Reg(Val), Mask(Mask), IsStack(IsStack), IsSet(IsSet) {} |
43 | 44 |
|
44 | | - static constexpr ArgDescriptor createRegister(Register Reg, |
45 | | - unsigned Mask = ~0u) { |
| 45 | + static ArgDescriptor createRegister(Register Reg, unsigned Mask = ~0u) { |
46 | 46 | return ArgDescriptor(Reg, Mask, false, true); |
47 | 47 | } |
48 | 48 |
|
49 | | - static constexpr ArgDescriptor createStack(unsigned Offset, |
50 | | - unsigned Mask = ~0u) { |
| 49 | + static ArgDescriptor createStack(unsigned Offset, unsigned Mask = ~0u) { |
51 | 50 | return ArgDescriptor(Offset, Mask, true, true); |
52 | 51 | } |
53 | 52 |
|
54 | | - static constexpr ArgDescriptor createArg(const ArgDescriptor &Arg, |
55 | | - unsigned Mask) { |
| 53 | + static ArgDescriptor createArg(const ArgDescriptor &Arg, unsigned Mask) { |
56 | 54 | return ArgDescriptor(Arg.Reg, Mask, Arg.IsStack, Arg.IsSet); |
57 | 55 | } |
58 | 56 |
|
@@ -94,6 +92,11 @@ inline raw_ostream &operator<<(raw_ostream &OS, const ArgDescriptor &Arg) { |
94 | 92 | return OS; |
95 | 93 | } |
96 | 94 |
|
| 95 | +struct KernArgPreloadDescriptor : public ArgDescriptor { |
| 96 | + KernArgPreloadDescriptor() {} |
| 97 | + SmallVector<MCRegister> Regs; |
| 98 | +}; |
| 99 | + |
97 | 100 | struct AMDGPUFunctionArgInfo { |
98 | 101 | enum PreloadedValue { |
99 | 102 | // SGPRS: |
@@ -151,10 +154,13 @@ struct AMDGPUFunctionArgInfo { |
151 | 154 | ArgDescriptor WorkItemIDY; |
152 | 155 | ArgDescriptor WorkItemIDZ; |
153 | 156 |
|
| 157 | + // Map the index of preloaded kernel arguments to its descriptor. |
| 158 | + SmallDenseMap<int, KernArgPreloadDescriptor> PreloadKernArgs{}; |
| 159 | + |
154 | 160 | std::tuple<const ArgDescriptor *, const TargetRegisterClass *, LLT> |
155 | 161 | getPreloadedValue(PreloadedValue Value) const; |
156 | 162 |
|
157 | | - static constexpr AMDGPUFunctionArgInfo fixedABILayout(); |
| 163 | + static AMDGPUFunctionArgInfo fixedABILayout(); |
158 | 164 | }; |
159 | 165 |
|
160 | 166 | class AMDGPUArgumentUsageInfo : public ImmutablePass { |
|
0 commit comments