Skip to content

Commit 453db9e

Browse files
committed
fixup: Clean up uses of UINT32_MAX and INT32_MAX
Use ~0u for the end-of-range sigil, and numeric_limits for math involving the limits of uint32_t and int32_t.
1 parent 55981ec commit 453db9e

File tree

3 files changed

+25
-25
lines changed

3 files changed

+25
-25
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ namespace hlsl {
3737
/// UAVSpaces {
3838
/// ResClass = ResourceClass::UAV,
3939
/// Spaces = {
40-
/// { Space = 0, FreeRanges = {{ 0, 2 }, { 13, UINT32_MAX }} },
41-
/// { Space = 2, FreeRanges = {{ 0, 4 }} }
40+
/// { Space = 0u, FreeRanges = {{ 0u, 2u }, { 13u, ~0u }} },
41+
/// { Space = 2u, FreeRanges = {{ 0u, 4u }} }
4242
/// }
4343
/// }
4444
class BindingInfo {
@@ -53,7 +53,7 @@ class BindingInfo {
5353
uint32_t Space;
5454
SmallVector<BindingRange> FreeRanges;
5555
RegisterSpace(uint32_t Space) : Space(Space) {
56-
FreeRanges.emplace_back(0, UINT32_MAX);
56+
FreeRanges.emplace_back(0, ~0u);
5757
}
5858
// Size == -1 means unbounded array
5959
LLVM_ABI std::optional<uint32_t> findAvailableBinding(int32_t Size);

llvm/lib/Frontend/HLSL/HLSLBinding.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ BindingInfo::RegisterSpace::findAvailableBinding(int32_t Size) {
4242
// unbounded array
4343
if (Size == -1) {
4444
BindingRange &Last = FreeRanges.back();
45-
if (Last.UpperBound != UINT32_MAX)
45+
if (Last.UpperBound != ~0u)
4646
// this space is already occupied by an unbounded array
4747
return std::nullopt;
4848
uint32_t RegSlot = Last.LowerBound;
@@ -52,8 +52,7 @@ BindingInfo::RegisterSpace::findAvailableBinding(int32_t Size) {
5252

5353
// single resource or fixed-size array
5454
for (BindingRange &R : FreeRanges) {
55-
// compare the size as uint64_t to prevent overflow for range (0,
56-
// UINT32_MAX)
55+
// compare the size as uint64_t to prevent overflow for range (0, ~0u)
5756
if ((uint64_t)R.UpperBound - R.LowerBound + 1 < (uint64_t)Size)
5857
continue;
5958
uint32_t RegSlot = R.LowerBound;
@@ -102,24 +101,24 @@ BindingInfo BindingInfoBuilder::calculateBindingInfo(
102101
// The space is full - there are no free slots left, or the rest of the
103102
// slots are taken by an unbounded array. Set flag to report overlapping
104103
// binding later.
105-
if (S->FreeRanges.empty() || S->FreeRanges.back().UpperBound < UINT32_MAX) {
104+
if (S->FreeRanges.empty() || S->FreeRanges.back().UpperBound < ~0u) {
106105
ReportOverlap(*this, B);
107106
continue;
108107
}
109108
// adjust the last free range lower bound, split it in two, or remove it
110109
BindingInfo::BindingRange &LastFreeRange = S->FreeRanges.back();
111110
if (LastFreeRange.LowerBound == B.LowerBound) {
112-
if (B.UpperBound < UINT32_MAX)
111+
if (B.UpperBound < ~0u)
113112
LastFreeRange.LowerBound = B.UpperBound + 1;
114113
else
115114
S->FreeRanges.pop_back();
116115
} else if (LastFreeRange.LowerBound < B.LowerBound) {
117116
LastFreeRange.UpperBound = B.LowerBound - 1;
118-
if (B.UpperBound < UINT32_MAX)
119-
S->FreeRanges.emplace_back(B.UpperBound + 1, UINT32_MAX);
117+
if (B.UpperBound < ~0u)
118+
S->FreeRanges.emplace_back(B.UpperBound + 1, ~0u);
120119
} else {
121120
ReportOverlap(*this, B);
122-
if (B.UpperBound < UINT32_MAX)
121+
if (B.UpperBound < ~0u)
123122
LastFreeRange.LowerBound =
124123
std::max(LastFreeRange.LowerBound, B.UpperBound + 1);
125124
else

llvm/unittests/Frontend/HLSLBindingTest.cpp

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ TEST(HLSLBindingTest, TestTrivialCase) {
4949
EXPECT_EQ(UAVSpaces.RC, ResourceClass::UAV);
5050
EXPECT_EQ(UAVSpaces.Spaces.size(), 1u);
5151
checkExpectedSpaceAndFreeRanges(UAVSpaces.Spaces[0], 0,
52-
{0, 4, 6, UINT32_MAX});
52+
{0u, 4u, 6u, ~0u});
5353

5454
// check that other kinds of register spaces are all available
5555
for (auto RC :
@@ -97,31 +97,30 @@ TEST(HLSLBindingTest, TestManyBindings) {
9797
EXPECT_EQ(SRVSpaces.RC, ResourceClass::SRV);
9898
EXPECT_EQ(SRVSpaces.Spaces.size(), 1u);
9999
// verify that consecutive bindings are merged
100-
// (SRVSpaces has only one free space range {6, UINT32_MAX}).
101-
checkExpectedSpaceAndFreeRanges(SRVSpaces.Spaces[0], 0, {6, UINT32_MAX});
100+
// (SRVSpaces has only one free space range {6, ~0u}).
101+
checkExpectedSpaceAndFreeRanges(SRVSpaces.Spaces[0], 0, {6u, ~0u});
102102

103103
hlsl::BindingInfo::BindingSpaces &UAVSpaces =
104104
Info.getBindingSpaces(ResourceClass::UAV);
105105
EXPECT_EQ(UAVSpaces.RC, ResourceClass::UAV);
106106
EXPECT_EQ(UAVSpaces.Spaces.size(), 2u);
107107
checkExpectedSpaceAndFreeRanges(UAVSpaces.Spaces[0], 0,
108-
{0, 1, 4, 4, 6, UINT32_MAX});
109-
checkExpectedSpaceAndFreeRanges(UAVSpaces.Spaces[1], 20,
110-
{0, 9, 15, UINT32_MAX});
108+
{0u, 1u, 4u, 4u, 6u, ~0u});
109+
checkExpectedSpaceAndFreeRanges(UAVSpaces.Spaces[1], 20, {0u, 9u, 15u, ~0u});
111110

112111
hlsl::BindingInfo::BindingSpaces &CBufferSpaces =
113112
Info.getBindingSpaces(ResourceClass::CBuffer);
114113
EXPECT_EQ(CBufferSpaces.RC, ResourceClass::CBuffer);
115114
EXPECT_EQ(CBufferSpaces.Spaces.size(), 1u);
116115
checkExpectedSpaceAndFreeRanges(CBufferSpaces.Spaces[0], 0,
117-
{0, 2, 4, UINT32_MAX});
116+
{0u, 2u, 4u, ~0u});
118117

119118
hlsl::BindingInfo::BindingSpaces &SamplerSpaces =
120119
Info.getBindingSpaces(ResourceClass::Sampler);
121120
EXPECT_EQ(SamplerSpaces.RC, ResourceClass::Sampler);
122121
EXPECT_EQ(SamplerSpaces.Spaces.size(), 1u);
123122
checkExpectedSpaceAndFreeRanges(SamplerSpaces.Spaces[0], 2,
124-
{0, 3, 6, UINT32_MAX});
123+
{0u, 3u, 6u, ~0u});
125124
}
126125

127126
TEST(HLSLBindingTest, TestUnboundedAndOverlap) {
@@ -175,8 +174,7 @@ TEST(HLSLBindingTest, TestExactOverlap) {
175174
Info.getBindingSpaces(ResourceClass::SRV);
176175
EXPECT_EQ(SRVSpaces.RC, ResourceClass::SRV);
177176
EXPECT_EQ(SRVSpaces.Spaces.size(), 1u);
178-
checkExpectedSpaceAndFreeRanges(SRVSpaces.Spaces[0], 0,
179-
{0, 4, 6, UINT32_MAX});
177+
checkExpectedSpaceAndFreeRanges(SRVSpaces.Spaces[0], 0, {0u, 4u, 6u, ~0u});
180178
}
181179

182180
TEST(HLSLBindingTest, TestEndOfRange) {
@@ -203,14 +201,17 @@ TEST(HLSLBindingTest, TestEndOfRange) {
203201
Info.getBindingSpaces(ResourceClass::UAV);
204202
EXPECT_EQ(UAVSpaces.RC, ResourceClass::UAV);
205203
EXPECT_EQ(UAVSpaces.Spaces.size(), 3u);
206-
checkExpectedSpaceAndFreeRanges(UAVSpaces.Spaces[0], 0, {0, UINT32_MAX - 1});
207-
checkExpectedSpaceAndFreeRanges(UAVSpaces.Spaces[1], 1, {0, UINT32_MAX - 10});
204+
checkExpectedSpaceAndFreeRanges(
205+
UAVSpaces.Spaces[0], 0, {0, std::numeric_limits<uint32_t>::max() - 1});
206+
checkExpectedSpaceAndFreeRanges(
207+
UAVSpaces.Spaces[1], 1, {0, std::numeric_limits<uint32_t>::max() - 10});
208208
checkExpectedSpaceAndFreeRanges(
209209
UAVSpaces.Spaces[2], 2,
210-
{0, (uint32_t)INT32_MAX - 1, (uint32_t)INT32_MAX + 10, UINT32_MAX});
210+
{0, static_cast<uint32_t>(std::numeric_limits<int32_t>::max()) - 1u,
211+
static_cast<uint32_t>(std::numeric_limits<int32_t>::max()) + 10u,
212+
std::numeric_limits<uint32_t>::max()});
211213
}
212214

213-
214215
TEST(HLSLBindingTest, TestFindAvailable) {
215216
hlsl::BindingInfoBuilder Builder;
216217

0 commit comments

Comments
 (0)