Skip to content

Commit f9c4b9c

Browse files
committed
refactoring
1 parent 17b425d commit f9c4b9c

File tree

4 files changed

+9
-59
lines changed

4 files changed

+9
-59
lines changed

llvm/include/llvm/Frontend/HLSL/HLSLBinding.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,13 @@ class BindingInfo {
5959
}
6060
// Size == -1 means unbounded array
6161
LLVM_ABI std::optional<uint32_t> findAvailableBinding(int32_t Size);
62-
LLVM_ABI bool isBound(const BindingRange &Range) const;
6362
};
6463

6564
struct BindingSpaces {
6665
dxil::ResourceClass RC;
6766
llvm::SmallVector<RegisterSpace> Spaces;
6867
BindingSpaces(dxil::ResourceClass RC) : RC(RC) {}
6968
LLVM_ABI RegisterSpace &getOrInsertSpace(uint32_t Space);
70-
LLVM_ABI std::optional<const BindingInfo::RegisterSpace *>
71-
contains(uint32_t Space) const;
7269
};
7370

7471
private:
@@ -100,9 +97,6 @@ class BindingInfo {
10097
LLVM_ABI std::optional<uint32_t>
10198
findAvailableBinding(dxil::ResourceClass RC, uint32_t Space, int32_t Size);
10299

103-
LLVM_ABI bool isBound(dxil::ResourceClass RC, uint32_t Space,
104-
const BindingRange &Range) const;
105-
106100
friend class BindingInfoBuilder;
107101
};
108102

@@ -152,8 +146,8 @@ class BoundRegs {
152146
It->UpperBound >= UpperBound;
153147
}
154148

