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