LLVM: include/llvm/Frontend/HLSL/HLSLBinding.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef LLVM_FRONTEND_HLSL_HLSLBINDING_H
14#define LLVM_FRONTEND_HLSL_HLSLBINDING_H
15
22
23namespace llvm {
24namespace hlsl {
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
47public:
53
63
70
71private:
76
77public:
79 switch (RC) {
81 return SRVSpaces;
83 return UAVSpaces;
85 return CBufferSpaces;
87 return SamplerSpaces;
88 }
89
91 }
95
96
97 LLVM_ABI std::optional<uint32_t>
99
101};
102
109
114
116
119 std::tie(RHS.RC, RHS.Space, RHS.LowerBound, RHS.UpperBound,
120 RHS.Cookie);
121 }
123
126 std::tie(RHS.RC, RHS.Space, RHS.LowerBound);
127 }
128};
129
132
133public:
135
138
139
142 if (It == Bindings.begin())
143 return nullptr;
144 --It;
145 if (It->RC == RC && It->Space == Space && It->LowerBound <= LowerBound &&
147 return It;
148 return nullptr;
149 }
150};
151
152
154private:
156
157public:
159 uint32_t UpperBound, const void *Cookie) {
160 Bindings.emplace_back(RC, Space, LowerBound, UpperBound, Cookie);
161 }
162
163
166 const Binding &Overlapping)>
167 ReportOverlap);
168
169
170
172 HasOverlap = false;
174 [&HasOverlap](auto, auto) { HasOverlap = true; });
175 }
176
178 assert(std::is_sorted(Bindings.begin(), Bindings.end()) &&
179 "takeBoundRegs should only be called after calculateBindingInfo");
180 return BoundRegs(std::move(Bindings));
181 }
182
183
184
186};
187
188}
189}
190
191#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file defines the SmallVector class.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
An efficient, type-erasing, non-owning reference to a callable.
Builder class for creating a /c BindingInfo.
Definition HLSLBinding.h:153
LLVM_ABI const Binding & findOverlapping(const Binding &ReportedBinding) const
For use in the ReportOverlap callback of calculateBindingInfo - finds a binding that the ReportedBind...
void trackBinding(dxil::ResourceClass RC, uint32_t Space, uint32_t LowerBound, uint32_t UpperBound, const void *Cookie)
Definition HLSLBinding.h:158
LLVM_ABI BindingInfo calculateBindingInfo(llvm::function_ref< void(const BindingInfoBuilder &Builder, const Binding &Overlapping)> ReportOverlap)
Calculate the binding info - ReportOverlap will be called once for each overlapping binding.
LLVM_ABI BoundRegs takeBoundRegs()
Definition HLSLBinding.h:177
BindingInfo calculateBindingInfo(bool &HasOverlap)
Calculate the binding info - HasOverlap will be set to indicate whether there are any overlapping bin...
Definition HLSLBinding.h:171
BindingInfo represents the ranges of bindings and free space for each dxil::ResourceClass.
Definition HLSLBinding.h:46
const BindingSpaces & getBindingSpaces(dxil::ResourceClass RC) const
Definition HLSLBinding.h:92
friend class BindingInfoBuilder
Definition HLSLBinding.h:100
LLVM_ABI std::optional< uint32_t > findAvailableBinding(dxil::ResourceClass RC, uint32_t Space, int32_t Size)
BindingSpaces & getBindingSpaces(dxil::ResourceClass RC)
Definition HLSLBinding.h:78
Definition HLSLBinding.h:130
const Binding * findBoundReg(dxil::ResourceClass RC, uint32_t Space, uint32_t LowerBound, uint32_t UpperBound) const
Definition HLSLBinding.h:136
BoundRegs(SmallVector< Binding > &&Bindings)
Definition HLSLBinding.h:134
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
This is an optimization pass for GlobalISel generic memory operations.
auto upper_bound(R &&Range, T &&Value)
Provide wrappers to std::upper_bound which take ranges instead of having to pass begin/end explicitly...
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Implement std::hash so that hash_code can be used in STL containers.
uint32_t UpperBound
Definition HLSLBinding.h:50
BindingRange(uint32_t LB, uint32_t UB)
Definition HLSLBinding.h:51
uint32_t LowerBound
Definition HLSLBinding.h:49
Definition HLSLBinding.h:64
LLVM_ABI RegisterSpace & getOrInsertSpace(uint32_t Space)
dxil::ResourceClass RC
Definition HLSLBinding.h:65
llvm::SmallVector< RegisterSpace > Spaces
Definition HLSLBinding.h:66
BindingSpaces(dxil::ResourceClass RC)
Definition HLSLBinding.h:67
Definition HLSLBinding.h:54
uint32_t Space
Definition HLSLBinding.h:55
SmallVector< BindingRange > FreeRanges
Definition HLSLBinding.h:56
LLVM_ABI std::optional< uint32_t > findAvailableBinding(int32_t Size)
RegisterSpace(uint32_t Space)
Definition HLSLBinding.h:57
Definition HLSLBinding.h:103
bool operator==(const Binding &RHS) const
Definition HLSLBinding.h:117
uint32_t LowerBound
Definition HLSLBinding.h:106
dxil::ResourceClass RC
Definition HLSLBinding.h:104
uint32_t Space
Definition HLSLBinding.h:105
uint32_t UpperBound
Definition HLSLBinding.h:107
bool operator<(const Binding &RHS) const
Definition HLSLBinding.h:124
bool isUnbounded() const
Definition HLSLBinding.h:115
Binding(dxil::ResourceClass RC, uint32_t Space, uint32_t LowerBound, uint32_t UpperBound, const void *Cookie)
Definition HLSLBinding.h:110
const void * Cookie
Definition HLSLBinding.h:108
bool operator!=(const Binding &RHS) const
Definition HLSLBinding.h:122