[llvm] [DirectX] Implement DXILResourceImplicitBinding pass (PR #138043)
Ashley Coleman via llvm-commits
llvm-commits at lists.llvm.org
Fri May 9 16:09:48 PDT 2025
================
@@ -998,6 +998,61 @@ void DXILResourceBindingInfo::populate(Module &M, DXILResourceTypeMap &DRTM) {
}
}
+// returns false if binding could not be found in given space
+std::optional<uint32_t>
+DXILResourceBindingInfo::findAvailableBinding(dxil::ResourceClass RC,
+ uint32_t Space, int32_t Size) {
+ BindingSpaces &BS = getBindingSpaces(RC);
+ RegisterSpace &RS = BS.getOrInsertSpace(Space);
+ return RS.findAvailableBinding(Size);
+}
+
+DXILResourceBindingInfo::RegisterSpace &
+DXILResourceBindingInfo::BindingSpaces::getOrInsertSpace(uint32_t Space) {
+ for (auto *I = Spaces.begin(); I != Spaces.end(); ++I) {
+ if (I->Space == Space)
+ return *I;
+ if (I->Space < Space)
+ continue;
+ return *Spaces.insert(I, Space);
+ }
+ return Spaces.emplace_back(Space);
+}
+
+std::optional<uint32_t>
+DXILResourceBindingInfo::RegisterSpace::findAvailableBinding(int32_t Size) {
+ assert((Size == -1 || Size > 0) && "invalid size");
+
+ std::optional<uint32_t> RegSlot;
+ if (FreeRanges.empty())
+ return RegSlot;
----------------
V-FEXrt wrote:
This is an error case right? Please just return nullopt directly if so
```suggestion
return std::nullopt;
```
https://github.com/llvm/llvm-project/pull/138043
More information about the llvm-commits
mailing list