155-
const Binding* getReg(dxil::ResourceClass RC, uint32_t Space, uint32_t LowerBound,
156-
uint32_t UpperBound) const {
149+
const Binding *getReg(dxil::ResourceClass RC, uint32_t Space,
150+
uint32_t LowerBound) const {
157151
const Binding *It =
158152
llvm::upper_bound(Bindings, Binding{RC, Space, LowerBound, 0, nullptr});
159153
if (It == Bindings.begin())

llvm/lib/Frontend/HLSL/HLSLBinding.cpp

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88

99
#include "llvm/Frontend/HLSL/HLSLBinding.h"
1010
#include "llvm/ADT/STLExtras.h"
11-
#include "llvm/Support/Error.h"
12-
#include <optional>
1311

1412
using namespace llvm;
1513
using namespace hlsl;
@@ -34,18 +32,6 @@ BindingInfo::BindingSpaces::getOrInsertSpace(uint32_t Space) {
3432
return Spaces.emplace_back(Space);
3533
}
3634

37-
std::optional<const BindingInfo::RegisterSpace *>
38-
BindingInfo::BindingSpaces::contains(uint32_t Space) const {
39-
const BindingInfo::RegisterSpace *It = Spaces.begin();
40-
for (auto *End = Spaces.end(); It != End; ++It) {
41-
if (It->Space == Space)
42-
break;
43-
}
44-
if (It == Spaces.end())
45-
return std::nullopt;
46-
return It;
47-
}
48-
4935
std::optional<uint32_t>
5036
BindingInfo::RegisterSpace::findAvailableBinding(int32_t Size) {
5137
assert((Size == -1 || Size > 0) && "invalid size");
@@ -80,29 +66,6 @@ BindingInfo::RegisterSpace::findAvailableBinding(int32_t Size) {
8066
return std::nullopt;
8167
}
8268

83-
bool BindingInfo::RegisterSpace::isBound(const BindingRange &Range) const {
84-
const BindingRange *It = llvm::lower_bound(
85-
FreeRanges, Range.LowerBound,
86-
[](const BindingRange &R, uint32_t Val) { return R.UpperBound <= Val; });
87-
88-
if (It != FreeRanges.end()) {
89-
// Check if B is fully contained in the found range
90-
if (Range.LowerBound >= It->LowerBound &&
91-
Range.UpperBound <= It->UpperBound)
92-
return false;
93-
}
94-
return true;
95-
}
96-
97-
bool BindingInfo::isBound(dxil::ResourceClass RC, uint32_t Space,
98-
const BindingRange &Range) const {
99-
const BindingSpaces &BS = getBindingSpaces(RC);
100-
std::optional<const BindingInfo::RegisterSpace *> RS = BS.contains(Space);
101-
if (!RS)
102-
return false;
103-
return RS.value()->isBound(Range);
104-
}
105-
10669
BindingInfo BindingInfoBuilder::calculateBindingInfo(
10770
llvm::function_ref<void(const BindingInfoBuilder &Builder,
10871
const Binding &Overlapping)>

llvm/lib/Target/DirectX/DXILPostOptimizationValidation.cpp

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,10 @@ static void reportInvalidHandleTyError(Module &M, ResourceClass RC,
122122
ResourceInfo::ResourceBinding Binding) {
123123
SmallString<128> Message;
124124
raw_svector_ostream OS(Message);
125-
OS << getResourceClassName(RC) << " at register " << Binding.LowerBound << " and space "
126-
<< Binding.Space << " is bound to a texture or typed buffer. " <<
127-
"SRV or UAV root descriptors can only be Raw or Structured buffers.";
125+
StringRef RCName = getResourceClassName(RC);
126+
OS << RCName << " at register " << Binding.LowerBound << " and space "
127+
<< Binding.Space << " is bound to a texture or typed buffer. " << RCName
128+
<< " root descriptors can only be Raw or Structured buffers.";
128129
M.getContext().diagnose(DiagnosticInfoGeneric(Message));
129130
}
130131

@@ -242,30 +243,25 @@ static void validateRootSignature(Module &M,
242243
Builder.findOverlapping(ReportedBinding);
243244
reportOverlappingRegisters(M, ReportedBinding, Overlaping);
244245
});
245-
246246
const hlsl::BoundRegs &BoundRegs = Builder.takeBoundRegs();
247-
248247
for (const ResourceInfo &RI : DRM) {
249248
const ResourceInfo::ResourceBinding &Binding = RI.getBinding();
250249
const dxil::ResourceTypeInfo &RTI = DRTM[RI.getHandleTy()];
251250
dxil::ResourceClass RC = RTI.getResourceClass();
252251
dxil::ResourceKind RK = RTI.getResourceKind();
253252
if (!BoundRegs.isBound(RC, Binding.Space, Binding.LowerBound,
254-
Binding.LowerBound + Binding.Size - 1))
253+
Binding.LowerBound + Binding.Size - 1)) {
255254
reportRegNotBound(M, RC, Binding);
256-
else {
257-
255+
} else {
258256
const llvm::hlsl::Binding *Reg =
259-
BoundRegs.getReg(RC, Binding.Space, Binding.LowerBound,
260-
Binding.LowerBound + Binding.Size - 1);
257+
BoundRegs.getReg(RC, Binding.Space, Binding.LowerBound);
261258
const mcdxbc::RootParameterInfo *ParamInfo = static_cast<const mcdxbc::RootParameterInfo *>(Reg->Cookie);
262259

263260
if((RC == ResourceClass::SRV || RC == ResourceClass::UAV) &&
264261
ParamInfo->Type != dxbc::RootParameterType::DescriptorTable &&
265262
!(RK == ResourceKind::RawBuffer || RK == ResourceKind::StructuredBuffer))
266263
reportInvalidHandleTyError(M, RC, Binding);
267264
}
268-
269265
}
270266
}
271267

@@ -332,7 +328,6 @@ class DXILPostOptimizationValidationLegacy : public ModulePass {
332328

333329
static char ID; // Pass identification.
334330
void getAnalysisUsage(llvm::AnalysisUsage &AU) const override {
335-
336331
AU.addRequired<DXILResourceWrapperPass>();
337332
AU.addRequired<DXILResourceBindingWrapperPass>();
338333
AU.addRequired<DXILMetadataAnalysisWrapperPass>();
@@ -343,7 +338,6 @@ class DXILPostOptimizationValidationLegacy : public ModulePass {
343338
AU.addPreserved<DXILMetadataAnalysisWrapperPass>();
344339
AU.addPreserved<ShaderFlagsAnalysisWrapper>();
345340
AU.addPreserved<RootSignatureAnalysisWrapper>();
346-
AU.addPreserved<DXILResourceTypeWrapperPass>();
347341
}
348342
};
349343
char DXILPostOptimizationValidationLegacy::ID = 0;

llvm/test/CodeGen/DirectX/rootsignature-validation-fail-sampler.ll

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
; RUN: not opt -S -passes='dxil-post-optimization-validation' -mtriple=dxil-pc-shadermodel6.6-compute %s 2>&1 | FileCheck %s
22
; CHECK: error: resource Sampler (space=0, registers=[42, 42]) overlaps with resource Sampler (space=0, registers=[42, 42])
33

4-
54
define void @CSMain() "hlsl.shader"="compute" {
65
entry:
76
ret void

0 commit comments

Comments
 (0)